From 2a530e5d11917fa5125ad7763c05a8dbf6e98eef Mon Sep 17 00:00:00 2001 From: "James C. Ahlstrom" Date: Tue, 15 Sep 2026 15:32:53 -0400 Subject: [PATCH] Add TX0 samples --- _quisk.pyd | Bin 307712 -> 308224 bytes microntrxpkg/quisk_hardware.py | 287 ++++++++++++++++++++------------- microphone.c | 4 +- quisk.c | 103 +++++++++++- quisk.py | 18 ++- quisk_hardware_model.py | 13 +- 6 files changed, 302 insertions(+), 123 deletions(-) diff --git a/_quisk.pyd b/_quisk.pyd index 3d38eaa7e13579d0580edce6aa5ea47c84dba7c1..5bcae9b92cb87b1955868d717a54f186232c6c03 100644 GIT binary patch delta 87270 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 PcbRwP@1n>5-ZcCVvrF(& diff --git a/microntrxpkg/quisk_hardware.py b/microntrxpkg/quisk_hardware.py index 73302a2..10fbd79 100644 --- a/microntrxpkg/quisk_hardware.py +++ b/microntrxpkg/quisk_hardware.py @@ -1,24 +1,38 @@ # This provides support for the SDR Micron TRX by David Fainitski, N7DDC +# On Windows this uses Python module ftd2xx. Install with pip. +# On Linux it uses ftdi1. Install python3-ftdi1 with your package manager. + import sys, wx, traceback, time from quisk_hardware_model import Hardware as BaseHardware -DEBUG = 0 # print debug messages during operation +DEBUG = 1 # print debug messages during operation WRITE_LOG = 1 # write the data received from the MicronTRX during self.log_time to the file self.log_name +#WRITE_LOG = 2 # receive data from the file self.log_name instead of from USB # https://github.com/Dfinitski/SDR-Micron -# Control from PC to Micron TRX, 64 bytes, MSB first (big-endian) +# Short Control Packet type "SCP" from PC to Micron TRX, 16 bytes, MSB first (big endian) +# +# (0 - 7) Preamble, seven 0x55 and 0xD5 +# (8, 9, 10) "SCP" +#(11) RX0 enable, 0 - 1 +#(12) RX1 enable, 0 - 1 +#(13) BS0 enable, 0 - 1 +#(14) TX0 enable, 0 - 1 +#(15) CDC enable, 0 - 1 + +# Universal control packet type "UCP" from PC to TRX or from TRX to PC, 64 bytes, MSB first (big-endian) # # (0 - 7) Preamble, seven 0x55 and 0xD5 # (8, 9, 10) "UCP" -# (11) SN - Sequence Number 0 - 255 -# (12) RX0 enable, mode, 0 - off, 1 - 48kHz, 2 - 96kHz, 3 - 192kHz -# (13) RX1 enable, mode, 0 - off, 1 - 48kHz, 2 - 96kHz, 3- 192kHz -# (14) BS0 enable -# (15) BS1 enable -# (16) TX0 enable -# (17) CDC enable +# (11) read only FW prefix MSB +# (12) read only FW prefix +# (13) read only FW prefix LSB +# (14) read only char '-' +# (15) Not used +# (16) Not used +# (17) Not used # (18, 19, 20, 21) - 4 bytes RX0 frequency # (22, 23, 24, 25) - 4 bytes RX1 frequency # (26, 27, 28, 29) - 4 bytes BS0 frequency @@ -31,38 +45,34 @@ WRITE_LOG = 1 # write the data received from the MicronTRX during self.log_time # 3 - 384 kHz, # 4 - 768 kHz, # 5 - 1536 kHz -# 6 - 1920 kHz # (36) LNA enable # (37) TX level 0 - 255 -# (38) Not used +# (38) RX BPF bypass 0 - 1 # (39) BS0 mode # 0 - 4096 buffered samples # 1 - 8192 buffered samples # 2 - 16384 buffered samples -# (40) BS1 mode -# 0 - 4096 buffered samples -# 1 - 8192 buffered samples -# 2 - 16384 buffered samples -# (41) BS0 period 50 - 255 ms (100ms is recommended) -# (42) BS1 period 50 - 255 ms (100ms is recommended) +# (40) Not used +# (41) Not used +# (42) read-only PTT state from device 0-1 # (43) Mic Boost, 0 - 1 -# (44) Not used -# (45) PTT from PC -# (46) CW mode 0 - 1 -# (47) CWX from PC - key manipulation +# (44) TX LPF Bypass 0 - 1 +# (45) PTT to device 1 - 0 +# (46) CW mode on 0 - 1 +# (47) CW key manipulation from PC to device 1 - 0 # (48) Read only PWR, Output power in Watts -# (49) Read only SWR x.x, from 1.0 to 9.9 as a natural number without decimal dot. +# (49) Read only SWR x.x, from 1.0 to 9.9 as a natural number without decimal point # (50) Key Speed 10 - 63 ppm (20 by default) # (51) Paddle swap 0, 1 # (52) Key mode, 0 = straight, 01 = Mode A, 10 = Mode B # (53) Key weight, 33 to 66, (50 by default) -# (54) Key spacing, 0, 1 +# (54) Key auto spacing, 0, 1 # (55) ST Level, 0 - 255 sight tone level -# (56) ST Freq MSB- 4 MSB bits -# (57) ST Freq LSB - 8 LSB bits sight tone frequency in Hertz +# (56) ST Freq in tens Hertz, 40 - 100 (400 - 1000Hz), 70 by default +# (57) Not used # (58) Delay ON, 8 - 255 ms (25 by default) - time for TX carrier delay is needed for transmitter preparing to TX # (59) Hang out time in tens ms 0 - 255 (0 to 2550 msec) (250 ms by default) needed to keep transmitter ready after PTT -# (60) Not used +# (60) Read only CW key manipulation from device to PC # (61) Read only FW2 - firmware version MSB # (62) Read only FW1 # (63) Read only FW0 - firmware version LSB @@ -76,14 +86,16 @@ WRITE_LOG = 1 # write the data received from the MicronTRX during self.log_time class Hardware(BaseHardware): sample_rates = [48] #[48, 96, 192, 384, 768, 1536] - BS1_samples = {0:4096, 1:8192, 2:16384} - BS1_bytes = {0:4096 * 2, 1:8192 * 2, 2:16384 * 2} # Two bytes per sample + BS0_samples = {0:4096, 1:8192, 2:16384} + BS0_bytes = {0:4096 * 2, 1:8192 * 2, 2:16384 * 2} # Two bytes per sample def __init__(self, app, conf): BaseHardware.__init__(self, app, conf) - self.usb = None + self.usb_windows = None + self.usb_linux = None self.prefix = b'\x55\x55\x55\x55\x55\x55\x55\xD5' self.read_data = bytearray() - self.rf_gain_labels = ('RF 0', 'RF -10', 'RF -20', 'RF -31') + self.tx_samples = b'' + self.rf_gain_labels = ('RF 0', 'RF -10', 'RF -20', 'RF -30') self.index = 1 self.old_vfo = 0 self.sdrmicron_clock = 76800000 @@ -91,37 +103,41 @@ class Hardware(BaseHardware): self.bscope_data = bytearray() self.have_version = False self.frame_msg = '' - self.remaining_BS1 = -1 - self.log_name = "microntrx_log.dat" + self.remaining_BS0 = -1 + self.log_name = "microntrxpkg/microntrx_log.dat" self.log_time = 5.0 # seconds of log data self.log_time0 = None # starting time.time() to start log file self.log_fp = None self.pc_control = bytearray(64) self.pc_control[0:8] = self.prefix self.pc_control[8:11] = b'UCP' - self.pc_control[34] = 10 # Attenuator, 0 - 31 (dB value) - self.pc_control[35] = 0 # BS0 rate: 0:48ksps, 1:96, 2:192, 3:384, 4:768, 5:1536 - self.pc_control[36] = 0 # LNA enable - self.pc_control[39] = 0 # Buffered BS0 samples, 0:4096, 1:8192, 2:16384 - self.pc_control[40] = 0 # Buffered BS1 samples, 0:4096, 1:8192, 2:16384 - self.pc_control[41] = 100 # BS0 period msec - self.pc_control[42] = 100 # BS1 period msec - self.pc_control[58] = 25 # time for TX carrier delay needed for transmitter preparing to TX, msec - self.pc_control[59] = 25 # tens of msec needed to keep transmitter ready + self.got_defaults = 0 + self.pc_enables = bytearray(16) + self.pc_enables[0:8] = self.prefix + self.pc_enables[8:11] = b'SCP' + self.fw_version = bytearray if conf.fft_size_multiplier == 0: conf.fft_size_multiplier = 3 # Set size needed by VarDecim def open(self): # This method must return a string showing whether the open succeeded or failed. + if WRITE_LOG == 1: + self.log_fp = open(self.log_name, "wb") + elif WRITE_LOG == 2: + self.log_fp = open(self.log_name, "rb") rx_bytes = 3 # rx_bytes is the number of bytes in each I or Q sample: 1, 2, 3, or 4 rx_endian = 1 # rx_endian is the order of bytes in the sample array: 0 == little endian; 1 == big endian self.InitSamples(rx_bytes, rx_endian) # Initialize: read samples from this hardware file and send them to Quisk + self.InitTxSamples(2, 1, 48000) # Initialize Tx samples to send to the hardware bs_bytes = 2 bs_endian = 1 - self.InitBscope(bs_bytes, bs_endian, self.sdrmicron_clock, self.BS1_samples[self.pc_control[40]]) # Initialize bandscope - if sys.platform == 'win32': + #self.InitBscope(bs_bytes, bs_endian, self.sdrmicron_clock, self.BS1_samples[self.pc_control[40]]) # Initialize bandscope + if WRITE_LOG == 2: + return "Read data from %s" % self.log_name + elif sys.platform == 'win32': return self.open_win() - return "This code is Windows only" + else: + return self.open_linux() def open_win(self): try: @@ -137,48 +153,84 @@ class Hardware(BaseHardware): print ("%d: description %s, serial %s" % (i, a['description'], a['serial'])) if a['description']==b'SDR-Micron': try: - self.usb = d2xx.openEx(a['serial']) + usb = d2xx.openEx(a['serial']) except: return 'Device SDR-Micron could not be opened' - self.usb.setBitMode(255, 0) # reset + usb.setBitMode(255, 0) # reset time.sleep(0.1) - self.usb.setBitMode(255, 64) # Configure FT2232H into Sync FIFO mode - self.usb.setTimeouts(100, 100) # read, write - self.usb.setLatencyTimer(2) - self.usb.setUSBParameters(32, 32) # in_tx_size, out_tx_size + usb.setBitMode(255, 64) # Configure FT2232H into Sync FIFO mode + usb.setTimeouts(100, 100) # read, write + usb.setLatencyTimer(2) + usb.setUSBParameters(32, 32) # in_tx_size, out_tx_size time.sleep(1.5) # waiting for device initialisation - self.usb.read(self.usb.getQueueStatus()) # clean the usb data buffer + usb.read(usb.getQueueStatus()) # clean the usb data buffer self.frame_msg = a['description'].decode('utf-8') + ' S/N - ' + a['serial'].decode('utf-8') + self.usb_windows = usb return self.frame_msg return 'Device SDR-Micron was not found' def open_linux(self): # Not finished try: - import ftdi1 as d2xx + import ftdi1 except: return 'The ftdi1 module is missing' - self.usb = d2xx.new() + usb = ftdi1.new() # Open Channel A (interface 1 in libftdi) - d2xx.set_interface(self.usb, d2xx.INTERFACE_A) - rc = d2xx.usb_open(self.usb, 0x0403, 0x6014) # 0x6014 is the standard FT232H PID + ftdi1.set_interface(usb, ftdi1.INTERFACE_A) + rc = ftdi1.usb_open(usb, 0x0403, 0x6014) # 0x6014 is the standard FT232H PID if rc == 0: - d2xx.usb_reset(self.usb) - d2xx.set_latency_timer(self.usb, 2) + ftdi1.usb_reset(usb) + ftdi1.set_usb_read_timout(usb, 1) + ftdi1.set_usb_write_timout(usb, 5) + ftdi1.set_latency_timer(usb, 2) # Enable Sync FIFO mode # 0xFF = pin mask, 0x40 = BITMODE_SYNCFF - d2xx.set_bitmode(self.usb, 0xFF, d2xx.BITMODE_SYNCFF) + ftdi1.set_bitmode(usb, 0xFF, ftdi1.BITMODE_SYNCFF) if DEBUG: print("Sync FIFO active via ftdi1.") - # To read at maximum speed, use d2xx.read_data() - d2xx.usb_close(self.usb) - d2xx.free(self.usb) + self.usb_linux = usb + return "Device SDR-Micron opened" + return 'Device SDR-Micron was not found' + + def usb_read(self): + if WRITE_LOG == 2: + data = self.log_fp.read(120) + return data + elif self.usb_windows: + count = self.usb_windows.getQueueStatus() # Read all available bytes + if count > 0: + return self.usb_windows.read(count) # return Python bytes + elif self.usb_linux: + count, data = ftdi1.read_data(self.usb_linux, 1024) + if count > 0: + return data # data is Python bytes + elif count < 0 and DEBUG: + print("Error %d in usb_read", count) + return None + + def usb_write(self, data): + data = bytes(data) # Convert bytearray to bytes + if self.usb_windows: + try: + self.usb_windows.write(data) + except: + if DEBUG: + print('Error while usb_write') + elif self.usb_linux: + count = ftdi1.write_data(self.usb_linux, data) + if count != len(data) and DEBUG: + print("Failure in usb_write_data %d %d", count, len(data)) def close(self): - if self.usb: - self.usb.setBitMode(255, 0) # reset + if self.usb_windows: + self.usb_windows.setBitMode(255, 0) # reset time.sleep(0.5) - self.usb.close() - self.usb = None + self.usb_windows.close() + self.usb_windows = None + elif self.usb_linux: + ftdi1.usb_close(self.usb_linux) + ftdi1.free(self.usb_linux) + self.usb_linux = None def OnButtonRfGain(self, event): btn = event.GetEventObject() @@ -190,7 +242,7 @@ class Hardware(BaseHardware): elif n == 2: self.pc_control[34] = 20 elif n == 3: - self.pc_control[34] = 31 + self.pc_control[34] = 30 if DEBUG: print ('pc_control[34]', self.pc_control[34]) self.rx_control_upd() @@ -209,12 +261,15 @@ class Hardware(BaseHardware): vfo = int(vfo - self.transverter_offset) if vfo != self.old_vfo: self.old_vfo = vfo - self.pc_control[26] = (vfo >> 24) & 0xFF # MSB - self.pc_control[27] = (vfo >> 16) & 0xFF - self.pc_control[28] = (vfo >> 8) & 0xFF - self.pc_control[29] = (vfo ) & 0xFF #LSB + self.pc_control[18] = (vfo >> 24) & 0xFF # MSB + self.pc_control[19] = (vfo >> 16) & 0xFF + self.pc_control[20] = (vfo >> 8) & 0xFF + self.pc_control[21] = (vfo ) & 0xFF #LSB self.rx_control_upd() return tx_freq, vfo + + def OnSpot(self, level): + pass def VarDecimGetChoices(self): # Return a list/tuple of strings for the decimation control. return list(map(str, self.sample_rates)) # convert integer to string @@ -246,37 +301,40 @@ class Hardware(BaseHardware): return (48000, 48000) def StartSamples(self): # called by the sound thread - self.pc_control[12] = 1 # RX0 enable - self.pc_control[15] = 1 # BS1 enable - self.rx_control_upd() - if WRITE_LOG: - if self.log_fp is None: - self.log_fp = open(self.log_name, "wb") + self.pc_enables[11] = 1 # RX0 enable + #self.pc_enables[13] = 1 # BS0 enable + self.usb_write(self.pc_enables) + if DEBUG: + print ("Start samples") def StopSamples(self): # called by the sound thread - self.pc_control[12] = 0 - self.pc_control[15] = 0 - self.rx_control_upd() + self.pc_enables[11] = 0 + self.pc_enables[13] = 0 + self.usb_write(self.pc_enables) + if DEBUG: + print ("Stop Samples") def rx_control_upd(self): - if self.usb: - try: - self.usb.write(self.pc_control) - except: - print('Error while rx_control_upd') - if self.pc_control[11] < 255: # sequence number - self.pc_control[11] += 1 - else: - self.pc_control[11] = 0 + if self.got_defaults: + self.usb_write(self.pc_control) def GetRxSamples(self): # Read from the MicronTRX. Called frequently from the sound thread. - if not self.usb: - return - count = self.usb.getQueueStatus() # Read all available bytes - if count > 0: - data = bytearray(self.usb.read(count)) + # Send Tx samples to the hardware + self.tx_samples += self.GetTxSamples() + while len(self.tx_samples) >= 492: + data = self.prefix + b'TX0\x00\x00\x00\x00\x00' + self.tx_samples[0:492] + self.usb_write(data) + #print(data[0:24], len(data)) + #i = data[16] << 8 | data[17] + #print ("%8d" % i) + self.tx_samples = self.tx_samples[492:] + # Read messages from USB + data = self.usb_read() + if data: self.read_data += data - if WRITE_LOG: + if DEBUG > 1: + print("Read %s bytes, buffer length %d" % (len(data), len(self.read_data))) + if WRITE_LOG == 1: if self.log_fp: if self.log_time0 is None: self.log_time0 = time.time() @@ -299,28 +357,28 @@ class Hardware(BaseHardware): if block_type == b'BS0': if len(self.read_data) < 508: return - del self.read_data[0:508] - elif block_type == b'BS1': - if len(self.read_data) < 508: - return - packet_number = self.read_data[12] + packet_number = self.read_data[11] if packet_number == 0: # start of a block of data - self.remaining_BS1 = self.BS1_bytes[self.pc_control[40]] + self.remaining_BS0 = self.BS0_bytes[self.pc_control[39]] self.bscope_data = self.read_data[16:508] # 492 bytes - self.remaining_BS1 -= 492 - elif self.remaining_BS1 >= 492: + self.remaining_BS0 -= 492 + elif self.remaining_BS0 >= 492: self.bscope_data += self.read_data[16:508] # 492 bytes - self.remaining_BS1 -= 492 - elif self.remaining_BS1 <= 0: + self.remaining_BS0 -= 492 + elif self.remaining_BS0 <= 0: pass else: - self.bscope_data += self.read_data[16:self.remaining_BS1 + 16] - self.remaining_BS1 = -1 + self.bscope_data += self.read_data[16:self.remaining_BS0 + 16] + self.remaining_BS0 = -1 # self.AddBscopeSamples(self.bscope_data) + if DEBUG > 1: + print("BS0 buffer length %d" % len(self.bscope_data)) del self.read_data[0:508] elif block_type == b'CDM': if len(self.read_data) < 180: return + if DEBUG > 1: + print("CDM") del self.read_data[0:180] elif block_type == b'RX0': if len(self.read_data) < 508: @@ -328,24 +386,29 @@ class Hardware(BaseHardware): if self.read_data[12]: self.GotClip() self.AddRxSamples(self.read_data[16:508]) + if DEBUG > 1: + print("RX0") del self.read_data[0:508] elif block_type == b'RX1': if len(self.read_data) < 508: return + if DEBUG > 1: + print("RX1") del self.read_data[0:508] - elif block_type == b'SBL': - if len(self.read_data) < 32: - return - del self.read_data[0:32] elif block_type == b'UCP': if len(self.read_data) < 64: return if self.have_version is False: self.have_version = True - self.frame_msg += ' F/W version - %d.%d' % (self.read_data[61], self.read_data[63]) + self.fw_version = self.read_data[11:15] + self.read_data[61:64] + self.frame_msg += ' F/W version - ' + self.fw_version.decode('utf-8') self.application.main_frame.SetConfigText(self.frame_msg) + self.pc_control[11:64] = self.read_data[11:64] # save UCP content with defaults + self.got_defaults = 1; + if DEBUG > 1: + print("UCP") del self.read_data[0:64] else: - del self.read_data[0:8] + del self.read_data[0:11] if DEBUG: print("Unknown USB block type") diff --git a/microphone.c b/microphone.c index dc9056f..18443e6 100644 --- a/microphone.c +++ b/microphone.c @@ -73,7 +73,7 @@ static double modulation_index = 1.6; // For FM transmit, the modulation index static int is_vox = 0; // Is the VOX level exceeded? static int vox_level = CLIP16; // VOX trigger level as a number 0 to CLIP16 static int timeVOX = 2000; // VOX hang time in milliseconds -static int tx_sample_rate = 48000; // Used for SoapySDR +static int tx_sample_rate = 48000; // Used for SoapySDR and Tx samples from Python static int reverse_tx_sideband; static int PsEnable = 0; static int PsCal = 0; @@ -1305,7 +1305,7 @@ int quisk_process_microphone(int mic_sample_rate, complex double * cSamples, int ; // hermes handles this itself else if (quisk_play_state == SOFTWARE_CWKEY) serial_key_samples(cSamples, count); - if(quisk_pt_sample_write) { // Used for SoapySDR + if(quisk_pt_sample_write && key_down) { // Used for SoapySDR and samples from Python // Interpolate the mic samples to the Tx sample rate //printf("Tx sample rate %i\n", tx_sample_rate); switch (tx_sample_rate) { diff --git a/quisk.c b/quisk.c index 7e657ad..40d89db 100644 --- a/quisk.c +++ b/quisk.c @@ -115,6 +115,8 @@ int quiskTxHoldState; // hold Tx until the repeater frequency shift is complet int quisk_is_vna; // zero for normal program, one for the VNA program static int py_sample_rx_bytes=2; // number of bytes in each I or Q sample: 1, 2, 3, or 4 static int py_sample_rx_endian; // order of sample array: 0 == little endian; 1 == big endian +static int py_sample_tx_bytes; // number of bytes in each I or Q sample: 2, 3, or 4 +static int py_sample_tx_endian; // order of sample array: 0 == little endian; 1 == big endian static int py_bscope_bytes; static int py_bscope_endian; static int quisk_auto_notch; // auto notch control @@ -159,6 +161,8 @@ static int softrock_correct_active; // 0 No correction adjustment; 1 Manual adju static complex double PySampleBuf[SAMP_BUFFER_SIZE]; // buffer for samples returned from Python static int PySampleCount; // count of samples in buffer +static uint8_t PySampleTxBytes[SAMP_BUFFER_SIZE * 8]; // buffer for Tx sample bytes to send to the hardware +static int PySampleTxCount; static bool quisk_tx_inhibit; static int multirx_data_width; // width of graph data to return @@ -3018,6 +3022,17 @@ static PyObject * add_bscope_samples(PyObject * self, PyObject * args) return Py_None; } +static PyObject * get_tx_samples(PyObject * self, PyObject * args) +{ + PyObject * by; + + if (!PyArg_ParseTuple (args, "")) + return NULL; + by = PyBytes_FromStringAndSize((const char *)PySampleTxBytes, PySampleTxCount); + PySampleTxCount = 0; + return by; +} + static void py_sample_start(void) { } @@ -3040,6 +3055,83 @@ static int py_sample_read(complex double * cSamples) return n; } +static int py_sample_tx_save(complex double * cSamples, int nSamples) +{ // These cSamples are 16-bit integers from the microphone + int i; + int16_t rr, ii; + uint8_t rrH, rrL, iiH, iiL; + + if (PySampleTxCount + nSamples * 8 >= SAMP_BUFFER_SIZE * 8) { + QuiskPrintf ("py_sample_tx_save: buffer is too full\n"); + return 0; + } + for (i = 0; i < nSamples; i++) { + rr = (int16_t)creal(cSamples[i]); + ii = (int16_t)cimag(cSamples[i]); + rrH = 0xFF & (rr >> 8); + rrL = 0xFF & rr; + iiH = 0xFF & (ii >> 8); + iiL = 0xFF & ii; + if (py_sample_tx_endian == 0) { // byte order of samples is little-endian + switch(py_sample_tx_bytes) { + case 2: + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = iiL; + PySampleTxBytes[PySampleTxCount++] = iiH; + break; + case 3: + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = iiL; + PySampleTxBytes[PySampleTxCount++] = iiH; + break; + case 4: + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = iiL; + PySampleTxBytes[PySampleTxCount++] = iiH; + break; + } + } + else { // byte order of samples is big-endian + switch(py_sample_tx_bytes) { + case 2: + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = iiH; + PySampleTxBytes[PySampleTxCount++] = iiL; + break; + case 3: + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = iiH; + PySampleTxBytes[PySampleTxCount++] = iiL; + PySampleTxBytes[PySampleTxCount++] = 0; + break; + case 4: + PySampleTxBytes[PySampleTxCount++] = rrH; + PySampleTxBytes[PySampleTxCount++] = rrL; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = iiH; + PySampleTxBytes[PySampleTxCount++] = iiL; + PySampleTxBytes[PySampleTxCount++] = 0; + PySampleTxBytes[PySampleTxCount++] = 0; + break; + } + } + } + return 0; +} + static PyObject * get_params(PyObject * self, PyObject * args) { const char * name; @@ -3093,18 +3185,22 @@ static PyObject * set_params(PyObject * self, PyObject * args, PyObject * keywds { /* Call with keyword arguments ONLY; change local parameters */ static char * kwlist[] = {"quisk_is_vna", "rx_bytes", "rx_endian", "read_error", "clip", "bscope_bytes", "bscope_endian", "bscope_size", "bandscopeScale", "hermes_pause", + "tx_bytes", "tx_endian", NULL} ; int i, nbytes, read_error, clip, bscope_size, hermes_pause; nbytes = read_error = clip = bscope_size = hermes_pause = -1; - if (!PyArg_ParseTupleAndKeywords (args, keywds, "|iiiiiiiidii", kwlist, + if (!PyArg_ParseTupleAndKeywords (args, keywds, "|iiiiiiiidiii", kwlist, &quisk_is_vna, &nbytes, &py_sample_rx_endian, &read_error, &clip, - &py_bscope_bytes, &py_bscope_endian, &bscope_size, &bandscopeScale, &hermes_pause)) + &py_bscope_bytes, &py_bscope_endian, &bscope_size, &bandscopeScale, &hermes_pause, + &py_sample_tx_bytes, &py_sample_tx_endian)) return NULL; if (nbytes != -1) { py_sample_rx_bytes = nbytes; - quisk_sample_source4(py_sample_start, py_sample_stop, py_sample_read, NULL); + quisk_sample_source(py_sample_start, py_sample_stop, py_sample_read); } + if (py_sample_tx_bytes) + quisk_pt_sample_write = py_sample_tx_save; if (read_error != -1) quisk_sound_state.read_error++; if (clip != -1) @@ -6090,6 +6186,7 @@ static PyMethodDef QuiskMethods[] = { {"get_filter_rate", get_filter_rate, METH_VARARGS, "Return the sample rate used for the filters."}, {"get_tx_filter", quisk_get_tx_filter, METH_VARARGS, "Return the frequency response of the transmit filter."}, {"get_audio_graph", get_audio_graph, METH_VARARGS, "Return a tuple of the audio graph data."}, + {"get_tx_samples", get_tx_samples, METH_VARARGS, "Return Tx samples to send to the hardware."}, {"softrock_corrections", softrock_corrections, METH_VARARGS, "Control and return SoftRock amplitude and phase corrections."}, {"measure_frequency", measure_frequency, METH_VARARGS, "Set the method, return the measured frequency."}, {"measure_audio", measure_audio, METH_VARARGS, "Set the method, return the measured audio voltage."}, diff --git a/quisk.py b/quisk.py index 96b6352..9c251e5 100644 --- a/quisk.py +++ b/quisk.py @@ -65,13 +65,15 @@ else: Q3StringTypes = (str, unicode) class StdOutput(wx.Frame): - def __init__(self, app): + def __init__(self, app): # Called from the GUI thread self.app = app self.ctrl = None self.old_stdout = sys.stdout self.old_stderr = sys.stderr self.old_excepthook = sys.excepthook self.path = os.path.join(app.QuiskFilesDir, "quisk_logfile.txt") + self.gui_thread = threading.get_native_id() + self.text_buffer = '' try: size = os.path.getsize(self.path) except: @@ -116,6 +118,9 @@ class StdOutput(wx.Frame): self.fp.write(text) self.fp.write("\n") def write(self, text): + if threading.get_native_id() != self.gui_thread: + self.text_buffer += text # When called by non-GUI thread, save text + return if self.fp: self.fp.write(text) if self.old_stdout: @@ -124,6 +129,10 @@ class StdOutput(wx.Frame): self.ctrl.write(text) def flush(self): pass + def PrintBuffer(self): # Print any saved text from non-GUI thread + if self.text_buffer: + print(self.text_buffer) + self.text_buffer = '' def ExceptHook(self, typ, value, traceb): self.Show(True) self.Raise() @@ -1502,9 +1511,7 @@ class SoundThread(threading.Thread): #print ("Quisk thread %12.3f" % ((tm - self.time0) * 1E3)) #self.time0 = tm if self.samples_from_python: - samples = Hardware.GetRxSamples() - if samples: - QS.set_params(rx_samples=samples) + Hardware.GetRxSamples() if self.poll_cw: Hardware.PollCwKey() if conf.midi_cwkey_device: @@ -4694,6 +4701,7 @@ class App(wx.App): msg = QS.GetQuiskPrintf() if msg: print(msg, end='') + self.std_out_err.PrintBuffer() QS.close_key() if QS.tci_get_params("tci_clients_count") > 0: QS.tci_set_params(close=1) @@ -4727,6 +4735,7 @@ class App(wx.App): msg = QS.GetQuiskPrintf() if msg: print(msg, end='') + self.std_out_err.PrintBuffer() def OnBtnOnOff(self, event): if event.GetEventObject().GetValue(): # Start samples try: @@ -6894,6 +6903,7 @@ class App(wx.App): msg = QS.GetQuiskPrintf() if msg: print(msg, end='') + self.std_out_err.PrintBuffer() if self.screen == self.config_screen: self.screen.OnGraphData() # Send message to draw new data if self.add_version and Hardware.GetFirmwareVersion() is not None: diff --git a/quisk_hardware_model.py b/quisk_hardware_model.py index ed964f7..98dc0e7 100644 --- a/quisk_hardware_model.py +++ b/quisk_hardware_model.py @@ -118,17 +118,24 @@ class Hardware: # length is the number of samples in each block of ADC samples, and equals the FFT size. QS.set_params(bscope_bytes=int_size, bscope_endian=endian, bscope_size=length) self.application.bandscope_clock = clock + def InitTxSamples(self, int_size, endian, rate): # Tx sample initialization; you must call this from your hardware __init__(). + # int_size is the number of bytes in each I or Q sample: 2, 3, or 4 + # endian is the order of bytes in the sample: 0 == little endian; 1 == big endian + # This can be called again to change the format. For example, a different number of bytes for different sample rates. + QS.set_tx_audio(tx_sample_rate=rate) # Available rates are 48, 50, 96, 100, 192 ksps + QS.set_params(tx_bytes=int_size, tx_endian=endian) #def PollCwKey(self): # Optional. Called frequently by the sound thread to check the CW key status. # pass # Do not define if not needed. #def PollGuiControl(self): # Optional. Called frequently by the GUI thread to change GUI settings (PTT etc.) # pass # Do not define if not needed. - def StartSamples(self): # Quisk calls this from the sound thread to start sending samples. + def StartSamples(self): # Quisk calls this from the sound thread to start samples. # If you return a string, it replaces the string returned from hardware open() pass - def StopSamples(self): # Quisk calls this from the sound thread to stop sending samples. + def StopSamples(self): # Quisk calls this from the sound thread to stop samples. pass def GetRxSamples(self): # Quisk calls this frequently from the sound thread. Poll your hardware for samples. # Return any available samples by calling AddRxSamples() and perhaps AddBscopeSamples() from within this method. + # Call GetTxSamples() from within this method to return any Tx samples that must be sent. pass def AddRxSamples(self, samples): # Call this from within GetRxSamples() to record the Rx samples. # "samples" is int_size of integer I data followed by int_size of integer Q data, repeated. @@ -142,6 +149,8 @@ class Hardware: # For Python 2, "samples" must be a byte array or bytes or a string. # The number of bytes in "samples" must equal the block length times the bytes per sample. QS.add_bscope_samples(samples) + def GetTxSamples(self): # Call this from within GetRxSamples() to return the Tx samples to send. + return QS.get_tx_samples() # Return a Python bytes object def GotClip(self): # Call this to indicate that samples were received with the clip (overrange) indicator true. QS.set_params(clip=1) def GotReadError(self, print_msg, msg): # Call this to indicate an error in receiving the Rx samples.