3void Communication_Receive_Interrupt() {
13int16_t Communication_Set_Modem(uint8_t modem) {
14 int16_t state = ERR_NONE;
15 FOSSASAT_DEBUG_WRITE(modem);
22 LORA_SPREADING_FACTOR,
40 radio.setSyncWord(syncWordFSK, 2);
52 FOSSASAT_DEBUG_PRINT(F(
"Init "));
53 FOSSASAT_DEBUG_PRINTLN(state);
54 FOSSASAT_DEBUG_DELAY(10);
55 if (state != ERR_NONE) {
57 Pin_Interface_Watchdog_Restart();
71int16_t Communication_Set_SpreadingFactor(uint8_t sfMode) {
72 uint8_t sfs[] = {LORA_SPREADING_FACTOR, LORA_SPREADING_FACTOR_ALT};
76 return(ERR_WRONG_MODEM);
80 int16_t state =
radio.setSpreadingFactor(sfs[sfMode]);
83 if(state == ERR_NONE) {
90int16_t Communication_Set_Configuration(uint8_t* optData, uint8_t optDataLen) {
93 return(ERR_PACKET_TOO_LONG);
98 return(ERR_INVALID_BANDWIDTH);
102 float bws[] = {7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125.0};
103 uint16_t preambleLength = 0;
104 memcpy(&preambleLength, optData + 3,
sizeof(uint16_t));
113 if(state != ERR_NONE) {
118 state =
radio.setCRC(optData[5]);
122void Communication_Send_Morse_Beacon(
float battVoltage) {
134 Pin_Interface_Watchdog_Heartbeat();
140 Pin_Interface_Watchdog_Heartbeat();
145 Pin_Interface_Watchdog_Heartbeat();
150 Pin_Interface_Watchdog_Heartbeat();
154 radio.transmitDirect();
155 Power_Control_Delay(
len,
true);
159void Communication_Send_System_Info() {
194 Power_Control_Load_Configuration();
195 FOSSASAT_DEBUG_PRINTLN(powerConfig.val,
BIN);
228 Pin_Interface_Read_Temperature_Internal();
242void Communication_Process_Packet() {
251 size_t len =
radio.getPacketLength();
262 FOSSASAT_DEBUG_PRINT(
F(
"Frm "));
263 FOSSASAT_DEBUG_PRINTLN(
len);
264 FOSSASAT_DEBUG_PRINT_BUFF(
frame,
len);
272 Comunication_Parse_Frame(
frame,
len);
274 FOSSASAT_DEBUG_PRINTLN(
F(
"CErr"));
275 Persistent_Storage_Increment_Frame_Counter(
false);
276 Communication_Acknowledge(0xFF, 0x01);
280 FOSSASAT_DEBUG_PRINT(
F(
"RxErr "));
281 FOSSASAT_DEBUG_PRINT(
state);
282 Persistent_Storage_Increment_Frame_Counter(
false);
283 Communication_Acknowledge(0xFF, 0x02);
306 FOSSASAT_DEBUG_PRINT(
F(
"IdErr"));
308 Persistent_Storage_Increment_Frame_Counter(
false);
309 Communication_Acknowledge(0xFF, 0x03);
312 FOSSASAT_DEBUG_PRINT(
F(
"FID="));
324 FOSSASAT_DEBUG_PRINT(
F(
"DcErr"));
328 Persistent_Storage_Increment_Frame_Counter(
false);
329 Communication_Acknowledge(0xFF, 0x04);
345 FOSSASAT_DEBUG_PRINT(
F(
"LenErr"));
349 Persistent_Storage_Increment_Frame_Counter(
false);
350 Communication_Acknowledge(0xFF, 0x05);
360 FOSSASAT_DEBUG_PRINT(
F(
"UID"));
362 Persistent_Storage_Increment_Frame_Counter(
false);
363 Communication_Acknowledge(0xFF, 0x06);
370 FOSSASAT_DEBUG_PRINT(
F(
"optLen="));
387 Persistent_Storage_Increment_Frame_Counter(
true);
415 FOSSASAT_DEBUG_PRINT(
F(
"CfgErr"));
416 FOSSASAT_DEBUG_PRINTLN(
state);
426 Communication_Send_System_Info();
460 if(Communication_Check_OptDataLen(1,
optDataLen)) {
553 Pin_Interface_Watchdog_Restart();
558 Persistent_Storage_Wipe();
563 if(Communication_Check_OptDataLen(1,
optDataLen)) {
565 Power_Control_Load_Configuration();
568 powerConfig.bits.transmitEnabled =
optData[0];
571 Power_Control_Save_Configuration();
591 if(Communication_Check_OptDataLen(1,
optDataLen)) {
600 if(Communication_Check_OptDataLen(2,
optDataLen)) {
602 Power_Control_Load_Configuration();
605 powerConfig.bits.mpptTempSwitchEnabled =
optData[0];
606 powerConfig.bits.mpptKeepAliveEnabled =
optData[1];
609 Power_Control_Save_Configuration();
615 if(Communication_Check_OptDataLen(1,
optDataLen)) {
617 Power_Control_Load_Configuration();
620 powerConfig.bits.lowPowerModeEnabled =
optData[0];
623 Power_Control_Save_Configuration();
629 if(Communication_Check_OptDataLen(2,
optDataLen)) {
638 FOSSASAT_DEBUG_PRINT(
F(
"Res FSK"));
646 if(Communication_Check_OptDataLen(3,
optDataLen)) {
651 FOSSASAT_DEBUG_PRINT(
F(
">40"));
658 FOSSASAT_DEBUG_PRINT(
F(
"Rec"));
665 #ifdef ENABLE_INTERVAL_CONTROL
666 if(!Power_Control_Check_Battery_Limit()) {
710 FOSSASAT_DEBUG_DELAY(100);
725 #ifdef ENABLE_TRANSMISSION_CONTROL
726 Power_Control_Load_Configuration();
727 if(!powerConfig.bits.transmitEnabled) {
728 FOSSASAT_DEBUG_PRINTLN(
F(
"Tx 0 cmd"));
734 radio.clearDio1Action();
737 FOSSASAT_DEBUG_PRINT(
F(
"Send "));
738 FOSSASAT_DEBUG_PRINTLN(
len);
739 FOSSASAT_DEBUG_PRINT_BUFF(
data,
len);
743 FOSSASAT_DEBUG_PRINT(
F(
"Use "));
745 FOSSASAT_DEBUG_WRITE(MODEM_LORA);
746 FOSSASAT_DEBUG_PRINTLN(
F(
" (ovr)"));
747 Communication_Set_Modem(MODEM_LORA);
749 FOSSASAT_DEBUG_WRITE(
modem);
750 FOSSASAT_DEBUG_PRINTLN();
760 FOSSASAT_DEBUG_PRINT(
F(
"T/O="));
761 FOSSASAT_DEBUG_PRINTLN(
timeout);
766 FOSSASAT_DEBUG_PRINT(
F(
"TxErr"));
767 FOSSASAT_DEBUG_PRINTLN(
state);
777 Pin_Interface_Watchdog_Heartbeat();
780 #ifdef ENABLE_INTERVAL_CONTROL
781 if(powerConfig.bits.lowPowerModeActive) {
783 FOSSASAT_DEBUG_PRINTLN(
F(
"Tx 0 bat"));
796 Communication_Set_Modem(
modem);
797 FOSSASAT_DEBUG_PRINTLN(
F(
"Tx t/o"));
807 Communication_Set_Modem(
modem);
811 radio.setDio1Action(Communication_Receive_Interrupt);
This system is the main interface that is used to transmit message, configure the radio and process r...
void Communication_Frame_Add(uint8_t **buffPtr, T val, const char *name)
This function adds frame entry to a frame.
#define EEPROM_LORA_INVALID_COUNTER_ADDR
#define EEPROM_LORA_RECEIVE_LEN_ADDR
#define EEPROM_CHARGING_VOLTAGE_STATS_ADDR
#define EEPROM_BATTERY_VOLTAGE_STATS_ADDR
#define EEPROM_BOARD_TEMP_STATS_ADDR
#define EEPROM_FSK_INVALID_COUNTER_ADDR
#define EEPROM_CALLSIGN_LEN_ADDR
#define EEPROM_UPTIME_COUNTER_ADDR
#define EEPROM_BATTERY_TEMP_STATS_ADDR
#define EEPROM_CELL_B_VOLTAGE_STATS_ADDR
#define EEPROM_CELL_A_VOLTAGE_STATS_ADDR
#define EEPROM_LORA_VALID_COUNTER_ADDR
#define EEPROM_FSK_RECEIVE_LEN_ADDR
#define EEPROM_RESTART_COUNTER_ADDR
#define EEPROM_CHARGING_CURRENT_STATS_ADDR
#define EEPROM_FSK_VALID_COUNTER_ADDR
#define EEPROM_CELL_C_VOLTAGE_STATS_ADDR
#define EEPROM_MCU_TEMP_STATS_ADDR
#define EEPROM_DEPLOYMENT_COUNTER_ADDR
uint8_t spreadingFactorMode
const uint8_t encryptionKey[]
volatile bool dataReceived
volatile bool interruptsEnabled
#define ANALOG_IN_SOLAR_C_VOLTAGE_PIN
#define ANALOG_IN_SOLAR_B_VOLTAGE_PIN
#define ANALOG_IN_SOLAR_A_VOLTAGE_PIN
#define SLEEP_LENGTH_CONSTANT
#define WATCHDOG_LOOP_HEARTBEAT_PERIOD
#define FSK_RECEIVE_WINDOW_LENGTH
#define WHITENING_INITIAL
#define LORA_PREAMBLE_LENGTH
#define LORA_CURRENT_LIMIT
#define LORA_OUTPUT_POWER
#define LORA_CARRIER_FREQUENCY
#define MORSE_BATTERY_STEP
#define MORSE_BATTERY_MIN
#define MORSE_PREAMBLE_LENGTH
#define FSK_CARRIER_FREQUENCY
#define FSK_PREAMBLE_LENGTH
#define FSK_FREQUENCY_DEVIATION
#define FSK_CURRENT_LIMIT
#define MAX_RADIO_BUFFER_LENGTH
#define MAX_STRING_LENGTH
#define MAX_OPT_DATA_LENGTH
#define BOARD_TEMP_SENSOR_ADDR
#define BATTERY_TEMP_SENSOR_ADDR
T Persistent_Storage_Read(uint16_t addr)
This function reads a value of type T from EEPROM.