From f617715aba9531bd7f1cba8b3549416ee12e1d8c Mon Sep 17 00:00:00 2001 From: CInsights Date: Fri, 30 Mar 2018 17:01:33 +1100 Subject: [PATCH] Further handling of out of packet buffers condition in image thread. --- tracker/software/config.c | 6 +++--- tracker/software/pkt/devices/si446x.c | 24 +++++++----------------- tracker/software/pkt/devices/si446x.h | 2 -- tracker/software/pkt/managers/pktradio.h | 6 ++---- tracker/software/threads/rxtx/image.c | 8 ++++++-- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/tracker/software/config.c b/tracker/software/config.c index 0cef8045..1da23d61 100644 --- a/tracker/software/config.c +++ b/tracker/software/config.c @@ -58,8 +58,8 @@ const conf_t conf_flash_default = { .thread_conf = { .active = true, .cycle = CYCLE_CONTINUOUSLY, - .init_delay = TIME_S2I(5), - .packet_spacing = TIME_S2I(30) + .init_delay = TIME_S2I(20), + .packet_spacing = TIME_S2I(0) }, .radio_conf = { .pwr = 0x7F, @@ -68,7 +68,7 @@ const conf_t conf_flash_default = { .chan = 64, .mod = MOD_2FSK, .preamble = 200, - .redundantTx = true + .redundantTx = false }, .call = "VK2GJ-15", diff --git a/tracker/software/pkt/devices/si446x.c b/tracker/software/pkt/devices/si446x.c index 883338fb..76e837d2 100644 --- a/tracker/software/pkt/devices/si446x.c +++ b/tracker/software/pkt/devices/si446x.c @@ -13,22 +13,9 @@ #include "radio.h" #endif -/* - * Transmitter global variables. - * Saved when setting band. */ -//static uint32_t tx_frequency; -//static uint16_t tx_step; - // Si446x variables static int16_t lastTemp = 0x7FFF; -//static bool radioInitialized; -// Receiver thread variables -/*static uint32_t rx_frequency; -static uint16_t rx_step; -static uint8_t rx_chan; -static uint8_t rx_rssi; -static mod_t rx_mod;*/ /* =================================================================== SPI communication ==================================================================== */ @@ -70,7 +57,7 @@ static void Si446x_write(const uint8_t* txData, uint32_t len) { */ static void Si446x_read(const uint8_t* txData, uint32_t txlen, uint8_t* rxData, uint32_t rxlen) { // Transmit data by SPI - /* TODO: Add radio unit ID and get SPI accordingly. */ + /* TODO: Add radio unit ID and get SPI configuration accordingly. */ uint8_t null_spi[txlen]; /* Acquire bus and then start SPI. */ @@ -1220,14 +1207,17 @@ void Si446x_send2FSK(packet_t pp) { /* ========================================================================== Misc ========================================================================== */ -static int16_t Si446x_getTemperature(void) { +static int16_t Si446x_getTemperature(radio_unit_t radio) { + /* TODO: Add hardware selection. */ + (void)radio; const uint8_t txData[2] = {0x14, 0x10}; uint8_t rxData[8]; Si446x_read(txData, 2, rxData, 8); uint16_t adc = rxData[7] | ((rxData[6] & 0x7) << 8); - return (89900*adc)/4096 - 29300; + return (89900 * adc) / 4096 - 29300; } +/* TODO: Abstract this by radio ID. */ int16_t Si446x_getLastTemperature(radio_unit_t radio) { if(lastTemp == 0x7FFF) { // Temperature was never measured => measure it now packet_svc_t *handler = pktGetServiceObject(radio); @@ -1237,7 +1227,7 @@ int16_t Si446x_getLastTemperature(radio_unit_t radio) { if(handler->radio_init) { pktAcquireRadio(radio); // Temperature readout - lastTemp = Si446x_getTemperature(); + lastTemp = Si446x_getTemperature(radio); TRACE_INFO("SI > Transmitter temperature %d degC\r\n", lastTemp/100); pktReleaseRadio(radio); } else { diff --git a/tracker/software/pkt/devices/si446x.h b/tracker/software/pkt/devices/si446x.h index 0a5bbf0f..df83406f 100644 --- a/tracker/software/pkt/devices/si446x.h +++ b/tracker/software/pkt/devices/si446x.h @@ -181,8 +181,6 @@ #define Si446x_FREQ_CONTROL_W_SIZE 0x4006 #define Si446x_FREQ_CONTROL_VCOCNT_RX_ADJ 0x4007 -#define RADIO_TASK_QUEUE_MAX 10 - #define PKT_SI446X_APRS_CHANNEL 94 #define PKT_SI446X_SQUELCH_LEVEL 0x4F diff --git a/tracker/software/pkt/managers/pktradio.h b/tracker/software/pkt/managers/pktradio.h index 8ba8838d..6fa8d5ce 100644 --- a/tracker/software/pkt/managers/pktradio.h +++ b/tracker/software/pkt/managers/pktradio.h @@ -26,10 +26,8 @@ #define PKT_RADIO_TASK_QUEUE_PREFIX "radx_" -#define BAND_START_2M 144000000 -#define AU_APRS_2M_FREQUENCY 145175000 - -#define PKT_RADIO_CHANNEL_STEPPING_NONE 0 +/* The number of radio task object the FIFO has. */ +#define RADIO_TASK_QUEUE_MAX 10 /*===========================================================================*/ /* Module data structures and types. */ diff --git a/tracker/software/threads/rxtx/image.c b/tracker/software/threads/rxtx/image.c index 1821ae93..f98ce662 100644 --- a/tracker/software/threads/rxtx/image.c +++ b/tracker/software/threads/rxtx/image.c @@ -624,13 +624,17 @@ THD_FUNCTION(imgThread, arg) // Encode and transmit picture TRACE_INFO("IMG > Encode/Transmit SSDV ID=%d", gimage_id-1); if(!transmit_image_packets(buffer, size_sampled, conf, (uint8_t)(gimage_id-1))) { - TRACE_ERROR("IMG > Failure in image packet transmit"); + TRACE_WARN("IMG > Unable to TX queue snapshot image %i - discarded", gimage_id-1); + /* Allow time for queue to be processed. */ + chThdSleep(TIME_S2I(10)); } } else { // No camera found TRACE_INFO("IMG > Encode/Transmit SSDV (camera error) ID=%d", gimage_id-1); if(!transmit_image_packets(noCameraFound, sizeof(noCameraFound), conf, (uint8_t)(gimage_id-1))) { - TRACE_ERROR("IMG > Failure in image packet transmit"); + TRACE_WARN("IMG > Unable to TX queue fixed image %i - discarded", gimage_id-1); + /* Allow time for queue to be processed. */ + chThdSleep(TIME_S2I(10)); } } }