| | |
| | | #include "beep.h" |
| | | #include "modbus.h" |
| | | //#define DEBUG_OUTPUT |
| | | //#define TDFILTER |
| | | //#define CONSTANT_FILTER |
| | | /*------------------------------------ Marcos ------------------------------------------*/ |
| | | /* Inter-ranging delay period, in milliseconds. */ |
| | | #define RNG_DELAY_MS 100 |
| | |
| | | #define POLL_TX_TO_RESP_RX_DLY_UUS 150 |
| | | /* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the |
| | | * frame length of approximately 2.66 ms with above configuration. */ |
| | | #define RESP_RX_TO_FINAL_TX_DLY_UUS 400 |
| | | #define RESP_RX_TO_FINAL_TX_DLY_UUS 420 |
| | | /* Receive response timeout. See NOTE 5 below. */ |
| | | #define RESP_RX_TIMEOUT_UUS 600 |
| | | |
| | |
| | | C = dia->maxGrowthCIR; |
| | | |
| | | firstpath_power=10* log10((F1*F1+F2*F2+F3*F3)/(N*N))-A; |
| | | // rx_power=10*log10(C*B/(N*N))-A; |
| | | rx_power=10*log10(C*B/(N*N))-A; |
| | | |
| | | // min_power = - 10 * log10((F1 *F1 + F2 * F2 + F3 * F3) / (C *B)); |
| | | return min_power; |
| | | } |
| | | #define CONSTANT_LEN 50 |
| | | extern u16 dist_threshold; |
| | | int32_t ConstantFilter(int32_t currentdist,u8 channel) |
| | | { |
| | | static int32_t cs_lastdist[10],cs_lastvalid[10]; |
| | | static u8 cfstart_flag[10] = {1}; |
| | | static u8 constant_count[10] = {100}; |
| | | if(cfstart_flag[channel]) |
| | | { |
| | | cfstart_flag[channel] = 0; |
| | | cs_lastdist[channel] = currentdist; |
| | | } |
| | | if( abs(currentdist - cs_lastdist[channel])<100) |
| | | { |
| | | if(constant_count[channel]<CONSTANT_LEN) |
| | | constant_count[channel]++; |
| | | }else{ |
| | | constant_count[channel] = 0; |
| | | } |
| | | if(constant_count[channel] == CONSTANT_LEN) |
| | | { |
| | | cs_lastvalid[channel] = currentdist; |
| | | } |
| | | cs_lastdist[channel] = currentdist; |
| | | return cs_lastvalid[channel]; |
| | | } |
| | | |
| | | uint16_t g_Resttimer; |
| | | uint8_t result; |
| | | u8 tag_succ_times=0; |
| | |
| | | { |
| | | g_Tagdist[anc_id_recv]= hex_dist2; |
| | | g_flag_Taggetdist[anc_id_recv]=0; |
| | | |
| | | Modbus_HoldReg[anc_id_recv*2]=hex_dist2>>16; |
| | | Modbus_HoldReg[anc_id_recv*2+1]=hex_dist2; |
| | | if(!g_com_map[MODBUS_MODE]) |
| | | { |
| | | hex_dist2 = hex_dist2; |
| | |
| | | checksum = Checksum_u16(&usart_send[2],17); |
| | | memcpy(&usart_send[19],&checksum,2); |
| | | UART_PushFrame(usart_send,21); |
| | | |
| | | } |
| | | } |
| | | // memcpy(&Modbus_HoldReg[anc_id_recv*2],&hex_dist,4); |
| | |
| | | |
| | | int8_t correction_time; |
| | | extern uint8_t sync_seq; |
| | | #define TDFILTER |
| | | |
| | | //#define CHECK_UID |
| | | extern uint8_t UID_ERROR; |
| | | extern u16 dist_threshold; |
| | | |
| | | u8 misdist_num[TAG_NUM_IN_SYS]; |
| | | void Anchor_App(void) |
| | | { |
| | |
| | | #else |
| | | filter_dist=hex_dist/10; |
| | | #endif |
| | | |
| | | #ifdef CONSTANT_FILTER |
| | | filter_dist = ConstantFilter(filter_dist,tag_id_recv-TAG_ID_START); |
| | | #endif |
| | | anchor_dist_last_frm[tag_id_recv-TAG_ID_START]=filter_dist; |
| | | g_Tagdist[tag_id_recv]= filter_dist; |
| | | |
| | | |
| | | |
| | | his_dist[tag_id_recv-TAG_ID_START]=hex_dist; |
| | | g_flag_Taggetdist[tag_id_recv]=0; |
| | | if(!g_com_map[MODBUS_MODE]) |
| | |
| | | usart_send[13] = battary; |
| | | usart_send[14] = button; |
| | | usart_send[15] = firstpath_power; |
| | | usart_send[16] = rx_power; |
| | | checksum = Checksum_u16(&usart_send[2],17); |
| | | memcpy(&usart_send[19],&checksum,2); |
| | | UART_PushFrame(usart_send,21); |