#include "task.h" #include "cjson.h" #include "myFile.h" #include "gateway_message.h" #include "log.h" #include "malloc.h" #include "sx1276.h" #include "radio.h" void master_task(char *string); void slave_task(); tRadioDriver *Radio = NULL; uint16_t BufferSize ; uint8_t Buffer[256]; uint32_t rx_num = 0; uint8_t PingMsg[] = "PING\0"; uint8_t PongMsg[] = "PONG\0"; /* ********************************************************************************************************* * 函 数 名: void data_task(void *pdata) * 功能说明: 主要是data_task处理线程,优先级高。其运行逻辑是将nandflash中的数据解析出来轮询发送数据 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ void data_task(void *pdata) { OS_CPU_SR cpu_sr; pdata = pdata; char *lora_config_json =mymalloc(SRAMEX,9*1024); read_file("lora_json.txt",lora_config_json); addGatewayParams(lora_config_json); free(lora_config_json); // Radio = RadioDriverInit(); // Radio->Init(); //#ifdef MASTER // Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg)); // printf("MASTER"); //#else // Radio->StartRx(); // printf("SLAVE"); //#endif // while (1) // { //#ifdef MASTER // master_task("a"); //#else // slave_task(); //#endif // } } /* ********************************************************************************************************* * 函 数 名: void master_task(char *string) * 功能说明: 主网关sx1278轮询发送调用接口,发送结束后就将状态切换到接收状态,等待从机的响应值,当从机超时或接收到数据进行后续数据处理的流程 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ volatile uint32_t startTime; //记录开始的时间 void master_task(char *string) { switch (Radio->Process()) { case RF_RX_DONE: Radio->GetRxPacket(Buffer, &BufferSize); printf("Master_Task:RX_____%s,Rx_num:%d\n", Buffer, rx_num); rx_num++; if (strncmp((const char *)Buffer, (const char *)PongMsg, strlen((const char *)PongMsg)) == 0) { Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg)); startTime=OSTimeGet(); delay_ms(1000); } break; case RF_TX_DONE: startTime=OSTimeGet(); Radio->StartRx(); case RF_BUSY: case RF_IDLE: if(OSTimeGet()-startTime>10000) //每次发送信号时记录上一次发送的时间如果超过一段时间没有响应则进行下一次发送 { Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg)); startTime=OSTimeGet(); delay_ms(1000); } default: OSTimeDlyHMSM(0, 0, 0, 500); break; } } /* ********************************************************************************************************* * 函 数 名: void slave_task(char *string) * 功能说明: 负责从站数据处理 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ volatile bool rxflag=false; void slave_task() { switch (Radio->Process()) { case RF_RX_DONE: Radio->GetRxPacket(Buffer, &BufferSize); printf("Slave_Task:RX_____%s,Rx_num:%d\n", Buffer, rx_num); rx_num++; if (strncmp((const char *)Buffer, (const char *)PingMsg, strlen((const char *)PingMsg)) == 0) { Radio->SetTxPacket(PongMsg, strlen((const char *)PongMsg)); delay_ms(1000); } break; case RF_TX_DONE: Radio->StartRx(); break; case RF_IDLE: case RF_BUSY: default: OSTimeDlyHMSM(0, 0, 0, 500); } } void processString(char *string) { }