myRadio.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. #include "board.h"
  2. #include "myRadio.h"
  3. #include "myRadio_gpio.h"
  4. #include "stm32f10x_it.h"
  5. /**-------------------------radio include----------------------------------**/
  6. #include "math.h"
  7. #include "A7169_hal.h"
  8. #include "A7169reg.h"
  9. #include "A7169config_433Mhz10kbps.h"
  10. #include "A7169config_433Mhz50kbps.h"
  11. #include "A7169config_433Mhz100kbps.h"
  12. /**-------------------------radio include end----------------------------------**/
  13. static int8_t rfTxPower;
  14. static uint32_t rfFrequence;
  15. static uint32_t rfBaudrate;
  16. static rfRxCallBack rxCb;
  17. static uint8_t rfRxBuffer[255];
  18. static uint32_t rf_handle;
  19. static uint8_t rf_workProcess;
  20. static uint8_t chipType;
  21. /**-------------------------radio params----------------------------------**/
  22. static bool rf_irq;
  23. static irqCallback_ts myIrqCallback_tim1;
  24. A7169Config_ts A7169ConfigList[MAX_RF_BAUDRATE_COUNT] =
  25. {
  26. {
  27. .config = A7169Config_433Mhz10kbps,
  28. .pageA = A7169Config_PageA_433Mhz10kbps,
  29. .pageB = A7169Config_PageB_433Mhz10kbps,
  30. },
  31. {
  32. .config = A7169Config_433Mhz50kbps,
  33. .pageA = A7169Config_PageA_433Mhz50kbps,
  34. .pageB = A7169Config_PageB_433Mhz50kbps,
  35. },
  36. {
  37. .config = A7169Config_433Mhz100kbps,
  38. .pageA = A7169Config_PageA_433Mhz100kbps,
  39. .pageB = A7169Config_PageB_433Mhz100kbps,
  40. }
  41. };
  42. rfTxPowerReg_ts rfTxPowerList_433[RF_TX_PWR_MAX_COUNT] =
  43. {
  44. {.power = -14, .tbg = 0, .tdc = 2, .pac = 1,},
  45. {.power = -13, .tbg = 2, .tdc = 0, .pac = 0,},
  46. {.power = -12, .tbg = 3, .tdc = 0, .pac = 0,},
  47. {.power = -11, .tbg = 6, .tdc = 0, .pac = 0,},
  48. {.power = -10, .tbg = 9, .tdc = 0, .pac = 0,},
  49. {.power = -9, .tbg = 11, .tdc = 0, .pac = 0,},
  50. {.power = -8, .tbg = 14, .tdc = 0, .pac = 0,},
  51. {.power = -7, .tbg = 16, .tdc = 0, .pac = 0,},
  52. {.power = -6, .tbg = 1, .tdc = 0, .pac = 1,},
  53. {.power = -5, .tbg = 21, .tdc = 0, .pac = 0,},
  54. {.power = -4, .tbg = 23, .tdc = 0, .pac = 0,},
  55. {.power = -3, .tbg = 1, .tdc = 1, .pac = 1,},
  56. {.power = -2, .tbg = 3, .tdc = 1, .pac = 1,},
  57. {.power = -1, .tbg = 3, .tdc = 2, .pac = 1,},
  58. {.power = 0, .tbg = 4, .tdc = 1, .pac = 1,},
  59. {.power = 1, .tbg = 10, .tdc = 2, .pac = 1,},
  60. {.power = 2, .tbg = 13, .tdc = 2, .pac = 1,},
  61. {.power = 3, .tbg = 17, .tdc = 2, .pac = 1,},
  62. {.power = 4, .tbg = 21, .tdc = 2, .pac = 1,},
  63. {.power = 5, .tbg = 25, .tdc = 2, .pac = 1,},
  64. {.power = 6, .tbg = 29, .tdc = 2, .pac = 1,},
  65. {.power = 7, .tbg = 32, .tdc = 2, .pac = 1,},
  66. {.power = 8, .tbg = 35, .tdc = 2, .pac = 1,},
  67. {.power = 9, .tbg = 38, .tdc = 2, .pac = 1,},
  68. {.power = 10, .tbg = 41, .tdc = 2, .pac = 1,},
  69. {.power = 11, .tbg = 44, .tdc = 2, .pac = 1,},
  70. {.power = 12, .tbg = 47, .tdc = 2, .pac = 1,},
  71. {.power = 13, .tbg = 51, .tdc = 2, .pac = 1,},
  72. {.power = 14, .tbg = 54, .tdc = 2, .pac = 1,},
  73. {.power = 15, .tbg = 57, .tdc = 2, .pac = 1,},
  74. {.power = 16, .tbg = 59, .tdc = 2, .pac = 1,},
  75. {.power = 17, .tbg = 61, .tdc = 2, .pac = 1,},
  76. {.power = 18, .tbg = 62, .tdc = 2, .pac = 1,},
  77. {.power = 19, .tbg = 63, .tdc = 2, .pac = 1,},
  78. {.power = 20, .tbg = 63, .tdc = 2, .pac = 1,},
  79. };
  80. static void tim1_callback(uint8_t status, uint32_t param);
  81. uint8_t getRfPowerTabIndex(int8_t power);
  82. /**-------------------------radio params end----------------------------------**/
  83. void myRadio_delay(uint32_t time_ms)
  84. {
  85. uint32_t i, j;
  86. i = time_ms;
  87. while (i --)
  88. {
  89. for ( j = 0; j < 1000; j++)
  90. {
  91. ;
  92. }
  93. }
  94. }
  95. /**
  96. * @brief IO口中断回调
  97. * IO口产生中断后会执行该函数
  98. * 用于接收射频工作的中断响应
  99. *
  100. * @param index
  101. */
  102. void myRadio_gpioCallback(uint8_t index)
  103. {
  104. if (rf_handle != 0xe5)
  105. {
  106. return;
  107. }
  108. if ((rf_workProcess != RWP_TX) && (rf_workProcess != RWP_RX))
  109. {
  110. return;
  111. }
  112. rf_irq = true;
  113. }
  114. /**
  115. * @brief 射频初始化
  116. *
  117. * @param agr0
  118. * @param agr1_ptr 无线工作状态响应回调
  119. * 产生回调给外部使用,@rfRxCallBack
  120. */
  121. void myRadio_init(int agr0, void *agr1_ptr)
  122. {
  123. myRadio_gpio_init(myRadio_gpioCallback);
  124. /**-------------------------radio init----------------------------------**/
  125. A7169_SetConfig(A7169ConfigList[rfBaudrate]);
  126. A7169_POR();
  127. if(InitRF()) //init RF
  128. {
  129. // entry_deep_sleep_mode();
  130. // myRadio_delay(2);
  131. // wake_up_from_deep_sleep_mode();
  132. rf_workProcess = RWP_IDLE;
  133. }
  134. /**-------------------------radio init end----------------------------------**/
  135. RF_EXT_PA_TO_IDLE();
  136. if ((rfRxCallBack )agr1_ptr)
  137. {
  138. rxCb = (rfRxCallBack )agr1_ptr;
  139. }
  140. rf_handle = 0xe5;
  141. }
  142. /**
  143. * @brief 射频底层执行程序
  144. * 要放在主循环中执行
  145. *
  146. */
  147. void myRadio_process(void)
  148. {
  149. rfRxPacket_ts packet;
  150. if (rf_handle == 0)
  151. {
  152. return;
  153. }
  154. if (rf_irq == false)
  155. {
  156. return;
  157. }
  158. rf_irq = false;
  159. switch (rf_workProcess)
  160. {
  161. case RWP_TX:
  162. {//Tx done
  163. rxCb(TX_STA_SECCESS, packet);
  164. rf_workProcess = RWP_IDLE;
  165. }
  166. break;
  167. case RWP_RX:
  168. {//Rx done
  169. packet.rssi = 127;
  170. RxPacket_ReadFifo(packet.payload, packet.len);
  171. rxCb(RX_STA_SECCESS, packet);
  172. rf_workProcess = RWP_IDLE;
  173. }
  174. break;
  175. default:
  176. break;
  177. }
  178. }
  179. /**
  180. * @brief 退出射频进入休眠
  181. *
  182. */
  183. void myRadio_abort(void)
  184. {
  185. if (rf_handle == 0)
  186. {
  187. return;
  188. }
  189. rf_workProcess = RWP_IDLE;
  190. RF_EXT_PA_TO_IDLE();
  191. entry_deep_sleep_mode();
  192. }
  193. /**
  194. * @brief 获取射频工作中心频率
  195. *
  196. * @return uint32_t
  197. */
  198. uint32_t myRadio_getFrequency(void)
  199. {
  200. if (rf_handle == 0)
  201. {
  202. return 0;
  203. }
  204. return rfFrequence;
  205. }
  206. /**
  207. * @brief 设置射频工作中心频率
  208. *
  209. * @param freq
  210. * 具体频点,单位:Hz
  211. * 参考数据手册【13. Tranceiver Frequency】章节
  212. * 433频段:具体使用范围:410~456MHz
  213. */
  214. void myRadio_setFrequency(uint32_t freq)
  215. {
  216. if (rf_handle == 0)
  217. {
  218. return;
  219. }
  220. rfFrequence = freq;
  221. pll1_tu pll1_reg;
  222. double freqFloat;
  223. double integerPartFloat; //整数部分
  224. uint32_t integerPart; //整数部分
  225. double integerOffsetPart; //整数部分剩余的小数
  226. uint32_t freactionalPart; //小数部分
  227. freqFloat = (double)rfFrequence / 1000000;
  228. integerOffsetPart = freqFloat / 12.8;
  229. integerOffsetPart = modf (integerOffsetPart , &integerPartFloat);
  230. integerPart = (uint16_t)integerPartFloat;
  231. freactionalPart = (uint32_t)(integerOffsetPart * 65535);
  232. pll1_reg.value = A7169ConfigBuffer.config[PLL1_REG];
  233. pll1_reg.bits_w.ip = integerPart;
  234. A7169ConfigBuffer.config[PLL1_REG] = pll1_reg.value;
  235. A7169ConfigBuffer.config[PLL2_REG] = freactionalPart;
  236. A7169_WriteReg(PLL1_REG, pll1_reg.value);
  237. A7169_WriteReg(PLL2_REG, freactionalPart);
  238. }
  239. // When DCM[1:0] = 01, 10, 11, chip will execute preamble length detection automatically.
  240. // [000]: 0 bit (Note: When PMD=[000], DC is not hold after ID detected.)
  241. // [001]: 4 bits
  242. // [010]: 8 bits (Default value)
  243. // [011]: 16 bits
  244. // [100]: 24 bits.
  245. // [101] and [11x]: 32bits.
  246. void myRadio_setRxDetectPreambLen(uint8_t len)
  247. {
  248. rx2_tu rx2;
  249. rx2.value = A7169ConfigBuffer.config[RX2_REG];
  250. rx2.bits_w.PMD = len;
  251. A7169ConfigBuffer.config[RX2_REG] = rx2.value;
  252. A7169_WriteReg(RX2_REG, rx2.value);
  253. }
  254. // [000]: 1 byte.
  255. // [001]: 2 bytes.
  256. // [010]: 3 bytes.
  257. // [011]: 4 bytes.
  258. // [100]: 16 byte.
  259. // [101]: 32 bytes.
  260. // [110]: 48 bytes.
  261. // [111]: 64 bytes.
  262. void myRadio_setTxPreambLen(uint8_t len)
  263. {
  264. pageA_code_tu pageA_code;
  265. pageA_code.value = A7169ConfigList[rfBaudrate].pageA[CODE_PAGEA];
  266. pageA_code.bits_w.PML = len;
  267. A7169_WritePageA(CODE_PAGEA, pageA_code.value);
  268. }
  269. // @mode: gioModeSlt_e
  270. void myRadio_setGio1Int(gioModeSlt_e mode)
  271. {
  272. pageA_gio_tu pageA_gio;
  273. pageA_gio.value = A7169ConfigList[rfBaudrate].pageA[GIO_PAGEA];
  274. pageA_gio.bits_w.gio1s = mode;
  275. A7169ConfigList[rfBaudrate].pageA[GIO_PAGEA] = pageA_gio.value;
  276. A7169_WritePageA(GIO_PAGEA, pageA_gio.value);
  277. }
  278. // [00]: 2 bytes.
  279. // [01]: 4 bytes.
  280. // [10]: 6 bytes.
  281. // [11]: 8 bytes.
  282. void myRadio_setIdCodeLen(uint8_t len)
  283. {
  284. pageA_code_tu pageA_code;
  285. pageA_code.value = A7169ConfigList[rfBaudrate].pageA[CODE_PAGEA];
  286. pageA_code.bits_w.IDL0 = len & 0x01;
  287. pageA_code.bits_w.IDL1 = len & 0x02;
  288. A7169ConfigList[rfBaudrate].pageA[CODE_PAGEA] = pageA_code.value;
  289. A7169_WritePageA(CODE_PAGEA, pageA_code.value);
  290. }
  291. // @return: 0: success, 1: fail
  292. int myRadio_setIdCode(uint8_t *id, uint8_t len)
  293. {
  294. uint8_t i;
  295. uint8_t d1, d2, d3, d4;
  296. myRadio_setIdCodeLen(len);
  297. BOARD_A7169_SCS_L();
  298. myRadioSpi_wByte(CMD_ID_W);
  299. for(i=0; i < len; i++)
  300. myRadioSpi_wByte(id[i]);
  301. BOARD_A7169_SCS_H();
  302. BOARD_A7169_SCS_L();
  303. myRadioSpi_wByte(CMD_ID_R);
  304. d1=myRadioSpi_rByte();
  305. d2=myRadioSpi_rByte();
  306. d3=myRadioSpi_rByte();
  307. d4=myRadioSpi_rByte();
  308. BOARD_A7169_SCS_H();
  309. if((d1!=id[0]) || (d2!=id[1]) || (d3!=id[2]) || (d4!=id[3]))
  310. {
  311. return 1;
  312. }
  313. return 0;
  314. }
  315. void myRadio_setWor(uint8_t *id, uint8_t len)
  316. {
  317. base_modeControl_tu base_modeControl;
  318. base_modeControl.value = A7169ConfigBuffer.config[MODE_REG];;
  319. base_modeControl.bits_w.wore = 1;
  320. A7169_WriteReg(MODE_REG, base_modeControl.value); //
  321. }
  322. /**
  323. * @brief 获取发射功率
  324. *
  325. * @return int8_t
  326. */
  327. int8_t myRadio_getTxPower(void)
  328. {
  329. if (rf_handle == 0)
  330. {
  331. return 0;
  332. }
  333. return rfTxPower;
  334. }
  335. /**
  336. * @brief 设置发射功率
  337. * TBG[5:0]-> TX Buffer Gain setting.
  338. * TBG[5:3]:MISC_CFG2 (Address: 09h) Page21 的bit8 ~ bit10
  339. * TBG[2:0]:TX II (Address: 09h) Page 0 的bit0 ~ bit2
  340. * TDC-> TX Driver current setting.
  341. * TDC[1:0] TX II (Address: 09h) Page 0 的bit3 ~ bit4
  342. * PAC-> PA current setting.
  343. * PAC[1:0] TX II (Address: 09h) Page 0 的bit5 ~ bit6
  344. * @param power
  345. * 单位:dbm
  346. */
  347. void myRadio_setTxPower(int8_t power)
  348. {
  349. if (rf_handle == 0)
  350. {
  351. return;
  352. }
  353. rfTxPower = power;
  354. pageB_tx2_tu pageB_tx2;
  355. pageB_misc_cfg2_tu pageB_misc_cfg2;
  356. uint8_t tbg;
  357. pageB_tx2.value = A7169ConfigList[rfBaudrate].pageB[TX2_PAGEB];
  358. pageB_misc_cfg2.value = A7169ConfigList[rfBaudrate].pageB[Misc_CFG2_PAGEB];
  359. tbg = rfTxPowerList_433[getRfPowerTabIndex(power)].tbg;
  360. pageB_tx2.bits_w.tdc = rfTxPowerList_433[getRfPowerTabIndex(power)].tdc;
  361. pageB_tx2.bits_w.pac = rfTxPowerList_433[getRfPowerTabIndex(power)].pac;
  362. pageB_tx2.bits_w.tbg0_2 = tbg & 0x07;
  363. pageB_misc_cfg2.bits_w.tbg3_5 = (tbg>>3) & 0x07;
  364. A7169_WritePageB(TX2_PAGEB, pageB_tx2.value);
  365. A7169_WritePageB(Misc_CFG2_PAGEB, pageB_misc_cfg2.value);
  366. }
  367. /**
  368. * 获取射频波特率
  369. * @param : br->
  370. */
  371. uint32_t myRadio_getBaudrate(void)
  372. {
  373. if (rf_handle == 0)
  374. {
  375. return 0;
  376. }
  377. return rfBaudrate;
  378. }
  379. /**
  380. * 设置射频波特率
  381. * @param : br->
  382. */
  383. void myRadio_setBaudrate(uint32_t br)
  384. {
  385. rfBaudrate = br;
  386. }
  387. /**
  388. * @brief 设置模组型号
  389. *
  390. * @param type
  391. */
  392. void myRadio_setChipType(uint8_t type)
  393. {
  394. chipType = type;
  395. }
  396. /**
  397. * @brief 获取模组型号
  398. *
  399. * @return uint8_t
  400. */
  401. uint8_t myRadio_getChipType(void)
  402. {
  403. return chipType;
  404. }
  405. int16_t myRadio_getRssi(void)
  406. {
  407. return 0;
  408. }
  409. /**
  410. * @brief 无线发送数据包
  411. *
  412. * @param packet
  413. */
  414. void myRadio_transmit(rfTxPacket_ts *packet)
  415. {
  416. if (rf_handle == 0)
  417. {
  418. return;
  419. }
  420. RF_EXT_PA_TO_TX();
  421. if (rf_workProcess == RWP_IDLE)
  422. {
  423. rf_workProcess = RWP_IDLE;
  424. wake_up_from_deep_sleep_mode();
  425. myRadio_setFrequency(rfFrequence);
  426. myRadio_setTxPower(rfTxPower);
  427. }
  428. if ((rf_workProcess == RWP_RX) || (rf_workProcess == RWP_SLEEP))
  429. {
  430. rf_workProcess = RWP_IDLE;
  431. StrobeCMD(CMD_STBY);
  432. }
  433. A7169_FifoWrite(packet->payload, packet->len); //write data to TX FIFO
  434. StrobeCMD(CMD_TX);
  435. rf_workProcess = RWP_TX;
  436. }
  437. /**
  438. * @brief 进入无线接收
  439. *
  440. */
  441. void myRadio_receiver(void)
  442. {
  443. if (rf_handle == 0)
  444. {
  445. return;
  446. }
  447. RF_EXT_PA_TO_RX();
  448. if (rf_workProcess == RWP_IDLE)
  449. {
  450. rf_workProcess = RWP_IDLE;
  451. wake_up_from_deep_sleep_mode();
  452. myRadio_setFrequency(rfFrequence);
  453. }
  454. if ((rf_workProcess == RWP_TX) || (rf_workProcess == RWP_SLEEP))
  455. {
  456. rf_workProcess = RWP_IDLE;
  457. StrobeCMD(CMD_STBY);
  458. }
  459. A7169_WritePageA(FIFO_PAGEA,0x003F);//设置RX FIFO长度阀值为64个字节
  460. StrobeCMD(CMD_RFR);//清接收FIFO指针
  461. StrobeCMD(CMD_RX);
  462. rf_workProcess = RWP_RX;
  463. }
  464. void myRadio_setCtrl(controlMode_te mode, uint32_t value)
  465. {
  466. if (rf_handle == 0)
  467. {
  468. return;
  469. }
  470. myRadio_init(0, 0);
  471. switch (mode)
  472. {
  473. case RADIO_EXT_CONTROL_TX_UNMODULATED:
  474. {
  475. RF_EXT_PA_TO_TX();
  476. myRadio_setTxPower(rfTxPower);
  477. myRadio_setFrequency(rfFrequence);
  478. pageA_tx1_tu pageA_tx1;
  479. pageA_tx1.value = 0;
  480. A7169_WritePageA(TX1_PAGEA, pageA_tx1.value);
  481. StrobeCMD(CMD_TX);
  482. }
  483. break;
  484. case RADIO_EXT_CONTROL_TX_MODULATED:
  485. {
  486. RF_EXT_PA_TO_TX();
  487. myRadio_setTxPower(rfTxPower);
  488. myRadio_setFrequency(rfFrequence);
  489. A7169_WritePageA(CKO_PAGEA, 0xD28B); //CKO=RCK
  490. base_modeControl_tu base_modeControl;
  491. base_modeControl.value = 0xffff;
  492. base_modeControl.bits_w.fms = 0;
  493. A7169_WriteReg(MODE_REG, base_modeControl.value); //set FMS=0, Direct mode
  494. StrobeCMD(CMD_TX);
  495. myRadio_delay(10);
  496. pageA_gio_tu pageA_gio;
  497. pageA_gio.value = 0;
  498. pageA_gio.bits_w.g1oe = 1;
  499. pageA_gio.bits_w.gio1s = GIOMD_TRXD;
  500. A7169_WritePageA(GIO_PAGEA, pageA_gio.value); //GIO1=TRXD
  501. SET_A7169_GPIO1_OUT();
  502. //通过定时器控制GIO1的状态
  503. myIrqCallback_tim1.thisCb = tim1_callback;
  504. TIM1_callbackRegiste(&myIrqCallback_tim1);
  505. }
  506. break;
  507. case RADIO_EXT_CONTROL_RX_SENSITIVITY:
  508. {
  509. RF_EXT_PA_TO_RX();
  510. pageA_gio_tu pageA_gio;
  511. pageA_gio.value = 0;
  512. pageA_gio.bits_w.g1oe = 1;
  513. pageA_gio.bits_w.gio1s = GIOMD_EOAC_FSYNC;
  514. A7169_WritePageA(GIO_PAGEA, pageA_gio.value); //GIO1=TRXD
  515. A7169_WritePageA(CKO_PAGEA, 0xD28B); //CKO=RCK
  516. base_modeControl_tu base_modeControl;
  517. base_modeControl.value = 0;
  518. base_modeControl.bits_w.fms = 0;
  519. base_modeControl.bits_w.trsr = 0;
  520. base_modeControl.bits_w.cer = 1;
  521. base_modeControl.bits_w.cce = 1;
  522. A7169_WriteReg(MODE_REG, base_modeControl.value); //set FMS=0, Direct mode
  523. StrobeCMD(CMD_RX); //
  524. myRadio_delay(10);
  525. pageA_gio.value = 0;
  526. pageA_gio.bits_w.g1oe = 1;
  527. pageA_gio.bits_w.gio1s = GIOMD_RXD;
  528. A7169_WritePageA(GIO_PAGEA, pageA_gio.value); //GIO1=TRXD
  529. }
  530. break;
  531. default:
  532. break;
  533. }
  534. }
  535. /**-------------------------radio funtion----------------------------------**/
  536. static void tim1_callback(uint8_t status, uint32_t param)
  537. {
  538. if (rand()&0x01)
  539. {
  540. RF_A7169_GPIO1_H();
  541. }
  542. else
  543. {
  544. RF_A7169_GPIO1_L();
  545. }
  546. }
  547. uint8_t getRfPowerTabIndex(int8_t power)
  548. {
  549. for (int i = 0; i < sizeof(rfTxPowerList_433)/sizeof(rfTxPowerReg_ts); i++)
  550. {
  551. if (rfTxPowerList_433[i].power >= power)
  552. {
  553. return i;
  554. }
  555. }
  556. return sizeof(rfTxPowerList_433)/sizeof(rfTxPowerReg_ts) - 1;
  557. }
  558. /**-------------------------radio funtion end----------------------------------**/