aboutsummaryrefslogtreecommitdiffstats
path: root/include/call.h
blob: 57fbd9bde91aa83a798a6d4108e7217e3d9fda59 (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
157
158
159
/*
 * 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);
size_t ipc_call_burst_dtmf_size_setup(
	const struct ipc_call_burst_dtmf_request_entry *entries,
	unsigned char count);
void *ipc_call_burst_dtmf_setup(
	const struct ipc_call_burst_dtmf_request_entry *entries,
	unsigned char count);

#endif /* __SAMSUNG_IPC_CALL_H__ */