39
36
#define SAP_DUMMY_PATH "/org/bluez/test"
42
SIM_DISCONNECTED= 0x00,
44
SIM_POWERED_OFF = 0x02,
39
SIM_DISCONNECTED = 0x00,
41
SIM_POWERED_OFF = 0x02,
48
45
static DBusConnection *connection = NULL;
50
47
static int sim_card_conn_status = SIM_DISCONNECTED;
51
static void *sap_data = NULL; /* SAP server private data.*/
48
static void *sap_data = NULL; /* SAP server private data. */
52
49
static gboolean ongoing_call_status = FALSE;
53
50
static int max_msg_size_supported = 512;
60
57
sap_connect_rsp(sap_device, SAP_STATUS_CONNECTION_FAILED,
63
} else if (max_msg_size_supported > maxmsgsize) {
62
if (max_msg_size_supported > maxmsgsize) {
64
63
sap_connect_rsp(sap_device, SAP_STATUS_MAX_MSG_SIZE_TOO_SMALL,
65
64
max_msg_size_supported);
67
} else if (max_msg_size_supported < maxmsgsize) {
68
if (max_msg_size_supported < maxmsgsize) {
68
69
sap_connect_rsp(sap_device,
69
70
SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED,
70
71
max_msg_size_supported);
72
} else if (ongoing_call_status) {
75
if (ongoing_call_status) {
73
76
sap_connect_rsp(sap_device, SAP_STATUS_OK_ONGOING_CALL,
74
77
max_msg_size_supported);
77
sim_card_conn_status = SIM_CONNECTED;
78
sap_data = sap_device;
80
sap_connect_rsp(sap_device, SAP_STATUS_OK, maxmsgsize);
81
sap_status_ind(sap_device, SAP_STATUS_CHANGE_CARD_RESET);
81
sim_card_conn_status = SIM_CONNECTED;
82
sap_data = sap_device;
84
sap_connect_rsp(sap_device, SAP_STATUS_OK, maxmsgsize);
85
sap_status_ind(sap_device, SAP_STATUS_CHANGE_CARD_RESET);
85
88
void sap_disconnect_req(void *sap_device, uint8_t linkloss)
113
116
SAP_RESULT_ERROR_NOT_ACCESSIBLE, NULL, 0);
115
118
sap_transfer_apdu_rsp(sap_device, SAP_RESULT_OK,
116
(uint8_t*)&apdu, sizeof(apdu));
119
(uint8_t *)&apdu, sizeof(apdu));
119
122
void sap_transfer_atr_req(void *sap_device)
135
138
sap_transfer_atr_rsp(sap_device, SAP_RESULT_OK,
136
(uint8_t*)&atr, sizeof(atr));
139
(uint8_t *)&atr, sizeof(atr));
139
142
void sap_power_sim_off_req(void *sap_device)
227
230
if (ongoing_call_status && !ongoing) {
228
231
/* An ongoing call has finished. Continue connection.*/
229
232
sap_status_ind(sap_data, SAP_STATUS_CHANGE_CARD_RESET);
230
ongoing_call_status = ongoing;
233
ongoing_call_status = FALSE;
231
234
} else if (!ongoing_call_status && ongoing) {
232
235
/* An ongoing call has started.*/
233
ongoing_call_status = ongoing;
236
ongoing_call_status = TRUE;
236
239
DBG("OngoingCall status set to %d", ongoing_call_status);
315
318
return dbus_message_new_method_return(msg);
318
static GDBusMethodTable dummy_methods[] = {
319
{ "OngoingCall", "b", "", ongoing_call},
320
{ "MaxMessageSize", "u", "", max_msg_size},
321
{ "DisconnectImmediate", "", "", disconnect_immediate},
322
{ "CardStatus", "u", "", card_status},
321
static const GDBusMethodTable dummy_methods[] = {
322
{ GDBUS_METHOD("OngoingCall",
323
GDBUS_ARGS({ "ongoing", "b" }), NULL,
325
{ GDBUS_METHOD("MaxMessageSize",
326
GDBUS_ARGS({ "size", "u" }), NULL,
328
{ GDBUS_METHOD("DisconnectImmediate", NULL, NULL,
329
disconnect_immediate) },
330
{ GDBUS_METHOD("CardStatus",
331
GDBUS_ARGS({ "status", "" }), NULL,
341
353
void sap_exit(void)
343
g_dbus_unregister_interface(connection, SAP_DUMMY_PATH, SAP_DUMMY_IFACE);
355
g_dbus_unregister_interface(connection, SAP_DUMMY_PATH,
344
358
dbus_connection_unref(connection);
345
359
connection = NULL;