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
|
#include <sys/types.h>
#include <stdint.h>
#define GSM_OK 0
#define GSM_ERR -1
#define GSM_ERR_SIZE -10
#define GSM_ERR_NOTSUPPORTED -11
#define GSM_TS_SIZE 25
#define GSM_UD_SIZE 160
#define GSM_UDH_SIZE 140
#define GSM_ADDR_SIZE 20
/* Message-Type-Indicator */
#define GSM_MTI 0x03
#define GSM_MTI_DELIVER 0x00
#define GSM_MTI_DELIVER_REPORT 0x00
#define GSM_MTI_SUBMIT 0x01
#define GSM_MTI_SUBMIT_REPORT 0x01
#define GSM_MTI_COMMAND 0x02
#define GSM_MTI_COMMAND_REPORT 0x02
#define GSM_MMS 0x04 /* More-Messages-to-Send */
#define GSM_RD 0x04 /* Reject-Duplicates */
#define GSM_LP 0x08 /* Loop-Prevention */
/* Validity-Period-Format */
#define GSM_VPF 0x18
#define GSM_VPF_NONE 0x00
#define GSM_VPF_ENHANCED 0x08
#define GSM_VPF_RELATIVE 0x10
#define GSM_VPF_ABSOLUTE 0x18
#define GSM_SRI 0x20 /* Status-Report-Indication */
#define GSM_SRR 0x20 /* Status-Report-Request */
#define GSM_SRQ 0x20 /* Status-Report-Qualifier */
#define GSM_UDHI 0x40 /* User-Data-Header-Indicator */
#define GSM_RP 0x80 /* Reply-Path */
/* Type-of-Number */
#define GSM_TON 0x70
#define GSM_TON_UNKNOWN 0x00
#define GSM_TON_INTERNATIONAL 0x10
#define GSM_TON_NATIONAL 0x20
#define GSM_TON_NETWORK 0x30
#define GSM_TON_SUBSCRIBER 0x40
#define GSM_TON_ALPHANUMERIC 0x50
#define GSM_TON_ABBRREVIATED 0x60
/* Numbering-Plan-Identification */
#define GSM_NPI 0x0f
#define GSM_NPI_UNKNOWN 0x00
#define GSM_NPI_TELEPHONE 0x01
#define GSM_NPI_DATA 0x03
#define GSM_NPI_TELEX 0x04
#define GSM_NPI_SCS1 0x05
#define GSM_NPI_SCS2 0x06
#define GSM_NPI_NATIONAL 0x08
#define GSM_NPI_PRIVATE 0x09
#define GSM_NPI_ERMES 0x0a
#define GSM_EXT 0x80
/* Protocol-Identifier */
#define GSM_PID_DEFAULT 0
#define GSM_PID_TYPE0 64
/* Data-Coding-Scheme */
#define GSM_DCS_CLASS 0x03
#define GSM_DCS_ENC 0x0c
#define GSM_DCS_CLASS_IND 0x10
#define GSM_DCS_COMPRESS_IND 0x20
#define GSM_DCS_DELETE_IND 0x40
#define GSM_DCS_GENERAL_IND 0x80
#define GSM_DCS_GROUP 0xf0
#define GSM_DCS_MWI_DISCARD 0xc0
#define GSM_DCS_MWI_STORE_GSM7 0xd0
#define GSM_DCS_MWI_STORE_UCS2 0xe0
#define GSM_DCS_MWI_SENSE 0x08
#define GSM_DCS_MWI_TYPE 0x03
#define GSM_DCS_ENCLASS 0xf0
#define GSM_DCS_ENCLASS_ENC 0x04
/* Parameter-Indicator */
#define GSM_PI_PID 0x01
#define GSM_PI_DCS 0x02
#define GSM_PI_UD 0x04
#define GSM_PI_EXT 0x08
/* character set */
#define GSM_ENC_7BIT 0x00
#define GSM_ENC_8BIT 0x04
#define GSM_ENC_UCS2 0x08
/* message waiting indication */
#define GSM_MWI_TYPE_VOICEMAIL 0x00
#define GSM_MWI_TYPE_FAX 0x01
#define GSM_MWI_TYPE_EMAIL 0x02
#define GSM_MWI_TYPE_OTHER 0x03
/* flags */
#define GSM_FLAG_COMPRESS 0x0001
#define GSM_FLAG_DELETE 0x0002
#define GSM_FLAG_DISCARD 0x0004
#define GSM_FLAG_TYPE0 0x0008
#define GSM_FLAG_STATUS_REPORT 0x0010
#define GSM_FLAG_REPLY_PATH 0x0020
/* message class */
#define GSM_FLAG_CLASS 0x0400
#define GSM_FLAG_CLASS0 0x0000 /* Flash */
#define GSM_FLAG_CLASS1 0x0100 /* ME-specific */
#define GSM_FLAG_CLASS2 0x0200 /* (U)SIM-specific */
#define GSM_FLAG_CLASS4 0x0300 /* TE-specific */
#define GSM_FLAG_CLASS_MASK 0x0f00
/* message waiting indication */
#define GSM_FLAG_MWI 0x4000
#define GSM_FLAG_MWI_SENSE 0x8000
#define GSM_FLAG_MWI_VOICEMAIL 0x0000
#define GSM_FLAG_MWI_FAX 0x1000
#define GSM_FLAG_MWI_EMAIL 0x2000
#define GSM_FLAG_MWI_OTHER 0x3000
#define GSM_FLAG_MWI_MASK 0xf000
size_t pdu_putc(char *pdu, uint8_t ch);
ssize_t pdu_getc(char *pdu, uint8_t *ch);
size_t pdu_puts(char *pdu, uint8_t *s, size_t s_len);
ssize_t pdu_gets(char *pdu, uint8_t *s, size_t s_len);
size_t pdu_7bit_enc(char *pdu, char *text, size_t text_len, int padb);
ssize_t pdu_7bit_dec(char *pdu, char *text, size_t text_len, int padb);
void gsm_dcs_enc(uint8_t enc, uint16_t flags, uint8_t *dcs);
void gsm_dcs_dec(uint8_t dcs, uint8_t *enc, uint16_t *flags);
ssize_t gsm_ts_enc(char *pdu, size_t pdu_size, char *ts);
ssize_t gsm_ts_dec(char *pdu, size_t pdu_len, char *ts);
int gsm_addr_enc(char *pdu, size_t pdu_size, char *addr, size_t addr_len, uint8_t addr_type);
int gsm_addr_dec(char *pdu, size_t pdu_len, char *addr, size_t *addr_len, uint8_t *addr_type);
int gsm_sms_enc(char *pdu, size_t pdu_size, char *addr, size_t addr_len, uint8_t addr_type, uint8_t *udh, size_t udh_len, uint8_t *txt, size_t txt_len, uint8_t enc, uint16_t flags);
int gsm_sms_dec(char *pdu, size_t pdu_len, char *addr, size_t *addr_len, uint8_t *addr_type, uint8_t *udh, size_t *udh_len, uint8_t *txt, size_t *txt_len, uint8_t *enc, char *ts, uint16_t *flags);
int gsm_ucs2_to_7bit(char *gsm7, size_t gsm7_size, uint16_t ucs2);
int gsm_7bit_to_ucs2(char *gsm7, size_t gsm7_len, uint16_t *ucs2);
|