WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
at_bt_productline_cmd_table.h
浏览该文件的文档.
1
7#ifndef AT_BT_PRODUCTLINE_CMD_TALBE_H
8#define AT_BT_PRODUCTLINE_CMD_TALBE_H
9#include "at.h"
10#include "bts_factory.h"
11
12/* 产线校准 */
13typedef struct {
14 uint32_t para_map;
15 int32_t coarse_val;
16 int32_t fine_val;
17} bt_pdl_xo_trim_t; // 频偏粗调
18
19typedef struct {
20 uint32_t para_map;
21 int16_t temp;
22} bt_pdl_temp_wr_efuse_t; // 写温度efuse
23
24typedef struct {
25 uint32_t para_map;
26 int16_t target_pwr; // 目标功率,单位:0.1 dBm
27 int16_t msrd_pwr; // 测量到的功率,单位:0.1 dBm
28} bt_pdl_pwr_cali_set_pwr_t; // 设置目标功率和实测功率
29
30/* 产线RF测试 */
31typedef struct {
32 uint32_t para_map;
33 int32_t tx_freq;
36 int32_t tx_phy;
37} ble_rf_tx_param_args_t; // BLE TX
38
39typedef struct {
40 uint32_t para_map;
41 int32_t rx_freq;
42 int32_t rx_phy;
44} ble_rf_rx_param_args_t; // BLE RX
45
46typedef struct {
47 uint32_t para_map;
48 int32_t tx_freq;
49 int32_t tx_power;
52 int32_t tx_phy;
53 int32_t tx_format;
54 int32_t tx_rate;
56 int32_t tx_polar_r;
57 int32_t tx_interval;
58} sle_rf_tx_param_args_t; // SLE TX
59
60typedef struct {
61 uint32_t para_map;
62 int32_t rx_freq;
63 int32_t rx_phy;
64 int32_t rx_format;
66 int32_t rx_interval;
67} sle_rf_rx_param_args_t; // SLE RX
68
69typedef struct {
70 uint32_t para_map;
71 int32_t rf_freq;
72 int32_t rf_mode;
74
75/* AT命令参数格式 */
77 {
80 .entry.int_range.min_val = 0x0,
81 .entry.int_range.max_val = 0xF,
82 .offset = offsetof(bt_pdl_xo_trim_t, coarse_val)
83 },
84 {
85 .type = AT_SYNTAX_TYPE_INT,
86 .last = true,
88 .entry.int_range.min_val = 0x0,
89 .entry.int_range.max_val = 0xFF,
90 .offset = offsetof(bt_pdl_xo_trim_t, fine_val)
91 },
92};
93
95 {
97 .last = true,
99 .entry.int_range.min_val = -40, // 最低-40 ℃
100 .entry.int_range.max_val = 120, // 最高120 ℃
101 .offset = offsetof(bt_pdl_temp_wr_efuse_t, temp)
102 },
103};
104
106 {
109 .entry.int_range.min_val = 0,
110 .entry.int_range.max_val = 300, // 300:不超过30dBm
111 .offset = offsetof(bt_pdl_pwr_cali_set_pwr_t, target_pwr)
112 },
113 {
114 .type = AT_SYNTAX_TYPE_INT,
115 .last = true,
117 .entry.int_range.min_val = 0,
118 .entry.int_range.max_val = 300, // 300:不超过30dBm
119 .offset = offsetof(bt_pdl_pwr_cali_set_pwr_t, msrd_pwr)
120 },
121};
122
123const int32_t ble_pk_payload_type_values[] = {
124 0, 1, 2, 3, 4, 5, 6, 7
125};
126const int32_t ble_rf_tx_phy_values[] = {
127 1, 2, 3, 4
128};
130 {
133 .entry.int_range.min_val = 0,
134 .entry.int_range.max_val = 39,
135 .offset = offsetof(ble_rf_tx_param_args_t, tx_freq)
136 },
137 {
138 .type = AT_SYNTAX_TYPE_INT,
140 .entry.int_range.min_val = 37,
141 .entry.int_range.max_val = 255,
142 .offset = offsetof(ble_rf_tx_param_args_t, test_data_len)
143 },
144 {
145 .type = AT_SYNTAX_TYPE_INT,
146 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
147 .entry.int_list = {8, ble_pk_payload_type_values},
148 .offset = offsetof(ble_rf_tx_param_args_t, pk_payload_type)
149 },
150 {
151 .type = AT_SYNTAX_TYPE_INT,
152 .last = true,
153 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
154 .entry.int_list = {4, ble_rf_tx_phy_values},
155 .offset = offsetof(ble_rf_tx_param_args_t, tx_phy)
156 },
157};
158
159const int32_t ble_rf_rx_phy_values[] = {
160 1, 2, 3, 4
161};
163 0, 1
164};
166 {
169 .entry.int_range.min_val = 0,
170 .entry.int_range.max_val = 39,
171 .offset = offsetof(ble_rf_rx_param_args_t, rx_freq)
172 },
173 {
174 .type = AT_SYNTAX_TYPE_INT,
175 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
176 .entry.int_list = {4, ble_rf_rx_phy_values},
177 .offset = offsetof(ble_rf_rx_param_args_t, rx_phy)
178 },
179 {
180 .type = AT_SYNTAX_TYPE_INT,
181 .last = true,
182 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
183 .entry.int_list = {2, ble_modulation_index_values},
184 .offset = offsetof(ble_rf_rx_param_args_t, modulation_index)
185 },
186};
187
188const int32_t sle_rf_tx_power_values[] = {
189 0, 1, 2, 3, 4, 5, 6, 7
190};
192 0, 1, 2, 3, 4, 5, 6, 7
193};
194const int32_t sle_rf_tx_phy_values[] = {
195 0, 1, 4
196};
197const int32_t sle_rf_tx_format_values[] = {
198 0, 2, 3
199};
200const int32_t sle_rf_tx_rate_values[] = {
201 0, 2, 3
202};
204 0, 1, 2, 3
205};
206const int32_t sle_rf_tx_polar_r_values[] = {
207 0, 1, 2, 3
208};
210 {
213 .entry.int_range.min_val = 0,
214 .entry.int_range.max_val = 78,
215 .offset = offsetof(sle_rf_tx_param_args_t, tx_freq)
216 },
217 {
218 .type = AT_SYNTAX_TYPE_INT,
219 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
220 .entry.int_list = {8, sle_rf_tx_power_values},
221 .offset = offsetof(sle_rf_tx_param_args_t, tx_power)
222 },
223 {
224 .type = AT_SYNTAX_TYPE_INT,
226 .entry.int_range.min_val = 37,
227 .entry.int_range.max_val = 256,
228 .offset = offsetof(sle_rf_tx_param_args_t, test_data_len)
229 },
230 {
231 .type = AT_SYNTAX_TYPE_INT,
232 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
233 .entry.int_list = {8, sle_rf_tx_payload_type_values},
234 .offset = offsetof(sle_rf_tx_param_args_t, pk_payload_type)
235 },
236 {
237 .type = AT_SYNTAX_TYPE_INT,
238 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
239 .entry.int_list = {3, sle_rf_tx_phy_values},
240 .offset = offsetof(sle_rf_tx_param_args_t, tx_phy)
241 },
242 {
243 .type = AT_SYNTAX_TYPE_INT,
244 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
245 .entry.int_list = {2, sle_rf_tx_format_values},
246 .offset = offsetof(sle_rf_tx_param_args_t, tx_format)
247 },
248 {
249 .type = AT_SYNTAX_TYPE_INT,
250 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
251 .entry.int_list = {3, sle_rf_tx_rate_values},
252 .offset = offsetof(sle_rf_tx_param_args_t, tx_rate)
253 },
254 {
255 .type = AT_SYNTAX_TYPE_INT,
256 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
257 .entry.int_list = {4, sle_rf_tx_pilot_ratio_values},
258 .offset = offsetof(sle_rf_tx_param_args_t, tx_pilot_ratio)
259 },
260 {
261 .type = AT_SYNTAX_TYPE_INT,
262 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
263 .entry.int_list = {4, sle_rf_tx_polar_r_values},
264 .offset = offsetof(sle_rf_tx_param_args_t, tx_polar_r)
265 },
266 {
267 .type = AT_SYNTAX_TYPE_INT,
268 .last = true,
270 .entry.int_range.min_val = 7,
271 .entry.int_range.max_val = 255,
272 .offset = offsetof(sle_rf_tx_param_args_t, tx_interval)
273 },
274};
275
276const int32_t sle_rf_rx_phy_values[] = {
277 0, 1, 4
278};
279const int32_t sle_rf_rx_format_values[] = {
280 0, 2
281};
283 0, 1, 2, 3
284};
286 {
289 .entry.int_range.min_val = 0,
290 .entry.int_range.max_val = 79,
291 .offset = offsetof(sle_rf_rx_param_args_t, rx_freq)
292 },
293 {
294 .type = AT_SYNTAX_TYPE_INT,
295 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
296 .entry.int_list = {3, sle_rf_rx_phy_values},
297 .offset = offsetof(sle_rf_rx_param_args_t, rx_phy)
298 },
299 {
300 .type = AT_SYNTAX_TYPE_INT,
301 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
302 .entry.int_list = {2, sle_rf_rx_format_values},
303 .offset = offsetof(sle_rf_rx_param_args_t, rx_format)
304 },
305 {
306 .type = AT_SYNTAX_TYPE_INT,
307 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
308 .entry.int_list = {4, sle_rf_rx_pilot_ratio_values},
309 .offset = offsetof(sle_rf_rx_param_args_t, rx_pilot_ratio)
310 },
311 {
312 .type = AT_SYNTAX_TYPE_INT,
313 .last = true,
315 .entry.int_range.min_val = 7,
316 .entry.int_range.max_val = 255,
317 .offset = offsetof(sle_rf_rx_param_args_t, rx_interval)
318 },
319};
320
321const int32_t rf_single_tone_mode[] = {
322 0, 1, 255
323};
325 {
328 .entry.int_range.min_val = 0,
329 .entry.int_range.max_val = 79,
330 .offset = offsetof(rf_single_tone_param_args_t, rf_freq)
331 },
332 {
333 .type = AT_SYNTAX_TYPE_INT,
334 .last = true,
335 .attribute = AT_SYNTAX_ATTR_LIST_VALUE,
336 .entry.int_list = {3, rf_single_tone_mode},
337 .offset = offsetof(rf_single_tone_param_args_t, rf_mode)
338 },
339};
340
341/* 注册回调 */
342/* CALLBACK */
346
347/* 单音 */
349
350/* 频偏校准 */
358
359/* 功率校准 */
365
366/* BLE TESTMODE */
371
372/* SLE TESTMODE */
377
378/* AT+BLEPWR? */
380
381/* AT BT PRODUCTLINE CMD TABLE */
383 {
384 "SLEENABLE",
385 1, // ID
386 0, // Attribute
387 NULL,
389 NULL,
390 NULL,
391 NULL,
392 },
393 {
394 "BLEFACCALLBACK",
395 2, // ID
396 0, // Attribute
397 NULL,
399 NULL,
400 NULL,
401 NULL,
402 },
403 {
404 "SLEFACCALLBACK",
405 3, // ID
406 0, // Attribute
407 NULL,
409 NULL,
410 NULL,
411 NULL,
412 },
413 {
414 "BLETX", // NAME
415 4, // ID
416 0, // ATTRIBUTE
417 ble_rf_tx_param_syntax, // SYNTAX
418 NULL, // cmd with no args, eg: AT+TEST
419 (at_set_func_t)bt_at_ble_rf_tx_cmd, // cmd with args, eg: AT+TEST=XX,XX,XX,XX
420 NULL, // read cmd, eg: AT+TEST?
421 NULL, // test cmd, eg: AT+TEST=?
422 },
423 {
424 "BLERX", // NAME
425 5, // ID
426 0, // ATTRIBUTE
427 ble_rf_rx_param_syntax, // SYNTAX
428 NULL, // cmd with no args, eg: AT+TEST
429 (at_set_func_t)bt_at_ble_rf_rx_cmd, // cmd with args, eg: AT+TEST=XX,XX,XX,XX
430 NULL, // read cmd, eg: AT+TEST?
431 NULL, // test cmd, eg: AT+TEST=?
432 },
433 {
434 "BLETRXEND",
435 6, // ID
436 0, // Attribute
437 NULL,
439 NULL,
440 NULL,
441 NULL,
442 },
443 {
444 "BLERST",
445 7, // ID
446 0, // Attribute
447 NULL,
449 NULL,
450 NULL,
451 NULL,
452 },
453 {
454 "SLETX",
455 8, // ID
456 0, // Attribute
458 NULL,
460 NULL,
461 NULL,
462 },
463 {
464 "SLERX",
465 9, // ID
466 0, // Attribute
468 NULL,
470 NULL,
471 NULL,
472 },
473 {
474 "SLETRXEND",
475 10, // ID
476 0, // Attribute
477 NULL,
479 NULL,
480 NULL,
481 NULL,
482 },
483 {
484 "SLERST",
485 11, // ID
486 0, // Attribute
487 NULL,
489 NULL,
490 NULL,
491 NULL,
492 },
493#if defined(BGLE_FEATURE_MFG_TEST)
494 {
495 "XOTRIM",
496 12, // ID
497 0, // Attribute
499 NULL,
502 NULL,
503 },
504 {
505 "READTEMP",
506 13, // ID
507 0, // Attribute
508 NULL,
510 NULL,
511 NULL,
512 NULL,
513 },
514 {
515 "XOEFUSE",
516 14, // ID
517 0, // Attribute
518 NULL,
520 NULL,
522 NULL,
523 },
524 {
525 "TEMPEFUSE",
526 15, // ID
527 0, // Attribute
529 NULL,
530 (at_set_func_t)bt_at_pdl_temp_wr_efuse_cmd, // 写温度 efuse
532 NULL,
533 },
534 {
535 "PWRCALI",
536 16, // ID
537 0, // Attribute
540 (at_set_func_t)bt_at_pdl_pwr_cali_set_pwr_cmd, // 设置参数,目标功率和实测功率
541 (at_read_func_t)bt_at_pdl_pwr_cali_get_val_cmd, // 读功率校准补偿值
542 NULL,
543 },
544 {
545 "PWRCALIEFUSE",
546 17, // ID
547 0, // Attribute
548 NULL,
549 (at_cmd_func_t)bt_at_pdl_pwr_cali_wr_efuse_cmd, // 写功率校准efuse
550 NULL,
551 (at_read_func_t)bt_at_pdl_pwr_cali_rd_efuse_cmd, // 读功率校准efuse
552 NULL,
553 },
554#endif
555 {
556 "BTTXLO",
557 18, // ID
558 0, // Attribute
560 NULL,
562 NULL,
563 NULL,
564 },
565 {
566 "BLEPWR",
567 19,
568 0,
569 NULL,
571 NULL,
572 NULL,
573 NULL,
574 },
575};
576#endif // AT_BT_PRODUCTLINE_CMD_TALBE_H
at_ret_t bt_at_pdl_pwr_cali_rd_efuse_cmd(void)
at_ret_t bt_at_pdl_temp_wr_efuse_cmd(bt_pdl_temp_wr_efuse_t *args)
at_ret_t bt_at_pdl_xo_trim_get_temp_cmd(void)
const int32_t sle_rf_tx_phy_values[]
Definition at_bt_productline_cmd_table.h:194
const int32_t rf_single_tone_mode[]
Definition at_bt_productline_cmd_table.h:321
const int32_t sle_rf_tx_payload_type_values[]
Definition at_bt_productline_cmd_table.h:191
at_ret_t cmd_get_bsle_pwr_cali_flag(void)
const int32_t sle_rf_tx_pilot_ratio_values[]
Definition at_bt_productline_cmd_table.h:203
at_ret_t bt_at_pdl_xo_trim_rd_cmd(void)
at_ret_t bt_at_ble_register_callback_cmd(void)
const at_para_parse_syntax_t sle_rf_tx_param_syntax[]
Definition at_bt_productline_cmd_table.h:209
const int32_t sle_rf_rx_pilot_ratio_values[]
Definition at_bt_productline_cmd_table.h:282
at_ret_t bt_at_sle_reset_cmd(void)
at_ret_t bt_at_sle_rf_tx_cmd(const sle_rf_tx_param_args_t *args)
const at_cmd_entry_t at_bt_productline_cmd_parse_table[]
Definition at_bt_productline_cmd_table.h:382
const int32_t sle_rf_tx_power_values[]
Definition at_bt_productline_cmd_table.h:188
const int32_t sle_rf_tx_format_values[]
Definition at_bt_productline_cmd_table.h:197
at_ret_t bt_at_pdl_pwr_cali_wr_efuse_cmd(void)
const int32_t sle_rf_tx_rate_values[]
Definition at_bt_productline_cmd_table.h:200
const at_para_parse_syntax_t ble_rf_rx_param_syntax[]
Definition at_bt_productline_cmd_table.h:165
const at_para_parse_syntax_t ble_rf_tx_param_syntax[]
Definition at_bt_productline_cmd_table.h:129
const at_para_parse_syntax_t pdl_set_temp_efuse_param_syntax[]
Definition at_bt_productline_cmd_table.h:94
at_ret_t bt_at_pdl_xo_trim_rd_efuse_cmd(void)
const int32_t ble_modulation_index_values[]
Definition at_bt_productline_cmd_table.h:162
const int32_t sle_rf_rx_format_values[]
Definition at_bt_productline_cmd_table.h:279
at_ret_t bt_at_sle_register_callback_cmd(void)
at_ret_t bt_at_sle_rf_trxend_cmd(void)
at_ret_t bt_at_enable_sle_cmd(void)
at_ret_t bt_at_pdl_pwr_cali_apply_cmd(void)
at_ret_t bt_at_pdl_temp_rd_efuse_cmd(void)
const int32_t sle_rf_tx_polar_r_values[]
Definition at_bt_productline_cmd_table.h:206
at_ret_t bt_at_ble_rf_tx_cmd(const ble_rf_tx_param_args_t *args)
at_ret_t bt_at_pdl_xo_trim_wr_efuse_cmd(void)
at_ret_t bt_at_pdl_pwr_cali_get_val_cmd(void)
at_ret_t bt_at_rf_single_tone_cmd(const rf_single_tone_param_args_t *args)
const at_para_parse_syntax_t sle_rf_rx_param_syntax[]
Definition at_bt_productline_cmd_table.h:285
const int32_t sle_rf_rx_phy_values[]
Definition at_bt_productline_cmd_table.h:276
at_ret_t bt_at_ble_rf_trxend_cmd(void)
const at_para_parse_syntax_t pdl_xo_trim_param_syntax[]
Definition at_bt_productline_cmd_table.h:76
const int32_t ble_rf_tx_phy_values[]
Definition at_bt_productline_cmd_table.h:126
const at_para_parse_syntax_t rf_single_tone_param_syntax[]
Definition at_bt_productline_cmd_table.h:324
at_ret_t bt_at_ble_rf_rx_cmd(const ble_rf_rx_param_args_t *args)
at_ret_t bt_at_sle_rf_rx_cmd(const sle_rf_rx_param_args_t *args)
at_ret_t bt_at_pdl_xo_trim_cmd(bt_pdl_xo_trim_t *args)
at_ret_t bt_at_ble_reset_cmd(void)
const at_para_parse_syntax_t pdl_pwr_cali_set_pwr_param_syntax[]
Definition at_bt_productline_cmd_table.h:105
const int32_t ble_pk_payload_type_values[]
Definition at_bt_productline_cmd_table.h:123
const int32_t ble_rf_rx_phy_values[]
Definition at_bt_productline_cmd_table.h:159
at_ret_t bt_at_pdl_pwr_cali_set_pwr_cmd(bt_pdl_pwr_cali_set_pwr_t *args)
#define NULL
Definition common_def.h:21
#define offsetof(type, member)
Definition list.h:66
at_ret_t(* at_set_func_t)(const void *arg)
声明AT命令设置函数类型。
Definition at.h:133
at_ret_t
定义AT错误码。
Definition at.h:46
at_ret_t(* at_cmd_func_t)(void)
声明AT命令执行函数类型。
Definition at.h:122
at_ret_t(* at_read_func_t)(void)
声明AT命令读函数类型。
Definition at.h:142
@ AT_SYNTAX_ATTR_AT_MAX_VALUE
Definition at.h:293
@ AT_SYNTAX_ATTR_AT_MIN_VALUE
Definition at.h:289
@ AT_SYNTAX_ATTR_LIST_VALUE
Definition at.h:297
@ AT_SYNTAX_TYPE_INT
Definition at.h:263
定义AT命令实体。
Definition at.h:346
定义AT命令某个参数校验结构。
Definition at.h:323
uint32_t type
Definition at.h:324
Definition at_bt_productline_cmd_table.h:39
int32_t rx_freq
Definition at_bt_productline_cmd_table.h:41
int32_t modulation_index
Definition at_bt_productline_cmd_table.h:43
uint32_t para_map
Definition at_bt_productline_cmd_table.h:40
int32_t rx_phy
Definition at_bt_productline_cmd_table.h:42
Definition at_bt_productline_cmd_table.h:31
int32_t pk_payload_type
Definition at_bt_productline_cmd_table.h:35
int32_t test_data_len
Definition at_bt_productline_cmd_table.h:34
int32_t tx_freq
Definition at_bt_productline_cmd_table.h:33
int32_t tx_phy
Definition at_bt_productline_cmd_table.h:36
uint32_t para_map
Definition at_bt_productline_cmd_table.h:32
Definition at_bt_productline_cmd_table.h:24
int16_t target_pwr
Definition at_bt_productline_cmd_table.h:26
uint32_t para_map
Definition at_bt_productline_cmd_table.h:25
int16_t msrd_pwr
Definition at_bt_productline_cmd_table.h:27
Definition at_bt_productline_cmd_table.h:19
int16_t temp
Definition at_bt_productline_cmd_table.h:21
uint32_t para_map
Definition at_bt_productline_cmd_table.h:20
Definition at_bt_productline_cmd_table.h:13
uint32_t para_map
Definition at_bt_productline_cmd_table.h:14
int32_t coarse_val
Definition at_bt_productline_cmd_table.h:15
int32_t fine_val
Definition at_bt_productline_cmd_table.h:16
Definition at_bt_productline_cmd_table.h:69
uint32_t para_map
Definition at_bt_productline_cmd_table.h:70
int32_t rf_freq
Definition at_bt_productline_cmd_table.h:71
int32_t rf_mode
Definition at_bt_productline_cmd_table.h:72
Definition at_bt_productline_cmd_table.h:60
int32_t rx_phy
Definition at_bt_productline_cmd_table.h:63
int32_t rx_format
Definition at_bt_productline_cmd_table.h:64
int32_t rx_interval
Definition at_bt_productline_cmd_table.h:66
uint32_t para_map
Definition at_bt_productline_cmd_table.h:61
int32_t rx_freq
Definition at_bt_productline_cmd_table.h:62
int32_t rx_pilot_ratio
Definition at_bt_productline_cmd_table.h:65
Definition at_bt_productline_cmd_table.h:46
int32_t tx_power
Definition at_bt_productline_cmd_table.h:49
int32_t tx_format
Definition at_bt_productline_cmd_table.h:53
int32_t pk_payload_type
Definition at_bt_productline_cmd_table.h:51
int32_t tx_freq
Definition at_bt_productline_cmd_table.h:48
int32_t tx_interval
Definition at_bt_productline_cmd_table.h:57
int32_t tx_pilot_ratio
Definition at_bt_productline_cmd_table.h:55
int32_t tx_rate
Definition at_bt_productline_cmd_table.h:54
uint32_t para_map
Definition at_bt_productline_cmd_table.h:47
int32_t tx_polar_r
Definition at_bt_productline_cmd_table.h:56
int32_t test_data_len
Definition at_bt_productline_cmd_table.h:50
int32_t tx_phy
Definition at_bt_productline_cmd_table.h:52