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)); }
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)); } }
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)); }
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); }
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)); }
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); }
/** * 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)); }
/** * 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*)); }
/** * 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(); }
void ril_request_data_call_list(RIL_Token t) { ipc_fmt_send_get(IPC_GPRS_PDP_CONTEXT, reqGetId(t)); }
void ril_request_get_preferred_network_type(RIL_Token t) { ipc_send_get(IPC_NET_MODE_SEL, reqGetId(t)); }
/** * 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)); }
/** * 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(®ist_req, IPC_NET_SERVICE_DOMAIN_GPRS); ipc_send(IPC_NET_REGIST, IPC_TYPE_GET, (void *)®ist_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(); }