| | |
| | | ts2 >>= 8; |
| | | } |
| | | } |
| | | |
| | | uint8_t tt5=0; |
| | | //void TagListUpdate(void) |
| | | //{ |
| | | // uint8_t i,j=0; |
| | |
| | | taglist_num=j; |
| | | if(find_flag) |
| | | { |
| | | // if(tt5) |
| | | find_in_tag_id_authorization_list(tag_id_authorization_list_num); |
| | | find_flag=0; |
| | | } |
| | |
| | | |
| | | void find_in_tag_id_authorization_list(uint32_t authorization_list_num) |
| | | { |
| | | for (uint32_t i = 0; i < taglist_num; i++) { |
| | | uint32_t target = tagid_list[i]; |
| | | uint32_t left = 0; |
| | | uint32_t right = authorization_list_num - 1; // 授权列表的最大索引 |
| | | uint8_t found = 0; |
| | | |
| | | // 二分查找循环 |
| | | while (left <= right) { |
| | | uint32_t mid = left + ((right - left) >> 1); // 防止整数溢出 |
| | | uint32_t mid_val = tag_id_authorization_list[mid]; |
| | | // for (uint32_t i = 0; i < taglist_num; i++) { |
| | | // uint32_t target = tagid_list[i]; |
| | | // uint32_t left = 0; |
| | | // uint32_t right = authorization_list_num - 1; // 授权列表的最大索引 |
| | | // uint8_t found = 0; |
| | | // |
| | | // // 二分查找循环 |
| | | // while (left <= right) { |
| | | // uint32_t mid = left + ((right - left) >> 1); // 防止整数溢出 |
| | | // uint32_t mid_val = tag_id_authorization_list[mid]; |
| | | // |
| | | // if (mid_val == target) { |
| | | // found = 1; |
| | | // break; // 找到目标值,立即退出循环 |
| | | // } else if (mid_val < target) { |
| | | // left = mid + 1; |
| | | // } else { |
| | | // right = mid - 1; |
| | | // } |
| | | // LOG_INFO(TRACE_MODULE_APP, "DEBUG: i=%u, left=%d, right=%d, found=%u\n", i, left, right, found); |
| | | // } |
| | | //// |
| | | //// // 存储查找结果 |
| | | //// tag_authorized_List[i] = found; |
| | | // } |
| | | { |
| | | // 如果授权列表为空,直接全部标记为0 |
| | | if (authorization_list_num == 0) { |
| | | for (int i = 0; i < taglist_num; i++) { |
| | | tag_authorized_List[i] = 0; |
| | | } |
| | | return; |
| | | } |
| | | |
| | | // 遍历需要查找的每个ID |
| | | for (int i = 0; i < taglist_num; i++) { |
| | | int key = tagid_list[i]; |
| | | int low = 0; |
| | | int high = authorization_list_num - 1; |
| | | int found = 0; // 标记是否找到 |
| | | |
| | | // 在授权列表中执行二分查找 |
| | | while (low <= high) { |
| | | int mid = low + (high - low) / 2; // 防止整数溢出 |
| | | |
| | | if (mid_val == target) { |
| | | found = 1; |
| | | break; // 找到目标值,立即退出循环 |
| | | } else if (mid_val < target) { |
| | | left = mid + 1; |
| | | if (tag_id_authorization_list[mid] == key) { |
| | | found = 1; // 找到匹配项 |
| | | break; |
| | | } else if (tag_id_authorization_list[mid] < key) { |
| | | low = mid + 1; // 在右半部分继续查找 |
| | | } else { |
| | | right = mid - 1; |
| | | high = mid - 1; // 在左半部分继续查找 |
| | | } |
| | | } |
| | | |
| | | // 存储查找结果 |
| | | tag_authorized_List[i] = found; |
| | | |
| | | // 根据查找结果设置输出列表 |
| | | tag_authorized_List[i] = found ? 1 : 0; |
| | | } |
| | | } |
| | | } |
| | | |
| | | int Anchor_App(void) |
| | |
| | | memcpy(&tempid,&rx_buf[FZ_NEARBASEID_INDEX+i*2],2); |
| | | if(tempid==dev_id) |
| | | { |
| | | |
| | | Anchor_RecNearPoll(i); |
| | | tagdist_list[taglist_pos]=rec_ancdistlist[i]; |
| | | anchordata_bat[taglist_pos] = battary;//保存该基站电量 |
| | | if(tag_authorized_List[taglist_pos]==1) |
| | | { |
| | | if(tagdist_list[taglist_pos]<100) |
| | | { |
| | | gpio_pin_set(BUTTON_PIN); |
| | | }else{ |
| | | gpio_pin_clr(BUTTON_PIN); |
| | | } |
| | | } |
| | | if(taglist_pos==taglist_num)// taglist_pos==taglist_num 说明这个基站不在当前列表中 |
| | | { //tempid==dev_id 说明基站下发测距报文有这个标签的信息 |
| | | taglist_num++; //满足上述两种情况才会添加基站ID进入列表中,否则会出现标签不在基站列表中,标签也不响应的情况 |