tizen 2.3.1 release
[framework/telephony/libtcore.git] / include / co_call.h
1 /*
2  * libtcore
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Ja-young Gu <jygu@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20
21 #ifndef __TCORE_CO_CALL_H__
22 #define __TCORE_CO_CALL_H__
23
24 #include <core_object.h>
25
26 __BEGIN_DECLS
27
28 #define MAX_CALL_NUMBER_LEN                     83
29 #define MAX_CALL_NAME_LEN                       83
30
31 enum tcore_call_type {
32         TCORE_CALL_TYPE_VOICE,
33         TCORE_CALL_TYPE_VIDEO,
34         TCORE_CALL_TYPE_E911,
35         TCORE_CALL_TYPE_STDOTASP,
36         TCORE_CALL_TYPE_NONSTDOTASP,
37 };
38
39 enum tcore_call_direction {
40         TCORE_CALL_DIRECTION_NONE,
41         TCORE_CALL_DIRECTION_OUTGOING,
42         TCORE_CALL_DIRECTION_INCOMING,
43 };
44
45 enum tcore_call_status {
46         TCORE_CALL_STATUS_IDLE,
47         TCORE_CALL_STATUS_ACTIVE,
48         TCORE_CALL_STATUS_HELD,
49         TCORE_CALL_STATUS_DIALING,
50         TCORE_CALL_STATUS_ALERT,
51         TCORE_CALL_STATUS_INCOMING,
52         TCORE_CALL_STATUS_WAITING,
53 };
54
55 enum tcore_call_no_cli_cause {
56         TCORE_CALL_NO_CLI_CAUSE_NONE = -1,
57         TCORE_CALL_NO_CLI_CAUSE_UNAVAILABLE,
58         TCORE_CALL_NO_CLI_CAUSE_USER_REJECTED,
59         TCORE_CALL_NO_CLI_CAUSE_OTHERS,
60         TCORE_CALL_NO_CLI_CAUSE_PAY_PHONE
61 };
62
63 enum tcore_call_cli_mode {
64         TCORE_CALL_CLI_MODE_PRESENT,
65         TCORE_CALL_CLI_MODE_RESTRICT,
66         TCORE_CALL_CLI_MODE_UNAVAILABLE,
67         TCORE_CALL_CLI_MODE_DEFAULT,
68 };
69
70 enum tcore_call_cna_mode {
71         TCORE_CALL_CNA_MODE_DEFAULT,
72         TCORE_CALL_CNA_MODE_PRESENT,
73         TCORE_CALL_CNA_MODE_RESTRICT,
74 };
75
76 enum tcore_call_answer_type {
77         TCORE_CALL_ANSWER_ACCEPT,
78         TCORE_CALL_ANSWER_REJECT,
79         TCORE_CALL_ANSWER_REPLACE,
80         TCORE_CALL_ANSWER_HOLD_AND_ACCEPT,
81 };
82
83 enum tcore_call_end_type {
84         TCORE_CALL_END_DEFAULT,
85         TCORE_CALL_END_ALL,
86         TCORE_CALL_END_ALL_ACTIVE,
87         TCORE_CALL_END_ALL_HELD,
88 };
89
90 typedef struct call_object CallObject;
91
92 struct tcore_call_operations {
93         TReturn (*dial)(CoreObject *o, UserRequest *ur);
94         TReturn (*answer)(CoreObject *o, UserRequest *ur);
95         TReturn (*end)(CoreObject *o, UserRequest *ur);
96         TReturn (*hold)(CoreObject *o, UserRequest *ur);
97         TReturn (*active)(CoreObject *o, UserRequest *ur);
98         TReturn (*swap)(CoreObject *o, UserRequest *ur);
99         TReturn (*join)(CoreObject *o, UserRequest *ur);
100         TReturn (*split)(CoreObject *o, UserRequest *ur);
101         TReturn (*deflect)(CoreObject* o, UserRequest *ur);
102         TReturn (*transfer)(CoreObject* o, UserRequest *ur);
103         TReturn (*start_cont_dtmf)(CoreObject *o, UserRequest *ur);
104         TReturn (*stop_cont_dtmf)(CoreObject *o, UserRequest *ur);
105         TReturn (*send_burst_dtmf)(CoreObject *o, UserRequest *ur);
106         TReturn (*set_sound_path)(CoreObject *o, UserRequest *ur);
107         TReturn (*set_sound_volume_level)(CoreObject *o, UserRequest *ur);
108         TReturn (*get_sound_volume_level)(CoreObject *o, UserRequest *ur);
109         TReturn (*set_sound_mute_status)(CoreObject *o, UserRequest *ur);
110         TReturn (*get_sound_mute_status)(CoreObject *o, UserRequest *ur);
111         TReturn (*set_sound_recording)(CoreObject *o, UserRequest *ur);
112         TReturn (*set_sound_equalization)(CoreObject *o, UserRequest *ur);
113         TReturn (*set_sound_noise_reduction)(CoreObject *o, UserRequest *ur);
114         TReturn (*set_sound_clock_status)(CoreObject *o, UserRequest *ur);
115         TReturn (*set_active_line)(CoreObject *o, UserRequest *ur);
116         TReturn (*get_active_line)(CoreObject *o, UserRequest *ur);
117         TReturn (*activate_ccbs)(CoreObject *o, UserRequest *ur);
118         TReturn (*set_preferred_voice_subscription)(CoreObject *o, UserRequest *ur);
119         TReturn (*get_preferred_voice_subscription)(CoreObject *o, UserRequest *ur);
120         TReturn (*set_privacy_mode)(CoreObject *o, UserRequest *ur);
121         TReturn (*get_privacy_mode)(CoreObject *o, UserRequest *ur);
122 };
123
124 struct tcore_call_information_operations {
125         void (*mo_call_col)(CoreObject *o, char* number);
126         void (*mo_call_waiting)(CoreObject *o);
127         void (*mo_call_cug)(CoreObject *o, int cug_index);
128         void (*mo_call_forwarded)(CoreObject *o);
129         void (*mo_call_barred_incoming)(CoreObject *o);
130         void (*mo_call_barred_outgoing)(CoreObject *o);
131         void (*mo_call_deflected)(CoreObject *o);
132         void (*mo_call_clir_suppression_reject)(CoreObject *o);
133         void (*mo_call_cfu)(CoreObject *o);
134         void (*mo_call_cfc)(CoreObject *o);
135         void (*mt_call_cli)(CoreObject *o, enum tcore_call_cli_mode mode, char *number);
136         void (*mt_call_cna)(CoreObject *o, enum tcore_call_cna_mode mode, char *name, int dcs);
137         void (*mt_call_forwarded_call)(CoreObject *o, char* number);
138         void (*mt_call_cug_call)(CoreObject *o, int cug_index, char* number);
139         void (*mt_call_deflected_call)(CoreObject *o, char* number);
140         void (*mt_call_transfered)(CoreObject *o, char* number);
141         void (*call_held)(CoreObject *o, char* number);
142         void (*call_active)(CoreObject *o, char* number);
143         void (*call_joined)(CoreObject *o, char* number);
144         void (*call_released_on_hold)(CoreObject *o, char* number);
145         void (*call_transfer_alert)(CoreObject *o, char* number);
146         void (*call_transfered)(CoreObject *o, char* number);
147         void (*call_cf_check_message)(CoreObject *o, char* number);
148 };
149
150 typedef void(*ConfirmCallback)(TcorePending *p, int data_len, const void *data, void *user_data);
151
152 struct tcore_call_control_operations {
153         TReturn (*answer_hold_and_accept)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
154         TReturn (*answer_replace)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
155         TReturn (*answer_reject)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
156         TReturn (*end_specific)( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
157         TReturn (*end_all_active)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
158         TReturn (*end_all_held)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
159         TReturn (*active)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
160         TReturn (*hold)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
161         TReturn (*swap)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
162         TReturn (*join)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
163         TReturn (*split)( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
164         TReturn (*transfer)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
165         TReturn (*deflect)( CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data );
166 };
167
168 // Call Core API
169 CoreObject*                             tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal);
170 void                                    tcore_call_free( CoreObject *o);
171
172 void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops);
173
174 // Call Object API
175 CallObject*                             tcore_call_object_new( CoreObject *o, int id );
176 gboolean                                tcore_call_object_free( CoreObject *o, CallObject *co );
177
178 int                                             tcore_call_object_total_length( CoreObject *o );
179 CallObject*                             tcore_call_object_current_on_mt_processing( CoreObject *o );
180 CallObject*                             tcore_call_object_current_on_mo_processing( CoreObject *o );
181 CallObject*                             tcore_call_object_find_by_id( CoreObject *o, int id );
182 CallObject*                             tcore_call_object_find_by_number( CoreObject *o, char *num );
183 GSList*                                 tcore_call_object_find_by_status( CoreObject *o, enum tcore_call_status cs );
184
185 int                                             tcore_call_object_get_id( CallObject *co );
186
187 gboolean                                tcore_call_object_set_type( CallObject *co, enum tcore_call_type ct );
188 enum tcore_call_type    tcore_call_object_get_type( CallObject *co );
189
190 gboolean                                tcore_call_object_set_direction( CallObject *co, enum tcore_call_direction cd );
191 enum tcore_call_direction tcore_call_object_get_direction( CallObject *co );
192
193 gboolean                                tcore_call_object_set_status( CallObject *co, enum tcore_call_status cs );
194 enum tcore_call_status  tcore_call_object_get_status( CallObject *co );
195
196 gboolean tcore_call_object_set_cli_info(struct call_object *co,
197                                                 enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
198                                                 char *num, int num_len);
199 enum tcore_call_cli_mode tcore_call_object_get_cli_mode( CallObject *co );
200 enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(struct call_object *co);
201 int                                             tcore_call_object_get_number( CallObject *co, char *num );
202
203 gboolean                                tcore_call_object_set_cna_info( CallObject *co, enum tcore_call_cna_mode mode, char *name, int dcs );
204 enum tcore_call_cna_mode tcore_call_object_get_cna_mode( CallObject *co );
205 int                                             tcore_call_object_get_name( CallObject *co, char *name );
206
207 gboolean                                tcore_call_object_set_multiparty_state ( CallObject *co,  gboolean is );
208 gboolean                                tcore_call_object_get_multiparty_state ( CallObject *co );
209
210 gboolean                                tcore_call_object_set_active_line( CallObject *co, unsigned int line );
211 int                                             tcore_call_object_get_active_line( CallObject *co );
212
213
214 // Call Control API
215 gboolean                                tcore_call_control_new( CoreObject *o, struct tcore_call_control_operations *ops );
216 void                                    tcore_call_control_free( CoreObject *o );
217
218 TReturn                                 tcore_call_control_answer_hold_and_accept( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
219 TReturn                                 tcore_call_control_answer_replace( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
220 TReturn                                 tcore_call_control_answer_reject( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
221
222 TReturn                                 tcore_call_control_end_specific( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
223 TReturn                                 tcore_call_control_end_all_active( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
224 TReturn                                 tcore_call_control_end_all_held( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
225
226 TReturn                                 tcore_call_control_active( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
227 TReturn                                 tcore_call_control_hold( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
228 TReturn                                 tcore_call_control_swap( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
229 TReturn                                 tcore_call_control_join( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
230 TReturn                                 tcore_call_control_split( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
231 TReturn                                 tcore_call_control_transfer( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
232 TReturn                                 tcore_call_control_deflect( CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data );
233
234 void                                    tcore_call_control_set_operations( CoreObject* o, struct tcore_call_control_operations *ops );
235
236
237 void                                    tcore_call_information_mo_col( CoreObject *o, char* number );
238 void                                    tcore_call_information_mo_waiting( CoreObject *o );
239 void                                    tcore_call_information_mo_cug( CoreObject *o, int cug_index );
240 void                                    tcore_call_information_mo_forwarded( CoreObject *o );
241 void                                    tcore_call_information_mo_barred_incoming( CoreObject *o );
242 void                                    tcore_call_information_mo_barred_outgoing( CoreObject *o );
243 void                                    tcore_call_information_mo_deflected( CoreObject *o );
244 void                                    tcore_call_information_mo_clir_suppression_reject( CoreObject *o );
245 void                                    tcore_call_information_mo_cfu( CoreObject *o );
246 void                                    tcore_call_information_mo_cfc( CoreObject *o );
247
248 void                                    tcore_call_information_mt_cli( CoreObject *o, enum tcore_call_cli_mode mode, char* number );
249 void                                    tcore_call_information_mt_cna( CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs );
250 void                                    tcore_call_information_mt_forwarded_call( CoreObject *o, char* number );
251 void                                    tcore_call_information_mt_cug_call( CoreObject *o, int cug_index, char* number );
252 void                                    tcore_call_information_mt_deflected_call( CoreObject *o, char* number );
253 void                                    tcore_call_information_mt_transfered( CoreObject *o, char* number );
254
255 void                                    tcore_call_information_held( CoreObject *o, char* number );
256 void                                    tcore_call_information_active( CoreObject *o, char* number );
257 void                                    tcore_call_information_joined( CoreObject *o, char* number );
258 void                                    tcore_call_information_released_on_hold( CoreObject *o, char* number );
259 void                                    tcore_call_information_transfer_alert( CoreObject *o, char* number );
260 void                                    tcore_call_information_transfered( CoreObject *o, char* number );
261 void                                    tcore_call_information_cf_check_ss_message( CoreObject *o, char* number );
262
263 void                                    tcore_call_information_set_operations( CoreObject *o, struct tcore_call_information_operations *ops );
264
265 __END_DECLS
266
267 #endif