GPDS_ATTACHED = 0x01
};
+enum gpds_attach_mode {
+ GPDS_ATTACH_MODE_MANUAL = 0x00,
+ GPDS_ATTACH_MODE_AUTOMATIC = 0x01,
+ GPDS_ATTACH_MODE_DEFAULT = 0xFF
+};
+
+enum gpds_mt_act_mode {
+ GPDS_MT_ACT_MODE_REJECT = 0x00,
+ GPDS_MT_ACT_MODE_ACCEPT = 0x01,
+ GPDS_MT_ACT_MODE_DEFAULT = 0xFF
+};
+
+enum gpds_classc_mode {
+ GPDS_CLASSC_MODE_GPRS = 0x00,
+ GPDS_CLASSC_MODE_GSM = 0x01,
+ GPDS_CLASSC_MODE_DEFAULT = 0xFF
+};
+
+enum gpds_aol_context {
+ GPDS_AOL_CTX_NOT_ACTIVE = 0x00,
+ GPDS_AOL_CTX_HPLMN_ACTIVE = 0x01,
+ GPDS_AOL_CTX_VPLMN_ACTIVE = 0x02,
+ GPDS_AOL_CTX_ACTIVE = 0x03,
+ GPDS_AOL_CTX_DEFAULT = 0xFF
+};
+
#ifdef __cplusplus
};
#endif
GIsiClient *info_client;
};
+static void configure_resp_cb(const GIsiMessage *msg, void *opaque)
+{
+ const uint8_t *data = g_isi_msg_data(msg);
+
+ if (g_isi_msg_error(msg) < 0) {
+ DBG("ISI message error: %d", g_isi_msg_error(msg));
+ return;
+ }
+
+ if (g_isi_msg_id(msg) != GPDS_CONFIGURE_RESP)
+ return;
+
+ if (g_isi_msg_data_len(msg) < 1)
+ return;
+
+ if (data[0] != GPDS_OK)
+ DBG("GPDS configure failed: %s", gpds_status_name(data[0]));
+}
+
+static void set_attach_mode(struct ofono_gprs *gprs, int attached)
+{
+ struct gprs_data *gd = ofono_gprs_get_data(gprs);
+
+ const unsigned char msg[] = {
+ GPDS_CONFIGURE_REQ,
+ attached ? GPDS_ATTACH_MODE_AUTOMATIC : GPDS_ATTACH_MODE_MANUAL,
+ GPDS_MT_ACT_MODE_REJECT,
+ GPDS_CLASSC_MODE_DEFAULT,
+ GPDS_AOL_CTX_DEFAULT,
+ 0x00,
+ 0x00
+ };
+
+ if (g_isi_client_send(gd->client, msg, sizeof(msg),
+ GPDS_TIMEOUT, configure_resp_cb,
+ gprs, NULL))
+ return;
+}
+
static void detach_ind_cb(const GIsiMessage *msg, void *opaque)
{
struct ofono_gprs *gprs = opaque;
DBG("detached: %s (0x%02"PRIx8")",
gpds_isi_cause_name(data[0]), data[0]);
+ set_attach_mode(gprs, FALSE);
+
ofono_gprs_detached_notify(gprs);
}
goto error;
}
+ set_attach_mode(cbd->user, TRUE);
+
CALLBACK_WITH_SUCCESS(cb, cbd->data);
return;
goto error;
}
+ set_attach_mode(cbd->user, FALSE);
+
CALLBACK_WITH_SUCCESS(cb, cbd->data);
return;
ofono_gprs_cb_t cb, void *data)
{
struct gprs_data *gd = ofono_gprs_get_data(gprs);
- struct isi_cb_data *cbd = isi_cb_data_new(NULL, cb, data);
+ struct isi_cb_data *cbd = isi_cb_data_new(gprs, cb, data);
if (cbd == NULL || gd == NULL)
goto error;