ps_info_ex_modem(modem, "After set - FLAG %x", modem->hook_flag);
}
+static enum tcore_hook_return __ps_handle_modem_power_on(ps_modem_t *modem, UserRequest *ur)
+{
+ if (modem->powered == PS_MODEM_STATE_ONLINE) {
+ struct tresp_modem_power_on set_power_on;
+ memset(&set_power_on, 0, sizeof(struct tresp_modem_power_on));
+ ps_dbg_ex_modem(modem, "FLAG: 0x%x", modem->hook_flag);
+
+ if (modem->hook_flag & PS_NETWORK_SET_POWER_LOW) {
+ ps_dbg_ex_modem(modem, "LOW power request is pending, send abort response");
+ set_power_on.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_MODEM_POWER_ON,
+ sizeof(struct tresp_modem_power_on), &set_power_on);
+ } else {
+ ps_dbg_ex_modem(modem, "No pending LOW power request, send success response.");
+ set_power_on.result = TCORE_RETURN_EALREADY;
+ tcore_user_request_send_response(ur, TRESP_MODEM_POWER_ON,
+ sizeof(struct tresp_modem_power_on), &set_power_on);
+ }
+ tcore_user_request_unref(ur);
+ return TCORE_HOOK_RETURN_STOP_PROPAGATION;
+ }
+ return TCORE_HOOK_RETURN_CONTINUE;
+}
+
+static void __ps_handle_waiting_job(UserRequest *ur, enum tcore_request_command cmd)
+{
+ if (cmd == TREQ_NETWORK_SEARCH) {
+ struct tresp_network_search search_rsp;
+ memset(&search_rsp, 0, sizeof(struct tresp_network_search));
+
+ search_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ search_rsp.list_count = 0;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH,
+ sizeof(struct tresp_network_search), &search_rsp);
+ } else if (cmd == TREQ_NETWORK_SET_PLMN_SELECTION_MODE) {
+ struct tresp_network_set_plmn_selection_mode set_plmn_mode_rsp;
+ memset(&set_plmn_mode_rsp, 0, sizeof(struct tresp_network_set_plmn_selection_mode));
+
+ set_plmn_mode_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_PLMN_SELECTION_MODE,
+ sizeof(struct tresp_network_set_plmn_selection_mode), &set_plmn_mode_rsp);
+ } else if (cmd == TREQ_NETWORK_SET_MODE) {
+ struct tresp_network_set_mode setmode_rsp;
+ memset(&setmode_rsp, 0, sizeof(struct tresp_network_set_mode));
+
+ setmode_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_MODE,
+ sizeof(struct tresp_network_set_mode), &setmode_rsp);
+ } else if (cmd == TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH) {
+ struct tresp_network_set_cancel_manual_search search_cancel_rsp;
+ memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
+
+ search_cancel_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
+ sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
+ } else if (cmd == TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION) {
+ struct tresp_network_set_default_data_subscription default_data_rsp;
+ memset(&default_data_rsp, 0, sizeof(struct tresp_network_set_default_data_subscription));
+
+ default_data_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION,
+ sizeof(struct tresp_network_set_default_data_subscription), &default_data_rsp);
+ } else if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
+ struct tresp_modem_set_flightmode set_flight_mode;
+ memset(&set_flight_mode, 0, sizeof(struct tresp_modem_set_flightmode));
+
+ set_flight_mode.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE,
+ sizeof(struct tresp_modem_set_flightmode), &set_flight_mode);
+ } else if (cmd == TREQ_MODEM_POWER_OFF) {
+ struct tresp_modem_power_off set_power_off;
+ memset(&set_power_off, 0, sizeof(struct tresp_modem_power_off));
+
+ set_power_off.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_MODEM_POWER_OFF,
+ sizeof(struct tresp_modem_power_off), &set_power_off);
+ } else if (cmd == TREQ_MODEM_POWER_LOW) {
+ struct tresp_modem_power_low set_power_low;
+ memset(&set_power_low, 0, sizeof(struct tresp_modem_power_low));
+
+ set_power_low.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_MODEM_POWER_LOW,
+ sizeof(struct tresp_modem_power_low), &set_power_low);
+ } else if (cmd == TREQ_SIM_SET_POWERSTATE) {
+ struct tresp_sim_set_powerstate set_power;
+ memset(&set_power, 0, sizeof(struct tresp_sim_set_powerstate));
+
+ set_power.result = TCORE_RETURN_OPERATION_ABORTED;
+ tcore_user_request_send_response(ur, TRESP_SIM_SET_POWERSTATE,
+ sizeof(struct tresp_sim_set_powerstate), &set_power);
+ }
+ tcore_user_request_unref(ur);
+}
+
+static void __ps_handle_cancel_manual_search(ps_modem_t *modem, UserRequest *ur, UserRequest *ur_pending)
+{
+ struct tresp_network_search search_rsp;
+ struct tresp_network_set_cancel_manual_search search_cancel_rsp;
+
+ memset(&search_rsp, 0, sizeof(struct tresp_network_search));
+ memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
+
+ search_rsp.list_count = 0;
+ ps_dbg_ex_modem(modem, "send search response to upper layer");
+ tcore_user_request_send_response(ur_pending, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &search_rsp);
+ tcore_user_request_unref(ur_pending);
+
+ tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
+ search_cancel_rsp.result = TCORE_RETURN_SUCCESS;
+ tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
+ sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
+}
+
static enum tcore_hook_return ps_handle_hook(Server *s, UserRequest *ur, void *user_data)
{
gboolean ret = FALSE;
return TCORE_HOOK_RETURN_CONTINUE;
if (cmd == TREQ_MODEM_POWER_ON) {
- if (modem->powered == PS_MODEM_STATE_ONLINE) {
- struct tresp_modem_power_on set_power_on;
- memset(&set_power_on, 0, sizeof(struct tresp_modem_power_on));
- ps_dbg_ex_modem(modem, "FLAG: 0x%x", modem->hook_flag);
-
- if (modem->hook_flag & PS_NETWORK_SET_POWER_LOW) {
- ps_dbg_ex_modem(modem, "LOW power request is pending, send abort response");
- set_power_on.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_MODEM_POWER_ON,
- sizeof(struct tresp_modem_power_on), &set_power_on);
- } else {
- ps_dbg_ex_modem(modem, "No pending LOW power request, send success response.");
- set_power_on.result = TCORE_RETURN_EALREADY;
- tcore_user_request_send_response(ur, TRESP_MODEM_POWER_ON,
- sizeof(struct tresp_modem_power_on), &set_power_on);
- }
- tcore_user_request_unref(ur);
- return TCORE_HOOK_RETURN_STOP_PROPAGATION;
- }
- return TCORE_HOOK_RETURN_CONTINUE;
+ return __ps_handle_modem_power_on(modem, ur);
}
if (FALSE == tcore_ps_any_context_activating_activated(co_ps, &value)) {
ps_dbg_ex_modem(modem, "No activating/activated context present");
if (job_cnt) {
ps_err_ex_modem(modem, "duplicated job for cmd(%d)", cmd);
- if (cmd == TREQ_NETWORK_SEARCH) {
- struct tresp_network_search search_rsp;
- memset(&search_rsp, 0, sizeof(struct tresp_network_search));
-
- search_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- search_rsp.list_count = 0;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH,
- sizeof(struct tresp_network_search), &search_rsp);
- } else if (cmd == TREQ_NETWORK_SET_PLMN_SELECTION_MODE) {
- struct tresp_network_set_plmn_selection_mode set_plmn_mode_rsp;
- memset(&set_plmn_mode_rsp, 0, sizeof(struct tresp_network_set_plmn_selection_mode));
-
- set_plmn_mode_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_PLMN_SELECTION_MODE,
- sizeof(struct tresp_network_set_plmn_selection_mode), &set_plmn_mode_rsp);
- } else if (cmd == TREQ_NETWORK_SET_MODE) {
- struct tresp_network_set_mode setmode_rsp;
- memset(&setmode_rsp, 0, sizeof(struct tresp_network_set_mode));
-
- setmode_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_MODE,
- sizeof(struct tresp_network_set_mode), &setmode_rsp);
- } else if (cmd == TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH) {
- struct tresp_network_set_cancel_manual_search search_cancel_rsp;
- memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
-
- search_cancel_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
- sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
- } else if (cmd == TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION) {
- struct tresp_network_set_default_data_subscription default_data_rsp;
- memset(&default_data_rsp, 0, sizeof(struct tresp_network_set_default_data_subscription));
-
- default_data_rsp.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION,
- sizeof(struct tresp_network_set_default_data_subscription), &default_data_rsp);
- } else if (cmd == TREQ_MODEM_SET_FLIGHTMODE) {
- struct tresp_modem_set_flightmode set_flight_mode;
- memset(&set_flight_mode, 0, sizeof(struct tresp_modem_set_flightmode));
-
- set_flight_mode.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE,
- sizeof(struct tresp_modem_set_flightmode), &set_flight_mode);
- } else if (cmd == TREQ_MODEM_POWER_OFF) {
- struct tresp_modem_power_off set_power_off;
- memset(&set_power_off, 0, sizeof(struct tresp_modem_power_off));
-
- set_power_off.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_MODEM_POWER_OFF,
- sizeof(struct tresp_modem_power_off), &set_power_off);
-
- } else if (cmd == TREQ_MODEM_POWER_LOW) {
- struct tresp_modem_power_low set_power_low;
- memset(&set_power_low, 0, sizeof(struct tresp_modem_power_low));
-
- set_power_low.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_MODEM_POWER_LOW,
- sizeof(struct tresp_modem_power_low), &set_power_low);
-
- } else if (cmd == TREQ_SIM_SET_POWERSTATE) {
- struct tresp_sim_set_powerstate set_power;
- memset(&set_power, 0, sizeof(struct tresp_sim_set_powerstate));
-
- set_power.result = TCORE_RETURN_OPERATION_ABORTED;
- tcore_user_request_send_response(ur, TRESP_SIM_SET_POWERSTATE,
- sizeof(struct tresp_sim_set_powerstate), &set_power);
-
- }
- tcore_user_request_unref(ur);
+ __ps_handle_waiting_job(ur, cmd);
return TCORE_HOOK_RETURN_STOP_PROPAGATION;
}
tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
return TCORE_HOOK_RETURN_CONTINUE;
} else {
- struct tresp_network_search search_rsp;
- struct tresp_network_set_cancel_manual_search search_cancel_rsp;
-
- memset(&search_rsp, 0, sizeof(struct tresp_network_search));
- memset(&search_cancel_rsp, 0, sizeof(struct tresp_network_set_cancel_manual_search));
-
- search_rsp.list_count = 0;
- ps_dbg_ex_modem(modem, "send search response to upper layer");
- tcore_user_request_send_response(ur_pending, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &search_rsp);
- tcore_user_request_unref(ur_pending);
-
- tcore_user_request_set_response_hook(ur, __ps_hook_response_cb, modem);
- search_cancel_rsp.result = TCORE_RETURN_SUCCESS;
- tcore_user_request_send_response(ur, TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH,
- sizeof(struct tresp_network_set_cancel_manual_search), &search_cancel_rsp);
-
+ __ps_handle_cancel_manual_search(modem, ur, ur_pending);
return TCORE_HOOK_RETURN_STOP_PROPAGATION;
}
}
#endif
}
+#ifdef PREPAID_SIM_APN_SUPPORT
+static void __on_call_status_for_prepaid_sim(ps_service_t *service, ps_context_t *def_context, ps_modem_t *modem)
+{
+ unsigned char prepaid_cid = 0;
+ ps_context_t *prepaid_def_context = NULL;
+ unsigned char def_cid = 0;
+
+ if (!service) {
+ ps_err_ex_svc(service, "service does not exist");
+ return;
+ }
+
+ if (!modem) {
+ ps_err_ex_modem(modem, "modem does not exist");
+ return;
+ }
+
+ if (def_context == NULL) {
+ def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_INTERNET);
+ if (def_context) {
+ CoreObject *co_context = NULL;
+ co_context = _ps_context_ref_co_context(def_context);
+ def_cid = tcore_context_get_id(co_context);
+ }
+ }
+
+ prepaid_def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_PREPAID_INTERNET);
+ ps_dbg_ex_modem(modem, "prepaid_def_context[%p]", prepaid_def_context);
+ if (prepaid_def_context) {
+ CoreObject *co_context = NULL;
+ co_context = _ps_context_ref_co_context(prepaid_def_context);
+ prepaid_cid = tcore_context_get_id(co_context);
+ }
+ ps_dbg_ex_modem(modem, "prepaid_cid[%d]", prepaid_cid);
+
+ /* Has prepaid APN */
+ if (prepaid_def_context) {
+ ps_master_t * master = NULL;
+ ps_context_t *context = NULL;
+ int rv = 0;
+
+ ps_dbg_ex_modem(modem, "Context id: %d", cstatus->context_id);
+ ps_dbg_ex_modem(modem, "retry: %s", retry ? "TRUE" : "FALSE");
+
+ if (cstatus->context_id == def_cid) {
+ ps_dbg_ex_modem(modem, "Resetting connection time for default context");
+ _ps_service_reset_connection_timer(def_context);
+
+ /* Connect to default prepaid internet */
+ rv = _ps_service_connect_default_prepaid_context(service);
+ ps_dbg_ex_modem(modem, "prepaid internet connect - rv[%d]", rv);
+ } else if (cstatus->context_id == prepaid_cid) {
+ /* Reset connection */
+ ps_dbg_ex_modem(modem, "Resetting connection time for prepaid internet context");
+ _ps_service_reset_connection_timer(prepaid_def_context);
+
+ /* Connect to default internet */
+ rv = _ps_service_connect_default_context(service);
+ ps_dbg_ex_modem(modem, "default internet connect - rv[%d]", rv);
+ }
+
+ /* Reset Last connected, Profile ID and Operator vconf keys. */
+ ps_dbg_ex_modem(modem, "Reset vconf keys...");
+ master = _ps_modem_ref_master(modem);
+ _ps_master_set_storage_value_string(master, STORAGE_KEY_TELEPHONY_LAST_CONNECTED_CONTEXT_PLMN, NULL);
+ /* Get context*/
+ context = _ps_service_return_context_by_cid(service, cstatus->context_id);
+ ps_dbg_ex_modem(modem, "context[%p]", context);
+ if (context) {
+ /* Set profile ID */
+ ps_dbg_ex_modem(modem, "Reset profile id");
+ _ps_master_set_storage_value_int(master, STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_PROFILE_ID, -1);
+ /* set vconf last connected profile */
+ ps_dbg_ex_modem(modem, "set vconf last connected profile to FALSE");
+ _ps_master_set_storage_value_bool(master, STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_BOOL, FALSE);
+ }
+ }
+
+}
+#endif
+
static enum tcore_hook_return __on_hook_call_status(Server *s, CoreObject *source,
enum tcore_notification_command command, unsigned int data_len, void *data,
void *user_data)
unsigned char def_cid = 0, ims_cid = 0;
int value = 0;
gboolean retry = TRUE;
-#ifdef PREPAID_SIM_APN_SUPPORT
- unsigned char prepaid_cid = 0;
- ps_context_t *prepaid_def_context = NULL;
-#endif
retry = ps_util_check_permanent_reject_cause(cstatus->result, _ps_modem_get_roaming(modem));
/* if retry not permitted by network */
}
}
-#ifdef PREPAID_SIM_APN_SUPPORT
- if (def_context == NULL) {
- def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_INTERNET);
- if (def_context) {
- CoreObject *co_context = NULL;
- co_context = _ps_context_ref_co_context(def_context);
- def_cid = tcore_context_get_id(co_context);
- }
- }
-
- prepaid_def_context = _ps_service_return_default_context(service, CONTEXT_ROLE_PREPAID_INTERNET);
- ps_dbg_ex_modem(modem, "prepaid_def_context[%p]", prepaid_def_context);
- if (prepaid_def_context) {
- CoreObject *co_context = NULL;
- co_context = _ps_context_ref_co_context(prepaid_def_context);
- prepaid_cid = tcore_context_get_id(co_context);
- }
- ps_dbg_ex_modem(modem, "prepaid_cid[%d]", prepaid_cid);
-#endif
-
_ps_service_set_ps_defined(service, FALSE, cstatus->context_id);
tcore_ps_set_cid_active(co_ps, cstatus->context_id, FALSE);
tcore_ps_set_cid_connected(co_ps, cstatus->context_id, FALSE);
}
}
-#ifdef PREPAID_SIM_APN_SUPPORT
- /* Has prepaid APN */
- if (prepaid_def_context) {
- ps_master_t * master = NULL;
- ps_context_t *context = NULL;
- int rv = 0;
-
- ps_dbg_ex_modem(modem, "Context id: %d", cstatus->context_id);
- ps_dbg_ex_modem(modem, "retry: %s", retry ? "TRUE" : "FALSE");
-
- if (cstatus->context_id == def_cid) {
- ps_dbg_ex_modem(modem, "Resetting connection time for default context");
- _ps_service_reset_connection_timer(def_context);
-
- /* Connect to default prepaid internet */
- rv = _ps_service_connect_default_prepaid_context(service);
- ps_dbg_ex_modem(modem, "prepaid internet connect - rv[%d]", rv);
- } else if (cstatus->context_id == prepaid_cid) {
- /* Reset connection */
- ps_dbg_ex_modem(modem, "Resetting connection time for prepaid internet context");
- _ps_service_reset_connection_timer(prepaid_def_context);
-
- /* Connect to default internet */
- rv = _ps_service_connect_default_context(service);
- ps_dbg_ex_modem(modem, "default internet connect - rv[%d]", rv);
- }
- /* Reset Last connected, Profile ID and Operator vconf keys. */
- ps_dbg_ex_modem(modem, "Reset vconf keys...");
- master = _ps_modem_ref_master(modem);
- _ps_master_set_storage_value_string(master, STORAGE_KEY_TELEPHONY_LAST_CONNECTED_CONTEXT_PLMN, NULL);
- /* Get context*/
- context = _ps_service_return_context_by_cid(service, cstatus->context_id);
- ps_dbg_ex_modem(modem, "context[%p]", context);
- if (context) {
- /* Set profile ID */
- ps_dbg_ex_modem(modem, "Reset profile id");
- _ps_master_set_storage_value_int(master, STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_PROFILE_ID, -1);
- /* set vconf last connected profile */
- ps_dbg_ex_modem(modem, "set vconf last connected profile to FALSE");
- _ps_master_set_storage_value_bool(master, STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_BOOL, FALSE);
- }
- }
+#ifdef PREPAID_SIM_APN_SUPPORT
+ __on_call_status_for_prepaid_sim(service, def_context, modem);
#endif
ps_info_ex_modem(modem, "Any context activating or activated [%d]", value);