SIM: Added SIM PIN unlock
[hayes-ril.git] / hayes-ril.h
1 /*
2  * This file is part of hayes-ril.
3  *
4  * Copyright (C) 2012 Paul Kocialkowski <contact@paulk.fr>
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 #include <at.h>
20
21 #ifndef _HAYES_RIL_H_
22 #define _HAYES_RIL_H_
23
24 /*
25  * Defines
26  */
27
28 #define RIL_DEVICE_LOCK(ril_device_p) pthread_mutex_lock(&(ril_device_p->handlers->transport->mutex));
29 #define RIL_DEVICE_UNLOCK(ril_device_p) pthread_mutex_unlock(&(ril_device_p->handlers->transport->mutex));
30 #define RIL_LOG_LOCK() pthread_mutex_lock(&(ril_globals.log_mutex));
31 #define RIL_LOG_UNLOCK() pthread_mutex_unlock(&(ril_globals.log_mutex));
32
33 #define DEV_GSM         RIL_DEVICE_TYPE_GSM
34 #define DEV_CDMA        RIL_DEVICE_TYPE_CDMA
35
36 /*
37  * Variables structures
38  */
39
40 // Device
41 enum ril_device_type {
42         RIL_DEVICE_TYPE_GSM,
43         RIL_DEVICE_TYPE_CDMA
44 };
45
46 struct ril_device_power_handlers {
47         void *sdata;
48         int (*sdata_create)(void **sdata);
49         int (*sdata_destroy)(void *sdata);
50
51         int (*power_on)(void *sdata);
52         int (*power_off)(void *sdata);
53
54         int (*suspend)(void *sdata);
55         int (*resume)(void *sdata);
56
57         int (*boot)(void *sdata);
58 };
59
60 struct ril_device_transport_handlers {
61         void *sdata;
62         int (*sdata_create)(void **sdata);
63         int (*sdata_destroy)(void *sdata);
64
65         int (*open)(void *sdata);
66         int (*close)(void *sdata);
67
68         int (*send)(void *sdata, void **data, int length);
69         int (*recv)(void *sdata, void **data, int length);
70
71         int (*recv_poll)(void *sdata);
72
73         pthread_t recv_thread;
74         pthread_mutex_t mutex;
75 };
76
77 struct ril_device_handlers {
78         struct ril_device_power_handlers *power;
79         struct ril_device_transport_handlers *transport;
80 };
81
82 struct ril_device {
83         char *name;
84         char *tag;
85         void *sdata;
86
87         enum ril_device_type type;
88         struct ril_device_handlers *handlers;
89 };
90
91 extern struct ril_device *ril_device;
92 extern struct ril_globals ril_globals;
93
94 // RIL
95 struct ril_dispatch_unsol {
96         char *command;
97         void (*func)(struct at_response *response);
98 };
99
100 struct ril_globals {
101         // Dispatch
102         pthread_t dispatch_thread;
103         struct ril_dispatch_unsol *dispatch_unsol;
104         int dispatch_unsol_count;
105
106         // Log
107         pthread_mutex_t log_mutex;
108
109         // Power
110         RIL_RadioState radio_state;
111 };
112
113 /*
114  * Functions
115  */
116
117 // Device
118 void ril_device_register(struct ril_device **ril_device_p);
119 int ril_device_init(struct ril_device *ril_device_p);
120 int ril_device_deinit(struct ril_device *ril_device_p);
121
122 int ril_device_data_create(struct ril_device *ril_device_p);
123 int ril_device_data_destroy(struct ril_device *ril_device_p);
124 int ril_device_boot(struct ril_device *ril_device_p);
125 int ril_device_boot(struct ril_device *ril_device_p);
126 int ril_device_power_on(struct ril_device *ril_device_p);
127 int ril_device_power_off(struct ril_device *ril_device_p);
128 int ril_device_open(struct ril_device *ril_device_p);
129 int ril_device_close(struct ril_device *ril_device_p);
130 int ril_device_send(struct ril_device *ril_device_p, void *data, int length);
131 int ril_device_recv(struct ril_device *ril_device_p, void **data, int length);
132 int ril_device_recv_poll(struct ril_device *ril_device_p);
133 int ril_device_recv_thread_start(struct ril_device *ril_device_p);
134
135 // Utils
136 char *ril_status_string(int status);
137 void ril_recv_log(struct at_response *response);
138 void ril_send_log(struct at_request *request);
139 void ril_data_log(char *data, int length);
140
141 // Call
142 void ril_request_get_current_calls(RIL_Token t, void *data, size_t length);
143
144 // Power
145 void ril_request_radio_power(RIL_Token t, void *data, size_t length);
146
147 // SIM
148 int at_cpin_expect(struct at_response *response, void *data, RIL_Token t);
149 void ril_request_get_sim_status(RIL_Token t, void *data, size_t length);
150 void ril_request_enter_sim_pin(RIL_Token t, void *data, size_t length);
151
152 #endif