/*Includes ----------------------------------------------*/ #include "system.h" #include "ble_comm.h" #include "hal_scan_manage.h" static scan_reslt_t scan_reslt_head ={ .handle = NULL, .next =NULL, .scanname =NULL }; void hal_ble_scan_result_Regist(scan_reslt_t *cb){ scan_reslt_t *target = &scan_reslt_head; while(NULL != target->next){ if(target->next == cb)return;//检查是否已经存在 target = target->next; } cb->next = NULL; target->next = cb; } void hal_ble_scan_result_Clear(scan_reslt_t *cb){ scan_reslt_t *target = &scan_reslt_head; while(NULL != target->next){ if(cb == target->next){ target->next = cb->next; return; } target = target->next; } } static void scan_report_cb(uint8_t *adv_data, uint16_t adv_data_len,int8_t rssi) { scan_reslt_t *target = &scan_reslt_head; while(NULL != target->next){ if(NULL != target->next->scanname){ if(advdata_name_find(adv_data, adv_data_len,target->next->scanname)){ target->next->scanflag =1; } } target = target->next; } } static void hal_scan_process(void) { scan_reslt_t *target = &scan_reslt_head; while(NULL != target->next){ if(target->next->scanflag){ target->next->scanflag =0; if(target->next->handle) target->next->handle(); } target = target->next; } } void hal_ble_scan_Init(void) { advdata_report_Evt_Regist(scan_report_cb); Process_Start(10,"hal_scan_process",hal_scan_process); }