aboutsummaryrefslogtreecommitdiffstats
path: root/include/sms.h
blob: 957b10fe3153ed58e91ac3aed973bfa61f04cfd3 (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
/*
 * 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

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