//#include #include "LoraInterface.h" #include "BoardCfg.h" #include "timer.h" #include "NetworkInterface.h" #include "ProtocolDefs.h" #include "Uart.h" short mModuleModel; int InitLoraInterface() { mModuleModel = LORA_MODULE_MODEL; SetLoraModuleTxMode(); return RET_OK; } int LoraInterfaceRxData(char Data) { LoraRxStateMachine(Data,LORA_RX_SM_NEW_DATA_EVENT); return RET_OK; } int LoraRxStateMachine(char Data, int Event) { switch(mLoraRxSMState) { case LORA_RX_SM_STANBY_STATE: { switch(Event) { case LORA_RX_SM_NEW_DATA_EVENT: { mLoraModuleBuffer[mBufferIndex++] = Data; mLoraRxSMState = LORA_RX_SM_RECEIVING_STATE; TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT); break; } case LORA_RX_SM_TICK_EVENT: { break; } } break; } case LORA_RX_SM_RECEIVING_STATE: { switch(Event) { case LORA_RX_SM_NEW_DATA_EVENT: { mLoraModuleBuffer[mBufferIndex++] = Data; TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT); if(mBufferIndex >= MAX_LORA_BUFFER_SIZE) { //TODO: Manage the exception with the MasterCtrl. LoraResetRxStateMachine(); } break; } case LORA_RX_SM_TICK_EVENT: { if(IsTimerExpired(LORA_MODULE_COMM_TIMER)) { SendNetworkCommand(LORA_IF_NEW_FRAME_RESPONSE,mLoraModuleBuffer,mBufferIndex); LoraResetRxStateMachine(); } break; } } break; } } return RET_OK; } void LoraResetRxStateMachine() { mLoraRxSMState = LORA_RX_SM_STANBY_STATE; mBufferIndex = 0; } int LoraInterfaceTransmitLoRaData(char *Payload, unsigned int PayloadSize) { if(mLoraRxSMState != LORA_RX_SM_STANBY_STATE) { //TODO: Manage this... // return LORA_IF_RET_BUSY_CHANNEL; } SendInternalUartDataBlocking(Payload,PayloadSize,LORA_MODULE_UART_PORT); return LORA_IF_RET_OK; } void LoraInterfaceTick() { LoraRxStateMachine(0,LORA_RX_SM_TICK_EVENT); }