-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathRDSDecoder-private.h
More file actions
305 lines (289 loc) · 10.8 KB
/
Copy pathRDSDecoder-private.h
File metadata and controls
305 lines (289 loc) · 10.8 KB
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
/* Arduino RDS/RBDS (IEC 62016/NRSC-4-B) Decoding Library
* See the README file for author and licensing information. In case it's
* missing from your distribution, use the one here as the authoritative
* version: https://github.com/csdexter/RDSDecoder/blob/master/README
*
* This library is for decoding RDS/RBDS data streams (groups).
* See the example sketches to learn how to use the library in your code.
*
* This file contains definitions that are only used internally and shouldn't be
* needed by most users.
*/
#ifndef _RDSDECODER_PRIVATE_H_INCLUDED
#define _RDSDECODER_PRIVATE_H_INCLUDED
//Define RDS PI masks for EBU
#define RDS_PI_COUNTRY_MASK 0xF000
#define RDS_PI_COUNTRY_SHR 12
#define RDS_PI_AREA_MASK 0x0F00
#define RDS_PI_AREA_SHR 8
#define RDS_PI_PROGRAM_MASK word(0x00FF)
//Define RDS block B decoding masks
#define RDS_TYPE_MASK 0xF800
#define RDS_TYPE_SHR 11
#define RDS_TP 0x0400
#define RDS_PTY_MASK 0x03E0
#define RDS_PTY_SHR 5
#define RDS_TA word(0x0010)
#define RDS_MS word(0x0008)
#define RDS_DI word(0x0004)
#define RDS_DIPS_ADDRESS word(0x0003)
#define RDS_TEXTAB word(0x0010)
#define RDS_TEXT_ADDRESS word(0x000F)
#define RDS_PTYNAB word(0x0010)
#define RDS_PTYN_ADDRESS word(0x0001)
//Define RDS SL (group 1A) values and decoding masks
#define RDS_SLABEL_TYPE_PAGINGECC 0x00
#define RDS_SLABEL_TYPE_TMCID 0x01
#define RDS_SLABEL_TYPE_PAGINGID 0x02
#define RDS_SLABEL_TYPE_LANGUAGE 0x03
#define RDS_SLABEL_TYPE_INHOUSE 0x06
#define RDS_SLABEL_TYPE_EWSID 0x07
#define RDS_SLABEL_LA 0x8000
#define RDS_SLABEL_MASK 0x7000
#define RDS_SLABEL_SHR 12
#define RDS_SLABEL_VALUE_MASK 0x0FFF
#define RDS_PIN_DAY_MASK 0xF800
#define RDS_PIN_DAY_SHR 11
#define RDS_PIN_HOUR_MASK 0x07C0
#define RDS_PIN_HOUR_SHR 6
#define RDS_PIN_MINUTE_MASK word(0x003F)
#define RDS_PIN_PAGING_TYPE0 0x0400
#define RDS_PIN_PAGING_TYPE1_MASK 0x0300
#define RDS_PIN_PAGING_TYPE1_SHR 8
#define RDS_PIN_PAGING_TYPE1_ECC 0x0
#define RDS_PIN_PAGING_TYPE1_CCF 0x3
#define RDS_PIN_PAGING_TYPE0_PAC_MASK 0x03F0
#define RDS_PIN_PAGING_TYPE0_PAC_SHR 4
#define RDS_PIN_PAGING_TYPE0_OPC_MASK word(0x000F)
#define RDS_PAGING_TNGID_MASK word(0x001C)
#define RDS_PAGING_TNGID_SHR 2
#define RDS_PAGING_TNGID_NONE 0x0
#define RDS_PAGING_TNGID_00_99 0x1
#define RDS_PAGING_TNGID_00_39 0x2
#define RDS_PAGING_TNGID_40_99 0x3
#define RDS_PAGING_TNGID_40_69 0x4
#define RDS_PAGING_TNGID_70_99 0x5
#define RDS_PAGING_TNGID_00_19 0x6
#define RDS_PAGING_TNGID_20_39 0x7
#define RDS_PAGING_BSISID_MASK word(0x0003)
#define RDS_PAGING_OPC_MASK 0x0F00
#define RDS_PAGING_OPC_SHR 8
#define RDS_PAGING_PAC_MASK word(0x003F)
//Define RDS ODA (group 3A) values and decoding masks
#define RDS_AID_DEFAULT 0x0000
#define RDS_AID_TMC_TEST 0x0D45
#define RDS_AID_ERT 0x6552
#define RDS_AID_RTPLUS 0x4BD7
#define RDS_AID_IRDS 0xC563
#define RDS_AID_TMC 0xCD46 // 0xCD47 also seen in the wild
#define RDS_ODA_GROUP_MASK 0x1F
//Define RDS TMC Message (group 3A) decoding masks
#define RDS_TMC_MESSAGE_VARIANT_MASK 0xC000
#define RDS_TMC_MESSAGE_VARIANT_SHR 14
#define RDS_TMC_MESSAGE_VARIANT_LTN 0x0
#define RDS_TMC_MESSAGE_VARIANT_SID 0x1
#define RDS_TMC_MESSAGE_LTN_MASK 0x0FC0
#define RDS_TMC_MESSAGE_LTN_SHR 6
#define RDS_TMC_MESSAGE_LTN_ENCRYPTED 0x00
#define RDS_TMC_MESSAGE_AFI word(0x0020)
#define RDS_TMC_MESSAGE_MODE word(0x0010)
#define RDS_TMC_MESSAGE_SCOPE_INTERNATIONAL word(0x0008)
#define RDS_TMC_MESSAGE_SCOPE_NATIONAL word(0x0004)
#define RDS_TMC_MESSAGE_SCOPE_REGIONAL word(0x0002)
#define RDS_TMC_MESSAGE_SCOPE_URBAN word(0x0001)
#define RDS_TMC_MESSAGE_GAP_MASK 0x3000
#define RDS_TMC_MESSAGE_GAP_SHR 12
#define RDS_TMC_MESSAGE_SID_MASK RDS_TMC_MESSAGE_LTN_MASK
#define RDS_TMC_MESSAGE_SID_SHR RDS_TMC_MESSAGE_LTN_SHR
#define RDS_TMC_MESSAGE_TA_MASK word(0x0030)
#define RDS_TMC_MESSAGE_TA_SHR 4
#define RDS_TMC_MESSAGE_TW_MASK word(0x000C)
#define RDS_TMC_MESSAGE_TW_SHR 2
#define RDS_TMC_MESSAGE_TD_MASK word(0x0003)
//Define RDS TMC Message (group 8A) values and decoding masks
#define RDS_TMC_MESSAGE_SYSTEM 0x10
#define RDS_TMC_MESSAGE_SINGLE 0x08
#define RDS_TMC_MESSAGE_DURATION_MASK 0x07
#define RDS_TMC_MESSAGE_DIVERSION 0x8000
#define RDS_TMC_MESSAGE_DIRECTION 0x4000
#define RDS_TMC_MESSAGE_EXTENT_MASK 0x3800
#define RDS_TMC_MESSAGE_EXTENT_SHR 11
#define RDS_TMC_MESSAGE_EVENT_MASK 0x07FF
#define RDS_TMC_MESSAGE_LTN_ON_MASK 0xFC00
#define RDS_TMC_MESSAGE_LTN_ON_SHR 10
#define RDS_TMC_MESSAGE_SCOPE_ON_INTERNATIONAL 0x0200
#define RDS_TMC_MESSAGE_SCOPE_ON_NATIONAL 0x0100
#define RDS_TMC_MESSAGE_SCOPE_ON_REGIONAL word(0x0080)
#define RDS_TMC_MESSAGE_SCOPE_ON_URBAN word(0x0040)
#define RDS_TMC_MESSAGE_SID_ON_MASK word(0x003F)
#define RDS_TMC_MESSAGE_GSI_MASK 0x3000
#define RDS_TMC_MESSAGE_GSI_SHR 12
#define RDS_TMC_MESSAGE_CONTAINER_MASK 0x0FFF
#define RDS_TMC_MESSAGE_CONTAINER_SHL 16
#define RDS_TMC_MESSAGE_ENC_VARIANT_MASK 0xE000
#define RDS_TMC_MESSAGE_ENC_VARIANT_SHR 13
#define RDS_TMC_MESSAGE_EAG_TEST_MASK 0x1800
#define RDS_TMC_MESSAGE_EAG_TEST_SHR 11
#define RDS_TMC_MESSAGE_EAG_SID_MASK 0x07E0
#define RDS_TMC_MESSAGE_EAG_SID_SHR 5
#define RDS_TMC_MESSAGE_EAG_ENCID_MASK word(0x001F)
#define RDS_TMC_MESSAGE_EAG_LTNBE_MASK 0xFC00
#define RDS_TMC_MESSAGE_EAG_LTNBE_SHR 10
#define RDS_TMC_MESSAGE_LOCATION_FOREIGN_MASK 0xFC00
#define RDS_TMC_MESSAGE_LOCATION_FOREIGN_SHR 10
#define RDS_TMC_MESSAGE_LOCATION_FOREIGN_COUNTRY_MASK 0x3C0
#define RDS_TMC_MESSAGE_LOCATION_FOREIGN_COUNTRY_SHR 6
#define RDS_TMC_MESSAGE_LOCATION_FOREIGN_LTN_MASK word(0x003F)
#define RDS_TMC_MESSAGE_LOCATION_EVERYBODY 65533
#define RDS_TMC_MESSAGE_LOCATION_SILENT 65534
#define RDS_TMC_MESSAGE_LOCATION_NONE 65535
#define RDS_TMC_MESSAGE_EVENT_NULL 2047
//Define RDS RT+ Message (group 3A) decoding masks
#define RDS_RTP_MESSAGE_ERT 0x2000
#define RDS_RTP_MESSAGE_CB 0x1000
#define RDS_RTP_MESSAGE_SCB_MASK 0x0F00
#define RDS_RTP_MESSAGE_SCB_SHL 8
#define RDS_RTP_MESSAGE_TEMPLATE_MASK word(0x00FF)
//Define RDS RT+ Message (group 11A) decoding masks
#define RDS_RTP_MESSAGE_ITEM_TOGGLE 0x10
#define RDS_RTP_MESSAGE_ITEM_RUNNING 0x08
#define RDS_RTP_MESSAGE_CONTENT_1_1_MASK 0x07
#define RDS_RTP_MESSAGE_CONTENT_1_1_SHR 3
#define RDS_RTP_MESSAGE_CONTENT_1_2_MASK 0xE000
#define RDS_RTP_MESSAGE_CONTENT_1_2_SHL 13
#define RDS_RTP_MESSAGE_START_1_MASK 0x1F80
#define RDS_RTP_MESSAGE_START_1_SHL 7
#define RDS_RTP_MESSAGE_LENGTH_1_MASK word(0x007E)
#define RDS_RTP_MESSAGE_LENGTH_1_SHL 1
#define RDS_RTP_MESSAGE_CONTENT_2_1_MASK word(0x0001)
#define RDS_RTP_MESSAGE_CONTENT_2_1_SHR 5
#define RDS_RTP_MESSAGE_CONTENT_2_2_MASK 0xF800
#define RDS_RTP_MESSAGE_CONTENT_2_2_SHL 11
#define RDS_RTP_MESSAGE_START_2_MASK 0x07E0
#define RDS_RTP_MESSAGE_START_2_SHL 5
#define RDS_RTP_MESSAGE_LENGTH_2_MASK word(0x001F)
//Define RDS eRT Message (group 3A) decoding masks
#define RDS_ERT_MESSAGE_CODEPAGE_MASK word(0x003C)
#define RDS_ERT_MESSAGE_CODEPAGE_SHL 2
#define RDS_ERT_MESSAGE_RTL word(0x0002)
#define RDS_ERT_MESSAGE_UTF8 word(0x0001)
//Define RDS CT (group 4A) decoding masks
#define RDS_TIME_TZ_MASK 0x0000001FUL
#define RDS_TIME_TZ_SIGN 0x00000020UL
#define RDS_TIME_MINUTE_MASK 0x00000FC0UL
#define RDS_TIME_MINUTE_SHR 6
#define RDS_TIME_HOUR_MASK 0x0001F000UL
#define RDS_TIME_HOUR_SHR 12
#define RDS_TIME_MJD2_MASK 0xFFFE0000UL
#define RDS_TIME_MJD2_SHR 17
#define RDS_TIME_MJD1_MASK word(0x0003)
#define RDS_TIME_MJD1_SHL 15
//Define RDS EON (group 14A) values and decoding masks
#define RDS_EON_TP word(0x0010)
#define RDS_EON_MASK word(0x000F)
#define RDS_EON_PTY_A_MASK 0xF800
#define RDS_EON_PTY_A_SHR 11
#define RDS_EON_PTY_B_MASK word(0x0006)
#define RDS_EON_PTY_B_SHR 1
#define RDS_EON_PTY_B_NEWS 0x1
#define RDS_EON_PTY_B_WEATHER 0x2
#define RDS_EON_PTY_B_ALARM 0x3
#define RDS_EON_TA_A word(0x0001)
#define RDS_EON_TA_B word(0x0008)
#define RDS_EON_TYPE_PS_SA0 0x00
#define RDS_EON_TYPE_PS_SA1 0x01
#define RDS_EON_TYPE_PS_SA2 0x02
#define RDS_EON_TYPE_PS_SA3 0x03
#define RDS_EON_TYPE_AF 0x04
#define RDS_EON_TYPE_MF_FM0 0x05
#define RDS_EON_TYPE_MF_FM1 0x06
#define RDS_EON_TYPE_MF_FM2 0x07
#define RDS_EON_TYPE_MF_FM3 0x08
#define RDS_EON_TYPE_MF_AM 0x09
#define RDS_EON_TYPE_LINKAGE 0x0C
#define RDS_EON_TYPE_PTYTA 0x0D
#define RDS_EON_TYPE_PIN 0x0E
#define RDS_EON_TYPE_INHOUSE 0x0F
//Define RDS Enhanced Paging (group 13A) values and decoding masks
#define RDS_PAGING_CS_MASK word(0x0018)
#define RDS_PAGING_CS_SHR 3
#define RDS_PAGING_CS_1MIN 0x0
#define RDS_PAGING_CS_2MIN_ODD 0x02
#define RDS_PAGING_CS_2MIN_EVEN 0x03
#define RDS_PAGING_TYPE_MASK word(0x0007)
#define RDS_PAGING_TYPE_25BIT 0x0
#define RDS_PAGING_TYPE_50BIT_1 0x1
#define RDS_PAGING_TYPE_50BIT_2 0x2
#define RDS_PAGING_TYPE_VAS 0x3
#define RDS_PAGING_IT_MASK 0xF000
#define RDS_PAGING_IT_SHR 12
#define RDS_PAGING_SORT_MASK 0x0C00
#define RDS_PAGING_SORT_SHR 10
#define RDS_PAGING_SORT_NONE 0x0
#define RDS_PAGING_SORT_ASC 0x2
#define RDS_PAGING_SORT_DESC 0x3
#define RDS_PAGING_ADDR1_MASK 0x01FF
//Define RDS Paging (group 7A) values and decoding masks
#define RDS_PAGING_SEGMENT_MASK word(0x000F)
#define RDS_PAGING_SEGMENT_NOMESSAGE 0x0
#define RDS_PAGING_SEGMENT_FUNCTION_1 0x1
// Yes, the encoding skips one value, see §M.2.5.6 of RDS
#define RDS_PAGING_SEGMENT_FUNCTION_2 0x3
#define RDS_PAGING_SEGMENT_10DIGIT_1 0x2
#define RDS_PAGING_SEGMENT_10DIGIT_2 0x3
#define RDS_PAGING_SEGMENT_18DIGIT_1 0x4
#define RDS_PAGING_SEGMENT_18DIGIT_2 0x5
#define RDS_PAGING_SEGMENT_18DIGIT_3 0x6
#define RDS_PAGING_SEGMENT_15DIGIT_1 0x7
// Yes, the encoding goes backwards, see §M.2.5.5 of RDS
#define RDS_PAGING_SEGMENT_15DIGIT_2 0x5
#define RDS_PAGING_SEGMENT_15DIGIT_3 0x6
#define RDS_PAGING_SEGMENT_ALPHA_1 0x8
#define RDS_PAGING_SEGMENT_ALPHA_2 0x9
#define RDS_PAGING_SEGMENT_ALPHA_3 0xA
#define RDS_PAGING_SEGMENT_ALPHA_4 0xB
#define RDS_PAGING_SEGMENT_ALPHA_5 0xC
#define RDS_PAGING_SEGMENT_ALPHA_6 0xD
#define RDS_PAGING_SEGMENT_ALPHA_7 0xE
#define RDS_PAGING_SEGMENT_ALPHA_LAST 0xF
#define RDS_PAGING_CONTROL_INTERNATIONAL word(0x0020)
#define RDS_PAGING_CONTROL_REPEAT word(0x0010)
#define RDS_PAGING_ENHANCED_TYPE_MASK word(0x00C0)
#define RDS_PAGING_ENHANCED_TYPE_SHR 6
#define RDS_PAGING_ENHANCED_TYPE_ALPHA 0x0
#define RDS_PAGING_ENHANCED_TYPE_DIGIT 0x1
#define RDS_PAGING_ENHANCED_TYPE_FUNCTION 0x3
//Define RDS group types
#define RDS_GROUP_0A 0x00
#define RDS_GROUP_0B 0x01
#define RDS_GROUP_1A 0x02
#define RDS_GROUP_1B 0x03
#define RDS_GROUP_2A 0x04
#define RDS_GROUP_2B 0x05
#define RDS_GROUP_3A 0x06
#define RDS_GROUP_3B 0x07
#define RDS_GROUP_4A 0x08
#define RDS_GROUP_4B 0x09
#define RDS_GROUP_5A 0x0A
#define RDS_GROUP_5B 0x0B
#define RDS_GROUP_6A 0x0C
#define RDS_GROUP_6B 0x0D
#define RDS_GROUP_7A 0x0E
#define RDS_GROUP_7B 0x0F
#define RDS_GROUP_8A 0x10
#define RDS_GROUP_8B 0x11
#define RDS_GROUP_9A 0x12
#define RDS_GROUP_9B 0x13
#define RDS_GROUP_10A 0x14
#define RDS_GROUP_10B 0x15
#define RDS_GROUP_11A 0x16
#define RDS_GROUP_11B 0x17
#define RDS_GROUP_12A 0x18
#define RDS_GROUP_12B 0x19
#define RDS_GROUP_13A 0x1A
#define RDS_GROUP_13B 0x1B
#define RDS_GROUP_14A 0x1C
#define RDS_GROUP_14B 0x1D
#define RDS_GROUP_15A 0x1E
#define RDS_GROUP_15B 0x1F
#endif