options: parameters: author: Barry Duggan category: '[GRC Hier Blocks]' cmake_opt: '' comment: '' copyright: '' description: Morse code generator gen_cmake: 'On' gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' id: test0928 max_nouts: '0' output_language: python placement: (0,0) qt_qss_theme: '' realtime_scheduling: '' run: 'True' run_command: '{python} -u {filename}' run_options: prompt sizing_mode: fixed thread_safe_setters: '' title: Test 0928 window_size: '' states: bus_sink: false bus_source: false bus_structure: null coordinate: [16, 16.0] rotation: 0 state: enabled blocks: - name: baud id: variable parameters: comment: '' value: speed/1.2 states: bus_sink: false bus_source: false bus_structure: null coordinate: [400, 20.0] rotation: 0 state: enabled - name: repeat id: variable parameters: comment: '' value: '1200' states: bus_sink: false bus_source: false bus_structure: null coordinate: [560, 20.0] rotation: 0 state: true - name: samp_rate id: variable parameters: comment: '' value: baud*repeat states: bus_sink: false bus_source: false bus_structure: null coordinate: [688, 20.0] rotation: 0 state: enabled - name: speed id: variable parameters: comment: '' value: '12' states: bus_sink: false bus_source: false bus_structure: null coordinate: [288, 20.0] rotation: 0 state: true - name: analog_sig_source_x_0_0 id: analog_sig_source_x parameters: affinity: '' alias: '' amp: '0.5' comment: '' freq: '600' maxoutbuf: '0' minoutbuf: '0' offset: '0' phase: '0' samp_rate: samp_rate type: float waveform: analog.GR_COS_WAVE states: bus_sink: false bus_source: false bus_structure: null coordinate: [678, 454] rotation: 0 state: enabled - name: audio_sink_0 id: audio_sink parameters: affinity: '' alias: '' comment: '' device_name: hw:CARD=Device,DEV=0 num_inputs: '1' ok_to_block: 'True' samp_rate: '48000' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1300, 494] rotation: 0 state: enabled - name: blocks_float_to_uchar_0 id: blocks_float_to_uchar parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [945, 121] rotation: 0 state: true - name: blocks_multiply_xx_0 id: blocks_multiply_xx parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' num_inputs: '2' type: float vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [936, 364] rotation: 0 state: enabled - name: blocks_repeat_0 id: blocks_repeat parameters: affinity: '' alias: '' comment: '' interp: repeat maxoutbuf: '0' minoutbuf: '0' type: byte vlen: '1' states: bus_sink: false bus_source: false bus_structure: null coordinate: [483, 360] rotation: 0 state: enabled - name: blocks_uchar_to_float_0 id: blocks_uchar_to_float parameters: affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: bus_sink: false bus_source: false bus_structure: null coordinate: [668, 364] rotation: 0 state: enabled - name: epy_block_0 id: epy_block parameters: _source_code: "\"\"\"\nMorse code vector source\n\"\"\"\n\n# epy_block_0.py\n\ # revised 08/20/2019\n# revised 09/27/2019 to clear input line (code from\ \ Volker Schroer dl1ksv)\n\nimport numpy as np\nfrom gnuradio import gr\n\n\ import pmt\n\ntextboxValue = \"\"\n\nMorse = {\n \"A\": \"1,0,1,1,1\",\n\ \ \"B\": \"1,1,1,0,1,0,1,0,1\",\n \"C\": \"1,1,1,0,1,0,1,1,1,0,1\",\n\ \ \"D\": \"1,1,1,0,1,0,1\",\n \"E\": \"1\",\n \"F\": \"1,0,1,0,1,1,1,0,1\"\ ,\n \"G\": \"1,1,1,0,1,1,1,0,1\",\n \"H\": \"1,0,1,0,1,0,1\",\n \"\ I\": \"1,0,1\",\n \"J\": \"1,0,1,1,1,0,1,1,1,0,1,1,1\",\n \"K\": \"1,1,1,0,1,0,1,1,1\"\ ,\n \"L\": \"1,0,1,1,1,0,1,0,1\",\n \"M\": \"1,1,1,0,1,1,1\",\n \"\ N\": \"1,1,1,0,1\",\n \"O\": \"1,1,1,0,1,1,1,0,1,1,1\",\n \"P\": \"1,0,1,1,1,0,1,1,1,0,1\"\ ,\n \"Q\": \"1,1,1,0,1,1,1,0,1,0,1,1,1\",\n \"R\": \"1,0,1,1,1,0,1\",\n\ \ \"S\": \"1,0,1,0,1\",\n \"T\": \"1,1,1\",\n \"U\": \"1,0,1,0,1,1,1\"\ ,\n \"V\": \"1,0,1,0,1,0,1,1,1\",\n \"W\": \"1,0,1,1,1,0,1,1,1\",\n \ \ \"X\": \"1,1,1,0,1,0,1,0,1,1,1\",\n \"Y\": \"1,1,1,0,1,0,1,1,1,0,1,1,1\"\ ,\n \"Z\": \"1,1,1,0,1,1,1,0,1,0,1\",\n \" \": \"0\", # space\n\ \ \"1\": \"1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1\",\n \"2\": \"1,0,1,0,1,1,1,0,1,1,1,0,1,1,1\"\ ,\n \"3\": \"1,0,1,0,1,0,1,1,1,0,1,1,1\",\n \"4\": \"1,0,1,0,1,0,1,0,1,1,1\"\ ,\n \"5\": \"1,0,1,0,1,0,1,0,1\",\n \"6\": \"1,1,1,0,1,0,1,0,1,0,1\",\n\ \ \"7\": \"1,1,1,0,1,1,1,0,1,0,1,0,1\",\n \"8\": \"1,1,1,0,1,1,1,0,1,1,1,0,1,0,1\"\ ,\n \"9\": \"1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1\",\n \"0\": \"1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1\"\ ,\n \".\": \"1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1\", # period\n \ \ \",\": \"1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1\", # comma\n \"?\"\ : \"1,0,1,0,1,1,1,0,1,1,1,0,1,0,1\", # question\n \"'\":\ \ \"1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1\", # apostrophe\n \"/\": \"\ 1,1,1,0,1,0,1,0,1,1,1,0,1\", # slash\n \":\": \"1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1\"\ , # colon\n \"=\": \"1,1,1,0,1,0,1,0,1,0,1,1,1\", \ \ # equals\n \"-\": \"1,1,1,0,1,0,1,0,1,0,1,0,1,1,1\" \ \ # dash or minus\n }\n\n\nclass mc_sync_block(gr.sync_block):\n\ \ \"\"\"\n reads input from a message port\n generates a vector of\ \ Morse code bits\n \"\"\"\n def __init__(self):\n gr.sync_block.__init__(self,\n\ \ name = \"Morse code vector source\",\n in_sig = None,\n\ \ out_sig = [np.byte])\n self.message_port_register_in(pmt.intern('msg_in'))\n\ \ self.message_port_register_out(pmt.intern('clear_input'))\n \ \ self.set_msg_handler(pmt.intern('msg_in'), self.handle_msg)\n\n def handle_msg(self,\ \ msg):\n global textboxValue\n\n textboxValue = pmt.symbol_to_string\ \ (msg)\n # print (textboxValue)\n \n def work(self, input_items,\ \ output_items):\n global Morse\n global textboxValue\n\n \ \ bit_stream = \"\"\n for in0 in textboxValue:\n # get\ \ next char\n inChar = str (in0)\n # convert to upper\ \ case\n ch = inChar.upper()\n # get vector\n \ \ _dots = str (Morse.get(ch))\n # print (ch, _dots)\n \ \ bit_stream += (_dots + \",0,0,0,\") # letter space\n\n if (len(textboxValue)\ \ > 0):\n bit_stream += \"0,0,0,0\" # finish with word space\n\ \ textboxValue = \"\"\n self.message_port_pub(pmt.intern('clear_input'),\ \ pmt.intern(''))\n # print (bit_stream)\n\n # get length\ \ of string\n _len = len(bit_stream)\n # num of elements = (length+1)\ \ / 2\n _num_elem = int((_len+1) / 2)\n\n # convert and store\ \ elements in output array\n for x in range (_len):\n y =\ \ int(x / 2)\n if (bit_stream[x] == '1'):\n output_items[0][y]\ \ = 1\n elif (bit_stream[x] == '0'):\n output_items[0][y]\ \ = 0\n else:\n continue # skip commas\n\n \ \ return (_num_elem)\n\n" affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: _io_cache: ('Morse code vector source', 'mc_sync_block', [], [('msg_in', 'message', 1)], [('0', 'byte', 1), ('clear_input', 'message', 1)], '\n reads input from a message port\n generates a vector of Morse code bits\n ', []) bus_sink: false bus_source: false bus_structure: null coordinate: [189, 364] rotation: 0 state: true - name: epy_block_1 id: epy_block parameters: _source_code: "\"\"\"\nGPIO pin driver\n\"\"\"\n\n# epy_block_1.py\n# 09/28/2019\n\ \nimport numpy as np\nfrom gnuradio import gr\nimport RPi.GPIO as GPIO \n\n\ _last_bit = 0\n\nclass gpio_block(gr.sync_block):\n \"\"\"\n reads keying\ \ data\n drives GPIO line 17\n note: this is a data sink\n \"\"\"\n\ \n def __init__(self):\n gr.sync_block.__init__(self,\n \ \ name = \"GPIO pin driver\",\n in_sig = [np.byte],\n \ \ out_sig = None\n )\n GPIO.setwarnings(False) \n \ \ GPIO.setmode(GPIO.BCM) \n GPIO.setup(17, GPIO.OUT) \n GPIO.output(17,\ \ False) # start with it off\n\n def work(self, input_items, output_items):\n\ \ global _last_bit\n\n for _in_bit in input_items[0]:\n \ \ if (_in_bit != _last_bit):\n if (_in_bit == 1):\n \ \ GPIO.output(17, True) \n else:\n \ \ GPIO.output(17, False)\n _last_bit = _in_bit\n\n \ \ return len (input_items[0])\n" affinity: '' alias: '' comment: '' maxoutbuf: '0' minoutbuf: '0' states: _io_cache: '(''GPIO pin driver'', ''gpio_block'', [], [(''0'', ''byte'', 1)], [], ''\n reads keying data\n drives GPIO line 17\n note: this is a data sink\n '', [])' bus_sink: false bus_source: false bus_structure: null coordinate: [1130, 121] rotation: 0 state: enabled - name: qtgui_edit_box_msg_0 id: qtgui_edit_box_msg parameters: affinity: '' alias: '' comment: '' gui_hint: '' is_pair: 'False' is_static: 'False' key: '"text"' label: Input maxoutbuf: '0' minoutbuf: '0' type: string value: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [218, 506] rotation: 180 state: true - name: qtgui_time_sink_x_0 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: '' label10: '' label2: '' label3: '' label4: '' label5: '' label6: '' label7: '' label8: '' label9: '' legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '32768' srate: '48000' stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.5' tr_mode: qtgui.TRIG_MODE_AUTO tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '2' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [1337, 360] rotation: 0 state: enabled - name: qtgui_time_sink_x_1 id: qtgui_time_sink_x parameters: affinity: '' alias: '' alpha1: '1.0' alpha10: '1.0' alpha2: '1.0' alpha3: '1.0' alpha4: '1.0' alpha5: '1.0' alpha6: '1.0' alpha7: '1.0' alpha8: '1.0' alpha9: '1.0' autoscale: 'False' axislabels: 'True' color1: blue color10: dark blue color2: red color3: green color4: black color5: cyan color6: magenta color7: yellow color8: dark red color9: dark green comment: '' ctrlpanel: 'False' entags: 'True' grid: 'False' gui_hint: '' label1: Signal 1 label10: Signal 10 label2: Signal 2 label3: Signal 3 label4: Signal 4 label5: Signal 5 label6: Signal 6 label7: Signal 7 label8: Signal 8 label9: Signal 9 legend: 'True' marker1: '-1' marker10: '-1' marker2: '-1' marker3: '-1' marker4: '-1' marker5: '-1' marker6: '-1' marker7: '-1' marker8: '-1' marker9: '-1' name: '""' nconnections: '1' size: '32768' srate: samp_rate stemplot: 'False' style1: '1' style10: '1' style2: '1' style3: '1' style4: '1' style5: '1' style6: '1' style7: '1' style8: '1' style9: '1' tr_chan: '0' tr_delay: '0' tr_level: '0.5' tr_mode: qtgui.TRIG_MODE_AUTO tr_slope: qtgui.TRIG_SLOPE_POS tr_tag: '""' type: float update_time: '0.10' width1: '1' width10: '1' width2: '1' width3: '1' width4: '1' width5: '1' width6: '1' width7: '1' width8: '1' width9: '1' ylabel: Amplitude ymax: '2' ymin: '-1' yunit: '""' states: bus_sink: false bus_source: false bus_structure: null coordinate: [990, 208] rotation: 0 state: true - name: rational_resampler_xxx_0 id: rational_resampler_xxx parameters: affinity: '' alias: '' comment: '' decim: '1' fbw: '0' interp: (int)(48000/samp_rate) maxoutbuf: '0' minoutbuf: '0' taps: '' type: fff states: bus_sink: false bus_source: false bus_structure: null coordinate: [1091, 352] rotation: 0 state: true connections: - [analog_sig_source_x_0_0, '0', blocks_multiply_xx_0, '1'] - [blocks_float_to_uchar_0, '0', epy_block_1, '0'] - [blocks_multiply_xx_0, '0', rational_resampler_xxx_0, '0'] - [blocks_repeat_0, '0', blocks_uchar_to_float_0, '0'] - [blocks_uchar_to_float_0, '0', blocks_float_to_uchar_0, '0'] - [blocks_uchar_to_float_0, '0', blocks_multiply_xx_0, '0'] - [blocks_uchar_to_float_0, '0', qtgui_time_sink_x_1, '0'] - [epy_block_0, '0', blocks_repeat_0, '0'] - [epy_block_0, clear_input, qtgui_edit_box_msg_0, val] - [qtgui_edit_box_msg_0, msg, epy_block_0, msg_in] - [rational_resampler_xxx_0, '0', audio_sink_0, '0'] - [rational_resampler_xxx_0, '0', qtgui_time_sink_x_0, '0'] metadata: file_format: 1