| | |
| | | { |
| | | |
| | | } |
| | | #define HEATBEAT_UPDATE_TIME_S 3600 //心跳包一个小时上传一次 |
| | | static uint16_t current_count,target_count,heartbeat_count,wg_report_id; |
| | | #define HEATBEAT_UPDATE_TIME_S 10 //心跳包一个小时上传一次 |
| | | static uint16_t current_count,target_count,wg_report_id; |
| | | uint16_t heartbeat_count; |
| | | static uint8_t heatbeat_buffer[100]; |
| | | void HeartbeatPoll(void) |
| | | {//心跳包上传 ID 版本号 小组 UWB功率 LORA功率 UWB发送时间 |
| | | void HeartbeatPoll(uint16_t wangguanid) |
| | | {//心跳包上传 ID 版本号 小组 UWB功率 LORA功率 UWB发送时间 |
| | | heartbeat_count+=sync_interval_s; |
| | | if(heartbeat_count>HEATBEAT_UPDATE_TIME_S) |
| | | { |
| | | { uint16_t checksum1 = 0; |
| | | heartbeat_count = 0; |
| | | heatbeat_buffer[MSG_TYPE_IDX] = LORA_MSGTYPE_ANCHEARTBEAT_POLL; |
| | | memcpy(&heatbeat_buffer[ANC_ID_IDX],&g_com_map[DEV_ID],2); |
| | | heatbeat_buffer[ANC_VERSION_IDX] = g_com_map[VERSION]; |
| | | heatbeat_buffer[ANC_GROUPID_IDX] = g_com_map[GROUP_ID]; |
| | | heatbeat_buffer[ANC_UWBPOWER_IDX] = g_com_map[POWER]; |
| | | heatbeat_buffer[ANC_LORAPOWER_IDX] = g_com_map[LORA_POWER]; |
| | | heatbeat_buffer[ANC_UWBPOLLTIME_IDX] = g_com_map[UWBPOLLTIME_MS_IDX]; |
| | | Radio.Send(heatbeat_buffer, 14); |
| | | delay_us(1700); |
| | | heatbeat_buffer[MSG_TYPE_IDX] = LORA_MSGTYPE_ANC_HEARTBEAT; |
| | | heatbeat_buffer[MSG_LENGTH] = 17; |
| | | memcpy(&heatbeat_buffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); |
| | | memcpy(&heatbeat_buffer[DEST_ID_IDX],&wangguanid,2); |
| | | memcpy(&heatbeat_buffer[ANC_HB_VERSION_IDX],&g_com_map[VERSION],2); |
| | | memcpy(&heatbeat_buffer[ANC_HB_UWBPOLLTIME_IDX],&g_com_map[UWBPOLLTIME_MS_IDX],2); |
| | | heatbeat_buffer[ANC_HB_UWBPOWER_IDX] = g_com_map[POWER]; |
| | | heatbeat_buffer[ANC_HB_LORAPOWER_IDX] = g_com_map[LORA_POWER]; |
| | | heatbeat_buffer[ANC_HB_BATTARY_IDX] = bat_percent; |
| | | checksum1=Checksum_u16(heatbeat_buffer,17); |
| | | memcpy(&heatbeat_buffer[17],&checksum1,2); |
| | | Radio.Send(heatbeat_buffer, 19); |
| | | Delay_Ms(60); |
| | | } |
| | | } |
| | | static uint8_t lora_sendbuffer[200]; |
| | |
| | | void LoraSendComMap(uint8_t cmd) |
| | | { |
| | | uint16_t checksum = 0; |
| | | data_length = 0x28; |
| | | data_length = 0x50; |
| | | lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_READPARARESP; |
| | | lora_sendbuffer[MSG_LENGTH] = data_length+9; |
| | | memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2); |
| | |
| | | lora_sendbuffer[RP_CMD_IDX] = cmd; |
| | | lora_sendbuffer[RP_INDEX_IDX] = 2; |
| | | lora_sendbuffer[RP_LEN_IDX] = data_length; |
| | | memcpy(&lora_sendbuffer[7], &g_com_map[1], data_length); |
| | | checksum = Checksum_u16(lora_sendbuffer,9+data_length); |
| | | memcpy(&lora_sendbuffer[9+data_length],&checksum,2); |
| | | Radio.Send(lora_sendbuffer,data_length+11); |
| | | memcpy(&lora_sendbuffer[9], &g_com_map[1], data_length); |
| | | checksum = Checksum_u16(lora_sendbuffer,11+data_length); |
| | | memcpy(&lora_sendbuffer[11+data_length],&checksum,2); |
| | | Radio.Send(lora_sendbuffer,data_length+13); |
| | | Delay_Ms(60); |
| | | } |
| | | void LoraRspWriteCommap(uint8_t index) |
| | |
| | | } |
| | | HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); |
| | | if(flag_sync_success) //同步成功 |
| | | { |
| | | HeartbeatPoll(); |
| | | { uint16_t wangguanid; |
| | | lora_recbuffer_len = GetLoraBufferAndLen(lora_recbuffer,&rec_sync_count);//获取LORA收到的数据和长度 |
| | | memcpy(&wangguanid,&lora_recbuffer[SOURCE_ID_IDX],2); |
| | | HeartbeatPoll(wangguanid); |
| | | LED_LG_ON; |
| | | sync_lost_count = 0; |
| | | lora_recbuffer_len = GetLoraBufferAndLen(lora_recbuffer,&rec_sync_count);//获取LORA收到的数据和长度 |
| | | if(lora_recbuffer[MSG_TYPE_IDX]==LORA_MSGTYPE_SYNC) |
| | | { uint16_t wg_sendtime_100us,pwanc_value; |
| | | uint8_t pwanc_index; |
| | |
| | | save_com_map_to_flash(); |
| | | flag_writepara_needreset = 1; |
| | | break; |
| | | case SUBMSG_UPDATE_ANC: |
| | | case SUBMSG_UPDATE_ANC: |
| | | LoraUp_Poll(); |
| | | break; |
| | | } |