/* * Initialize the WiMAX API, register with it, setup callbacks for * device coming up / dissapearing */ int iwmx_sdk_api_init(void) { int result; unsigned int cnt; WIMAX_API_RET r; char errstr[512]; UINT32 errstr_size = sizeof(errstr); WIMAX_API_HW_DEVICE_ID device_id_list[5]; UINT32 device_id_list_size = ARRAY_SIZE(device_id_list); memset(&g_api, 0, sizeof(g_api)); g_api.privilege = WIMAX_API_PRIVILEGE_READ_WRITE; result = -EIO; r = WiMaxAPIOpen(&g_api); if (r != WIMAX_API_RET_SUCCESS) { GetErrorString(&g_api, r, errstr, &errstr_size); nm_log_err(LOGD_WIMAX, "wmxsdk: WiMaxAPIOpen failed with %d (%s)", r, errstr); goto error_wimaxapiopen; } r = SubscribeDeviceInsertRemove(&g_api, iwmx_sdk_addremove_cb); if (r != WIMAX_API_RET_SUCCESS) { GetErrorString(&g_api, r, errstr, &errstr_size); nm_log_err(LOGD_WIMAX, "wmxsdk: insert/remove subscribe failed with %d (%s)", r, errstr); goto error_close; } r = GetListDevice(&g_api, device_id_list, &device_id_list_size); if (r != WIMAX_API_RET_SUCCESS) { GetErrorString(&g_api, r, errstr, &errstr_size); nm_log_err(LOGD_WIMAX, "wmxsdk: Cannot obtain list of devices: %d (%s)", r, errstr); goto error_close; } if (device_id_list_size < g_api.deviceIndex) { nm_log_err(LOGD_WIMAX, "wmxsdk: changed device (%u) not in the list? (%u items)", g_api.deviceIndex, device_id_list_size); } if (device_id_list_size == 0) { nm_log_dbg(LOGD_WIMAX, "No WiMAX devices reported"); } else { for (cnt = 0; cnt < device_id_list_size; cnt++) { WIMAX_API_HW_DEVICE_ID *dev = device_id_list + cnt; nm_log_dbg(LOGD_WIMAX, "#%u index #%u device %s", cnt, dev->deviceIndex, dev->deviceName); iwmx_sdk_dev_add(cnt, dev->deviceIndex, dev->deviceName); } } return 0; error_close: WiMaxAPIClose(&g_api); error_wimaxapiopen: return result; }
void iwmx_sdk_api_exit(void) { WIMAX_API_RET r; char errstr[512]; UINT32 errstr_size = sizeof(errstr); r = WiMaxAPIClose(&g_api); if (r != WIMAX_API_RET_SUCCESS) { GetErrorString(&g_api, r, errstr, &errstr_size); nm_log_err(LOGD_WIMAX, "wmxsdk: WiMaxAPIClose failed with %d (%s)", r, errstr); } return; }
/* * Function: Finalize * Description: Finalize the WiMAX CommonAPI */ void wimaxcu_finalize(WIMAX_API_DEVICE_ID_P p_device_id) { UnsubscribeDeviceStatusChange(p_device_id); WiMaxDeviceClose(p_device_id); WiMaxAPIClose(p_device_id); // Let all the call backs get closed before destroying sem sem_destroy(&g_semConnectionUtility); sem_destroy(&g_semRfState); sem_destroy(&g_semConnectCompleted); pthread_mutex_destroy(&g_console_owner_mutex); }