Fixed redundant TX error, fixed keep-tx-state-after-transmission error

Develop
Sven Steudte 2017-09-03 01:34:22 +02:00
rodzic 9205c80327
commit b8a0cdce95
4 zmienionych plików z 17 dodań i 16 usunięć

Wyświetl plik

@ -190,7 +190,7 @@ void start_user_modules(void)
config[0].aprs_conf.tel_enc = TRUE; // Transmit Telemetry encoding information activated
config[0].aprs_conf.tel_enc_cycle = 3600; // Transmit Telemetry encoding information every 3600sec
chsnprintf(config[0].aprs_conf.tel_comment, 30, "http://ssdv.habhub.org/DL7AD");// Telemetry comment
start_position_thread(&config[0]);
//start_position_thread(&config[0]);
// Module POSITION, APRS 2m 2GFSK
/*config[1].power = 127; // Power 10 dBm
@ -283,8 +283,8 @@ void start_user_modules(void)
chsnprintf(config[5].ssdv_conf.callsign, 7, "DL7AD2"); // SSDV Callsign
config[5].ssdv_conf.ram_buffer = ssdv_buffer; // Camera buffer
config[5].ssdv_conf.ram_size = sizeof(ssdv_buffer); // Buffer size
config[5].ssdv_conf.res = RES_QVGA; // Resolution VGA
config[5].ssdv_conf.quality = 4; // High quality
config[5].ssdv_conf.res = RES_VGA; // Resolution VGA
config[5].ssdv_conf.quality = 7; // High quality
start_image_thread(&config[5]);
// Module IMAGE, SSDV 2m 2FSK

Wyświetl plik

@ -284,10 +284,10 @@ void setPowerLevel(int8_t level) {
Si4464_write(set_pa_pwr_lvl_property_command, 5);
}
void startTx(uint16_t size) {
void startTx(uint16_t size, bool shutdownAfterPhDone) {
palClearLine(LINE_IO_LED1); // Set indication LED
uint8_t change_state_command[] = {0x31, 0x00, 0x30, (size >> 8) & 0x1F, size & 0xFF};
uint8_t change_state_command[] = {0x31, 0x00, (shutdownAfterPhDone ? SI4464_STATE_READY : SI4464_STATE_NOCHANGE) << 4, (size >> 8) & 0x1F, size & 0xFF};
Si4464_write(change_state_command, 5);
}
@ -311,7 +311,7 @@ void Si4464_shutdown(void) {
* @param shift Shift of FSK in Hz
* @param level Transmission power level in dBm
*/
bool radioTune(uint32_t frequency, uint16_t shift, int8_t level, uint16_t size) {
bool radioTune(uint32_t frequency, uint16_t shift, int8_t level, uint16_t size, bool shutdownAfterPhDone) {
// Tracing
TRACE_INFO("SI > Tune Si4464");
@ -325,7 +325,7 @@ bool radioTune(uint32_t frequency, uint16_t shift, int8_t level, uint16_t size)
setShift(shift); // Set shift
setPowerLevel(level); // Set power level
startTx(size);
startTx(size, shutdownAfterPhDone);
return true;
}

Wyświetl plik

@ -9,6 +9,7 @@
#define RADIO_MOD_GPIO(state) palWriteLine(LINE_RADIO_GPIO, state)
#define inRadioBand(freq) (RADIO_MIN_FREQ <= (freq) && (freq) <= RADIO_MAX_FREQ)
#define SI4464_STATE_NOCHANGE 0
#define SI4464_STATE_SLEEP 1
#define SI4464_STATE_SPI_ACTIVE 2
#define SI4464_STATE_READY 3
@ -28,10 +29,10 @@ void setModem2FSK(void);
void setModem2GFSK(gfsk_conf_t* conf);
void setDeviation(uint32_t deviation);
void setPowerLevel(int8_t level);
void startTx(uint16_t size);
void startTx(uint16_t size, bool shutdownAfterPhDone);
void stopTx(void);
void Si4464_shutdown(void);
bool radioTune(uint32_t frequency, uint16_t shift, int8_t level, uint16_t size);
bool radioTune(uint32_t frequency, uint16_t shift, int8_t level, uint16_t size, bool shutdownAfterPhDone);
void Si4464_writeFIFO(uint8_t *msg, uint8_t size);
uint8_t Si4464_freeFIFO(void);
uint8_t Si4464_getState(void);

Wyświetl plik

@ -41,7 +41,7 @@ void initAFSK(radioMSG_t *msg) {
// Initialize radio and tune
Si4464_Init();
setModemAFSK();
radioTune(msg->freq, 0, msg->power, 0);
radioTune(msg->freq, 0, msg->power, 0, false);
}
void sendAFSK(radioMSG_t *msg) {
@ -77,7 +77,7 @@ void init2GFSK(radioMSG_t *msg) {
setModem2GFSK(msg->gfsk_conf);
}
void send2GFSK(radioMSG_t *msg) {
void send2GFSK(radioMSG_t *msg, bool shutdown) {
uint16_t c = 64;
uint16_t all = (msg->bin_len+7)/8;
@ -85,7 +85,7 @@ void send2GFSK(radioMSG_t *msg) {
Si4464_writeFIFO(msg->msg, c);
// Transmit
radioTune(msg->freq, 0, msg->power, all);
radioTune(msg->freq, 0, msg->power, all, shutdown);
while(c < all) { // Do while bytes not written into FIFO completely
@ -164,7 +164,7 @@ void initOOK(radioMSG_t *msg) {
// Initialize radio and tune
Si4464_Init();
setModemOOK();
radioTune(msg->freq, 0, msg->power, 0);
radioTune(msg->freq, 0, msg->power, 0, false);
}
/**
@ -243,7 +243,7 @@ void init2FSK(radioMSG_t *msg) {
// Initialize radio and tune
Si4464_Init();
setModem2FSK();
radioTune(msg->freq, msg->fsk_conf->shift, msg->power, 0);
radioTune(msg->freq, msg->fsk_conf->shift, msg->power, 0, false);
}
void send2FSK(radioMSG_t *msg) {
@ -329,7 +329,7 @@ bool transmitOnRadio(radioMSG_t *msg, bool shutdown) {
if(inRadioBand(msg->freq)) { // Frequency in radio radio band
// Wait for PH to finish transmission for 2GFSK
if(active_mod == MOD_2GFSK && Si4464_getState() == SI4464_STATE_TX)
while(active_mod == MOD_2GFSK && Si4464_getState() == SI4464_STATE_TX)
chThdSleepMilliseconds(5);
// Lock interference mutex
@ -349,7 +349,7 @@ bool transmitOnRadio(radioMSG_t *msg, bool shutdown) {
case MOD_2GFSK:
if(active_mod != msg->mod)
init2GFSK(msg);
send2GFSK(msg);
send2GFSK(msg, shutdown);
break;
case MOD_AFSK:
if(active_mod != msg->mod)