#include <hal.h>
#include <core_object.h>
#include <plugin.h>
+#include <user_request.h>
#include <queue.h>
#include <co_network.h>
#include <co_ps.h>
}
}
-static void nwk_prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char *prefix, enum tcore_at_command_type at_cmd_type, UserRequest *ur, TcorePendingResponseCallback callback)
+static void nwk_prepare_and_send_pending_request(CoreObject *co, const char *at_cmd, const char *prefix, enum tcore_at_command_type at_cmd_type, UserRequest *ur, TcorePendingResponseCallback callback)
{
TcoreATRequest *req = NULL;
TcoreHal *hal;
- CoreObject *o = NULL;
TcorePending *pending = NULL;
TReturn ret;
- o = tcore_plugin_ref_core_object(plugin, co_name);
- hal = tcore_object_get_hal(o);
+ hal = tcore_object_get_hal(co);
- pending = tcore_pending_new(o, 0);
+ pending = tcore_pending_new(co, 0);
req = tcore_at_request_new(at_cmd, prefix, at_cmd_type);
dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
static void _ps_set(TcorePlugin *p, int status)
{
- GSList *co_list = NULL;
-
- co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_PS);
- do {
- CoreObject *o = NULL;
- o = (CoreObject *) co_list->data;
- if (!o)
- break;
+ CoreObject *co_ps;
- if (status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) {
- tcore_ps_set_online(o, TRUE);
- } else {
- tcore_ps_set_online(o, FALSE);
- }
- } while ((co_list = g_slist_next(co_list)));
+ co_ps = tcore_plugin_ref_core_object(p, CORE_OBJECT_TYPE_PS);
+ if (co_ps == NULL) {
+ err("No PS Core Object on plugin");
+ return;
+ }
- g_slist_free(co_list);
+ if (status == NETWORK_SERVICE_DOMAIN_STATUS_FULL)
+ tcore_ps_set_online(co_ps, TRUE);
+ else
+ tcore_ps_set_online(co_ps, FALSE);
}
static void on_timeout_search_network(TcorePending *p, void *user_data)
tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &resp);
}
- if (tokens)
- tcore_at_tok_free(tokens);
-
- if (temp_plmn_info)
- free(temp_plmn_info);
+ /* Free tokens */
+ tcore_at_tok_free(tokens);
- return;
+ g_free(temp_plmn_info);
}
static void on_response_set_umts_band(TcorePending *p, int data_len, const void *data, void *user_data)
/* EF Index */
if ((pResp = tcore_at_tok_nth(tokens, 0))) {
dbg("Index : %s", pResp);
- resp.list[i].ef_index = atoi(pResp);
+ resp.list[i].index = atoi(pResp);
}
/* Format */
if ((pResp = tcore_at_tok_nth(tokens, 1))) {
if (resp.list[i].plmn[5] == '#')
resp.list[i].plmn[5] = '\0';
- // free(cp_plmn);
+ // g_free(cp_plmn);
}
}
}
dbg("dbg.. noti.plmn : %s", noti.plmn);
}
}
- if (long_plmn_name)
- free(long_plmn_name);
- if (short_plmn_name)
- free(short_plmn_name);
+
+ g_free(long_plmn_name);
+ g_free(short_plmn_name);
}
return;
}
regist_status.roaming_status = tcore_network_get_roaming_state(o);
tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,
- TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(struct tnoti_network_registration_status), ®ist_status);
+ TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(regist_status), ®ist_status);
#if 0
if (service_type == NETWORK_SERVICE_TYPE_HSDPA)
noti.status = TELEPHONY_HSDPA_ON;
dbg("new pending(AT+XOPS=0/5/6 for Nitz PLMN name)");
/* Get NITZ name and plmn_id via AT+XCOPS = 0/5/6 */
- nwk_prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+XCOPS=0;+XCOPS=5;+XCOPS=6", "+XCOPS", TCORE_AT_MULTILINE, ur, on_response_get_nitz_name);
+ nwk_prepare_and_send_pending_request(o, "AT+XCOPS=0;+XCOPS=5;+XCOPS=6", "+XCOPS", TCORE_AT_MULTILINE, ur, on_response_get_nitz_name);
} else {
dbg("line is NULL");
}
if ((resp->data.spn.display_condition & 0x03) == 0x01) {
tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_ANY);
}
+
+ // fallback in case no SPN name is provided
+ if (resp->data.spn.spn[0] == '\0')
+ tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_NETWORK);
}
}
req_data->plmn[5] = '\0';
}
}
- cmd_str = g_strdup_printf("AT+CPOL=%d,%d,\"%s\",%d,%d,%d", req_data->ef_index + 1, format, req_data->plmn, gsm_act, gsm_compact_act, utran_act);
+ cmd_str = g_strdup_printf("AT+CPOL=%d,%d,\"%s\",%d,%d,%d", req_data->index + 1, format, req_data->plmn, gsm_act, gsm_compact_act, utran_act);
dbg("cmd_str - %s", cmd_str);
atreq = tcore_at_request_new(cmd_str, "+CPOL", TCORE_AT_NO_RESULT);
dbg("new pending(AT+COPS?)");
- nwk_prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+COPS=3,2;+COPS?;+COPS=3,0;+COPS?", "+COPS", TCORE_AT_MULTILINE, ur, on_response_get_serving_network);
+ nwk_prepare_and_send_pending_request(o, "AT+COPS=3,2;+COPS?;+COPS=3,0;+COPS?", "+COPS", TCORE_AT_MULTILINE, ur, on_response_get_serving_network);
return TCORE_RETURN_SUCCESS;
}
.get_serving_network = get_serving_network,
};
-gboolean s_network_init(TcorePlugin *p, TcoreHal *h)
+gboolean s_network_init(TcorePlugin *cp, CoreObject *co_network)
{
- CoreObject *o = NULL;
+ dbg("Enter");
- o = tcore_network_new(p, "umts_network", &network_ops, h);
- if (!o)
- return FALSE;
+ tcore_network_override_ops(co_network, &network_ops);
- tcore_object_add_callback(o, "+CREG", on_event_cs_network_regist, NULL);
- tcore_object_add_callback(o, "+CGREG", on_event_ps_network_regist, NULL);
- tcore_object_add_callback(o, "+XCIEV", on_event_network_icon_info, NULL);
+ tcore_object_override_callback(co_network, "+CREG", on_event_cs_network_regist, NULL);
+ tcore_object_override_callback(co_network, "+CGREG", on_event_ps_network_regist, NULL);
+ tcore_object_override_callback(co_network, "+XCIEV", on_event_network_icon_info, NULL);
/* +CTZV: <tz>,<time> */
- tcore_object_add_callback(o, "+CTZV", on_event_network_ctzv_time_info, NULL);
+ tcore_object_override_callback(co_network, "+CTZV", on_event_network_ctzv_time_info, NULL);
- tcore_server_add_notification_hook(tcore_plugin_ref_server(p), TNOTI_SIM_STATUS, on_hook_sim_init, o);
+ tcore_server_add_notification_hook(tcore_plugin_ref_server(cp), TNOTI_SIM_STATUS, on_hook_sim_init, co_network);
- _insert_mcc_mnc_oper_list(p, o);
+ _insert_mcc_mnc_oper_list(cp, co_network);
+
+ dbg("Exit");
return TRUE;
}
-void s_network_exit(TcorePlugin *p)
+void s_network_exit(TcorePlugin *cp, CoreObject *co_network)
{
- CoreObject *o;
-
- o = tcore_plugin_ref_core_object(p, "umts_network");
-
- tcore_network_free(o);
+ dbg("Exit");
}