aboutsummaryrefslogtreecommitdiffstats
path: root/include/call.h
blob: e3f2dc7784f56c0f980f8821e2a9d0a26516cde6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
 * This file is part of libsamsung-ipc.
 *
 * Copyright (C) 2010-2011 Joerie de Gram <j.de.gram@gmail.com>
 * Copyright (C) 2011-2014 Paul Kocialkowski <contact@paulk.fr>
 *
 * libsamsung-ipc is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * libsamsung-ipc is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with libsamsung-ipc.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <samsung-ipc.h>

#ifndef __SAMSUNG_IPC_CALL_H__
#define __SAMSUNG_IPC_CALL_H__

/*
 * Commands
 */

#define IPC_CALL_OUTGOING                                       0x0201
#define IPC_CALL_INCOMING                                       0x0202
#define IPC_CALL_RELEASE                                        0x0203
#define IPC_CALL_ANSWER                                         0x0204
#define IPC_CALL_STATUS                                         0x0205
#define IPC_CALL_LIST                                           0x0206
#define IPC_CALL_BURST_DTMF                                     0x0207
#define IPC_CALL_CONT_DTMF                                      0x0208
#define IPC_CALL_WAITING                                        0x0209
#define IPC_CALL_LINE_ID                                        0x020A

/*
 * Values
 */

#define IPC_CALL_TYPE_VOICE                                     0x01
#define IPC_CALL_TYPE_DATA                                      0x03

#define IPC_CALL_IDENTITY_DEFAULT                               0x00
#define IPC_CALL_IDENTITY_HIDE                                  0x01
#define IPC_CALL_IDENTITY_SHOW                                  0x02

#define IPC_CALL_PREFIX_NONE                                    0x00
#define IPC_CALL_PREFIX_INTL                                    0x11

#define IPC_CALL_STATUS_DIALING                                 0x01
#define IPC_CALL_STATUS_IGNORING_INCOMING_STATUS                0x02
#define IPC_CALL_STATUS_CONNECTED                               0x03
#define IPC_CALL_STATUS_RELEASED                                0x04
#define IPC_CALL_STATUS_CONNECTING                              0x05

#define IPC_CALL_END_CAUSE_NORMAL                               0x05
#define IPC_CALL_END_CAUSE_REJECTED                             0x2F
#define IPC_CALL_END_CAUSE_UNSPECIFIED                          0x10

#define IPC_CALL_TERM_MO                                        0x01
#define IPC_CALL_TERM_MT                                        0x02

#define IPC_CALL_LIST_ENTRY_STATUS_ACTIVE                       0x01
#define IPC_CALL_LIST_ENTRY_STATUS_HOLDING                      0x02
#define IPC_CALL_LIST_ENTRY_STATUS_DIALING                      0x03
#define IPC_CALL_LIST_ENTRY_STATUS_ALERTING                     0x04
#define IPC_CALL_LIST_ENTRY_STATUS_INCOMING                     0x05
#define IPC_CALL_LIST_ENTRY_STATUS_WAITING                      0x06

#define IPC_CALL_DTMF_STATUS_START                              0x01
#define IPC_CALL_DTMF_STATUS_STOP                               0x02

/*
 * Structures
 */

struct ipc_call_outgoing_data {
    unsigned char unknown;
    unsigned char type; // IPC_CALL_TYPE
    unsigned char identity; // IPC_CALL_IDENTITY
    unsigned char number_length;
    unsigned char prefix; // IPC_CALL_PREFIX
    unsigned char number[86];
} __attribute__((__packed__));

struct ipc_call_incoming_data {
    unsigned char unknown;
    unsigned char type; // IPC_CALL_TYPE_...
    unsigned char id;
    unsigned char line;
} __attribute__((__packed__));

struct ipc_call_status_data {
    unsigned char unknown;
    unsigned char type; // IPC_CALL_TYPE
    unsigned char id;
    unsigned char status; // IPC_CALL_STATUS
    unsigned char reason;
    unsigned char end_cause; // IPC_CALL_END_CAUSE
} __attribute__((__packed__));

struct ipc_call_list_header {
    unsigned char count;
} __attribute__((__packed__));

struct ipc_call_list_entry {
    unsigned char unknown1;
    unsigned char type; // IPC_CALL_TYPE
    unsigned char id;
    unsigned char term; // IPC_CALL_TERM
    unsigned char status; // IPC_CALL_LIST_ENTRY_STATUS
    unsigned char mpty;
    unsigned char number_length;
    unsigned char unknown2;
} __attribute__((__packed__));

struct ipc_call_burst_dtmf_request_header {
    unsigned char count;
} __attribute__((__packed__));

struct ipc_call_burst_dtmf_request_entry {
    unsigned char status; // IPC_CALL_DTMF_STATUS
    char tone;
} __attribute__((__packed__));

struct ipc_call_burst_dtmf_response_data {
    unsigned char unknown;
} __attribute__((__packed__));

struct ipc_call_cont_dtmf_data {
    unsigned char status; // IPC_CALL_DTMF_STATUS
    char tone;
} __attribute__((__packed__));

/*
 * Helpers
 */

int ipc_call_outgoing_setup(struct ipc_call_outgoing_data *data,
    unsigned char type, unsigned char identity, unsigned char prefix,
    const char *number);
unsigned char ipc_call_list_count_extract(const void *data, size_t size);
struct ipc_call_list_entry *ipc_call_list_entry_extract(const void *data,
    size_t size, unsigned int index);
char *ipc_call_list_entry_number_extract(const struct ipc_call_list_entry *entry);
void *ipc_call_burst_dtmf_setup(const struct ipc_call_burst_dtmf_request_entry *entries,
    unsigned char count);

#endif

// vim:ts=4:sw=4:expandtab