static void wifi_scan_done_hdl( char* buf, int buf_len, int flags, void* userdata) { int i = 0; rtw_scan_handler_result_t scan_result_report; for(i=0; i<scan_result_handler_ptr.scan_cnt; i++){ rtw_memcpy(&scan_result_report.ap_details, scan_result_handler_ptr.pap_details[i], sizeof(rtw_scan_result_t)); scan_result_report.scan_complete = scan_result_handler_ptr.scan_complete; scan_result_report.user_data = scan_result_handler_ptr.user_data; (*scan_result_handler_ptr.gscan_result_handler)(&scan_result_report); } scan_result_handler_ptr.scan_complete = RTW_TRUE; scan_result_report.scan_complete = RTW_TRUE; (*scan_result_handler_ptr.gscan_result_handler)(&scan_result_report); rtw_free(scan_result_handler_ptr.ap_details); rtw_free(scan_result_handler_ptr.pap_details); #if SCAN_USE_SEMAPHORE rtw_up_sema(&scan_result_handler_ptr.scan_semaphore); #else scan_result_handler_ptr.scan_running = 0; #endif wifi_unreg_event_handler(WIFI_EVENT_SCAN_RESULT_REPORT, wifi_scan_each_report_hdl); wifi_unreg_event_handler(WIFI_EVENT_SCAN_DONE, wifi_scan_done_hdl); return; }
static void wifi_connected_hdl( char* buf, int buf_len, int flags, void* userdata) { if((join_user_data!=NULL)&&((join_user_data->network_info.security_type == RTW_SECURITY_OPEN) || (join_user_data->network_info.security_type == RTW_SECURITY_WEP_PSK))){ rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY; rtw_up_sema(&join_user_data->join_sema); }else if((join_user_data!=NULL)&&((join_user_data->network_info.security_type == RTW_SECURITY_WPA2_AES_PSK) )){ rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY; } }
static rtw_result_t wps_scan_result_handler( rtw_scan_handler_result_t* malloced_scan_result ) { internal_wps_scan_handler_arg_t *wps_arg = (internal_wps_scan_handler_arg_t *)malloced_scan_result->user_data; if (malloced_scan_result->scan_complete != RTW_TRUE) { rtw_scan_result_t* record = &malloced_scan_result->ap_details; record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */ process_wps_scan_result(record, malloced_scan_result->user_data); } else { printf("\r\nWPS scan done!\r\n"); rtw_up_sema(&wps_arg->scan_sema); } return RTW_SUCCESS; }
static void wifi_disconn_hdl( char* buf, int buf_len, int flags, void* userdata) { if(join_user_data != NULL){ if(join_user_data->network_info.security_type == RTW_SECURITY_OPEN){ if(rtw_join_status == JOIN_NO_NETWORKS) error_flag = RTW_NONE_NETWORK; }else if(join_user_data->network_info.security_type == RTW_SECURITY_WEP_PSK){ if(rtw_join_status == JOIN_NO_NETWORKS) error_flag = RTW_NONE_NETWORK; else if(rtw_join_status == 0) error_flag = RTW_CONNECT_FAIL; }else if(join_user_data->network_info.security_type == RTW_SECURITY_WPA2_AES_PSK){ if(rtw_join_status ==JOIN_NO_NETWORKS) error_flag = RTW_NONE_NETWORK; else if(rtw_join_status == 0) error_flag = RTW_CONNECT_FAIL; else if(rtw_join_status ==JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY) error_flag = RTW_WRONG_PASSWORD; } }else{ if(error_flag == RTW_NO_ERROR) //wifi_disconn_hdl will be dispatched one more time after join_user_data = NULL add by frankie error_flag = RTW_UNKNOWN; } if(join_user_data != NULL) rtw_up_sema(&join_user_data->join_sema); //printf("\r\nWiFi Disconnect. Error flag is %d.\n", error_flag); }
void Ticker::handler() { insert(event.timestamp + _delay); rtw_up_sema(&this->ticker_thread_sema); //_function.call(); }
static void wifi_handshake_done_hdl( char* buf, int buf_len, int flags, void* userdata) { rtw_join_status = JOIN_COMPLETE | JOIN_SECURITY_COMPLETE | JOIN_ASSOCIATED | JOIN_AUTHENTICATED | JOIN_LINK_READY|JOIN_HANDSHAKE_DONE; if(join_user_data != NULL) rtw_up_sema(&join_user_data->join_sema); }
int wifi_scan_networks(rtw_scan_result_handler_t results_handler, void* user_data) { unsigned int max_ap_size = 64; #if SCAN_USE_SEMAPHORE rtw_bool_t result; if(NULL == scan_result_handler_ptr.scan_semaphore) rtw_init_sema(&scan_result_handler_ptr.scan_semaphore, 1); scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); /* Initialise the semaphore that will prevent simultaneous access - cannot be a mutex, since * we don't want to allow the same thread to start a new scan */ result = (rtw_bool_t)rtw_down_timeout_sema(&scan_result_handler_ptr.scan_semaphore, SCAN_LONGEST_WAIT_TIME); if ( result != RTW_TRUE ) { /* Return error result, but set the semaphore to work the next time */ rtw_up_sema(&scan_result_handler_ptr.scan_semaphore); return RTW_TIMEOUT; } #else if(scan_result_handler_ptr.scan_running){ int count = 100; while(scan_result_handler_ptr.scan_running && count > 0) { rtw_msleep_os(20); count --; } if(count == 0){ printf("\n\r[%d]WiFi: Scan is running. Wait 2s timeout.", rtw_get_current_time()); return RTW_TIMEOUT; } } scan_result_handler_ptr.scan_start_time = rtw_get_current_time(); scan_result_handler_ptr.scan_running = 1; #endif scan_result_handler_ptr.gscan_result_handler = results_handler; scan_result_handler_ptr.max_ap_size = max_ap_size; scan_result_handler_ptr.ap_details = (rtw_scan_result_t*)rtw_zmalloc(max_ap_size*sizeof(rtw_scan_result_t)); if(scan_result_handler_ptr.ap_details == NULL){ goto error_with_result_ptr; } rtw_memset(scan_result_handler_ptr.ap_details, 0, max_ap_size*sizeof(rtw_scan_result_t)); scan_result_handler_ptr.pap_details = (rtw_scan_result_t**)rtw_zmalloc(max_ap_size*sizeof(rtw_scan_result_t*)); if(scan_result_handler_ptr.pap_details == NULL) return RTW_ERROR; rtw_memset(scan_result_handler_ptr.pap_details, 0, max_ap_size); scan_result_handler_ptr.scan_cnt = 0; scan_result_handler_ptr.scan_complete = RTW_FALSE; scan_result_handler_ptr.user_data = user_data; if (wifi_scan( RTW_SCAN_COMMAMD<<4 | RTW_SCAN_TYPE_ACTIVE, RTW_BSS_TYPE_ANY, NULL) != RTW_SUCCESS) { goto error_with_result_ptr; } return RTW_SUCCESS; error_with_result_ptr: rtw_free((u8*)scan_result_handler_ptr.pap_details); scan_result_handler_ptr.pap_details = NULL; return RTW_ERROR; }