#include <math.h>
|
#include <string.h>
|
#include "sx126x.h"
|
#include "sx126x-board.h"
|
#include "lora_1268.h"
|
//#include "lora_3029.h""
|
#include "user.h"
|
#include "sx126x-board.h"
|
#include "string.h"
|
#include "stdio.h"
|
#include <stdlib.h>
|
#include "mk_spi.h"
|
#include "global_param.h"
|
#include "dw_app_anchor.h"
|
#include "HIDO_TypeDef.h"
|
#include "PCA9555.h"
|
#include "mk_misc.h"
|
//#include "lis3dh_driver.c"
|
/********************************************½á¹¹Ìå**************************************************************/
|
typedef enum
|
{
|
LOWPOWER,
|
RX,
|
RX_TIMEOUT,
|
RX_ERROR,
|
TX,
|
TX_TIMEOUT,
|
}States_t;
|
/********************************************½á¹¹Ìå**************************************************************/
|
/********************************************±äÁ¿**************************************************************/
|
extern wg_state_enum wg_state;
|
|
|
/********************************************±äÁ¿**************************************************************/
|
|
#define USE_MODEM_LORA
|
|
#if defined( USE_MODEM_LORA )
|
|
#define LORA_BANDWIDTH 2 // [0: 125 kHz,
|
// 1: 250 kHz,
|
// 2: 500 kHz,
|
// 3: Reserved]
|
#define LORA_SPREADING_FACTOR 5 // [SF7..SF12]
|
#define LORA_CODINGRATE 1 // [1: 4/5,
|
// 2: 4/6,
|
// 3: 4/7,
|
// 4: 4/8]
|
#define LORA_PREAMBLE_LENGTH_T 8 // Same for Tx
|
#define LORA_PREAMBLE_LENGTH_R 8 // Same for Rx
|
//#define LORA_PREAMBLE_LENGTH 990 // Same for Tx and Rx
|
#define LORA_SYMBOL_TIMEOUT 0 // Symbols
|
#define LORA_FIX_LENGTH_PAYLOAD_ON false
|
#define LORA_IQ_INVERSION_ON_T false
|
#define LORA_IQ_INVERSION_ON_R false
|
|
|
#elif defined( USE_MODEM_FSK )
|
|
#define FSK_FDEV 5e3 // Hz
|
#define FSK_DATARATE 2.4e3 // bps
|
#define FSK_BANDWIDTH 20e3 // Hz >> DSB in sx126x
|
#define FSK_AFC_BANDWIDTH 100e3 // Hz
|
#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
|
#define FSK_FIX_LENGTH_PAYLOAD_ON false
|
|
#else
|
#error "Please define a modem in the compiler options."
|
#endif
|
|
|
/***lora½ÓÊÕ£¬·¢ËͱäÁ¿¶¨Òå******/
|
|
extern uint32_t current_count;
|
|
extern uint32_t dev_id;
|
uint8_t yuyin_no_sleep_flag,no_rx_flag;
|
uint8_t lora_up_rec_flag;
|
static uint16_t source_id;
|
/***lora½ÓÊÕ£¬·¢ËͱäÁ¿¶¨Òå******/
|
|
uint32_t wg_lost_count = 10;
|
//static uint8_t tx_buf[10] = {0x55, 0x44, 0x33, 0x22, 0x11};
|
//static uint8_t rx_buf[10] = {0x00};
|
//extern uint32_t uwbled,gpsled,loraled,powerled;
|
extern uint8_t bat_percent,taglist_num;
|
//uint8_t report_ancnum;
|
//uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM];
|
extern void spi_transfer_callback(void *dev, uint32_t err_code);
|
extern uint16_t ancidlist_rec[TAG_NUM_IN_SYS],ancidlist_send[TAG_NUM_IN_SYS],rec_ancidlist[TAG_NUM_IN_SYS];
|
extern uint8_t report_ancnum;
|
extern uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM];
|
//extern wg_state_enum wg_state;
|
extern uint32_t wg_lost_count;
|
uint8_t lora_sendbuffer[200];
|
uint8_t seq_num;
|
extern uint16_t lora_up_uwb_flag;
|
//extern uint8_t wg_lost_count;
|
uint16_t wg_report_freq,wg_report_id;
|
uint8_t wg_report_sf;
|
#define WG_LOST_SWITCH_THRES 3
|
#define WG_LOST_NOUWB_COUNT 60
|
#define DEFAULT_WG_ID 0xFFFF
|
#define DEFAULT_LR_WG_ID 0xFFFE
|
uint8_t lora_jianting_flag = 1;
|
void LoraReportFreqPoll(void)
|
{
|
// wg_state = WG_Lost;
|
if(wg_lost_count++>WG_LOST_NOUWB_COUNT)
|
{
|
lora_jianting_flag = 0;
|
} else {
|
lora_jianting_flag = 1;
|
}
|
if(wg_state==WG_Lost)
|
{
|
static uint8_t channel_switch_count = 0;
|
// channel_switch_count = 10;
|
if(channel_switch_count++>1)
|
{
|
// channel_switch_count = 0;
|
// wg_report_id = DEFAULT_LR_WG_ID;
|
// wg_report_freq = LR_DATA_CHANNEL_FRQ; //Èç¹û¶ªÊ§Á´½Ó¾Í½øÈëWG¹ÜÀíÐŵÀ¡£
|
// wg_report_sf = LR_DATA_CHANNEL_SF;
|
}
|
else
|
{
|
wg_report_id = DEFAULT_WG_ID;
|
wg_report_freq = REPORT_MANGE_CHANNEL_FRQ; //Èç¹û¶ªÊ§Á´½Ó¾Í½øÈëWG¹ÜÀíÐŵÀ¡£
|
wg_report_sf = REPORT_CHANNEL_SF;
|
// wg_report_freq = TEST_MANAGE_CHANNEL_FRQ;
|
// wg_report_sf = TEST_MANAGE_CHANNEL_SF;
|
}
|
} else {
|
if(wg_lost_count>WG_LOST_SWITCH_THRES)
|
{
|
wg_state = WG_Lost;
|
}
|
}
|
}
|
static uint16_t checksum;
|
|
//uint16_t wg_report_freq,wg_report_id;
|
uint8_t lora_sendbuffer[200];
|
void LoraHeartBeartPoll(void)
|
{
|
|
// lora_up_uwb_flag=2;
|
// rf_set_default_para();
|
|
/*****************************ÐÄÌø°üÉÏ´«ÄÚÈÝ************************************/
|
lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGHEARTBEAT;
|
lora_sendbuffer[MSG_LENGTH] = 14;
|
memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2);
|
memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
|
memcpy(&lora_sendbuffer[HB_VERSION_IDX],&g_com_map[VERSION],2);
|
lora_sendbuffer[HB_UWBPOWER_IDX] = g_com_map[POWER];
|
lora_sendbuffer[HB_LORAPOWER_IDX] = g_com_map[LORA_POWER];
|
checksum = Checksum_u16(lora_sendbuffer,14);
|
memcpy(&lora_sendbuffer[14],&checksum,2);
|
// Radio.Send(lora_sendbuffer,16);
|
|
/*****************************ÐÄÌø°üÉÏ´«ÄÚÈÝ*************************************/
|
|
}
|
#define HEATBEAT_UPDATE_TIME 100
|
uint16_t heatbeat_count = HEATBEAT_UPDATE_TIME-1 ;
|
uint16_t flag_getwgresp = 0;
|
int16_t intheight; //ÆøÑ¹
|
extern uint32_t dangqian_frqe;
|
uint16_t recnum[3];
|
extern uint32_t freq_list[4];
|
extern uint8_t DMA_RXBuf_BT[200];
|
extern uint8_t report_ancnum;
|
extern uint8_t report_ancnum_bt;
|
uint32_t BT_SEND_lenth=0;
|
uint8_t BT_NUM=0;
|
extern uint16_t report_ancdist[ANC_MAX_NUM],report_ancid[ANC_MAX_NUM];
|
extern uint8_t bat_percent;
|
extern uint16_t REV_RX_NUM;
|
extern uint16_t REV_POLL_NUM;
|
extern uint16_t REPLY_POLL_NUM;
|
uint16_t num[3]={0,0,0};
|
extern uint8_t stationary_flag;
|
extern uint8_t SOS_KEY_STATE;
|
uint32_t LORA_POLL_COUNT=0;
|
extern uint32_t step_count;
|
uint8_t step_count_rep;
|
//extern u16_m f_step;
|
extern uint8_t uwbled,gpsled,loraled,powerled;
|
extern uint8_t exercise_state;
|
void LoraReportPoll(void)
|
{
|
// delay_ms(100);
|
|
#ifdef _USE_BAR
|
GetPressAndHeight();
|
intheight = Height*100;
|
#endif
|
#ifdef _SMT_TEST
|
printf("ÆøÑ¹Öµ£º%d",intheight);
|
#endif
|
|
// TagListUpdate();
|
|
LoraReportFreqPoll();
|
flag_getwgresp = 0;
|
|
SwitchLoraSettings(wg_report_freq,REPORT_CHANNEL_SF,22);
|
mir3da_get_step();
|
if(heatbeat_count++>HEATBEAT_UPDATE_TIME && WG_Connected == wg_state) //Èç¹ûÐÄÌø°üµ½´ïÉÏ´«Ê±¼ä£¬²¢ÇÒÍø¹Ø´¦ÓÚÁ´½Ó״̬£¬¾ÍÉÏ´«ÐÄÌø°ü
|
{
|
heatbeat_count = 0;
|
LoraHeartBeartPoll();
|
return;
|
}
|
for(uint16_t i=0; i<report_ancnum-1; i++)
|
{
|
for(uint16_t j=0; j<report_ancnum-1-i; j++)
|
{
|
if(report_ancdist[j]>report_ancdist[j+1])
|
{
|
uint16_t id,dist;
|
uint8_t bat;
|
id = report_ancid[j];
|
dist = report_ancdist[j];
|
report_ancid[j] = report_ancid[j+1];
|
report_ancdist[j] = report_ancdist[j+1];
|
report_ancid[j+1] = id;
|
report_ancdist[j+1] = dist;
|
}
|
}
|
}
|
|
if(report_ancnum>LORA_REPORT_MAXANC_NUM) //¿¼ÂÇlora´«Êäʱ¼ä£¬×î¶à·¢ËÍ10¸ö»ùÕ¾Êý¾Ý¡£
|
{
|
report_ancnum = LORA_REPORT_MAXANC_NUM;
|
}
|
|
#ifdef USE_GPS
|
lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG_GPS;
|
lora_sendbuffer[MSG_LENGTH] = 4*report_ancnum+30;
|
#else
|
BT_NUM=DMA_RXBuf_BT[0];
|
if(SOS_KEY_STATE)
|
{
|
BT_NUM=0;
|
}
|
// lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG;
|
lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_TAGMSGTOWG_BT;
|
lora_sendbuffer[MSG_LENGTH] = 4*report_ancnum+4*BT_NUM+ANCID_IDX+3;
|
#endif
|
memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2);
|
memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
|
lora_sendbuffer[SEQNUM_IDX] = seq_num++;
|
lora_sendbuffer[BAT_IDX] = bat_percent;//(uint8_t)(step_count % 256);
|
// lora_sendbuffer[BAT_IDX] = (uint8_t)(step_count % 256);
|
lora_sendbuffer[STATE_IDX] = !GET_USERKEY|stationary_flag<<1;
|
//GET_USERKEYÕâ¸öÊÇÄǸölora¡ª¡ªbusyÄǸöÒý½Å
|
// lora_sendbuffer[STATE_IDX]=0x01;
|
// lora_sendbuffer[GATEWAY_CHANL]=0x02;
|
// lora_sendbuffer[CHANL_NUM]=0x03;
|
|
#ifdef USE_GPS
|
memcpy(&lora_sendbuffer[GPS_JINGDU_IDX],&gps_jingdu,8);
|
memcpy(&lora_sendbuffer[GPS_WEIDU_IDX],&gps_jingdu,8);
|
memcpy(&lora_sendbuffer[GPS_HEIGHT_IDX],&gps_height,8);
|
lora_sendbuffer[GPS_STATE_IDX] = gps_state;
|
lora_sendbuffer[GPS_SATEL_NUM_IDX] = gps_satel_num;
|
lora_sendbuffer[GPS_SPOWER_IDX] = gps_signalpower;
|
lora_sendbuffer[GPS_CHAFENLINGQI] = gps_chafenlingqi;
|
#endif
|
memcpy(&lora_sendbuffer[BAR_HEIGHT_IDX],&intheight,2);
|
lora_sendbuffer[BT_ANCID_IDX] = report_ancnum;
|
memcpy(&lora_sendbuffer[BT_ANCID_IDX+1],report_ancid,report_ancnum*2);
|
memcpy(&lora_sendbuffer[BT_ANCID_IDX+report_ancnum*2+1],report_ancdist,report_ancnum*2);
|
uint8_t LORA_RETRANSNUSSION_BT=0;
|
//
|
// num[0]=REV_RX_NUM;
|
// num[1]=REV_POLL_NUM;
|
// num[2]=REPLY_POLL_NUM;
|
LORA_RETRANSNUSSION_BT=BT_ANCID_IDX+report_ancnum*4+1;
|
lora_sendbuffer[LORA_RETRANSNUSSION_BT] = 0x2D; //À¶ÑÀÉÏ´«±êʶ·û
|
|
memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+1],&DMA_RXBuf_BT[0],BT_NUM*2+1); //»ùÕ¾ID
|
memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+BT_NUM*2+2],&DMA_RXBuf_BT[1+BT_NUM*2],BT_NUM*2);//»ùÕ¾¾àÀë
|
lora_sendbuffer[MSG_LENGTH] = LORA_RETRANSNUSSION_BT+4*BT_NUM+2;
|
|
//±£Áôλ3
|
if(step_count < 0)
|
step_count=0;
|
lora_sendbuffer[STEP_COUNT] = (uint8_t)(step_count % 256);
|
lora_sendbuffer[EXERCISE_STATE]=exercise_state;
|
lora_sendbuffer[RESERVED_POSITION]=0;
|
// }
|
// if(lora_sendbuffer[LORA_RETRANSNUSSION_BT]==0x2D)
|
// {
|
checksum = Checksum_u16(lora_sendbuffer,4*BT_NUM+4*report_ancnum+BT_ANCID_IDX+3);
|
memcpy(&lora_sendbuffer[LORA_RETRANSNUSSION_BT+BT_NUM*4+2],&checksum,2);
|
BT_SEND_lenth=BT_ANCID_IDX+report_ancnum*4+BT_NUM*4+5;
|
|
Radio.Send(lora_sendbuffer,BT_SEND_lenth);
|
LORA_POLL_COUNT++;
|
// LORA_3029_SINGLE_SEND(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+4,0);
|
// }
|
// else
|
// {
|
// checksum = Checksum_u16(lora_sendbuffer,4*report_ancnum+ANCID_IDX);
|
// memcpy(&lora_sendbuffer[ANCID_IDX+report_ancnum*4],&checksum,2);
|
// Radio.Send(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+2);
|
// }
|
|
|
// LORA_3029_SINGLE_SEND(lora_sendbuffer,ANCID_IDX+report_ancnum*4+BT_NUM*4+4,0);
|
memset(DMA_RXBuf_BT, 0,200);
|
memset(&lora_sendbuffer[ANCID_IDX],0,200);
|
//LED_TB_ON;
|
loraled=1;
|
|
for(uint8_t i=0;i<3;i++)
|
recnum[i] = 0;
|
|
}
|
|
//static uint16_t delaytime = 1200;
|
static uint16_t source_id;
|
uint8_t rec_index,rec_secdelay;
|
//uint16_t rec_value,rec_delaytime,rx_count;
|
//uint16_t rec_value,rec_delaytime,rx_count,datalen_offset;
|
|
uint8_t shengji_flag,time=5;
|
//extern uint32_t uwbled,gpsled,loraled,powerled;
|
extern struct RxDoneMsg RxDoneParams;
|
|
//extern uint8_t Lora_tx_ancnum;
|
//extern u8 lora_seq_nb2;
|
extern uint16_t lora_yingda_num;
|
uint8_t lora_tx_flag=0;
|
uint8_t lora_txanchor_power_flag;
|
extern uint16_t Lora_tx_ancid[50];
|
extern uint16_t Lora_tx_ancdist[50];
|
extern uint8_t Lora_tx_anc_electricity[50];
|
uint8_t lora_seq_nb1;
|
|
extern uint8_t lora_sendbuffer[200];
|
void LoraSendComMap(uint8_t cmd)
|
{
|
uint8_t data_length = 0x50;
|
uint16_t checksum = 0;
|
lora_sendbuffer[MSG_TYPE_IDX] = LORA_MSGTYPE_READPARARESP;
|
lora_sendbuffer[MSG_LENGTH] = data_length+11;
|
memcpy(&lora_sendbuffer[SOURCE_ID_IDX],&g_com_map[DEV_ID],2);
|
memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
|
lora_sendbuffer[RP_CMD_IDX] = cmd;
|
lora_sendbuffer[RP_INDEX_IDX] = 2;
|
lora_sendbuffer[RP_LEN_IDX] = data_length;
|
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);
|
// LORA_3029_SINGLE_SEND(lora_sendbuffer,data_length+13,0);
|
// Radio.Send(lora_sendbuffer,data_length+13);
|
//++;
|
// Delay_Ms(100);
|
}
|
void LoraRspWriteCommap(uint8_t index)
|
{
|
uint8_t data_length = 2;
|
uint16_t checksum = 0;
|
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);
|
memcpy(&lora_sendbuffer[DEST_ID_IDX],&wg_report_id,2);
|
lora_sendbuffer[RP_CMD_IDX] = WGRSP_RWTAG_WRITE;
|
lora_sendbuffer[RP_INDEX_IDX] = index;
|
lora_sendbuffer[RP_LEN_IDX] = data_length;
|
memcpy(&lora_sendbuffer[7], &g_com_map[index/2], 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);
|
|
// LORA_3029_SINGLE_SEND(lora_sendbuffer,data_length+11,0);
|
// Delay_Ms(100);
|
}
|
uint8_t t22[20],ti;
|
uint8_t no_yingdaflag;
|
uint8_t aRxBuffer[1];
|
|
extern uint8_t group_id;
|
uint16_t lora_send_count;
|
uint8_t mode_flag=0;
|
uint32_t frqe,dangqian_frqe;
|
|
|
void Lora_Tx_Poll()
|
{
|
|
// if(lora_tx_flag)
|
// {
|
// OnMaster();
|
////
|
// //rf_enter_continous_rx();
|
// }
|
if(lora_tx_flag)
|
{
|
// gpio_pin_set(IO_PIN_5);
|
|
|
if(lora_send_count++%10==0||lora_jianting_flag)
|
{
|
lora_tx_flag=0;
|
#ifdef GROUPID_SWITCH
|
if(rec_secdelay>0)
|
{
|
rec_secdelay--;
|
return;
|
}
|
#endif
|
|
LoraReportPoll();
|
|
}
|
}
|
|
|
}
|
|
////States_t State = LOWPOWER;
|
|
//////int8_t RssiValue = 0;
|
//////int8_t SnrValue = 0;
|
////uint8_t lora_chongfuyingda_flag;
|
////uint8_t Lora_rx_open_flag;
|
////extern u32 Loratx_frequency;
|
uint8_t huifushengjibao_flag;
|
uint8_t LoraUp_flag;
|
//uint8_t lora_up_rec_flag;
|
uint8_t flag_writepara_needreset = 0;
|
//uint32_t wg_lost_count = 10;
|
//uint32_t lora_zhuangtai;
|
//uint16_t current_count;
|
//extern wg_state_enum wg_state;
|
uint8_t txdone=0;
|
void OnTxDone( void )
|
{
|
txdone++;
|
if(flag_writepara_needreset) //ÅäÖÃдÈëÍê³ÉÉ豸ÐèÒªÖØÆô
|
{
|
printf("Íø¹ØÏ·¢ÅäÖÃдÈëÍê³É£¬ÖØÆô");
|
SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //Èí¸´Î»»Øµ½bootloader
|
}
|
Radio.Standby();
|
if(LoraUp_flag)
|
{
|
huifushengjibao_flag=1;
|
Radio.Rx( 500 );
|
}
|
else
|
{
|
Radio.Rx( 50 );
|
|
}
|
}
|
#define BUFFER_SIZE 255 // Define the payload size here
|
|
extern uint8_t imu_enable,motor_enable;
|
extern uint8_t lora_jianting_flag,report_ancnum;
|
extern uint16_t motor_keeptime;
|
extern uint32_t dev_id;
|
//extern wg_state_enum wg_state;
|
uint16_t rec_value,rec_delaytime,rx_count,datalen_offset;
|
uint16_t BufferSize = BUFFER_SIZE;
|
uint16_t CRC16=0;
|
uint16_t DEST_ID=0;
|
uint8_t shengji_flag;
|
int8_t RssiValue = 0;
|
int8_t SnrValue = 0;
|
uint8_t TX_Buffer[BUFFER_SIZE];
|
uint8_t RX_Buffer[BUFFER_SIZE];
|
static RadioEvents_t RadioEvents;
|
static uint16_t delaytime = 771;
|
static uint16_t source_id;
|
|
|
uint8_t rec_index,rec_secdelay;
|
uint16_t rec_value,rx_count,datalen_offset;
|
int32_t target_count;
|
uint32_t sleep_time_count=0;
|
uint32_t sleep_time_count_LAST=0;
|
uint16_t time_count;
|
uint8_t LoraUp_flag;
|
uint16_t REV_WG_pack=0;
|
uint8_t rxdone=0;
|
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
|
{
|
uint16_t checksum1;
|
BufferSize = size;
|
memcpy( RX_Buffer, payload, BufferSize );
|
RssiValue = rssi;
|
SnrValue = snr;
|
Radio.Standby();
|
rxdone++;
|
no_rx_flag = 0;
|
lora_up_rec_flag=1;
|
if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_WGRESPTAG)
|
{
|
checksum1=Checksum_u16(RX_Buffer,BufferSize-2);
|
|
memcpy(&DEST_ID,&RX_Buffer[DEST_ID_IDX],2);
|
memcpy(&CRC16,&RX_Buffer[BufferSize-2],2);
|
if(!memcmp(&checksum1,&RX_Buffer[BufferSize-2],2))
|
if(!memcmp(&dev_id,&RX_Buffer[DEST_ID_IDX],2))
|
{
|
memcpy(&source_id,&RX_Buffer[SOURCE_ID_IDX],2);
|
if(wg_state==WG_Lost)
|
{
|
wg_state = WG_Connected;
|
wg_report_id = source_id;
|
}
|
if(!memcmp(&wg_report_id,&RX_Buffer[SOURCE_ID_IDX],2))
|
{
|
wg_lost_count = 0;
|
switch(RX_Buffer[PWTAG_RW_FLAG_IDX])
|
{
|
case WGRSP_RWTAG_NONE:
|
REV_WG_pack++;
|
wg_report_freq = RX_Buffer[POLL_FREQ_IDX]+400;
|
memcpy(&rec_delaytime,&RX_Buffer[NEXTPOLL_TIME_IDX],2);
|
|
if(report_ancnum<2)
|
{
|
datalen_offset = report_ancnum*85;
|
}else{
|
datalen_offset = (report_ancnum-1)*46+85;
|
}
|
rec_secdelay = RX_Buffer[PWTAG_SECDELAY_IDX];
|
if(BufferSize!=13||rec_secdelay>20)
|
{
|
rec_secdelay = 0;
|
}
|
if(rec_delaytime<500)
|
{
|
int t;
|
t++;
|
}
|
// sleep_time_count =(__MS_TO_32K_CNT(rec_delaytime)/10)- delaytime-datalen_offset;
|
sleep_time_count =(__MS_TO_32K_CNT(rec_delaytime)/10);
|
while(sleep_time_count>=32768)
|
{
|
sleep_time_count-=32768;
|
}
|
while(sleep_time_count<2000)
|
{
|
sleep_time_count+=10000;
|
}
|
// if(REV_WG_pack==1)
|
// {
|
// sleep_time_count_LAST=sleep_time_count;
|
// }
|
// if(abs(sleep_time_count_LAST-sleep_time_count)>2000||REV_WG_pack==1)
|
// {
|
// sleep_timer_start(sleep_time_count);
|
time_count++;
|
// }
|
break;
|
case WGRSP_RWTAG_READ:
|
no_rx_flag = 1;
|
LoraSendComMap(WGRSP_RWTAG_READ);
|
break;
|
case WGRSP_RWTAG_WRITE:
|
rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
|
switch(rec_index)
|
{
|
case 0xdd: //ÓïÒôÏ·¢
|
break;
|
// case 0x20: //·äÃù
|
// memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
|
// motor_keeptime = rec_value;
|
// break;
|
default :
|
memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
|
g_com_map[rec_index/2] = rec_value;
|
save_com_map_to_flash();
|
LoraRspWriteCommap(SUBMSG_WRITE_ANCPARA);
|
//flag_writepara_needreset = 1;
|
no_rx_flag = 1;
|
}
|
|
break;
|
case WGRSP_RWTAG_UPDATE:
|
rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
|
// switch(rec_index)
|
// {
|
// case 0xaa: //Éý¼¶Ï·¢
|
// memcpy(&rec_wenjian_daxiao,&RX_Buffer[WRITEPARA_VALUE_IDX],2);//Îļþ´óС
|
// if(rec_wenjian_daxiao>0XAC00||rec_wenjian_daxiao==0)
|
// {}//Îļþ¹ý´ó£¬³¬³ö·¶Î§
|
// else
|
// {
|
// memcpy(&wangguan_up_id,&RX_Buffer[SOURCE_ID_IDX],2);//Íø¹ØID Õ¼ÓÃ2¸ö×Ö½Ú
|
// shengji_flag=1;
|
// LoraUp_flag=1;
|
// imu_enable=0;
|
// }
|
//// LoraUp_Poll();
|
// break;
|
// }
|
break;
|
}
|
}
|
if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_RANGEPOLL)
|
{
|
|
// uwb_open();
|
|
//// UwbRange();
|
|
// uwb_ceju_count++;
|
}
|
|
|
}
|
|
}
|
if(!no_rx_flag)
|
{
|
if(lora_jianting_flag&&LoraUp_flag==0)
|
{
|
SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
|
Radio.Rx(0);
|
}
|
}
|
}
|
|
void OnTxTimeout( void )
|
{
|
Radio.Standby();
|
if(lora_jianting_flag)
|
{
|
SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
|
Radio.Rx(0);
|
}
|
}
|
|
void OnRxTimeout( void )
|
{
|
Radio.Standby();
|
if(lora_jianting_flag)
|
{
|
SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
|
Radio.Rx(0);
|
}
|
}
|
|
|
void OnRxError( void )
|
{
|
|
Radio.Standby();
|
if(lora_jianting_flag)
|
{
|
SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0);
|
Radio.Rx(0);
|
}
|
}
|
|
|
|
uint16_t freq_test;
|
void SwitchLoraSettings(uint32_t freq,uint8_t sf,uint8_t power)
|
{
|
Radio.Standby();
|
Radio.SetChannel( freq*1000000 );
|
freq_test = freq;
|
Radio.SetTxConfig( MODEM_LORA, power, 0, 2,
|
sf, LORA_CODINGRATE,LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON,
|
false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 );
|
|
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH,
|
sf,LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R,
|
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
|
0, false, 0, 0, LORA_IQ_INVERSION_ON_R, 0 );
|
}
|
|
|
uint8_t active_flag;
|
void Lora_1268_Init(void)
|
{
|
RadioEvents.TxDone = OnTxDone;
|
RadioEvents.RxDone = OnRxDone;
|
RadioEvents.TxTimeout = OnTxTimeout;
|
RadioEvents.RxTimeout = OnRxTimeout;
|
RadioEvents.RxError = OnRxError;
|
|
Radio.Init( &RadioEvents );
|
// SwitchLoraSettings(UWB_CHANNEL_FRQ+group_id,UWB_CHANNEL_SF,0); //Çл»lora½ÓÊÕÆµµã
|
if(active_flag)
|
{
|
Radio.Rx( 0 );
|
}
|
// else{
|
// Radio.Sleep();
|
// }
|
// Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time);
|
|
}
|