From 7937fad841123aefa367f68186d51d093966c84c Mon Sep 17 00:00:00 2001 From: CInsights Date: Fri, 9 Mar 2018 11:15:50 +1100 Subject: [PATCH] Quick fix for 446x.c temperature reading. Refactoring opportunity. --- tracker/software/config.c | 2 +- tracker/software/pkt/devices/si446x.c | 25 ++++++++++++---------- tracker/software/pkt/managers/pktservice.c | 1 + tracker/software/threads/radio/radio.c | 13 ++++++----- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/tracker/software/config.c b/tracker/software/config.c index ab8ac1fd..932af4e3 100644 --- a/tracker/software/config.c +++ b/tracker/software/config.c @@ -124,7 +124,7 @@ const conf_t conf_flash_default = { }, .rx = { .thread_conf = { - .active = true + .active = false }, .radio_conf = { .pwr = 0x7F, diff --git a/tracker/software/pkt/devices/si446x.c b/tracker/software/pkt/devices/si446x.c index bf3ba661..90fe866c 100644 --- a/tracker/software/pkt/devices/si446x.c +++ b/tracker/software/pkt/devices/si446x.c @@ -1453,20 +1453,23 @@ void Si446x_send2FSK(packet_t pp, /* ========================================================================== Misc ========================================================================== */ static int16_t Si446x_getTemperature(void) { - 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; + Si446x_lockRadio(); + 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); + Si446x_unlockRadio(); + return (89900*adc)/4096 - 29300; } int16_t Si446x_getLastTemperature(void) { - if(lastTemp == 0x7FFF) { // Temperature was never measured => measure it now - Si446x_init(); - Si446x_shutdown(); - } - - return lastTemp; + if(lastTemp == 0x7FFF) { // Temperature was never measured => measure it now + Si446x_lockRadio(); + Si446x_init(); + Si446x_shutdown(); + Si446x_unlockRadio(); + } + return lastTemp; } //#endif diff --git a/tracker/software/pkt/managers/pktservice.c b/tracker/software/pkt/managers/pktservice.c index 2fe3d5b2..02a137fc 100644 --- a/tracker/software/pkt/managers/pktservice.c +++ b/tracker/software/pkt/managers/pktservice.c @@ -107,6 +107,7 @@ bool pktServiceRelease() { * @param[in] encoding radio link level encoding. * @param[in] frequency operating frequency (in Hz). * @param[in] ch_step frequency step per channel (in Hz). + * @param[in] ph variable to receive the reference to the packet handler. * * @return the reference to the packet handler object. * @retval MSG_OK if the open request was processed. diff --git a/tracker/software/threads/radio/radio.c b/tracker/software/threads/radio/radio.c index 9f0b2326..a04be2f9 100644 --- a/tracker/software/threads/radio/radio.c +++ b/tracker/software/threads/radio/radio.c @@ -95,8 +95,9 @@ bool transmitOnRadio(packet_t pp, uint32_t freq, uint16_t step, uint8_t chan, extern packet_svc_t RPKTD1; packet_svc_t *handler = &RPKTD1; - if(!(handler->state == PACKET_OPEN || handler->state == PACKET_RUN)) { + if(handler->state == PACKET_IDLE || handler->state == PACKET_CLOSE) { TRACE_ERROR("RAD > Packet services are not open for transmit"); + ax25_delete(pp); return false; } @@ -115,12 +116,13 @@ bool transmitOnRadio(packet_t pp, uint32_t freq, uint16_t step, uint8_t chan, rt.callback = NULL; /* Save the current data. */ - handler->radio_tx_config = rt; + //handler->radio_tx_config = rt; - msg_t msg = pktSendRadioCommand(rt.handler, &rt); - if(msg != MSG_OK) + msg_t msg = pktSendRadioCommand(handler, &rt); + if(msg != MSG_OK) { + ax25_delete(pp); return false; - + } /* switch(mod) { case MOD_2FSK: @@ -136,6 +138,7 @@ bool transmitOnRadio(packet_t pp, uint32_t freq, uint16_t step, uint8_t chan, TRACE_ERROR("RAD > It is nonsense to transmit 0 bits, %d.%03d MHz, Pwr dBm, %s, %d byte", freq/1000000, (freq%1000000)/1000, pwr, getModulation(mod), len); + ax25_delete(pp); } return true;