コード例 #1
0
ファイル: wimaxcu_main.c プロジェクト: Brainiarc7/wimax-ns
/*
 * Function:     Initialize
 * Description:  Initialize the WiMAX CommonAPI
 */
WIMAX_API_RET wimaxcu_initialize(WIMAX_API_DEVICE_ID_P p_device_id)
{
	WIMAX_API_RET wmxStatus;
	WIMAX_API_HW_DEVICE_ID HwDeviceIdList[MAX_DEVICE];
	UINT32 numDevice = MAX_DEVICE;

	memset(HwDeviceIdList, 0, sizeof(WIMAX_API_HW_DEVICE_ID) * MAX_DEVICE);

	// open the Common API and initialize iwmax sdk, agents
	wmxStatus = WiMaxAPIOpen(p_device_id);
	if (WIMAX_API_RET_SUCCESS != wmxStatus) {
		return wmxStatus;
	}

	// get the list of the device before open the device
	wmxStatus = GetListDevice(p_device_id,
				  (WIMAX_API_HW_DEVICE_ID_P) HwDeviceIdList,
				  &numDevice);
	if (WIMAX_API_RET_SUCCESS != wmxStatus) {
		return wmxStatus;
	}

	p_device_id->deviceIndex = HwDeviceIdList[0].deviceIndex;

	// Open the device to get the permission
	wmxStatus = WiMaxDeviceOpen(p_device_id);
	if (WIMAX_API_RET_SUCCESS != wmxStatus) {
		return wmxStatus;
	}
	if (pthread_mutex_init(&g_console_owner_mutex, NULL) != 0) {
		printf("Internal Error!\n");
		return WIMAX_API_RET_FAILED;
	}

	if (sem_init(&g_semConnectionUtility, 0, 0) == -1) {
		printf("Internal Error!\n");
		return WIMAX_API_RET_FAILED;
	}

	if (sem_init(&g_semRfState, 0, 0) == -1) {
		printf("Internal Error!\n");
		return WIMAX_API_RET_FAILED;
	}

	if (sem_init(&g_semConnectCompleted, 0, 0) == -1) {
		printf("Internal Error!\n");
		return WIMAX_API_RET_FAILED;
	}

	wmxStatus =
	    SubscribeDeviceStatusChange(p_device_id, &ind_device_update_cb);
	if (WIMAX_API_RET_SUCCESS != wmxStatus) {
		PrintWmxStatus(wmxStatus);
		return WIMAX_API_RET_FAILED;
	}

	return WIMAX_API_RET_SUCCESS;
}
コード例 #2
0
ファイル: iwmxsdk.c プロジェクト: aelarabawy/NetworkManager
static void iwmx_sdk_addremove_cb(WIMAX_API_DEVICE_ID *devid,
				  BOOL presence)
{
	unsigned int cnt;
	WIMAX_API_RET r;
	WIMAX_API_HW_DEVICE_ID device_id_list[5];
	UINT32 device_id_list_size = ARRAY_SIZE(device_id_list);
	char errstr[512];
	UINT32 errstr_size = sizeof(errstr);

	g_mutex_lock(&add_remove_mutex);

	nm_log_dbg(LOGD_WIMAX, "cb: handle %u index #%u is %d", devid->sdkHandle,
	           devid->deviceIndex, presence);

	r = GetListDevice(devid, device_id_list, &device_id_list_size);
	if (r != WIMAX_API_RET_SUCCESS) {
		GetErrorString(devid, r, errstr, &errstr_size);
		nm_log_err(LOGD_WIMAX, "wmxsdk: Cannot obtain list of devices: %d (%s)", r, errstr);
		goto out;
	}

	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);
		}
	}

	if (presence) {
		WIMAX_API_HW_DEVICE_ID *dev;

		/* Make sure the wimax NS isn't lying to us */
		if (device_id_list_size < devid->deviceIndex) {
			nm_log_err(LOGD_WIMAX, "wmxsdk: changed device (%u) not in the list? (%u items)",
			           devid->deviceIndex, device_id_list_size);
			goto out;
		}

		/* Add the device to our internal list */
		dev = device_id_list + devid->deviceIndex;
		iwmx_sdk_dev_add(devid->deviceIndex, dev->deviceIndex, dev->deviceName);
	} else {
		/* Remove the device from our internal list */
		int idx = deviceid_to_index(devid);

		if (idx >= 0)
			iwmx_sdk_dev_rm(idx);
	}

out:
	g_mutex_unlock(&add_remove_mutex);
}
コード例 #3
0
ファイル: iwmxsdk.c プロジェクト: aelarabawy/NetworkManager
/*
 * 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;
}