コード例 #1
0
void ril_request_deactivate_data_call(RIL_Token t, void *data, int length)
{
	struct ril_gprs_connection *gprs_connection;
	struct ipc_gprs_pdp_context_set context;

	char *cid = ((char **) data)[0];
	int rc;

	gprs_connection = ril_gprs_connection_get_cid(atoi(cid));

	if(!gprs_connection) {
		LOGE("Unable to find GPRS connection, aborting");

		RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
		return;
	}

	gprs_connection->token = t;

	ipc_gprs_pdp_context_setup(&context, gprs_connection->cid, 0, NULL, NULL);

	ipc_gen_phone_res_expect_to_func(reqGetId(t), IPC_GPRS_PDP_CONTEXT,
		ipc_gprs_pdp_context_disable_complete);

	ipc_fmt_send(IPC_GPRS_PDP_CONTEXT, IPC_TYPE_SET,
		(void *) &context, sizeof(struct ipc_gprs_pdp_context_set), reqGetId(t));
}
コード例 #2
0
void ril_request_setup_data_call(RIL_Token t, void *data, int length)
{
	struct ril_gprs_connection *gprs_connection = NULL;
	struct ipc_client_gprs_capabilities gprs_capabilities;
	struct ipc_gprs_port_list port_list;
	struct ipc_client *ipc_client;

	char *username = NULL;
	char *password = NULL;
	char *apn = NULL;

	ipc_client = ((struct ipc_client_object *) ipc_fmt_client->object)->ipc_client;

	apn = ((char **) data)[2];
	username = ((char **) data)[3];
	password = ((char **) data)[4];

	LOGD("Requesting data connection to APN '%s'\n", apn);

	gprs_connection = ril_gprs_connection_add();

	if(!gprs_connection) {
		LOGE("Unable to create GPRS connection, aborting");

		RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
		return;
	}

	gprs_connection->token = t;

	// Create the structs with the apn
	ipc_gprs_define_pdp_context_setup(&(gprs_connection->define_context),
		gprs_connection->cid, 1, apn);

	// Create the structs with the username/password tuple
	ipc_gprs_pdp_context_setup(&(gprs_connection->context),
		gprs_connection->cid, 1, username, password);

	ipc_client_gprs_get_capabilities(ipc_client, &gprs_capabilities);

	// If the device has the capability, deal with port list
	if(gprs_capabilities.port_list) {
		ipc_gprs_port_list_setup(&port_list);

		ipc_gen_phone_res_expect_to_func(reqGetId(t), IPC_GPRS_PORT_LIST,
			ipc_gprs_port_list_complete);

		ipc_fmt_send(IPC_GPRS_PORT_LIST, IPC_TYPE_SET,
			(void *) &port_list, sizeof(struct ipc_gprs_port_list), reqGetId(t));
	} else {
		ipc_gen_phone_res_expect_to_func(reqGetId(t), IPC_GPRS_DEFINE_PDP_CONTEXT,
			ipc_gprs_define_pdp_context_complete);

		ipc_fmt_send(IPC_GPRS_DEFINE_PDP_CONTEXT, IPC_TYPE_SET,
			(void *) &(gprs_connection->define_context),
				sizeof(struct ipc_gprs_define_pdp_context), reqGetId(t));
	}
}
コード例 #3
0
ファイル: net.c プロジェクト: AndroidForWave/bada-modemril
void ril_request_set_preffered_network_type(RIL_Token t, void *data, size_t datalen)
{
	int ril_mode = *(int*)data;
	unsigned char ipc_mode = ril2ipc_modesel(ril_mode);

	ipc_send(IPC_NET_MODE_SEL, IPC_TYPE_SET, &ipc_mode, sizeof(ipc_mode), reqGetId(t));
}
コード例 #4
0
ファイル: gprs.c プロジェクト: AndroidForWave/bada-modemril
void ril_request_setup_data_call(RIL_Token t, void *data, int length)
{
	char *username = NULL;
	char *password = NULL;
	char *apn = NULL;

	struct ipc_gprs_define_pdp_context setup_apn_message;
	struct ipc_gprs_pdp_context activate_message;

	/* get the apn, username and password */
	apn = ((char **) data)[2];
	username = ((char **) data)[3];

	if(username != NULL) {
		if(strlen(username) < 2)
			username = "******";
	} else {
		username = "******";
	}

	password = ((char **) data)[4];

	if(password != NULL) {
		if(strlen(password) < 2)
			password = "******";
	} else {
		password = "******";
	}

	LOGD("Requesting data connection to APN '%s'\n", apn);

	/* create the structs with the apn */
	ipc_gprs_define_pdp_context_setup(&setup_apn_message, apn);

	/* create the structs with the username/password tuple */
	ipc_gprs_pdp_context_setup(&(ril_state.gprs_context), username, password);

	/* send the struct to the modem */
	ipc_send(IPC_GPRS_DEFINE_PDP_CONTEXT, IPC_TYPE_SET, 
			(void *) &setup_apn_message, sizeof(struct ipc_gprs_define_pdp_context), reqGetId(t));

	ipc_gen_phone_res_expect_to_func(reqGetId(t), IPC_GPRS_DEFINE_PDP_CONTEXT,
		ipc_gprs_pdp_context_complete);
}
コード例 #5
0
void ril_request_set_mute(RIL_Token t, void *data, size_t datalen)
{
	unsigned char mute_data = ((int *)data)[0] > 0 ? 1 : 0;

	LOGD("Mute data is %d\n", mute_data);

	ipc_gen_phone_res_expect_to_complete(reqGetId(t), IPC_SND_MIC_MUTE_CTRL);

	ipc_fmt_send(IPC_SND_MIC_MUTE_CTRL, IPC_TYPE_SET, (void *) &mute_data, sizeof(mute_data), reqGetId(t));
}
コード例 #6
0
ファイル: gprs.c プロジェクト: AndroidForWave/bada-modemril
void ril_request_deactivate_data_call(RIL_Token t, void *data, int length)
{
	struct ipc_gprs_pdp_context deactivate_message;
	memset(&deactivate_message, 0, sizeof(deactivate_message));
	deactivate_message.unk0[1]=1;

	/* send the struct to the modem */
	ipc_send(IPC_GPRS_PDP_CONTEXT, IPC_TYPE_SET, 
			(void *) &deactivate_message, sizeof(struct ipc_gprs_pdp_context), reqGetId(t));

	ril_request_complete(t, RIL_E_SUCCESS, NULL, 0);
}
コード例 #7
0
ファイル: sat.c プロジェクト: KB-JetDroid/bada-modemril
/**
 * In: RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND
 *   Requests to send a SAT/USAT envelope command to SIM.
 *   The SAT/USAT envelope command refers to 3GPP TS 11.14 and 3GPP TS 31.111
 *
 * Out: IPC_SAT_ENVELOPE_CMD EXEC
 */
void requestSatSendEnvelopeCommand(RIL_Token t, void *data, size_t datalen)
{
	unsigned char buf[264];
	int len = (strlen(data) / 2);

	if(len > 255) {
		ALOGE("%s: data exceeds maximum length", __FUNCTION__);
		ril_request_complete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
	}

	memset(buf, 0, sizeof(buf));

	buf[0] = len;
	hex2bin(data, strlen(data), &buf[1]);

	ipc_send(IPC_SAT_ENVELOPE_CMD, IPC_TYPE_EXEC, buf, sizeof(buf), reqGetId(t));
}
コード例 #8
0
ファイル: sat.c プロジェクト: KB-JetDroid/bada-modemril
/**
 * In: RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE
 *   Requests to send a terminal response to SIM for a received
 *   proactive command
 *
 * Out: IPC_SAT_PROACTIVE_CMD GET
 */
void requestSatSendTerminalResponse(RIL_Token t, void *data, size_t datalen)
{
	unsigned char buf[264];
	int len = (strlen(data) / 2);

	if(len > 255) {
		ALOGE("%s: data exceeds maximum length", __FUNCTION__);
		ril_request_complete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
	}

	memset(buf, 0, sizeof(buf));

	buf[0] = len;
	hex2bin(data, strlen(data), &buf[1]);

	ipc_send(IPC_SAT_PROACTIVE_CMD, IPC_TYPE_GET, buf, sizeof(buf), reqGetId(t));

	ril_request_complete(t, RIL_E_SUCCESS, buf, sizeof(char*));
}
コード例 #9
0
ファイル: net.c プロジェクト: AndroidForWave/bada-modemril
/**
 * In: RIL_REQUEST_OPERATOR
 *   Request Operator name
 *
 * Out: IPC_NET_CURRENT_PLMN
 *   return modem UNSOL data if available
 *   request IPC_NET_CURRENT_PLMN if no data is there
 *   return RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW if not registered
 */
void ril_request_operator(RIL_Token t)
{
	char *response[3];
	int i;

	// IPC_NET_REGISTRATION_STATE_ROAMING is the biggest valid value 
	if(ril_state.netinfo.reg_state == IPC_NET_REGISTRATION_STATE_NONE ||
	ril_state.netinfo.reg_state == IPC_NET_REGISTRATION_STATE_SEARCHING ||
	ril_state.netinfo.reg_state == IPC_NET_REGISTRATION_STATE_UNKNOWN ||
	ril_state.netinfo.reg_state > IPC_NET_REGISTRATION_STATE_ROAMING) {
		ril_request_complete(t, RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW, NULL, 0);

		ril_state.tokens.operator = (RIL_Token) 0x00;
		return;
	}

	if(ril_state.tokens.operator == RIL_TOKEN_NET_DATA_WAITING) {
		LOGD("Got RILJ request for UNSOL data");

		/* Send back the data we got UNSOL */
		ril_plmn_string(&(ril_state.plmndata), response);

		ril_request_complete(t, RIL_E_SUCCESS, response, sizeof(response));

		for(i = 0; i < sizeof(response) / sizeof(char *) ; i++) {
			if(response[i] != NULL)
				free(response[i]);
		}

		ril_state.tokens.operator = (RIL_Token) 0x00;
	} else if(ril_state.tokens.operator == (RIL_Token) 0x00) {
		LOGD("Got RILJ request for SOL data");
		/* Request data to the modem */
		ril_state.tokens.operator = t;

		ipc_send_get(IPC_NET_CURRENT_PLMN, reqGetId(t));
	} else {
		LOGE("Another request is going on, reporting failure");
		ril_request_complete(t, RIL_E_GENERIC_FAILURE, response, sizeof(response));
	}

	ril_tokens_net_state_dump();
}
コード例 #10
0
void ril_request_data_call_list(RIL_Token t)
{
	ipc_fmt_send_get(IPC_GPRS_PDP_CONTEXT, reqGetId(t));
}
コード例 #11
0
ファイル: net.c プロジェクト: AndroidForWave/bada-modemril
void ril_request_get_preferred_network_type(RIL_Token t)
{
	ipc_send_get(IPC_NET_MODE_SEL, reqGetId(t));
}
コード例 #12
0
ファイル: net.c プロジェクト: AndroidForWave/bada-modemril
/**
 * In: RIL_REQUEST_QUERY_AVAILABLE_NETWORKS
 * 
 * Out: IPC_NET_PLMN_LIST
 */
void ril_request_query_available_networks(RIL_Token t)
{
	ipc_send_get(IPC_NET_PLMN_LIST, reqGetId(t));
}
コード例 #13
0
ファイル: net.c プロジェクト: AndroidForWave/bada-modemril
/**
 * In: RIL_REQUEST_GPRS_REGISTRATION_STATE
 *   Request GPRS reg state
 *
 * Out: IPC_NET_REGIST
 *   return modem UNSOL data if available
 *   request IPC_NET_REGIST if no data is there
 */
void ril_request_gprs_registration_state(RIL_Token t)
{
	struct ipc_net_regist_get regist_req;
	char *response[4];
	int i;

	if(ril_state.tokens.gprs_registration_state == RIL_TOKEN_NET_DATA_WAITING) {
		LOGD("Got RILJ request for UNSOL data");

		/* Send back the data we got UNSOL */
		ipc2ril_gprs_reg_state_resp(&(ril_state.gprs_netinfo), response);

		ril_request_complete(t, RIL_E_SUCCESS, response, sizeof(response));

		for(i = 0; i < sizeof(response) / sizeof(char *) ; i++) {
			if(response[i] != NULL)
				free(response[i]);
		}

		ril_state.tokens.gprs_registration_state = (RIL_Token) 0x00;
	} else if(ril_state.tokens.gprs_registration_state == (RIL_Token) 0x00) {
		LOGD("Got RILJ request for SOL data");

		/* Request data to the modem */
		ril_state.tokens.gprs_registration_state = t;

		ipc_net_regist_get(&regist_req, IPC_NET_SERVICE_DOMAIN_GPRS);
		ipc_send(IPC_NET_REGIST, IPC_TYPE_GET, (void *)&regist_req, sizeof(struct ipc_net_regist_get), reqGetId(t));
	} else {
		LOGE("Another request is going on, reporting failure");
		ril_request_complete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
	}

	ril_tokens_net_state_dump();
}