summaryrefslogtreecommitdiff
path: root/fw/esp32/components/eos/include/gsm.h
blob: eb893d6757423acc011b2b9110f6095b96725f49 (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
#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);