aboutsummaryrefslogtreecommitdiffstats
path: root/include/sms.h
blob: 5068dd92b1ab60f0171585fe308a7369a201d1af (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
/*
 * 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_SMS_H__
#define __SAMSUNG_IPC_SMS_H__

/*
 * Commands
 */

#define IPC_SMS_SEND_MSG					0x0401
#define IPC_SMS_INCOMING_MSG					0x0402
#define IPC_SMS_READ_MSG					0x0403
#define IPC_SMS_SAVE_MSG					0x0404
#define IPC_SMS_DEL_MSG					0x0405
#define IPC_SMS_DELIVER_REPORT					0x0406
#define IPC_SMS_DEVICE_READY					0x0407
#define IPC_SMS_SEL_MEM					0x0408
#define IPC_SMS_STORED_MSG_COUNT				0x0409
#define IPC_SMS_SVC_CENTER_ADDR				0x040A
#define IPC_SMS_SVC_OPTION					0x040B
#define IPC_SMS_MEM_STATUS					0x040C
#define IPC_SMS_CBS_MSG					0x040D
#define IPC_SMS_CBS_CFG					0x040E
#define IPC_SMS_STORED_MSG_STATUS				0x040F
#define IPC_SMS_PARAM_COUNT					0x0410
#define IPC_SMS_PARAM						0x0411

/*
 * Values
 */

#define IPC_SMS_TYPE_POINT_TO_POINT				0x01
#define IPC_SMS_TYPE_STATUS_REPORT				0x02
#define IPC_SMS_TYPE_OUTGOING					0x02

#define IPC_SMS_MSG_TYPE_MULTIPLE				0x01
#define IPC_SMS_MSG_TYPE_SINGLE				0x02

#define IPC_SMS_ACK_NO_ERROR					0x0000
#define IPC_SMS_ACK_PDA_FULL_ERROR				0x8080
#define IPC_SMS_ACK_MALFORMED_REQ_ERROR			0x8061
#define IPC_SMS_ACK_UNSPEC_ERROR				0x806F

#define IPC_SMS_STATUS_REC_UNREAD				0x01
#define IPC_SMS_STATUS_REC_READ				0x02
#define IPC_SMS_STATUS_STO_UNSENT				0x03
#define IPC_SMS_STATUS_STO_SENT				0x04

/*
 * Structures
 */

struct ipc_sms_send_msg_request_header {
	unsigned char type;				/* IPC_SMS_TYPE */
	unsigned char msg_type;			/* IPC_SMS_MSG_TYPE */
	unsigned char unknown;
	unsigned char length;
} __attribute__((__packed__));

struct ipc_sms_send_msg_response_data {
	unsigned char type;				/* IPC_SMS_TYPE */
	unsigned short ack;				/* IPC_SMS_ACK */
	unsigned char id;
	unsigned char unknown;
} __attribute__((__packed__));

struct ipc_sms_incoming_msg_header {
	unsigned char msg_type;			/* IPC_SMS_MSG_TYPE */
	unsigned char type;				/* IPC_SMS_TYPE */
	unsigned short sim_index;
	unsigned char id;
	unsigned char length;
} __attribute__((__packed__));

struct ipc_sms_save_msg_request_header {
	unsigned char magic;
	unsigned short index;
	unsigned char status;				/* IPC_SMS_STATUS */
	unsigned char length;
} __attribute__((__packed__));

struct ipc_sms_save_msg_response_data {
	unsigned char magic;
	unsigned short error;
	unsigned short index;
} __attribute__((__packed__));

struct ipc_sms_del_msg_request_data {
	unsigned char magic;
	unsigned short index;
} __attribute__((__packed__));

struct ipc_sms_del_msg_response_data {
	unsigned char magic;
	unsigned short error;
	unsigned short index;
} __attribute__((__packed__));

struct ipc_sms_deliver_report_request_data {
	unsigned char type;				/* IPC_SMS_TYPE */
	unsigned short ack;				/* IPC_SMS_ACK */
	unsigned char id;
	unsigned char unknown;
} __attribute__((__packed__));

struct ipc_sms_deliver_report_response_data {
	unsigned short ack;				/* IPC_SMS_ACK */
} __attribute__((__packed__));

struct ipc_sms_svc_center_addr_header {
	unsigned char length;
} __attribute__((__packed__));

/*
 * Helpers
 */

size_t ipc_sms_send_msg_size_setup(
	struct ipc_sms_send_msg_request_header *header,
	const void *smsc, size_t smsc_size, const void *pdu, size_t pdu_size);
void *ipc_sms_send_msg_setup(
	struct ipc_sms_send_msg_request_header *header,
	const void *smsc, size_t smsc_size, const void *pdu, size_t pdu_size);
size_t ipc_sms_incoming_msg_pdu_size_extract(const void *data, size_t size);
void *ipc_sms_incoming_msg_pdu_extract(const void *data, size_t size);
size_t ipc_sms_save_msg_size_setup(
	struct ipc_sms_save_msg_request_header *header,
	const void *smsc, size_t smsc_size, const void *pdu, size_t pdu_size);
void *ipc_sms_save_msg_setup(
	struct ipc_sms_save_msg_request_header *header,
	const void *smsc, size_t smsc_size, const void *pdu, size_t pdu_size);
int ipc_sms_del_msg_setup(struct ipc_sms_del_msg_request_data *data,
			  unsigned short index);
size_t ipc_sms_svc_center_addr_smsc_size_extract(const void *data, size_t size);
void *ipc_sms_svc_center_addr_smsc_extract(const void *data, size_t size);

#endif /* __SAMSUNG_IPC_SMS_H__ */