optek_link_config.h
22.3 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
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
#ifndef OPTEK_LINK_CONFIG_H_
#define OPTEK_LINK_CONFIG_H_
#undef ASSERT_ERR
#define ASSERT_ERR
#define uint8_t unsigned char
#define uint16_t unsigned short
#define uint32_t unsigned int
#define uint64_t unsigned long long
#define int8_t signed char
#define int16_t signed short
#define int32_t signed int
#define int64_t signed long long
#define LOGIC_ADDR_0 0 //recive all ,no reject
#define LOGIC_ADDR_DYNAMIC 0xFF //recive ->LOGIC_ADDR_DYNAMIC
/// Modified by Optek
#define MAX_DYNAMIC_INTV_SIZE 147
#define BC_ACT_ID 1 //multiconn
#define SCONN_ACT_ID 2 //shaed connection, ACK/NACK
#define LINK_STATUS_BIT_MASK 0xE0
#define LINK_STATUS_LADDR_1_BIT_MASK 0x80
#define LINK_STATUS_LADDR_2_BIT_MASK 0x40
#define LINK_STATUS_LADDR_3_BIT_MASK 0x20
#define LINK_STATUS_LADDR_4_BIT_MASK 0x10
#define LINK_STATUS_LOGIC_1_BIT_MASK 0x80
#define LINK_STATUS_LOGIC_2_BIT_MASK 0x40
#define LINK_STATUS_LOGIC_3_BIT_MASK 0x20
#define LINK_STATUS_EXT_MASK 0x80
#define SLAVE_ACK_MASK 0x80
#define MASTER_DEV_1_MASK 0x80
#define MASTER_DEV_2_MASK 0x80
#define MASTER_DEV_3_MASK 0x80
#define AE_LEN_W_ADI 4
#define AE_LEN_W_ADI_DYN 6
#define AE_LEN_WO_ADI 1
#define AE_LEN_W_PARING (2+6+1) //should be plused by 1???, min tx len 2+6+2+1
#define LINK_INDEX_POS 0
#define LINK_MODE_POS 1
#define DYNAMIC_0p5ms_CN_H 2
#define DYNAMIC_0p5ms_CN_L 3
#define SLAVE_RX_TX_ADJUST 34
//#define RF_TEST
#ifndef RF_TEST
#define RX_SKIP_ENABLE
//#define RX_SKIP_SEC2_DBG
//#define TX_SKIP_DISABLE
#endif //RF_TEST
#define MAX_SLAVE_W_TX_NUM 4
#define MAX_LINK_LOSS_ERR 16
#define NO_PT_END_TIME 0xFFFF
#define SLOT_TX 0
#define SLOT_RX 1
#define SLOT_IDLE 2
#ifdef RF_TEST
#define OPTEK_LINK_MAX_CH 8
const uint8_t optek_link_rf_test_ch[OPTEK_LINK_MAX_CH] =
{
0,12,24,16,22,28,32,36
};
#else
#define OPTEK_LINK_MAX_CH 37
#endif
/*
* Optek Wireless Link 2.0 => Optek Link 2.0
*
* Wireless Application music/voice/IoT/control system
* Low Latency, input point to output point min delay < 10ms
* Broadcast, no limitation for rx devices
* Multi Connection with Low latency, 255 devices
* Multi Connection with Long Rang (LE LR RF/baseband) and without low latency, 65535 devices
*/
enum {
GAME_HEADPHONE_PT_5MS_LP = 0, /*game headphone, min delay 12.5ms, tx 6 slots(sf48k), rx 2 slots(sf24k,total 4 slots), run 32Mhz*/
GAME_HEADPHONE_PT7P5MS_T7R3E = 72, /*game headphone, min delay (17.5ms-rx_time), tx 7 slots(sf48k), rx 3 x 2 slots(sf24k)*/
GAME_HEADPHONE_PT7P5MS_T6R4Ex2 = 73, /*game headphone, min delay (17.5ms-rx_time), tx 6 slots(sf24k), rx 2 x 2 x 2 (ext) slots(sf24k)*/
WIRELESS_MIC_PT2P5MS_LP = 1, /*wireless mic, sample freq 48k, min delay 7.5ms, 1 mics, t7, run 32Mhz*/
WIRELESS_MIC_PT5MS_LP = 2, /*witeless mic, sample freq 48k, min delay 12.5ms, 2 mics, t10, run 32MHz*/
BC_SF48K_PT2P5MS = 7, /*audio boradcast, sample freq 48k, min delay 7.5ms, tx6*/
BC_SF44K_PT2P5MS = 8, /*audio boradcast, sample freq 44.1k,min delay 7.5ms+, tx6+*/
BC_SF32K_PT2P5MS = 9, /*audio boradcast, sample freq 32k,min delay 7.5ms+, tx6+*/
BC_SF48K_PT5MS = 10, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx8*/
BC_SF48K_T7_PT5MS_LP = 11, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx7, run 32MHz*/
BC_SF44K_PT5MS = 12, /*audio boradcast, sample freq 44.1k,min delay 12.5ms+,, tx8+*/
BC_SF32K_PT5MS = 13, /*audio boradcast, sample freq 32k,min delay 12.5ms+, tx8+*/
BC_SF48K_T7_R1_PT5MS = 14, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx7+rx1*/
BC_SF44K_T7_R1_PT5MS = 15, /*audio boradcast, sample freq 44.1k,min delay 12.5ms+,, tx8+rx1*/
BC_SF32K_T7_R1_PT5MS = 16, /*audio boradcast, sample freq 32k,min delay 12.5ms+, tx7+rx1*/
BC_SF48K_SBC_PT5MS = 17, /*audio boradcast with sbc codec, sample freq 48k, min delay 10ms, tx5*/
BC_SF44K_SBC_PT5MS = 18, /*audio boradcast with sbc codec, sample freq 44k, min delay 10ms, tx6*/
BC_SF32K_SBC_PT5MS = 19, /*audio boradcast with sbc codec, sample freq 32k, min delay 10ms, tx6*/
SUBW_SF48K_PT2P5MS = 20, /*subw application for sf48K, min delay 5ms, tx7/rx1 or tx3/rx1*/
SUBW_SF44K_PT2P5MS = 21, /*subw application for sf44K, min delay 5ms*(48/44.1), tx7/rx1 or tx3/rx1*/
SUBW_SF32K_PT2P5MS = 22, /*subw application for sf 32k, min delay 5ms*(48/32), tx7/rx1 or tx3/rx1*/
TWS_SUBW_SF48K_PT5MS = 23, /*tws or subw application for sf48K, min delay 10ms, tx10/rx1 or tx3/rx1*/
TWS_SUBW_SF44K_PT5MS = 24, /*tws or sybw application for sf44K, min delay 10ms*(48/44.1), tx10/rx1 or tx3/rx1*/
TWS_SUBW_SF32K_PT5MS = 25, /*tws or subw application for sf 32k, min delay 10ms*(48/32), tx10/rx1 or tx3/rx1*/
TWS_SUBW_W_BT_SF48K = 26, /*tws or subw application in bt music for sf48k, tx7/rx1 or tx3/rx1*/
TWS_SUBW_W_BT_SF44K = 27, /*tws or subw application in bt music for sf44k, tx7/rx1 or tx3/rx1*/
IDLE_W_BT = 28, /*idle in bt music, tx1/rx1*/
BC_MONO_W_BT_SF48K = 29, /*bc application in bt music for sf48k, tx7*/
BC_MONO_W_BT_SF44K = 30, /*bc application in bt music for sf44k, tx7*/
BC_MONO_SF48K_PT5MS = 59, /*tws or subw application for sf48K, same with WIRELESS_MIC_PT5MS_T11_LP, min delay 12.5 ms, tx11*/
BC_MONO_SF44K_PT5MS = 31, /*tws or sybw application for sf44K, min delay 10ms, min delay 12.5 *(48/44.1) ms, tx11*/
BC_MONO_SF32K_PT5MS = 32, /*tws or subw application for sf 32k, min delay 10ms, min delay 12.5 * (48/44.1) ms, tx11*/
TWS_SUBW_W_BT_T6_SF48K = 33, /*tws or subw application in bt music for sf48k, tx6/rx1 or tx2/rx1*/
TWS_SUBW_W_BT_T6_SF44K = 34, /*tws or subw application in bt music for sf44k, tx6/rx1 or tx2/rx1*/
BC_MONO_W_BT_T6_SF48K = 35, /*bc application in bt music for sf48k, tx6*/
BC_MONO_W_BT_T6_SF44K = 36, /*bc application in bt music for sf44k, tx6*/
TWS_SUBW_W_BT_T5_SF48K = 37, /*tws or subw application in bt music for sf48k, tx5/rx1 or tx2/rx1*/
TWS_SUBW_W_BT_T5_SF44K = 38, /*tws or subw application in bt music for sf44k, tx5/rx1 or tx2/rx1*/
BC_MONO_W_BT_T5_SF48K = 39, /*bc application in bt music for sf48k, tx5*/
BC_MONO_W_BT_T5_SF44K = 40, /*bc application in bt music for sf44k, tx5*/
//SUBW_SF48K44K_PT5MS = 22, /*subw application for sf48K and sf44k, bt page scan can be enabled, min delay 7.5ms, tx7*/
//SUBW_SF32K_PT5MS = 23, /*subw application for sf 32k, min delay 10ms, bt page scan can be enabled, tx7*/
//SUBW_W_BT_T7_SF48K = 24, /*subw application in bt music for sf48k, 16.09ms free/22.5ms, tx7*/
//SUBW_W_BT_T6_SF48K = 25, /*subw application in bt music for sf48k, 17.02ms free/22.5ms, tx6*/
//SUBW_W_BT_T7_SF44K = 26, /*subw application in bt music for sf44k, 18.48ms free/25ms, tx7*/
//SUBW_W_BT_T6_SF44K = 27, /*subw application in bt music for sf44k, 19.42ms free/25ms, tx6*/
//SUBW_W_BT_SF32K = 28, /*subw application in bt music for sf32k, 27.34ms free/33.75ms, tx7*/
//BC_W_BT_T4_SF48K = 29, /*audio boradcast in bt for sf48k, 15.43 free/25, min mixing delay 52.5ms, tx5*/
//BC_W_BT_T4_SF44K = 30, /*audio boradcast in bt for sf44k, 17.64 free/27.2, min mixing delay 57.5ms,tx5*/
//BC_W_BT_T5_SF48K = 31, /*audio boradcast in bt for sf48k, 13.02 free/25, min mixing delay 52.5ms, tx5*/
//BC_W_BT_T5_SF44K = 32, /*audio boradcast in bt for sf44k, 15.23 free/27.2, min mixing delay 57.5ms, tx5*/
//BC_W_BT_T6_SF48K = 33, /*audio boradcast in bt for sf48k, 10.81 free/25, min mixing delay 52.5ms, tx6*/
//BC_W_BT_T6_SF44K = 34, /*audio boradcast in bt for sf44k, 12.82 free/27.2, min mixing delay 57.5ms, tx5*/
//BC_W_BT_SF32K = 35, /*audio boradcast in bt for sf48k, 23.11 free/37.5, tx6*/
//BC_W_BT_MONO_T6_SF48K = 36, /*audio mono boradcast in bt for sf48k, 17.84 free/25, min mixing delay 52.5ms, tx8*/
//BC_W_BT_MONO_T7_SF48K = 37, /*audio mono boradcast in bt for sf48k, 16.63 free/25, min mixing delay 52.5ms, tx8*/
//BC_W_BT_MONO_T8_SF48K = 38, /*audio mono boradcast in bt for sf48k, 15.43 free/25, min mixing delay 52.5ms, tx8*/
//BC_W_BT_MONO_T6_SF44K = 39, /*audio boradcast in bt for sf44k, 20.05 free/27.2, min mixing delay 57.5ms, tx5*/
//BC_W_BT_MONO_T7_SF44K = 40, /*audio boradcast in bt for sf44k, 18.84 free/27.2, min mixing delay 57.5ms, tx5*/
//BC_W_BT_MONO_T8_SF44K = 41, /*audio boradcast in bt for sf44k, 17.64 free/27.2, min mixing delay 57.5ms, tx5*/
//BC_W_BT_MONO_SF32K = 42, /*audio boradcast in bt for sf48k, 27.93 free/37.5, tx6*/
HUB_MIC_HEADPHONE_MONO_SF24K_PT5MS = 43, /*one mono headphone, one mic, min delay 12.5ms, sample freq 24k, tx7, rx7, run 32MHz*/
HUB_MICx2_HEADPHONE_MONO_SF24K_PT5MS = 44, /*one mono headphone, two mics, min delay 12.5ms, sample freq 24k,tx5,rx5,rx5*/ /*pri high*/
HUB_MIC_HEADPHONE_MONO_SF48K_PT5MS = 45, /*one mono headphone, one mic, min delay 12.5ms, sample freq 48k, tx6, rx6*/
HUB_MIC_HEADPHONE_SF48K_PT5MS = 46, /*one stereo headphone, one mic, min delay 12.5ms, sample freq 48k, tx5, rx5*/ /*pri high*/
HUB_MICx2_HEADPHONE_SF48K_PT5MS = 47, /*one stereo headphone, one mic, min delay 12.5ms, sample freq 48k, tx4,rx4,rx4, 64bps*/
HUB_MICx2_HEADPHONE_MONO_SF48K_PT5MS = 48, /*one mono headphone, two mic, min delay 12.5ms, sample freq 48k, tx5, rx4, rx4*/
HUB_MICx2_SF24K_MONO_SPK_SF48K_PT5MS = 49, /*one mono sf48k spk, two sf24k mics, min delay 12.5ms, sample freq 48k, tx5,rx5,rx5, 80bps*/ /*pri high*/
HUB_MULTI_MICx2_SF24K_MONO_SPK_SF48K_PT5MS = 50, /*one mono sf48k spk, two sf24k mics, min delay 12.5ms, sample freq 48k, tx5,rx5,rx5, tx 80bps, rx 72bps, fifo for N mic*/
MULTI_MIC_SF24K_3_PT7P5MS = 51, /*multi mic, sample freq 24k, min delay 12.5ms, total 17 slots, 3 mic x 5 slots tx, control 1 tx /1 rx, fifo for N mic*/
MULTI_MIC_SF24K_3_PT10MS = 52, /*multi mic, sample freq 24k, min delay 12.5ms, total 17 slots, 3 mic x 7 slots tx, control 1 tx /1 rx, fifo for N mic*/
MULTI_MICx3_SF24K_PT5MS = 53, /*multi mic, sample freq 24k, min delay 12.5ms, total 17 slots, 3 mic x 5 slots tx*/
MULTI_MICx3_SF24K_PT10MS = 54, /*multi mic, sample freq 24k, min delay 22.5ms, total 21 slots, 3 mic x 7 slots tx*/
MULTI_MICx3_SF24K_PT7P5MS = 55, /*multi mic, sample freq 24k, min delay 22.5ms, total 21 slots, 3 mic x 6 slots tx*/
BT_SHARED_CONNN = 57, /*tx1*/
BT_SHARED_CONNN_2 = 58, /*tx1/rx1*/
WIRELESS_MIC_PT5MS_T11_LP = 59, /*wireless mic for sf48K, same with min delay 12.5 ms, tx11*/
BC_SF48K_T5_R1_PT2P5MS = 60, /*audio boradcast, sample freq 48k, min delay 7.5ms, tx5/rx1*/
BC_SF44K_T5_R1_PT2P5MS = 61, /*audio boradcast, sample freq 44.1k,min delay 7.5ms+, tx5/rx1*/
BC_SF32K_T5_R1_PT2P5MS = 62, /*audio boradcast, sample freq 32k,min delay 7.5ms+, tx5/rx1*/
BC_SF48K_PT2P5MS_LP = 63, /*audio boradcast, sample freq 48k, min delay 7.5ms, tx5, run 32MHz*/
BC_SF48K_SBC_PT2P5MS = 64, /*audio boradcast with sbc codec, sample freq 48k, min delay 5ms, tx4*/
BC_SF44K_SBC_PT2P5MS = 65, /*audio boradcast with sbc codec, sample freq 44k, min delay 5ms, tx5*/
BC_SF32K_SBC_PT2P5MS = 66, /*audio boradcast with sbc codec, sample freq 32k, min delay 5ms, tx5*/
BC_SF48K_PT10MS = 67,
BC_SF44K_PT10MS = 68,
BC_SF32K_PT10MS = 69,
HUB_MIC_HEADPHONE_MONO_SF24K_PT10MS = 70,
HUB_MIC_MONO_SF24K_PT10MS = 71,
HUB_MIC_HEADPHONE_SF46p875K_PT5MS = 75, /*one stereo headphone, one mic, min delay 12.74ms, sample freq 46.875k, tx5, rx5*/
HUB_HEADPHONE_SF46p875K_PT5MS = 82, /*audio boradcast, sample freq 46.875k, min delay 15ms, tx8*/
MIC_SF44K_SBC_PT2P5MS = 76, /*audio (mic) boradcast with sbc codec, sample freq 44k, min delay 5*(48/44.1)ms, tx6*/
BC_SF48K_PT7P5MS = 77, /*audio boradcast, sample freq 48k, min delay 15ms, tx10, run 32MHz*/
/* test 5 meter away, 80% 1st rx, 16% 2nd rx, 3rd 2%, oters 2%*/
WIRELESS_MIC_PT2P5MS_T7R1 = 78, /*wireless mic, sample freq 48k, min delay 7.5ms, 1 mics, tx7/rx1, run 32Mhz*/
WIRELESS_MIC_PT5MS_T10_R2_LP = 79, /*wireless mic for sf48K, same with min delay 12.5 ms, tx10/rx2*/
WIRELESS_MIC_PT5MS_T9_R2_LP = 84, /*wireless mic for sf48K, same with min delay 12.5 ms, tx9/rx2*/
/* test 5 meter away, 80% 1st rx, 16% 2nd rx, 3rd 2%, oters 2%*/
//the following mode, one mic need one rx chip, two mic need two rx chips (all chips are synced with one rx master)
WIRELESS_MIC_48K_PT2P5MS_T7R1M = 3, /*wireless mic, sample freq 48k, min delay 7.5ms, 1 mics, 2 mics need 2 rx chip, tx7/rx1 master*/
WIRELESS_MIC_44K_PT2P5MS_T7R1M = 4, /*wireless mic, sample freq 44k, min delay 8.2ms, 1 mics, 2 mics need 2 rx chip, tx7/rx1 master*/
WIRELESS_MIC_48K_PT5MS_T10_R2M_LP = 5, /*wireless mic, sample freq 48K, min delay 12.5 ms, 1 mics, 2 mics need 2 rx chip, tx10/rx2 master*/
WIRELESS_MIC_44K_PT5MS_T10_R2M_LP = 6, /*wireless mic, sample freq 44K, min delay 13.6 ms, 1 mics, 2 mics need 2 rx chip, tx10/rx2 master*/
//WIRELESS_MIC_48K_PT5MS_T11_R2M = 85, /*wireless mic, sample freq 48K, min delay 12.5 ms, 1 mics, 2 mics need 2 rx chip, tx11/rx2 master*/
//WIRELESS_MIC_44K_PT5MS_T11_R2M = 86, /*wireless mic, sample freq 44K, min delay 13.6 ms, 1 mics, 2 mics need 2 rx chip, tx11/rx2 master*/
//WIRELESS_MIC_48K_PT7P5MS_T14_R2M_LP = 87, /*wireless mic, sample freq 48K, min delay 17.5 ms, 1 mics, 2 mics need 2 rx chip, tx14/rx2 master*/
//WIRELESS_MIC_44K_PT7P5MS_T14_R2M_LP = 88, /*wireless mic, sample freq 44K, min delay 19.06 ms, 1 mics, 2 mics need 2 rx chip, tx14/rx2 master*/
//the following mode, one rx chip support 2 mics
//WIRELESS_MICx2_48K_PT5MS_T6_T6_R1M_LP = 89, /*wireless mic, sample freq 48K, min delay 12.5 ms, 2 mics, tx6tx6/rx2*/
//WIRELESS_MICx2_44K_PT5MS_T6_T6_R1M_LP = 90, /*wireless mic, sample freq 44K, min delay 12.5 ms, 2 mics, tx6tx6/rx2*/
WIRELESS_MICx2_48K_PT7P5MS_T7T7_R2M = 91, /*wireless mic, sample freq 48K, min delay 17.5 ms, 2 mics, tx7tx7/rx2*/
WIRELESS_MICx2_44K_PT7P5MS_T7T7_R2M = 92, /*wireless mic, sample freq 44K, min delay 19.06 ms, 2 mics, tx7tx7/rx2*/
WIRELESS_MICx2_24K_PT5MS_T7T7_R2M_LP = 93, /*wireless mic, sample freq 48K, min delay 12.5 ms, 2 mics, tx7tx7/rx2*/
WIRELESS_MICx2_24K_PT7P5MS_T9T9_R2M_LP = 94, /*wireless mic, sample freq 48K, min delay 17.5 ms, 2 mics, tx9tx9/rx2*/
WIRELESS_MICx2_24K_PT10MS_T11T11_R2M_LP = 95, /*wireless mic, sample freq 48K, min delay 22.5 ms, 2 mics, tx11tx11/rx2*/
WIRELESS_MICx3_48K_PT10MS_T7TT7T7_R2T1M_LP = 96,
BC_SF48K_PT5MS_TX7 = 97, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx7*/
BC_SF48K_PT5MS_TX6 = 98, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx6*/
BC_SF48K_T7_S2_PT5MS = 99, /*audio boradcast, sample freq 48k,min delay 12.5ms, tx7+s1rx1+s2rx1*/
OPTEK_LINK_MODE_MAX = 100,
};
enum {
OPTEK_LINK_MASTER = 0,
OPTEK_LINK_SLAVE = 1,
OPTEK_LINK_SCAN = 2,
OPTEK_LINK_SLAVE_SYNCED = 3,
};
#define OPTEK_LINK_H1 0x01 /*for multi conn*/
#define OPTEK_LINK_H2 0x02 /*for shared conn ack/nack*/
#define MAX_BC_NUM 32
//#define DYN_0p5us_CN
#define MAX_FRAMES 4
/// Time information
/*@TRACE*/
typedef struct
{
/// Integer part of the time (in half-slot)
uint32_t hs;
/// Fractional part of the time (in half-us) (range: 0-624)
uint32_t hus;
} rwip_time_t;
struct optek_link_tag
{
uint8_t link_role;
uint8_t link_mode;
uint8_t link_mode_req;
uint8_t link_mode_req_en;
uint8_t link_pri;
uint8_t link_pri_req;
uint8_t slave_master_n; /*0->master, 1->slave*/
uint8_t slave_syned;
uint8_t scan; /*in scan phase*/
uint8_t full_band;
uint8_t sch_index;
uint8_t ch_ind;
uint8_t bc_num; /*total tx/rx slots, shoud < MAX_BC_NUM*/
uint8_t bc_index; /*current tx/rx slot in bc_num*/
uint8_t slave_bc_num;
uint8_t slave_bc_index;
uint8_t slave_bc_ext_frame; /*slave bc frame more than 1 packet time*/
uint8_t tx_data_len;
uint8_t tx_data_req;
uint16_t bc_index_offset[MAX_BC_NUM];
uint16_t tx_rx_len[MAX_BC_NUM];
uint16_t max_slave_rx_len;
uint16_t max_master_rx_len;
uint8_t rx_tx_n[MAX_BC_NUM];
uint8_t channel[OPTEK_LINK_MAX_CH];
uint8_t chan_size;
uint8_t aa [4]; /*access code based on bt addr*/
uint8_t public_addr[6];
//uint8_t public_addr_present;
uint8_t logic_conn_addr; //multi link multi conn ( >2 ), 0xFF->dynamic
uint8_t logic_addr; //multi link multi conn ( >2 ), logic addr. 0->only rx, 0xFF->dynamic, max 4
uint8_t slave_rx_all; //multi link multi conn ( > 2), rx all packet
uint8_t rx_skip_disable; //test for slot timing
uint8_t dynamic_intv_table[MAX_DYNAMIC_INTV_SIZE];
uint8_t dynamic_intv_index;
uint8_t dynamic_intv_size;
uint8_t *tx_data;
uint8_t *tx_ae_header_data;
uint8_t paring_en;
uint8_t paring_ind;
uint8_t paring_percentage;
uint8_t paring_percentage_tick;
uint16_t paring_time;
uint16_t paring_ticks;
uint8_t polling;
uint8_t paring_group[3]; //crc
uint8_t tx_power;
uint8_t paring_power;
uint8_t tx_skip;
uint8_t rx_skip;
//uint8_t rx_master_sect_2_skip;
uint8_t rx_ext_skip[MAX_FRAMES];
uint8_t max_rx_len[MAX_BC_NUM];
uint8_t max_tx_len[MAX_BC_NUM];
uint8_t rx_ext_cn;
rwip_time_t intv;
uint16_t scan_interval;
uint16_t scan_window;
uint16_t scan_start_random;
uint8_t synced_1st;
uint8_t link_end_req;
uint8_t master_sect_1_end;
uint8_t master_sect_2_start; //master sect 1 and last must be master tx slot
uint8_t slave_tx_start;
uint8_t interface; //one frame, txrxtx
//uint8_t paring_num;
uint32_t rx_err;
uint16_t slave_rx_err;
uint8_t slave_rx_mode_err;
uint16_t master_rx_err[MAX_SLAVE_W_TX_NUM];
uint16_t master_rx_frame_end[MAX_SLAVE_W_TX_NUM];
uint8_t master_tx_skip[MAX_SLAVE_W_TX_NUM];
uint8_t master_link_status;
uint8_t slave_rx_status_mask_bit;
//for slave sync with master
uint8_t slot_index_0_boundary; //slot is exactly 2.5ms * N
uint8_t last_rssi;
uint8_t rxsync_1st_present;
uint32_t base_cnt_rxsync_1st;
uint16_t fine_cnt_rxsync_1st;
uint32_t base_cnt_rxsync_last;
uint16_t fine_cnt_rxsync_last;
#ifdef DYN_0p5us_CN
int16_t adjust_0p5us_cn_1st;
int16_t adjust_0p5us_cn_last;
#endif
int32_t swap_cn;
//master tx dymanic sync with external audio source (usb/optical/slave i2s)
int8_t dynamic_sync; //0->no bynamic sync, 1->+0.5us, -1->0.5us
uint8_t sync_step;
uint16_t sync_int;
uint16_t sync_int_cnt;
uint32_t sync_frac;
uint32_t sync_frac_cnt;
#ifdef DYN_0p5us_CN
int16_t adjust_0p5us_cn;
#endif
uint8_t frac_ov;
uint32_t duration_min;
uint32_t duration_min_w_rx_resp;
uint8_t rx_resp; //need slave to send rx_resp, 0->rx not secc, others->rx succ and skip slots
uint8_t sched_shrink; //if rx_resp = 1, shrink tx slot depends on rx
uint8_t rx_buf; //store rx info
uint8_t rx_len;
//for multi mics
uint8_t max_mics;
};
#define BLE_PREFETCH_TIME_US (90) //based on test, run 64Mhz/sdram debug, 85usng, 86ok
#define BLE_PREFETCHABORT_TIME_US (BLE_PREFETCH_TIME_US+30)
/// Margin for event time reservation (in half-us)
#define BLE_RESERVATION_TIME_MARGIN_HUS (2 * BLE_PREFETCHABORT_TIME_US)
#endif