소스 검색

增加信噪比显示

dropLin 8 달 전
부모
커밋
e3390cacef
6개의 변경된 파일2461개의 추가작업 그리고 2459개의 파일을 삭제
  1. 778 778
      app/myDisplayUnit.c
  2. 118 118
      app/myDisplayUnit.h
  3. 1 1
      keil_v5/project.uvprojx
  4. 835 835
      project/main.c
  5. 552 551
      radio/myRadio.c
  6. 177 176
      radio/myRadio.h

+ 778 - 778
app/myDisplayUnit.c

@@ -1,778 +1,778 @@
-#include "myDisplayUnit.h"
-#include "myLcd.h"
-
-int8_t uiPageIdAddress = ~(0);
-int8_t uiPageCount = 1;
-int8_t rx_tx_count;
-int8_t rx_tp_count;
-int8_t setting_count;
-int8_t tx_tp_count;
-uiPageUnit_ts uiPageParams[UI_PAGE_ID_MAX];
-enterCallback enterCb;
-uint32_t buffer_rfBr;
-uint32_t rfBr;
-uint32_t buffer_channelStep;
-uint32_t buffer_freq;
-int8_t buffer_rfPower;
-char *buffer_type;
-
-void myDisplay_ui_firstUi_setDeviceName(char *name)
-{
-    myLCD_str8x16(IM_NOMALE, 80, 1, name);
-}
-void myDisplay_ui_firstUi_setFreq(uint32_t freq)
-{
-    myLCD_str8x16(IM_NOMALE, 80, 2, "Freq.%6.2fMHz", (float)freq/1000000);
-}
-void myDisplay_ui_firstUi_setRfPower(int power)
-{
-    myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.%ddBm", power);
-}
-void myDisplay_ui_firstUi_setRfBr(uint32_t br)
-{
-    myLCD_str8x16(IM_NOMALE, 95, 4, "Br.%.3fkb", (float)br/1000);
-}
-void myDisplay_ui_firstUi(int agr0, void *agr1_ptr)
-{
-    if (uiPageIdAddress != UI_PAGE_ID_FIRST_UI)
-    {
-        myLCD_16x16(IM_INVERSE, 10,  11, "深圳市沃进科技有限公司");
-        myLCD_displayImage(IM_NOMALE, 1, 1, IMG_SRC_VOLLGO);
-        myLCD_str8x16(IM_NOMALE, 80, 1, "VG------------");
-        myLCD_str8x16(IM_NOMALE, 95, 2, "Freq.***");
-        myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.**");
-    }
-    else
-    {
-        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
-                        HORIZONTAL_RIGHT, 5, "ENTER");
-    }
-  uiPageIdAddress = UI_PAGE_ID_FIRST_UI;
-}
-void myDisplay_ui_selectMode(int agr0, void *agr1_ptr)
-{
-  int i;
-
-  myLCD_clearFull();
-  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-  {
-    myLCD_displayBlock(1, i);
-  }
-  uiPageIdAddress = UI_PAGE_ID_ITEM_MODE;
-  myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
-                10, 1, "Enter RF Transmiter");
-  myLCD_str8x16(agr0 == 1 ? IM_INVERSE : IM_NOMALE, 
-                10, 2, "Enter RF Receiver");
-  myLCD_str8x16(agr0 == 2 ? IM_INVERSE : IM_NOMALE, 
-                10, 3, "Enter RF Continuous");
-  myLCD_str8x16(agr0 == 3 ? IM_INVERSE : IM_NOMALE, 
-                10, 4, "Enter RF Setting");
-  myLCD_str8x16(agr0 == 4 ? IM_INVERSE : IM_NOMALE, 
-                10, 5, "Enter Device Infor");
-}
-void myDisplay_ui_rf_tx(uint8_t mode)
-{
-  int i;
-
-  myLCD_clearFull();
-  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-  {
-    myLCD_displayBlock(1, i);
-  }
-  myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE, 
-                10, 1, "Packet TX");
-  myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE, 
-                10, 2, "Continuous TX");
-}
-void myDisplay_ui_rf_tx_packet(int agr0, void *agr1_ptr)
-{
-    int i;
-    if (uiPageIdAddress != UI_PAGE_ID_TX_PACKET)
-    {
-        myLCD_clearFull();
-        for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-        {
-            myLCD_displayBlock(1, i);
-        }
-        myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet TX");
-        myLCD_str8x16(IM_NOMALE, 5, 2, "Packet:");
-    }
-    uiPageIdAddress = UI_PAGE_ID_TX_PACKET;
-
-    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
-    {
-        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
-                    HORIZONTAL_RIGHT, 6, "START");
-    }
-}
-void myDisplay_ui_rf_tx_packet_buffer(uint8_t *buffer)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
-    {
-        myLCD_str8x16(IM_NOMALE, 10, 3, (char *)buffer);
-    }
-}
-void myDisplay_ui_rf_tx_packet_counts(uint32_t rate, uint32_t count)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
-    {
-        myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 2, "%5.1f%%   %5d",(float)rate/10, count);
-    }
-}
-void myDisplay_ui_rf_tx_packet_consumeTime(uint32_t time)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
-    {
-        if (time == ~(uint32_t)0)
-        {
-            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, "   OUT");
-        }
-        else
-        {
-            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, "%5dms", time);
-        }
-        
-    }
-}
-void myDisplay_ui_rf_tx_packet_ackRssi(int16_t rssi)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
-    {
-        if (rssi > -150 && (rssi < 10))
-        {
-            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 3, "%04ddBm", rssi%10000);
-        }
-    }
-}
-void myDisplay_ui_rf_setting_freq(uint32_t freq)
-{
-    buffer_freq = freq;
-}
-void myDisplay_ui_rf_setting_rfPower(int8_t rfPower)
-{
-    buffer_rfPower = rfPower;
-}
-void myDisplay_ui_rf_setting_channelStep(uint32_t channelStep)
-{
-    buffer_channelStep = channelStep;
-}
-void myDisplay_ui_rf_setting_type(char *type)
-{
-    buffer_type = type;
-}
-void myDisplay_ui_rf_setting_rfBr(uint32_t br)
-{
-    rfBr = br;
-}
-void myDisplay_ui_rf_setting(int agr0, void *agr1_ptr)
-{
-  int i;
-
-  if (uiPageIdAddress != UI_PAGE_ID_SETTING)
-  {    
-    myLCD_clearFull();
-    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-    {
-      myLCD_displayBlock(1, i);
-    }
-    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Setting");
-    myLCD_str8x16(IM_NOMALE, 10, 2, "Type:");
-    myLCD_str8x16(IM_NOMALE, 10, 3, "Chnl:----------MHz");
-    myLCD_str8x16(IM_NOMALE, 10, 4, "Step:----MHz");
-    myLCD_str8x16(IM_NOMALE, 10, 5, "TxPower:---dBm");
-    myLCD_str8x16(IM_NOMALE, 10, 6, "RfBr:---.---kbps");
-  }
-  uiPageIdAddress = UI_PAGE_ID_SETTING;
-  if (uiPageIdAddress == UI_PAGE_ID_SETTING)
-  {    
-    myLCD_str8x16(agr0 == SET_ITEM_INDEX_TYPE ? IM_INVERSE : IM_NOMALE, 
-                  10 + 8 * strlen("Type:"), 2, 
-                  "%s", buffer_type);
-    myLCD_str8x16(agr0 == SET_ITEM_INDEX_FREQ ? IM_INVERSE : IM_NOMALE, 
-                  10 + 8 * strlen("Chnl:"), 3, 
-                  "%02d->%6.2f", ((int *)agr1_ptr)[SET_ITEM_INDEX_FREQ], (float)buffer_freq / 1000000);
-    myLCD_str8x16(agr0 == SET_ITEM_INDEX_STEP ? IM_INVERSE : IM_NOMALE, 
-                  10 + 8 * strlen("Step:"), 4, 
-                  "%4.2f", (float)buffer_channelStep / 1000000);
-    myLCD_str8x16(agr0 == SET_ITEM_INDEX_TXPOWER ? IM_INVERSE : IM_NOMALE, 
-                  10 + 8 * strlen("TxPower:"), 5, 
-                  "%03d", buffer_rfPower);
-    myLCD_str8x16(agr0 == SET_ITEM_INDEX_RFBAUDRATE ? IM_INVERSE : IM_NOMALE, 
-                  10 + 8 * strlen("RfBr:"), 6, 
-                  "%7.3f", (float)rfBr/1000);
-  }
-}
-uint8_t ver_buffer;
-char *mod_buffer;
-void myDisplay_ui_device_infor(int agr0, void *agr1_ptr)
-{
-  int i;
-
-  if (uiPageIdAddress != UI_PAGE_ID_DEVICE_INFOR)
-  {    
-    myLCD_clearFull();
-    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-    {
-      myLCD_displayBlock(1, i);
-    }
-    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Infor");
-    myLCD_str8x16(IM_NOMALE, 10, 2, "TP: %s", mod_buffer);
-    myLCD_str8x16(IM_NOMALE, 
-                  10, 3, "VER: V%02x", ver_buffer);
-    myLCD_str8x16(IM_NOMALE, 10, 4, "MD: VOLLGO");
-  }
-  uiPageIdAddress = UI_PAGE_ID_DEVICE_INFOR;
-}
-void myDisplay_ui_deviceInfor_setVer(uint8_t ver)
-{
-    ver_buffer = ver;
-}
-void myDisplay_ui_deviceInfor_setModule(char *moduleName)
-{
-    mod_buffer = moduleName;
-}
-void myDisplay_ui_rf_rx(uint8_t mode)
-{
-  int i;
-
-  myLCD_clearFull();
-  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-  {
-    myLCD_displayBlock(1, i);
-  }
-  myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE, 
-                10, 1, "Packet RX");
-  myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE, 
-                10, 2, "Continuous RX");
-}
-void myDisplay_ui_rf_continuos(int agr0, void *agr1_ptr)
-{
-  int i;
-  if (uiPageIdAddress != UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_clearFull();
-    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-    {
-      myLCD_displayBlock(1, i);
-    }
-    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Continuous");
-    myDisplay_ui_rf_continuos_rfFreq();
-    myDisplay_ui_rf_continuos_rfBr();
-    myDisplay_ui_rf_continuos_rfPwr();
-  }
-  uiPageIdAddress = UI_PAGE_ID_RF_CONTINUOUS;
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX ? IM_INVERSE : IM_NOMALE, 
-                  HORIZONTAL_CENTER, 2, "TX");
-    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_RX ? IM_INVERSE : IM_NOMALE, 
-                  HORIZONTAL_CENTER, 3, "RX");
-    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX_MD ? IM_INVERSE : IM_NOMALE, 
-                  110+3, 2, "TX_MD");
-  }
-}
-void myDisplay_ui_rf_continuos_txCurrent(float Current)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  10, 4, "C=%6.2fmA", Current);
-  }
-}
-void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  HORIZONTAL_RIGHT, 4, "%5.1f%% %4d", rate, len);
-  }
-}
-void myDisplay_ui_rf_continuos_rfFreq(void)
-{
-//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  5, 2, 
-                  "%6.2fMHz", (float)buffer_freq / 1000000);
-  }
-}
-void myDisplay_ui_rf_continuos_rfBr(void)
-{
-//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  HORIZONTAL_RIGHT, 3, 
-                  "%7.3fkbps", (float)rfBr / 1000);
-  }
-}
-void myDisplay_ui_rf_continuos_rfPwr(void)
-{
-//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  5, 3, 
-                  "%ddBm", buffer_rfPower);
-  }
-}
-void myDisplay_ui_rf_continuos_rxErrorRate(float rate)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  10, 5, "rate=%6.2f%%", rate);
-  }
-}
-void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  HORIZONTAL_RIGHT, 2, "%4d", rssi);
-  }
-}
-void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  10, 6, "freq=%6d", freq);
-  }
-}
-void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-    {
-        myLCD_str8x16(IM_NOMALE, 
-                    10, 5, "count=%d sta=%d", count, status);
-    }
-}
-
-void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len)
-{
-    int i = 0;
-    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-    {
-        myLCD_str8x16(IM_NOMALE, 
-                    10, 6, "                        ");
-        if (len)
-        {
-            myLCD_str8x16(IM_NOMALE, 
-                        10, 6, "packet=");
-            for ( i = 0; i < len; i++)
-            {
-                myLCD_str8x16(IM_NOMALE, 
-                            10, 6 + strlen("packet=") + i,
-                             "%x", *buf);
-                buf ++;
-            }
-            
-        }
-        else
-        {
-            myLCD_str8x16(IM_NOMALE, 
-                        10, 6, "packet=%s", buf);
-        }
-    }
-}
-void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-    {
-        myLCD_str8x16(IM_NOMALE, 
-                    10, 6, "rx count=%d", count);
-    }
-}
-
-void myDisplay_ui_rf_rx_packet(int agr0, void *agr1_ptr)
-{
-    int i;
-    if (uiPageIdAddress != UI_PAGE_ID_RX_PACKET)
-    {
-        myLCD_clearFull();
-        for ( i = 0; i <= MAX_PAGE_COUNT; i++)
-        {
-            myLCD_displayBlock(1, i);
-        }
-        myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet RX");
-        myLCD_str8x16(IM_NOMALE, 
-                    5, 3, "Packet:");
-    }
-    uiPageIdAddress = UI_PAGE_ID_RX_PACKET;
-
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
-                    HORIZONTAL_RIGHT, 6, "START");
-    }
-}
-void myDisplay_ui_rf_rxPacket_rxCurrent(float current)
-{
-  if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-  {
-    myLCD_str8x16(IM_NOMALE, 
-                  5, 2, "%-6.2fmA", current);
-  }
-}
-void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-        if (rssi > -150 && (rssi < 10))
-        {
-            myLCD_str8x16(IM_NOMALE, 
-                        HORIZONTAL_RIGHT, 2, "%04ddBm", rssi%10000);
-        }
-    }
-}
-void myDisplay_ui_rf_rxPacket_count(uint32_t count)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-        myLCD_str8x16(IM_NOMALE, 
-                    HORIZONTAL_CENTER, 3, "%06d", count);
-    }
-}
-void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame)
-{
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-            myLCD_str8x16(IM_NOMALE, 
-                        10, 3, "rssi=%3.0f%%,cnt=%3d %1d", rate, count, frame & 0x0f);
-    }
-}
-void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len)
-{
-    int i = 0;
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-        myLCD_str8x16(IM_NOMALE, 
-                    10, 5, "                        ");
-        if (len)
-        {
-            myLCD_str8x16(IM_NOMALE, 
-                        10, 5, "packet=");
-            for ( i = 0; i < len; i++)
-            {
-                myLCD_str8x16(IM_NOMALE, 
-                            10, 5 + strlen("packet=") + i,
-                             "%x", *buf);
-                buf ++;
-            }
-            
-        }
-        else
-        {
-            myLCD_str8x16(IM_NOMALE, 
-                        10, 5, "packet=%-15s", buf);
-        }
-    }
-}
-uint8_t displayBuffer[3][20];
-void loadDisplayBuffer(uint8_t *buf, uint16_t len)
-{
-    
-    memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
-    memcpy((char *)displayBuffer[1], (char *)displayBuffer[2], 20);
-    memset(displayBuffer[2], 0, 20);
-    memcpy((char *)displayBuffer[2], (char *)buf, 20);
-}
-void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len)
-{
-    int i = 0;
-    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
-    {
-
-        if (len)
-        {
-            for ( i = 0; i < len; i++)
-            {
-                myLCD_str8x16(IM_NOMALE, 
-                            10 + i, 5,
-                             "%x", *buf);
-                buf ++;
-            }
-            loadDisplayBuffer(buf, len);
-        }
-        else
-        {
-        }
-        loadDisplayBuffer(buf, len);
-        myLCD_str8x16(IM_NOMALE, 18, 4, 
-                        "%-15s", displayBuffer[0]);
-        myLCD_str8x16(IM_NOMALE, 18, 5, 
-                        "%-15s", displayBuffer[1]);
-        myLCD_str8x16(IM_NOMALE, 18, 6, 
-                        "%-15s", displayBuffer[2]);
-    }
-}
-void loadDisplayBufferContinue(uint8_t *buf, uint16_t len)
-{
-    
-    memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
-    memset(displayBuffer[1], 0, 20);
-    memcpy((char *)displayBuffer[1], (char *)buf, 20);
-}
-void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len)
-{
-    int i = 0;
-    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
-    {
-        loadDisplayBufferContinue(buf, len);
-        myLCD_str8x16(IM_NOMALE, 18, 5, 
-                        "%-15s", displayBuffer[0]);
-        myLCD_str8x16(IM_NOMALE, 18, 6, 
-                        "%-15s", displayBuffer[1]);
-    }
-}
-/**
- * 光标控制
- * direct: 方向控制
- *          =1,向上移动
- *          =0,向下移动
- * **/
-void myDisplay_change(uint8_t direct)
-{
-    if (uiPageParams[uiPageCount - 1].cursorCount)
-    {
-        //设置加减控制
-      if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
-      {
-        if (direct)
-        {
-          uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] ++;
-          if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] >=
-              uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
-          {
-            uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] = uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting];
-          }
-        }
-        else
-        {
-          uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] --;
-          if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] < uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
-          {
-            uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
-            uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting] - 1;
-          }
-        }
-        if (enterCb)
-        {
-          enterCb(uiPageCount, 
-                uiPageParams[uiPageCount - 1].cursorCounting, 
-                uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
-                uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
-                );
-        }
-      }
-      else
-      {
-          //光标移动控制
-        if (direct)
-        {
-          uiPageParams[uiPageCount - 1].cursorCounting --;
-          if (uiPageParams[uiPageCount - 1].cursorCounting < 0)
-          {
-            uiPageParams[uiPageCount - 1].cursorCounting = uiPageParams[uiPageCount - 1].cursorCount - 1;
-          }
-        }
-        else
-        {
-          uiPageParams[uiPageCount - 1].cursorCounting ++;
-          if (uiPageParams[uiPageCount - 1].cursorCounting >= uiPageParams[uiPageCount - 1].cursorCount)
-          {
-            uiPageParams[uiPageCount - 1].cursorCounting = 0;
-          }
-        }
-      }
-      
-      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
-                                            uiPageParams[uiPageCount - 1].itemValueTab);
-      
-    }
-}
-/***
- * 按下确定键
- *  进入下一个界面或者进入设置状态
-*/
-void myDisplay_enter(uint8_t direct)
-{
-  if (direct == ENTER_NEXT_PAGE)
-  {
-      //进入设置状态
-    if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_WRITE_TEXT)
-    {
-        //切换设置状态
-      uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
-          !uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting];
-      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
-                                            uiPageParams[uiPageCount - 1].itemValueTab);
-      if (enterCb)
-      {
-        enterCb(uiPageParams[uiPageCount - 1].id, 
-              uiPageParams[uiPageCount - 1].cursorCounting, 
-              uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
-              uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
-              );
-      }
-      
-    }
-    //切换到下一个界面
-    if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_NEXT_LINK)
-    {
-      uiPageCount = uiPageParams[uiPageCount - 1].nextPageIdTab[uiPageParams[uiPageCount - 1].cursorCounting];
-      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
-                                            uiPageParams[uiPageCount - 1].itemValueTab);
-    }
-  }
-  //切换到上一个界面
-  if (direct == ENTER_LAST_PAGE)
-  {
-    if (uiPageParams[uiPageCount - 1].lastPageIdTab[0])
-    {    
-      memset(uiPageParams[uiPageCount - 1].writeStaTab, 0, sizeof(uiPageParams[uiPageCount - 1].writeStaTab));
-      if (enterCb)
-      {
-        enterCb(uiPageParams[uiPageCount - 1].id, 
-              uiPageParams[uiPageCount - 1].cursorCounting, 
-              uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
-              uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
-              );
-      }
-      uiPageCount = uiPageParams[uiPageCount - 1].lastPageIdTab[0];
-      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
-                                            uiPageParams[uiPageCount - 1].itemValueTab);
-    }
-  }
-}
-int8_t myDisplay_getPageId(void)
-{
-  return uiPageIdAddress;
-}
-void uiTimerFlash_callBack(void)
-{
-    if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
-    {
-        uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
-            !uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting];
-        if (uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting])
-        {
-            uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
-                                                    uiPageParams[uiPageCount - 1].itemValueTab);
-        }
-        else
-        {
-            uiPageParams[uiPageCount - 1].uiDriver((~0), uiPageParams[uiPageCount - 1].itemValueTab);
-        }
-    }
-}
-void myDisplay_init(enterCallback cb)
-{
-    myLCD_init();
-
-  uiPageParams[UI_PAGE_ID_FIRST_UI].id = UI_PAGE_ID_FIRST_UI + 1;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].uiDriver = myDisplay_ui_firstUi;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].lastPageIdTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].nextPageIdTab[0] = 2;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].itemTypeTab[0] = TYPE_NEXT_LINK;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].writeStaTab[0] = 1;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCounting = 0;
-  uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCount = 2;
-
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].id = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].uiDriver = myDisplay_ui_selectMode;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].lastPageIdTab[0] = 0;
-
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[0] = UI_PAGE_ID_TX_PACKET + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[0] = TYPE_NEXT_LINK;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[1] = UI_PAGE_ID_RX_PACKET + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[1] = TYPE_NEXT_LINK;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[2] = UI_PAGE_ID_RF_CONTINUOUS + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[2] = TYPE_NEXT_LINK;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[3] = UI_PAGE_ID_SETTING + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[3] = TYPE_NEXT_LINK;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[4] = UI_PAGE_ID_DEVICE_INFOR + 1;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[4] = TYPE_NEXT_LINK;
-
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCounting = 0;
-  uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCount = 5;
-
-  uiPageParams[UI_PAGE_ID_TX_PACKET].id = UI_PAGE_ID_TX_PACKET + 1;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].uiDriver = myDisplay_ui_rf_tx_packet;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].nextPageIdTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].writeStaTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCounting = 0;
-  uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCount = 0;
-
-  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].id = UI_PAGE_ID_DEVICE_INFOR + 1;
-  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].uiDriver = myDisplay_ui_device_infor;
-  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].nextPageIdTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].cursorCount = 0;
-
-  uiPageParams[UI_PAGE_ID_RX_PACKET].id = UI_PAGE_ID_RX_PACKET + 1;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].uiDriver = myDisplay_ui_rf_rx_packet;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].nextPageIdTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].writeStaTab[0] = 0;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCounting = 0;
-  uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCount = 0;
-
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].id = UI_PAGE_ID_RF_CONTINUOUS + 1;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].uiDriver = myDisplay_ui_rf_continuos;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].lastPageIdTab[CNT_ITEM_INDEX_TX] = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX] = 0;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_RX] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_RX] = 0;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX_MD] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX_MD] = 0;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCounting = 0;
-  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCount = CNT_ITEM_INDEX_MAX_COUNT;
-
-  uiPageParams[UI_PAGE_ID_SETTING].id = UI_PAGE_ID_SETTING + 1;
-  uiPageParams[UI_PAGE_ID_SETTING].uiDriver = myDisplay_ui_rf_setting;
-  uiPageParams[UI_PAGE_ID_SETTING].lastPageIdTab[SET_ITEM_INDEX_TYPE] = UI_PAGE_ID_ITEM_MODE + 1;
-  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TYPE] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TYPE] = 4;
-
-  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_FREQ] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_FREQ] = 32;
-
-  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_STEP] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_STEP] = 200;
-
-  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TXPOWER] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = -9;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TXPOWER] = 20+1;
-
-  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_RFBAUDRATE] = TYPE_WRITE_TEXT;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = 1;
-  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 7;
-
-  uiPageParams[UI_PAGE_ID_SETTING].cursorCounting = SET_ITEM_INDEX_TYPE;//默认设置光标在第一个
-  uiPageParams[UI_PAGE_ID_SETTING].cursorCount = SET_ITEM_INDEX_MAX_COUNT;
-
-  enterCb = cb;
-  uiPageParams[uiPageCount - 1].uiDriver(0, 0);
-}
-void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max)
-{
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[index] = value;
-    uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[index] = min;
-    uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[index] = max;
-}
-void myDisplay_setSettingParams(int chipType, 
-                                int rfChannel, 
-                                int channelStep, 
-                                int txPower, 
-                                int rfBaudrate)
-{
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TYPE] = chipType;
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_FREQ] = rfChannel;
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_STEP] = channelStep;
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TXPOWER] = txPower;
-    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_RFBAUDRATE] = rfBaudrate;
-}
+#include "myDisplayUnit.h"
+#include "myLcd.h"
+
+int8_t uiPageIdAddress = ~(0);
+int8_t uiPageCount = 1;
+int8_t rx_tx_count;
+int8_t rx_tp_count;
+int8_t setting_count;
+int8_t tx_tp_count;
+uiPageUnit_ts uiPageParams[UI_PAGE_ID_MAX];
+enterCallback enterCb;
+uint32_t buffer_rfBr;
+uint32_t rfBr;
+uint32_t buffer_channelStep;
+uint32_t buffer_freq;
+int8_t buffer_rfPower;
+char *buffer_type;
+
+void myDisplay_ui_firstUi_setDeviceName(char *name)
+{
+    myLCD_str8x16(IM_NOMALE, 80, 1, name);
+}
+void myDisplay_ui_firstUi_setFreq(uint32_t freq)
+{
+    myLCD_str8x16(IM_NOMALE, 80, 2, "Freq.%6.2fMHz", (float)freq/1000000);
+}
+void myDisplay_ui_firstUi_setRfPower(int power)
+{
+    myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.%ddBm", power);
+}
+void myDisplay_ui_firstUi_setRfBr(uint32_t br)
+{
+    myLCD_str8x16(IM_NOMALE, 95, 4, "Br.%.3fkb", (float)br/1000);
+}
+void myDisplay_ui_firstUi(int agr0, void *agr1_ptr)
+{
+    if (uiPageIdAddress != UI_PAGE_ID_FIRST_UI)
+    {
+        myLCD_16x16(IM_INVERSE, 10,  11, "深圳市沃进科技有限公司");
+        myLCD_displayImage(IM_NOMALE, 1, 1, IMG_SRC_VOLLGO);
+        myLCD_str8x16(IM_NOMALE, 80, 1, "VG------------");
+        myLCD_str8x16(IM_NOMALE, 95, 2, "Freq.***");
+        myLCD_str8x16(IM_NOMALE, 95, 3, "Pwr.**");
+    }
+    else
+    {
+        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
+                        HORIZONTAL_RIGHT, 5, "ENTER");
+    }
+  uiPageIdAddress = UI_PAGE_ID_FIRST_UI;
+}
+void myDisplay_ui_selectMode(int agr0, void *agr1_ptr)
+{
+  int i;
+
+  myLCD_clearFull();
+  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+  {
+    myLCD_displayBlock(1, i);
+  }
+  uiPageIdAddress = UI_PAGE_ID_ITEM_MODE;
+  myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
+                10, 1, "Enter RF Transmiter");
+  myLCD_str8x16(agr0 == 1 ? IM_INVERSE : IM_NOMALE, 
+                10, 2, "Enter RF Receiver");
+  myLCD_str8x16(agr0 == 2 ? IM_INVERSE : IM_NOMALE, 
+                10, 3, "Enter RF Continuous");
+  myLCD_str8x16(agr0 == 3 ? IM_INVERSE : IM_NOMALE, 
+                10, 4, "Enter RF Setting");
+  myLCD_str8x16(agr0 == 4 ? IM_INVERSE : IM_NOMALE, 
+                10, 5, "Enter Device Infor");
+}
+void myDisplay_ui_rf_tx(uint8_t mode)
+{
+  int i;
+
+  myLCD_clearFull();
+  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+  {
+    myLCD_displayBlock(1, i);
+  }
+  myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE, 
+                10, 1, "Packet TX");
+  myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE, 
+                10, 2, "Continuous TX");
+}
+void myDisplay_ui_rf_tx_packet(int agr0, void *agr1_ptr)
+{
+    int i;
+    if (uiPageIdAddress != UI_PAGE_ID_TX_PACKET)
+    {
+        myLCD_clearFull();
+        for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+        {
+            myLCD_displayBlock(1, i);
+        }
+        myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet TX");
+        myLCD_str8x16(IM_NOMALE, 5, 2, "Packet:");
+    }
+    uiPageIdAddress = UI_PAGE_ID_TX_PACKET;
+
+    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
+    {
+        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
+                    HORIZONTAL_RIGHT, 6, "START");
+    }
+}
+void myDisplay_ui_rf_tx_packet_buffer(uint8_t *buffer)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
+    {
+        myLCD_str8x16(IM_NOMALE, 10, 3, (char *)buffer);
+    }
+}
+void myDisplay_ui_rf_tx_packet_counts(uint32_t rate, uint32_t count)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
+    {
+        myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 2, "%5.1f%%   %5d",(float)rate/10, count);
+    }
+}
+void myDisplay_ui_rf_tx_packet_consumeTime(uint32_t time)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
+    {
+        if (time == ~(uint32_t)0)
+        {
+            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, "   OUT");
+        }
+        else
+        {
+            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 1, "%5dms", time);
+        }
+        
+    }
+}
+void myDisplay_ui_rf_tx_packet_ackRssi(int16_t rssi)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_TX_PACKET)
+    {
+        if (rssi > -150 && (rssi < 10))
+        {
+            myLCD_str8x16(IM_NOMALE, HORIZONTAL_RIGHT, 3, "%04ddBm", rssi%10000);
+        }
+    }
+}
+void myDisplay_ui_rf_setting_freq(uint32_t freq)
+{
+    buffer_freq = freq;
+}
+void myDisplay_ui_rf_setting_rfPower(int8_t rfPower)
+{
+    buffer_rfPower = rfPower;
+}
+void myDisplay_ui_rf_setting_channelStep(uint32_t channelStep)
+{
+    buffer_channelStep = channelStep;
+}
+void myDisplay_ui_rf_setting_type(char *type)
+{
+    buffer_type = type;
+}
+void myDisplay_ui_rf_setting_rfBr(uint32_t br)
+{
+    rfBr = br;
+}
+void myDisplay_ui_rf_setting(int agr0, void *agr1_ptr)
+{
+  int i;
+
+  if (uiPageIdAddress != UI_PAGE_ID_SETTING)
+  {    
+    myLCD_clearFull();
+    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+    {
+      myLCD_displayBlock(1, i);
+    }
+    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Setting");
+    myLCD_str8x16(IM_NOMALE, 10, 2, "Type:");
+    myLCD_str8x16(IM_NOMALE, 10, 3, "Chnl:----------MHz");
+    myLCD_str8x16(IM_NOMALE, 10, 4, "Step:----MHz");
+    myLCD_str8x16(IM_NOMALE, 10, 5, "TxPower:---dBm");
+    myLCD_str8x16(IM_NOMALE, 10, 6, "RfBr:---.---kbps");
+  }
+  uiPageIdAddress = UI_PAGE_ID_SETTING;
+  if (uiPageIdAddress == UI_PAGE_ID_SETTING)
+  {    
+    myLCD_str8x16(agr0 == SET_ITEM_INDEX_TYPE ? IM_INVERSE : IM_NOMALE, 
+                  10 + 8 * strlen("Type:"), 2, 
+                  "%s", buffer_type);
+    myLCD_str8x16(agr0 == SET_ITEM_INDEX_FREQ ? IM_INVERSE : IM_NOMALE, 
+                  10 + 8 * strlen("Chnl:"), 3, 
+                  "%02d->%6.2f", ((int *)agr1_ptr)[SET_ITEM_INDEX_FREQ], (float)buffer_freq / 1000000);
+    myLCD_str8x16(agr0 == SET_ITEM_INDEX_STEP ? IM_INVERSE : IM_NOMALE, 
+                  10 + 8 * strlen("Step:"), 4, 
+                  "%4.2f", (float)buffer_channelStep / 1000000);
+    myLCD_str8x16(agr0 == SET_ITEM_INDEX_TXPOWER ? IM_INVERSE : IM_NOMALE, 
+                  10 + 8 * strlen("TxPower:"), 5, 
+                  "%03d", buffer_rfPower);
+    myLCD_str8x16(agr0 == SET_ITEM_INDEX_RFBAUDRATE ? IM_INVERSE : IM_NOMALE, 
+                  10 + 8 * strlen("RfBr:"), 6, 
+                  "%7.3f", (float)rfBr/1000);
+  }
+}
+uint8_t ver_buffer;
+char *mod_buffer;
+void myDisplay_ui_device_infor(int agr0, void *agr1_ptr)
+{
+  int i;
+
+  if (uiPageIdAddress != UI_PAGE_ID_DEVICE_INFOR)
+  {    
+    myLCD_clearFull();
+    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+    {
+      myLCD_displayBlock(1, i);
+    }
+    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Infor");
+    myLCD_str8x16(IM_NOMALE, 10, 2, "TP: %s", mod_buffer);
+    myLCD_str8x16(IM_NOMALE, 
+                  10, 3, "VER: V%02x", ver_buffer);
+    myLCD_str8x16(IM_NOMALE, 10, 4, "MD: VOLLGO");
+  }
+  uiPageIdAddress = UI_PAGE_ID_DEVICE_INFOR;
+}
+void myDisplay_ui_deviceInfor_setVer(uint8_t ver)
+{
+    ver_buffer = ver;
+}
+void myDisplay_ui_deviceInfor_setModule(char *moduleName)
+{
+    mod_buffer = moduleName;
+}
+void myDisplay_ui_rf_rx(uint8_t mode)
+{
+  int i;
+
+  myLCD_clearFull();
+  for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+  {
+    myLCD_displayBlock(1, i);
+  }
+  myLCD_str8x16(mode == 0 ? IM_INVERSE : IM_NOMALE, 
+                10, 1, "Packet RX");
+  myLCD_str8x16(mode == 1 ? IM_INVERSE : IM_NOMALE, 
+                10, 2, "Continuous RX");
+}
+void myDisplay_ui_rf_continuos(int agr0, void *agr1_ptr)
+{
+  int i;
+  if (uiPageIdAddress != UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_clearFull();
+    for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+    {
+      myLCD_displayBlock(1, i);
+    }
+    myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Continuous");
+    myDisplay_ui_rf_continuos_rfFreq();
+    myDisplay_ui_rf_continuos_rfBr();
+    myDisplay_ui_rf_continuos_rfPwr();
+  }
+  uiPageIdAddress = UI_PAGE_ID_RF_CONTINUOUS;
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX ? IM_INVERSE : IM_NOMALE, 
+                  HORIZONTAL_CENTER, 2, "TX");
+    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_RX ? IM_INVERSE : IM_NOMALE, 
+                  HORIZONTAL_CENTER, 3, "RX");
+    myLCD_str8x16(agr0 == CNT_ITEM_INDEX_TX_MD ? IM_INVERSE : IM_NOMALE, 
+                  110+3, 2, "TX_MD");
+  }
+}
+void myDisplay_ui_rf_continuos_txCurrent(float Current)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  10, 4, "C=%6.2fmA", Current);
+  }
+}
+void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  HORIZONTAL_RIGHT, 4, "%5.1f%% %4d", rate, len);
+  }
+}
+void myDisplay_ui_rf_continuos_rfFreq(void)
+{
+//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  5, 2, 
+                  "%6.2fMHz", (float)buffer_freq / 1000000);
+  }
+}
+void myDisplay_ui_rf_continuos_rfBr(void)
+{
+//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  HORIZONTAL_RIGHT, 3, 
+                  "%7.3fkbps", (float)rfBr / 1000);
+  }
+}
+void myDisplay_ui_rf_continuos_rfPwr(void)
+{
+//   if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  5, 3, 
+                  "%ddBm", buffer_rfPower);
+  }
+}
+void myDisplay_ui_rf_continuos_rxErrorRate(float rate)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  10, 5, "rate=%6.2f%%", rate);
+  }
+}
+void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  HORIZONTAL_RIGHT, 2, "%4d", rssi);
+  }
+}
+void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  10, 6, "freq=%6d", freq);
+  }
+}
+void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+    {
+        myLCD_str8x16(IM_NOMALE, 
+                    10, 5, "count=%d sta=%d", count, status);
+    }
+}
+
+void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len)
+{
+    int i = 0;
+    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+    {
+        myLCD_str8x16(IM_NOMALE, 
+                    10, 6, "                        ");
+        if (len)
+        {
+            myLCD_str8x16(IM_NOMALE, 
+                        10, 6, "packet=");
+            for ( i = 0; i < len; i++)
+            {
+                myLCD_str8x16(IM_NOMALE, 
+                            10, 6 + strlen("packet=") + i,
+                             "%x", *buf);
+                buf ++;
+            }
+            
+        }
+        else
+        {
+            myLCD_str8x16(IM_NOMALE, 
+                        10, 6, "packet=%s", buf);
+        }
+    }
+}
+void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+    {
+        myLCD_str8x16(IM_NOMALE, 
+                    10, 6, "rx count=%d", count);
+    }
+}
+
+void myDisplay_ui_rf_rx_packet(int agr0, void *agr1_ptr)
+{
+    int i;
+    if (uiPageIdAddress != UI_PAGE_ID_RX_PACKET)
+    {
+        myLCD_clearFull();
+        for ( i = 0; i <= MAX_PAGE_COUNT; i++)
+        {
+            myLCD_displayBlock(1, i);
+        }
+        myLCD_str8x16(IM_NOMALE, HORIZONTAL_CENTER, 1, "Packet RX");
+        myLCD_str8x16(IM_NOMALE, 
+                    5, 3, "Packet:");
+    }
+    uiPageIdAddress = UI_PAGE_ID_RX_PACKET;
+
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+        myLCD_str8x16(agr0 == 0 ? IM_INVERSE : IM_NOMALE, 
+                    HORIZONTAL_RIGHT, 6, "START");
+    }
+}
+void myDisplay_ui_rf_rxPacket_rxCurrent(float current)
+{
+  if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+  {
+    myLCD_str8x16(IM_NOMALE, 
+                  5, 2, "%-6.2fmA", current);
+  }
+}
+void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi, int8_t snr)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+        if (rssi > -150 && (rssi < 10))
+        {
+            myLCD_str8x16(IM_NOMALE, 
+                        HORIZONTAL_RIGHT, 2, "%ddBm%d", rssi, snr);
+        }
+    }
+}
+void myDisplay_ui_rf_rxPacket_count(uint32_t count)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+        myLCD_str8x16(IM_NOMALE, 
+                    HORIZONTAL_CENTER, 3, "%06d", count);
+    }
+}
+void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame)
+{
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+            myLCD_str8x16(IM_NOMALE, 
+                        10, 3, "rssi=%3.0f%%,cnt=%3d %1d", rate, count, frame & 0x0f);
+    }
+}
+void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len)
+{
+    int i = 0;
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+        myLCD_str8x16(IM_NOMALE, 
+                    10, 5, "                        ");
+        if (len)
+        {
+            myLCD_str8x16(IM_NOMALE, 
+                        10, 5, "packet=");
+            for ( i = 0; i < len; i++)
+            {
+                myLCD_str8x16(IM_NOMALE, 
+                            10, 5 + strlen("packet=") + i,
+                             "%x", *buf);
+                buf ++;
+            }
+            
+        }
+        else
+        {
+            myLCD_str8x16(IM_NOMALE, 
+                        10, 5, "packet=%-15s", buf);
+        }
+    }
+}
+uint8_t displayBuffer[3][20];
+void loadDisplayBuffer(uint8_t *buf, uint16_t len)
+{
+    
+    memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
+    memcpy((char *)displayBuffer[1], (char *)displayBuffer[2], 20);
+    memset(displayBuffer[2], 0, 20);
+    memcpy((char *)displayBuffer[2], (char *)buf, 20);
+}
+void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len)
+{
+    int i = 0;
+    if (uiPageIdAddress == UI_PAGE_ID_RX_PACKET)
+    {
+
+        if (len)
+        {
+            for ( i = 0; i < len; i++)
+            {
+                myLCD_str8x16(IM_NOMALE, 
+                            10 + i, 5,
+                             "%x", *buf);
+                buf ++;
+            }
+            loadDisplayBuffer(buf, len);
+        }
+        else
+        {
+        }
+        loadDisplayBuffer(buf, len);
+        myLCD_str8x16(IM_NOMALE, 18, 4, 
+                        "%-15s", displayBuffer[0]);
+        myLCD_str8x16(IM_NOMALE, 18, 5, 
+                        "%-15s", displayBuffer[1]);
+        myLCD_str8x16(IM_NOMALE, 18, 6, 
+                        "%-15s", displayBuffer[2]);
+    }
+}
+void loadDisplayBufferContinue(uint8_t *buf, uint16_t len)
+{
+    
+    memcpy((char *)displayBuffer[0], (char *)displayBuffer[1], 20);
+    memset(displayBuffer[1], 0, 20);
+    memcpy((char *)displayBuffer[1], (char *)buf, 20);
+}
+void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len)
+{
+    int i = 0;
+    if (uiPageIdAddress == UI_PAGE_ID_RF_CONTINUOUS)
+    {
+        loadDisplayBufferContinue(buf, len);
+        myLCD_str8x16(IM_NOMALE, 18, 5, 
+                        "%-15s", displayBuffer[0]);
+        myLCD_str8x16(IM_NOMALE, 18, 6, 
+                        "%-15s", displayBuffer[1]);
+    }
+}
+/**
+ * 光标控制
+ * direct: 方向控制
+ *          =1,向上移动
+ *          =0,向下移动
+ * **/
+void myDisplay_change(uint8_t direct)
+{
+    if (uiPageParams[uiPageCount - 1].cursorCount)
+    {
+        //设置加减控制
+      if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
+      {
+        if (direct)
+        {
+          uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] ++;
+          if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] >=
+              uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
+          {
+            uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] = uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting];
+          }
+        }
+        else
+        {
+          uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] --;
+          if (uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] < uiPageParams[uiPageCount - 1].itemMinValueTab[uiPageParams[uiPageCount - 1].cursorCounting])
+          {
+            uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
+            uiPageParams[uiPageCount - 1].itemMaxValueTab[uiPageParams[uiPageCount - 1].cursorCounting] - 1;
+          }
+        }
+        if (enterCb)
+        {
+          enterCb(uiPageCount, 
+                uiPageParams[uiPageCount - 1].cursorCounting, 
+                uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
+                uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
+                );
+        }
+      }
+      else
+      {
+          //光标移动控制
+        if (direct)
+        {
+          uiPageParams[uiPageCount - 1].cursorCounting --;
+          if (uiPageParams[uiPageCount - 1].cursorCounting < 0)
+          {
+            uiPageParams[uiPageCount - 1].cursorCounting = uiPageParams[uiPageCount - 1].cursorCount - 1;
+          }
+        }
+        else
+        {
+          uiPageParams[uiPageCount - 1].cursorCounting ++;
+          if (uiPageParams[uiPageCount - 1].cursorCounting >= uiPageParams[uiPageCount - 1].cursorCount)
+          {
+            uiPageParams[uiPageCount - 1].cursorCounting = 0;
+          }
+        }
+      }
+      
+      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
+                                            uiPageParams[uiPageCount - 1].itemValueTab);
+      
+    }
+}
+/***
+ * 按下确定键
+ *  进入下一个界面或者进入设置状态
+*/
+void myDisplay_enter(uint8_t direct)
+{
+  if (direct == ENTER_NEXT_PAGE)
+  {
+      //进入设置状态
+    if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_WRITE_TEXT)
+    {
+        //切换设置状态
+      uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
+          !uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting];
+      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
+                                            uiPageParams[uiPageCount - 1].itemValueTab);
+      if (enterCb)
+      {
+        enterCb(uiPageParams[uiPageCount - 1].id, 
+              uiPageParams[uiPageCount - 1].cursorCounting, 
+              uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
+              uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
+              );
+      }
+      
+    }
+    //切换到下一个界面
+    if (uiPageParams[uiPageCount - 1].itemTypeTab[uiPageParams[uiPageCount - 1].cursorCounting] == TYPE_NEXT_LINK)
+    {
+      uiPageCount = uiPageParams[uiPageCount - 1].nextPageIdTab[uiPageParams[uiPageCount - 1].cursorCounting];
+      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
+                                            uiPageParams[uiPageCount - 1].itemValueTab);
+    }
+  }
+  //切换到上一个界面
+  if (direct == ENTER_LAST_PAGE)
+  {
+    if (uiPageParams[uiPageCount - 1].lastPageIdTab[0])
+    {    
+      memset(uiPageParams[uiPageCount - 1].writeStaTab, 0, sizeof(uiPageParams[uiPageCount - 1].writeStaTab));
+      if (enterCb)
+      {
+        enterCb(uiPageParams[uiPageCount - 1].id, 
+              uiPageParams[uiPageCount - 1].cursorCounting, 
+              uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting],
+              uiPageParams[uiPageCount - 1].itemValueTab[uiPageParams[uiPageCount - 1].cursorCounting]
+              );
+      }
+      uiPageCount = uiPageParams[uiPageCount - 1].lastPageIdTab[0];
+      uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
+                                            uiPageParams[uiPageCount - 1].itemValueTab);
+    }
+  }
+}
+int8_t myDisplay_getPageId(void)
+{
+  return uiPageIdAddress;
+}
+void uiTimerFlash_callBack(void)
+{
+    if (uiPageParams[uiPageCount - 1].writeStaTab[uiPageParams[uiPageCount - 1].cursorCounting])
+    {
+        uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting] = 
+            !uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting];
+        if (uiPageParams[uiPageCount - 1].writeStatusTab[uiPageParams[uiPageCount - 1].cursorCounting])
+        {
+            uiPageParams[uiPageCount - 1].uiDriver(uiPageParams[uiPageCount - 1].cursorCounting, 
+                                                    uiPageParams[uiPageCount - 1].itemValueTab);
+        }
+        else
+        {
+            uiPageParams[uiPageCount - 1].uiDriver((~0), uiPageParams[uiPageCount - 1].itemValueTab);
+        }
+    }
+}
+void myDisplay_init(enterCallback cb)
+{
+    myLCD_init();
+
+  uiPageParams[UI_PAGE_ID_FIRST_UI].id = UI_PAGE_ID_FIRST_UI + 1;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].uiDriver = myDisplay_ui_firstUi;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].lastPageIdTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].nextPageIdTab[0] = 2;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].itemTypeTab[0] = TYPE_NEXT_LINK;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].writeStaTab[0] = 1;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCounting = 0;
+  uiPageParams[UI_PAGE_ID_FIRST_UI].cursorCount = 2;
+
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].id = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].uiDriver = myDisplay_ui_selectMode;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].lastPageIdTab[0] = 0;
+
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[0] = UI_PAGE_ID_TX_PACKET + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[0] = TYPE_NEXT_LINK;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[1] = UI_PAGE_ID_RX_PACKET + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[1] = TYPE_NEXT_LINK;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[2] = UI_PAGE_ID_RF_CONTINUOUS + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[2] = TYPE_NEXT_LINK;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[3] = UI_PAGE_ID_SETTING + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[3] = TYPE_NEXT_LINK;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].nextPageIdTab[4] = UI_PAGE_ID_DEVICE_INFOR + 1;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].itemTypeTab[4] = TYPE_NEXT_LINK;
+
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCounting = 0;
+  uiPageParams[UI_PAGE_ID_ITEM_MODE].cursorCount = 5;
+
+  uiPageParams[UI_PAGE_ID_TX_PACKET].id = UI_PAGE_ID_TX_PACKET + 1;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].uiDriver = myDisplay_ui_rf_tx_packet;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].nextPageIdTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].writeStaTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCounting = 0;
+  uiPageParams[UI_PAGE_ID_TX_PACKET].cursorCount = 0;
+
+  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].id = UI_PAGE_ID_DEVICE_INFOR + 1;
+  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].uiDriver = myDisplay_ui_device_infor;
+  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].nextPageIdTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_DEVICE_INFOR].cursorCount = 0;
+
+  uiPageParams[UI_PAGE_ID_RX_PACKET].id = UI_PAGE_ID_RX_PACKET + 1;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].uiDriver = myDisplay_ui_rf_rx_packet;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].lastPageIdTab[0] = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].nextPageIdTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].itemTypeTab[0] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].writeStaTab[0] = 0;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCounting = 0;
+  uiPageParams[UI_PAGE_ID_RX_PACKET].cursorCount = 0;
+
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].id = UI_PAGE_ID_RF_CONTINUOUS + 1;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].uiDriver = myDisplay_ui_rf_continuos;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].lastPageIdTab[CNT_ITEM_INDEX_TX] = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX] = 0;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_RX] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_RX] = 0;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].itemTypeTab[CNT_ITEM_INDEX_TX_MD] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].writeStaTab[CNT_ITEM_INDEX_TX_MD] = 0;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCounting = 0;
+  uiPageParams[UI_PAGE_ID_RF_CONTINUOUS].cursorCount = CNT_ITEM_INDEX_MAX_COUNT;
+
+  uiPageParams[UI_PAGE_ID_SETTING].id = UI_PAGE_ID_SETTING + 1;
+  uiPageParams[UI_PAGE_ID_SETTING].uiDriver = myDisplay_ui_rf_setting;
+  uiPageParams[UI_PAGE_ID_SETTING].lastPageIdTab[SET_ITEM_INDEX_TYPE] = UI_PAGE_ID_ITEM_MODE + 1;
+  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TYPE] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TYPE] = 4;
+
+  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_FREQ] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_FREQ] = 32;
+
+  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_STEP] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_STEP] = 200;
+
+  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_TXPOWER] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = -9;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_TXPOWER] = 20+1;
+
+  uiPageParams[UI_PAGE_ID_SETTING].itemTypeTab[SET_ITEM_INDEX_RFBAUDRATE] = TYPE_WRITE_TEXT;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[SET_ITEM_INDEX_TXPOWER] = 1;
+  uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[SET_ITEM_INDEX_RFBAUDRATE] = 7;
+
+  uiPageParams[UI_PAGE_ID_SETTING].cursorCounting = SET_ITEM_INDEX_TYPE;//默认设置光标在第一个
+  uiPageParams[UI_PAGE_ID_SETTING].cursorCount = SET_ITEM_INDEX_MAX_COUNT;
+
+  enterCb = cb;
+  uiPageParams[uiPageCount - 1].uiDriver(0, 0);
+}
+void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max)
+{
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[index] = value;
+    uiPageParams[UI_PAGE_ID_SETTING].itemMinValueTab[index] = min;
+    uiPageParams[UI_PAGE_ID_SETTING].itemMaxValueTab[index] = max;
+}
+void myDisplay_setSettingParams(int chipType, 
+                                int rfChannel, 
+                                int channelStep, 
+                                int txPower, 
+                                int rfBaudrate)
+{
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TYPE] = chipType;
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_FREQ] = rfChannel;
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_STEP] = channelStep;
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_TXPOWER] = txPower;
+    uiPageParams[UI_PAGE_ID_SETTING].itemValueTab[SET_ITEM_INDEX_RFBAUDRATE] = rfBaudrate;
+}

+ 118 - 118
app/myDisplayUnit.h

@@ -1,118 +1,118 @@
-#ifndef __MY_DISPLAYUNIT_H
-#define __MY_DISPLAYUNIT_H
-#include <stdint.h>
-#include <string.h>
-
-typedef void (*uiFuntion) (int agr0, void *agr1_ptr);
-typedef void (*enterCallback) (int agr0, int agr1, int agr2, int agr3);
-typedef void (*pageChangeCallback) (int agr0, int agr1, int agr2, int agr3);
-typedef enum
-{
-    UI_PAGE_ID_FIRST_UI,
-    UI_PAGE_ID_ITEM_MODE,
-    UI_PAGE_ID_TX_PACKET,
-    UI_PAGE_ID_RX_PACKET,
-    UI_PAGE_ID_RF_CONTINUOUS,
-    UI_PAGE_ID_SETTING,
-    UI_PAGE_ID_DEVICE_INFOR,
-    UI_PAGE_ID_MAX,
-}uiPageIndex_te;
-typedef enum
-{
-    MD_ITEM_INDX_TX_PACKET,
-    MD_ITEM_INDX_RX_PACKET,
-    MD_ITEM_INDX_CONTINUOUS,
-    MD_ITEM_INDX_SETTING,
-    MD_ITEM_INDX_MAX,
-}modeItemIndex_te;
-typedef enum
-{
-    CNT_ITEM_INDEX_TX,
-    CNT_ITEM_INDEX_RX,
-    CNT_ITEM_INDEX_TX_MD,
-    CNT_ITEM_INDEX_MAX_COUNT,
-}continuesItemIndex_te;
-typedef enum
-{
-    ENTER_NEXT_PAGE,
-    ENTER_LAST_PAGE,
-    ENTER_CURRENT_PAGE,
-    ENTER_RELEASE_PAGE,
-}enter_te;
-typedef enum
-{
-    SET_ITEM_INDEX_TYPE,
-    SET_ITEM_INDEX_FREQ,
-    SET_ITEM_INDEX_STEP,
-    SET_ITEM_INDEX_TXPOWER,
-    SET_ITEM_INDEX_RFBAUDRATE,
-    SET_ITEM_INDEX_MAX_COUNT,
-}setting_item_index_te;
-typedef enum
-{
-    TYPE_GERNERL_TEXT,
-    TYPE_WRITE_TEXT,
-    TYPE_NEXT_LINK,
-}itemType_te;
-typedef struct 
-{
-    int cursorCount;            //本界面总共可移动光标总数
-    int cursorCounting;         //本界面的光标移动计数
-    uiFuntion uiDriver;         //本界面显示驱动
-    int id;                     //本界面ID
-    int lastPageIdTab[6];       //返回上一界面超链接,对应界面的ID
-    int nextPageIdTab[6];       //下一界面超链接,对应界面的ID
-    int itemValueTab[6];        //该区域写入值缓存
-    int itemMinValueTab[6];     //该区域可写入最小值
-    int itemMaxValueTab[6];     //该区域可写入最大值
-    itemType_te itemTypeTab[6]; //=0普通文本,=1可编辑文本,=2下一界面超链接
-    uint8_t writeStaTab[6];     //可写入操作状态,=1可以通过上下按键加减,同时该区域背景闪烁
-    uint8_t writeStatusTab[6];  //控制该区域背景颜色
-}uiPageUnit_ts;
-
-int8_t myDisplay_getPageId(void);
-void myDisplay_enter(uint8_t direct);
-void myDisplay_change(uint8_t direct);
-void myDisplay_ui_rf_continuos_txCurrent(float Current);
-void myDisplay_ui_rf_tx_packet_buffer(uint8_t *buffer);
-void myDisplay_ui_rf_tx_packet_counts(uint32_t rate, uint32_t count);
-void myDisplay_ui_rf_tx_packet_consumeTime(uint32_t time);
-void myDisplay_ui_rf_tx_packet_ackRssi(int16_t rssi);
-void myDisplay_ui_rf_continuos_rxErrorRate(float rate);
-void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq);
-void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len);
-void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count);
-void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count);
-void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi);
-void myDisplay_ui_rf_continuos_rfFreq(void);
-void myDisplay_ui_rf_continuos_rfBr(void);
-void myDisplay_ui_rf_continuos_rfPwr(void);
-void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len);
-void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len);
-void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len);
-void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len);
-void myDisplay_ui_rf_rxPacket_count(uint32_t count);
-void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi);
-void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame);
-void myDisplay_ui_rf_rxPacket_rxCurrent(float current);
-void myDisplay_ui_firstUi_setDeviceName(char *name);
-void myDisplay_ui_firstUi_setFreq(uint32_t freq);
-void myDisplay_ui_firstUi_setRfBr(uint32_t br);
-void myDisplay_init(enterCallback cb);
-void myDisplay_ui_firstUi_setRfPower(int power);
-void myDisplay_setSettingParams(int chipType, 
-                                int rfChannel, 
-                                int channelStep, 
-                                int txPower, 
-                                int rfBaudrate);
-void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max);
-void myDisplay_ui_rf_setting_freq(uint32_t freq);
-void myDisplay_ui_rf_setting_rfPower(int8_t rfPower);
-void myDisplay_ui_rf_setting_type(char *type);
-void myDisplay_ui_rf_setting_channelStep(uint32_t channelStep);
-void myDisplay_ui_rf_setting_rfBr(uint32_t br);
-void myDisplay_ui_deviceInfor_setVer(uint8_t ver);
-void myDisplay_ui_deviceInfor_setModule(char *moduleName);
-void uiTimerFlash_callBack(void);
-#endif
-
+#ifndef __MY_DISPLAYUNIT_H
+#define __MY_DISPLAYUNIT_H
+#include <stdint.h>
+#include <string.h>
+
+typedef void (*uiFuntion) (int agr0, void *agr1_ptr);
+typedef void (*enterCallback) (int agr0, int agr1, int agr2, int agr3);
+typedef void (*pageChangeCallback) (int agr0, int agr1, int agr2, int agr3);
+typedef enum
+{
+    UI_PAGE_ID_FIRST_UI,
+    UI_PAGE_ID_ITEM_MODE,
+    UI_PAGE_ID_TX_PACKET,
+    UI_PAGE_ID_RX_PACKET,
+    UI_PAGE_ID_RF_CONTINUOUS,
+    UI_PAGE_ID_SETTING,
+    UI_PAGE_ID_DEVICE_INFOR,
+    UI_PAGE_ID_MAX,
+}uiPageIndex_te;
+typedef enum
+{
+    MD_ITEM_INDX_TX_PACKET,
+    MD_ITEM_INDX_RX_PACKET,
+    MD_ITEM_INDX_CONTINUOUS,
+    MD_ITEM_INDX_SETTING,
+    MD_ITEM_INDX_MAX,
+}modeItemIndex_te;
+typedef enum
+{
+    CNT_ITEM_INDEX_TX,
+    CNT_ITEM_INDEX_RX,
+    CNT_ITEM_INDEX_TX_MD,
+    CNT_ITEM_INDEX_MAX_COUNT,
+}continuesItemIndex_te;
+typedef enum
+{
+    ENTER_NEXT_PAGE,
+    ENTER_LAST_PAGE,
+    ENTER_CURRENT_PAGE,
+    ENTER_RELEASE_PAGE,
+}enter_te;
+typedef enum
+{
+    SET_ITEM_INDEX_TYPE,
+    SET_ITEM_INDEX_FREQ,
+    SET_ITEM_INDEX_STEP,
+    SET_ITEM_INDEX_TXPOWER,
+    SET_ITEM_INDEX_RFBAUDRATE,
+    SET_ITEM_INDEX_MAX_COUNT,
+}setting_item_index_te;
+typedef enum
+{
+    TYPE_GERNERL_TEXT,
+    TYPE_WRITE_TEXT,
+    TYPE_NEXT_LINK,
+}itemType_te;
+typedef struct 
+{
+    int cursorCount;            //本界面总共可移动光标总数
+    int cursorCounting;         //本界面的光标移动计数
+    uiFuntion uiDriver;         //本界面显示驱动
+    int id;                     //本界面ID
+    int lastPageIdTab[6];       //返回上一界面超链接,对应界面的ID
+    int nextPageIdTab[6];       //下一界面超链接,对应界面的ID
+    int itemValueTab[6];        //该区域写入值缓存
+    int itemMinValueTab[6];     //该区域可写入最小值
+    int itemMaxValueTab[6];     //该区域可写入最大值
+    itemType_te itemTypeTab[6]; //=0普通文本,=1可编辑文本,=2下一界面超链接
+    uint8_t writeStaTab[6];     //可写入操作状态,=1可以通过上下按键加减,同时该区域背景闪烁
+    uint8_t writeStatusTab[6];  //控制该区域背景颜色
+}uiPageUnit_ts;
+
+int8_t myDisplay_getPageId(void);
+void myDisplay_enter(uint8_t direct);
+void myDisplay_change(uint8_t direct);
+void myDisplay_ui_rf_continuos_txCurrent(float Current);
+void myDisplay_ui_rf_tx_packet_buffer(uint8_t *buffer);
+void myDisplay_ui_rf_tx_packet_counts(uint32_t rate, uint32_t count);
+void myDisplay_ui_rf_tx_packet_consumeTime(uint32_t time);
+void myDisplay_ui_rf_tx_packet_ackRssi(int16_t rssi);
+void myDisplay_ui_rf_continuos_rxErrorRate(float rate);
+void myDisplay_ui_rf_continuos_rxContinuousFreq(uint32_t freq);
+void myDisplay_ui_rf_continuos_rxPacket(uint8_t *buf, uint16_t len);
+void myDisplay_ui_rf_continuos_rxPacketCount(uint8_t status, uint16_t count);
+void myDisplay_ui_rf_continuos_rxPacketGetCount(uint32_t count);
+void myDisplay_ui_rf_continuos_rxRssi(int16_t rssi);
+void myDisplay_ui_rf_continuos_rfFreq(void);
+void myDisplay_ui_rf_continuos_rfBr(void);
+void myDisplay_ui_rf_continuos_rfPwr(void);
+void myDisplay_ui_rf_rxPacket_buffer(uint8_t *buf, uint16_t len);
+void myDisplay_ui_rf_rxPacket_scroll_buffer(uint8_t *buf, uint16_t len);
+void myDisplay_ui_rf_rxContinue_scroll_buffer(uint8_t *buf, uint16_t len);
+void myDisplay_ui_rf_continuos_rxLen(float rate, uint16_t len);
+void myDisplay_ui_rf_rxPacket_count(uint32_t count);
+void myDisplay_ui_rf_rxPacket_rssi(int16_t rssi, int8_t snr);
+void myDisplay_ui_rf_rxPacket_rate(float rate, int count, int frame);
+void myDisplay_ui_rf_rxPacket_rxCurrent(float current);
+void myDisplay_ui_firstUi_setDeviceName(char *name);
+void myDisplay_ui_firstUi_setFreq(uint32_t freq);
+void myDisplay_ui_firstUi_setRfBr(uint32_t br);
+void myDisplay_init(enterCallback cb);
+void myDisplay_ui_firstUi_setRfPower(int power);
+void myDisplay_setSettingParams(int chipType, 
+                                int rfChannel, 
+                                int channelStep, 
+                                int txPower, 
+                                int rfBaudrate);
+void myDisplay_setSettingParamsProfile(uint8_t index, int value, int min, int max);
+void myDisplay_ui_rf_setting_freq(uint32_t freq);
+void myDisplay_ui_rf_setting_rfPower(int8_t rfPower);
+void myDisplay_ui_rf_setting_type(char *type);
+void myDisplay_ui_rf_setting_channelStep(uint32_t channelStep);
+void myDisplay_ui_rf_setting_rfBr(uint32_t br);
+void myDisplay_ui_deviceInfor_setVer(uint8_t ver);
+void myDisplay_ui_deviceInfor_setModule(char *moduleName);
+void uiTimerFlash_callBack(void);
+#endif
+

+ 1 - 1
keil_v5/project.uvprojx

@@ -1350,7 +1350,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>VGKitBoard_237xS_ST_APP_V10</OutputName>
+          <OutputName>VGKitBoard_237xS_ST_APP_V11</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>

+ 835 - 835
project/main.c

@@ -1,835 +1,835 @@
-#include "main.h"
-#include "ReadKey.h"
-#include "key.h"
-#include "ReadKey.h"
-#include "crc8.h"
-#include "led.h"
-#include "eventUnit.h"
-#include "myADC.h"
-#include "myInputCapture.h"
-#include "myLcd.h"
-#include "myDisplayUnit.h"
-#include "myFlashData.h"
-#include "myTim.h"
-#include "myUart.h"
-#include "myUart3.h"
-#include "myRadio.h"
-
-#define SOFT_VERSION 0x10
-#define SET_RF_FREQ_HZ(base, ch,step) base+ch*step*10*1000
-//---------------key
-KeyParamExt_ts *getKeyReturn;
-key_value_te keyPressValue;
-
-
-static uint16_t present_adcValue;
-static uartPacket_ts uartPacket;
-static uartPacket_ts uart3Packet;
-
-static bool startToCountingRx = false;
-static float present_moduleCurrendValue;
-static float validPackageCount = 0;
-static uint32_t rfContinuousFreq = 1;
-static float rfRxTestRate = 1;
-
-static rfRxPacket_ts rfRecvPacket;
-static rfTxPacket_ts rfTxPacket;
-static uint32_t rfTxCount = 0;
-static uint32_t rfRxCount = 0;
-static uint32_t rfTxAndGetAckTime_ms = 0;
-static uint32_t rfTxAndGetAckTimeSet_ms = 3000;
-static uint32_t rfTxReTmCount = 0;
-static bool rfTxGetAckStatus = false;
-static uint8_t rfCtrlMode;
-const uint32_t rfBaseFreqList[DVTP_MAX_COUNT] = 
-{
-    /*"0"*/420000000,//VG2379S433N0S1
-    /*"1"*/490000000,//VG2379S490N0S1
-    /*"2"*/868000000,//VG2373S868N0S1
-    /*"3"*/915000000,//VG2373S915N0S1
-    /*"4"*/150000000,//VGdd79S170N0S1
-    /*"5"*/420000000,//VGdd79S433N0S1
-    /*"6"*/490000000,//VGdd79S490N0S1
-    /*"7"*/868000000,//VGdd79S868N0S1
-    /*"8"*/915000000,//VGdd79S915N0S1
-    /*"0"*/420000000,//VG2379S433X0M1
-    /*"1"*/490000000,//VG2379S490X0M1
-    /*"2"*/868000000,//VG2373S868X0M1
-    /*"3"*/915000000,//VG2373S915X0M1
-    /*"4"*/150000000,//VGdd79S170X0M1
-    /*"5"*/420000000,//VGdd79S433X0M1
-    /*"6"*/490000000,//VGdd79S490X0M1
-    /*"7"*/868000000,//VGdd79S868X0M1
-    /*"8"*/915000000,//VGdd79S915X0M1
-    /*"0"*/420000000,//VG2379S433X0M2
-    /*"1"*/490000000,//VG2379S490X0M2
-    /*"2"*/868000000,//VG2373S868X0M2
-    /*"3"*/915000000,//VG2373S915X0M2
-    /*"4"*/150000000,//VGdd79S170X0M2
-    /*"5"*/420000000,//VGdd79S433X0M2
-    /*"6"*/490000000,//VGdd79S490X0M2
-    /*"7"*/868000000,//VGdd79S868X0M2
-    /*"8"*/915000000,//VGdd79S915X0M2
-    /*"0"*/420000000,//VG2379S433N0SA
-    /*"1"*/490000000,//VG2379S490N0SA
-    /*"2"*/868000000,//VG2373S868N0SA
-    /*"3"*/915000000,//VG2373S915N0SA
-    /*"4"*/150000000,//VGdd79S170N0SA
-    /*"5"*/420000000,//VGdd79S433N0SA
-    /*"6"*/490000000,//VGdd79S490N0SA
-    /*"7"*/868000000,//VGdd79S868N0SA
-    /*"8"*/915000000,//VGdd79S915N0SA
-};
-const uint32_t rfBaudrateList[MAX_RF_BAUDRATE_COUNT] = 
-{
-    90, 610, 1220, 2441, 5022, 12500, 37500
-};
-const int8_t rfTxPowerList[RF_TX_PWR_MAX_COUNT] = 
-{
-    -9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
-};
-static char deviceNameList[DVTP_MAX_COUNT][20] = 
-{
-    /*"0"*/"VG2379S433N0S1",
-    /*"1"*/"VG2379S490N0S1",
-    /*"2"*/"VG2373S868N0S1",
-    /*"3"*/"VG2373S915N0S1",
-    /*"4"*/"VGdd79S170N0S1",
-    /*"5"*/"VGdd79S433N0S1",
-    /*"6"*/"VGdd79S490N0S1",
-    /*"7"*/"VGdd79S868N0S1",
-    /*"8"*/"VGdd79S915N0S1",
-    /*"0"*/"VG2379S433X0M1",
-    /*"1"*/"VG2379S490X0M1",
-    /*"2"*/"VG2373S868X0M1",
-    /*"3"*/"VG2373S915X0M1",
-    /*"4"*/"VGdd79S170X0M1",
-    /*"5"*/"VGdd79S433X0M1",
-    /*"6"*/"VGdd79S490X0M1",
-    /*"7"*/"VGdd79S868X0M1",
-    /*"8"*/"VGdd79S915X0M1",
-    /*"0"*/"VG2379S433X0M2",
-    /*"1"*/"VG2379S490X0M2",
-    /*"2"*/"VG2373S868X0M2",
-    /*"3"*/"VG2373S915X0M2",
-    /*"4"*/"VGdd79S170X0M2",
-    /*"5"*/"VGdd79S433X0M2",
-    /*"6"*/"VGdd79S490X0M2",
-    /*"7"*/"VGdd79S868X0M2",
-    /*"8"*/"VGdd79S915X0M2",
-    /*"0"*/"VG2379S433N0SA",
-    /*"1"*/"VG2379S490N0SA",
-    /*"2"*/"VG2373S868N0SA",
-    /*"3"*/"VG2373S915N0SA",
-    /*"4"*/"VGdd79S170N0SA",
-    /*"5"*/"VGdd79S433N0SA",
-    /*"6"*/"VGdd79S490N0SA",
-    /*"7"*/"VGdd79S868N0SA",
-    /*"8"*/"VGdd79S915N0SA",
-};
-userParams_ts deviceInforDef = 
-{
-    .projectModel = "VG237x",
-    .deviceId = 1,
-    .rfChannel = 13,
-    .channelStep = 100,
-    .txPower = RF_TX_PWR_P_22,
-    .rfBaudrate = RF_BAUDRATE_1220,
-    .chipType = DVTP_VGdd79S433N0S1,
-};
-userParams_ts deviceInfor;
-#define EVENT_TIME_CYCLE_10ms         0
-#define EVENT_TIME_CYCLE_500ms      1
-#define EVENT_UART3_RECV     2
-#define EVENT_UART_RECV         3
-// #define EVENT_TEST_RX_TIMEOUT       4
-#define EVENT_RF_CONTINUOUS_TX       5
-#define EVENT_RF_CONTINUOUS_RX       6
-#define EVENT_RF_IDLE       7
-#define EVENT_RF_CONTINUOUS_TX_MD       8
-#define EVENT_TIMEOUT_TO_SAVE_PARAMS       9
-#define EVENT_RF_GET_RX_PACKET       10
-#define EVENT_RF_PACKET_TX       11
-#define EVENT_RF_PACKET_RX       12
-#define EVENT_TIMEOUT_CHECK_RF_PACKET       13
-#define EVENT_RF_RX_ERROR       14
-static uint16_t eventReturn;
-
-void dealKeyPressProccess(void)
-{
-    if (getKeyReturn->haveKey == false)
-    {
-        return;
-    }
-    getKeyReturn->haveKey = false;
-
-    switch (getKeyReturn->value)
-    {
-    case LEFT_KEY:
-    {
-        if(getLongKeySt() == true)
-        {
-            clearLongKey(); 
-
-            EnableReleaseKey();
-            myDisplay_enter(ENTER_LAST_PAGE);
-        }
-        else
-        {
-            if (getReleaseKeySt())
-            {
-
-            }
-            else
-            {
-                EnableLongKey(5);   
-            }
-        }
-    }
-        break;
-    case RIGHT_KEY:
-    {
-        if(getLongKeySt() == true)
-        {
-            clearLongKey(); 
-
-            EnableReleaseKey();
-        }
-        else
-        {
-            if (getReleaseKeySt())
-            {
-
-            }
-            else
-            {
-                EnableLongKey(5);   
-            }
-        }
-    }
-        break;
-    case TOP_KEY:
-    {
-        if(getCyclicKeySt() == true)
-        {
-            EnableCyclicKey(30); 
-            myDisplay_change(1);
-        }
-        else
-        {
-            if (getReleaseKeySt())
-            {
-                beep_shortBeep();
-                myDisplay_change(1);
-            }
-            else
-            {
-                EnableReleaseKey();
-                EnableCyclicKey(300);   
-            }
-        }
-    }
-        break;
-    case BOTTOM_KEY:
-    {
-        if(getCyclicKeySt() == true)
-        {
-            EnableCyclicKey(30); 
-            myDisplay_change(0);
-        }
-        else
-        {
-            if (getReleaseKeySt())
-            {
-                beep_shortBeep();
-                myDisplay_change(0);
-            }
-            else
-            {
-                EnableReleaseKey();
-                EnableCyclicKey(300);   
-            }
-        }
-    }
-        break;
-    case OK_KEY:
-    {
-        if(getLongKeySt() == true)
-        {
-            clearLongKey(); 
-
-            EnableReleaseKey();
-            beep_shortBeep();
-            myDisplay_enter(ENTER_NEXT_PAGE);
-        }
-        else
-        {
-            if (getReleaseKeySt())
-            {
-
-            }
-            else
-            {
-                EnableLongKey(5);   
-            }
-        }
-    }
-        break;
-    default:
-        break;
-    }
-}
-
-static void rcc_init(void)
-{
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
-
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-
-#if defined(STM32F10X_LD_VL) || defined(STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)
-    /* ADCCLK = PCLK2/2 */
-    RCC_ADCCLKConfig(RCC_PCLK2_Div2);
-#else
-    /* ADCCLK = PCLK2/4 */
-    RCC_ADCCLKConfig(RCC_PCLK2_Div4);
-#endif
-}
-
-void UART1_CALLBACK(uint8_t *buf, uint16_t len)
-{
- if(uartPacket.isValid == 0)
- {
-    memcpy(uartPacket.packet, buf, len);
-    uartPacket.len = len;
-    uartPacket.isValid = 1;
-    
-    baseCmdFram_ts *baseCmd = (baseCmdFram_ts *)uartPacket.packet;
-    if (checkFramLegal(uartPacket.packet, uartPacket.len))
-    {
-        switch (baseCmd->cmd)
-        {
-        case CMD_TO_BOOTLOADER:
-        {
-            #ifdef BOOTLOADER_APP
-            myFlash_setBootloadFlag();
-            
-            #endif
-            NVIC_SystemReset();
-        }break;
-        default:
-            break;
-        }
-    }
-     event_post(EVENT_UART_RECV);
- }
-}
-void UART3_CALLBACK(uint8_t *buf, uint16_t len)
-{
-    if(uart3Packet.isValid == 0)
-    {
-        memcpy(uart3Packet.packet, buf, len);
-        uart3Packet.len = len;
-        uart3Packet.isValid = true;
-        event_post(EVENT_UART3_RECV);
-    }
-}
-
-void TIM3_CALLBACK(void)
-{
-    static uint8_t timeCnt_1ms = 0;
-
-    beep_onDriver();
-    if(timeCnt_1ms ++ == 5)
-    {
-        timeCnt_1ms = 0;
-        rfTxAndGetAckTime_ms ++;
-        eventDriver();
-    }
-}
-
-void uiEnterCallback(int pageId, int cursorCount, int status, int value)
-{
-    switch (pageId - 1)
-    {
-    case UI_PAGE_ID_ITEM_MODE:
-    {
-
-    }break;
-    case UI_PAGE_ID_RF_CONTINUOUS:
-    {
-        switch (cursorCount)
-        {
-        case CNT_ITEM_INDEX_TX:
-        {
-            // event_post(status ? EVENT_RF_CONTINUOUS_TX : EVENT_RF_CONTINUOUS_RX);
-            event_post(EVENT_RF_CONTINUOUS_TX);
-            rfCtrlMode = status ? UI_PAGE_ID_RF_CONTINUOUS : 0;
-        }
-            break;
-        case CNT_ITEM_INDEX_RX:
-        {
-            event_post(status ? EVENT_RF_CONTINUOUS_RX : EVENT_RF_IDLE);
-        }
-            break;
-        case CNT_ITEM_INDEX_TX_MD:
-        {
-            event_post(status ? EVENT_RF_CONTINUOUS_TX_MD : EVENT_RF_IDLE);
-        }
-            break;
-        default:
-            break;
-        }
-    }
-        break;
-    case UI_PAGE_ID_TX_PACKET:
-    {
-        switch (cursorCount)
-        {
-        case 0:
-        {
-            setEvent(status ? EVENT_RF_PACKET_TX : EVENT_RF_IDLE, 
-                    status ? true : false, 
-                    status ? 500 : 0);
-            rfCtrlMode = status ? UI_PAGE_ID_TX_PACKET : 0;
-            rfTxCount = 0;
-            rfRxCount = 0;
-        }
-            break;
-        case 1:
-        default:
-            break;
-        }
-    }
-        break;
-    case UI_PAGE_ID_RX_PACKET:
-    {
-        switch (cursorCount)
-        {
-        case 0:
-        {
-            event_post(status ? EVENT_RF_PACKET_RX : EVENT_RF_IDLE);
-            rfCtrlMode = status ? UI_PAGE_ID_RX_PACKET : 0;
-            rfTxCount = 0;
-            rfRxCount = 0;
-        }
-            break;
-        default:
-            break;
-        }
-    }
-        break;
-    case UI_PAGE_ID_SETTING:
-    {
-        switch (cursorCount)
-        {
-        case SET_ITEM_INDEX_TYPE://chipType
-        {
-            deviceInfor.chipType = value;
-            if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
-            {
-                if (deviceInfor.txPower >= RF_TX_PWR_P_15)
-                {
-                    deviceInfor.txPower = RF_TX_PWR_P_15;
-                }
-                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15 + 1);
-            }
-            else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
-            {
-                if (deviceInfor.txPower >= RF_TX_PWR_P_10)
-                {
-                    deviceInfor.txPower = RF_TX_PWR_P_10;
-                }
-                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10 + 1);
-            }
-            else
-            {
-                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT);
-            }
-            if ((deviceInfor.chipType >= DVTP_VG2379S433N0SA) && (deviceInfor.chipType <= DVTP_VGdd79S915N0SA))
-            {
-                if (deviceInfor.chipType < DVTP_VGdd79S170N0SA)
-                {
-                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_90, MAX_RF_BAUDRATE_COUNT);
-                }
-                else
-                {
-                    if (deviceInfor.rfBaudrate < RF_BAUDRATE_1220)
-                    {
-                        deviceInfor.rfBaudrate = RF_BAUDRATE_1220;
-                    }
-                    
-                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
-                }
-            }
-            else
-            {
-                if ((deviceInfor.chipType < DVTP_VGdd79S170N0S1) || (deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VG2373S915X0M1))
-                {
-                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_610, MAX_RF_BAUDRATE_COUNT);
-                }
-                else
-                {
-                    if (deviceInfor.rfBaudrate < RF_BAUDRATE_1220)
-                    {
-                        deviceInfor.rfBaudrate = RF_BAUDRATE_1220;
-                    }
-                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
-                }
-            }
-            myRadio_setTxPower(deviceInfor.txPower);
-            myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
-            myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
-            myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
-            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
-        }
-            break;
-        case SET_ITEM_INDEX_FREQ://Freq
-        {
-            deviceInfor.rfChannel = value;
-            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
-        }
-            break;
-        case SET_ITEM_INDEX_STEP://channelStep
-        {
-            deviceInfor.channelStep = value;
-            myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep*10*1000);
-            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
-        }
-            break;
-        case SET_ITEM_INDEX_TXPOWER://TxPower
-        {
-            deviceInfor.txPower = value;
-
-            myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
-            myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
-            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
-        }
-        break;
-        case SET_ITEM_INDEX_RFBAUDRATE://RFBAUDRATE
-        {
-            deviceInfor.rfBaudrate = value;
-            myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
-            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
-        }
-            break;
-        default:
-            break;
-        }
-    }
-        break;
-
-    default:
-        break;
-    }
-}
-void rfRx_callback(uint8_t status, rfRxPacket_ts packet)
-{
-    
-    rfRecvPacket = packet;
-    
-    switch (status)
-    {
-        case RX_STA_SECCESS:
-        {
-            myRadio_receiver();
-            event_post(EVENT_RF_GET_RX_PACKET);
-            if (startToCountingRx)
-            {
-                if (memcmp(rfRecvPacket.payload, "hel", 3) == 0)
-                {
-                    validPackageCount ++;
-                }
-                
-            }
-            else
-            {
-            }
-        }
-        break;
-        case RX_STA_TIMEOUT:
-        {
-            event_post(EVENT_RF_RX_ERROR);
-        }
-        break;
-        case RX_STA_PAYLOAD_ERROR:
-        {
-            event_post(EVENT_RF_RX_ERROR);
-        }
-        break;
-        case TX_STA_SECCESS:
-        {
-            LED1_ON_ONE();
-            myRadio_receiver();
-        }
-        break;
-        default:
-            break;
-    }
-}
-int main(void)
-{
-    userParams_ts userParamsTemp;
-
-    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //
-#ifdef BOOTLOADER_APP
-	SCB->VTOR = FLASH_BASE | 0x000C800;
-#endif
-    rcc_init();
-
-    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //
-    myFlash_readParams((uint8_t *)&deviceInfor, sizeof(userParams_ts));
-    if (crc8_gernCheckT((unsigned char *)&deviceInfor,
-                        sizeof(userParams_ts) - 1,
-                        deviceInfor.checkSum) == 0)
-    {
-        deviceInfor = deviceInforDef;
-    }
-    if (memcmp(deviceInfor.projectModel, deviceInforDef.projectModel, strlen(deviceInforDef.projectModel)) != 0)
-    {
-        deviceInfor = deviceInforDef;
-    }
-    key_init();
-
-    LED_Init();
-
-    // myUart3_init(115200, UART3_CALLBACK);    //
-    myUart1_init(115200, UART1_CALLBACK);
-
-    myTim1_init(200, TIM3_CALLBACK);
-
-    myADC_init();
-
-    beep_init();
-    beep_setFreq(deviceInfor.beepNumb);
-
-    myRadio_setChipType(deviceInfor.chipType);
-    myRadio_init(0, rfRx_callback);
-    myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-    myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
-    myRadio_setBaudrate(deviceInfor.rfBaudrate);
-
-    myDisplay_init(uiEnterCallback);
-    myDisplay_ui_firstUi_setDeviceName(deviceNameList[deviceInfor.chipType]);
-    myDisplay_ui_firstUi_setFreq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-    myDisplay_ui_firstUi_setRfPower(rfTxPowerList[deviceInfor.txPower]);
-    myDisplay_ui_firstUi_setRfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
-    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TYPE, deviceInfor.chipType, 0, DVTP_MAX_COUNT);
-    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_FREQ, deviceInfor.rfChannel, 0, 254 + 1);
-    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_STEP, deviceInfor.channelStep, 25, 200 + 1);
-    if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
-    {
-        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15 + 1);
-    }
-    else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
-    {
-        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10 + 1);
-    }
-    else
-    {
-        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT);
-    }
-    if ((deviceInfor.chipType >= DVTP_VG2379S433N0SA) && (deviceInfor.chipType <= DVTP_VGdd79S915N0SA))
-    {
-        if (deviceInfor.chipType < DVTP_VGdd79S170N0S1)
-        {
-            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_90, MAX_RF_BAUDRATE_COUNT);
-        }
-        else
-        {
-            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
-        }
-    }
-    else
-    {
-        if (deviceInfor.chipType < DVTP_VGdd79S170N0S1)
-        {
-            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_610, MAX_RF_BAUDRATE_COUNT);
-        }
-        else
-        {
-            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
-        }
-    }
-    myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-    myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep * 10 * 1000);
-    myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
-    myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
-    myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
-    myDisplay_ui_deviceInfor_setVer(SOFT_VERSION);
-    myDisplay_ui_deviceInfor_setModule("VGKitBoard_237xS");
-    beep_longBeep();
-
-    setEvent(EVENT_TIME_CYCLE_10ms, true, 10);
-    setEvent(EVENT_TIME_CYCLE_500ms, true, 500);
-    // setEvent(EVENT_RF_PACKET_TX, true, 2000);
-    myRadio_receiver();
-    while(1)
-    {   
-        eventReturn = event_pend();
-
-        if (getEvent(EVENT_TIME_CYCLE_10ms))
-        {
-            getKeyReturn = KeyValueChange(keyPressValue);
-            dealKeyPressProccess();
-        }
-        if (getEvent(EVENT_TIME_CYCLE_500ms))
-        {
-            present_moduleCurrendValue = myADC_getVoltageValue()/50/0.5*1000;
-            myDisplay_ui_rf_continuos_txCurrent(present_moduleCurrendValue);
-            myDisplay_ui_rf_rxPacket_rxCurrent(present_moduleCurrendValue);
-            myDisplay_ui_rf_continuos_rxRssi(myRadio_getRssi());
-            uiTimerFlash_callBack();
-        }
-        if (getEvent(EVENT_RF_CONTINUOUS_RX))
-        {
-            myRadio_setCtrl(RADIO_EXT_CONTROL_RX_SENSITIVITY, 
-                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-            startToCountingRx = true;
-            validPackageCount = 0;
-        }
-        if (getEvent(EVENT_RF_CONTINUOUS_TX))
-        {
-            myRadio_setCtrl(RADIO_EXT_CONTROL_TX_UNMODULATED, 
-                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-        }
-        if (getEvent(EVENT_RF_CONTINUOUS_TX_MD))
-        {
-            myRadio_setTxPower(deviceInfor.txPower);
-            myRadio_setCtrl(RADIO_EXT_CONTROL_TX_MODULATED, 
-                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
-        }
-        if (getEvent(EVENT_RF_PACKET_TX))
-        {
-            rfTxPacket.len = strlen("hello world");
-            memcpy(rfTxPacket.payload, "hello world", rfTxPacket.len);
-            rfTxPacket.payload[rfTxPacket.len] = ((rfTxCount) & 0x0f) + 0x30;
-            rfTxPacket.len ++;
-            rfTxPacket.payload[rfTxPacket.len] = 0;
-            myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
-            myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
-            myRadio_transmit(&rfTxPacket);
-            event_clear(EVENT_TIMEOUT_CHECK_RF_PACKET);
-            if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
-            {
-                rfTxCount ++;
-                if(rfTxAndGetAckTimeSet_ms == 0 || rfTxAndGetAckTimeSet_ms > 1500)
-                {
-                    setEvent( EVENT_RF_PACKET_TX, false, 1500);
-                }
-                else
-                {
-                    setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTimeSet_ms*20/10);
-                }
-                rfTxAndGetAckTime_ms = 0;
-                if (rfTxGetAckStatus == false)
-                {
-                    myDisplay_ui_rf_tx_packet_consumeTime(~(uint32_t)0);
-                    rfTxReTmCount ++;
-                    if (rfTxReTmCount == 10)
-                    {
-                        rfTxReTmCount = 0;
-                        rfTxAndGetAckTimeSet_ms = 0;
-                    }
-                }
-                rfTxGetAckStatus = false;
-            }
-        }
-        if (getEvent(EVENT_RF_PACKET_RX))
-        {
-            myRadio_receiver();
-            validPackageCount  = 0;
-        }
-        if (getEvent(EVENT_RF_GET_RX_PACKET))
-        {
-            rfRxCount ++;
-            myDisplay_ui_rf_rxPacket_rssi(rfRecvPacket.rssi);
-            myDisplay_ui_rf_rxPacket_count(rfRxCount);
-            myDisplay_ui_rf_rxPacket_scroll_buffer(rfRecvPacket.payload, 0);
-            myDisplay_ui_rf_rxContinue_scroll_buffer(rfRecvPacket.payload, 0);
-            myDisplay_ui_rf_continuos_rxLen(0, validPackageCount);
-            myUart1_sendArray(rfRecvPacket.payload, rfRecvPacket.len);
-            memset(rfRecvPacket.payload, 0, sizeof(rfRecvPacket.payload));
-            if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
-            {   
-                myDisplay_ui_rf_tx_packet_consumeTime(rfTxAndGetAckTime_ms);
-                myDisplay_ui_rf_tx_packet_ackRssi(rfRecvPacket.rssi);
-                myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
-                if(rfTxAndGetAckTime_ms == 0 || rfTxAndGetAckTime_ms >= 1500)
-                {
-                    setEvent( EVENT_RF_PACKET_TX, false, 1500);
-                }
-                else
-                {
-                    setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTime_ms*20/10);
-                }
-                rfTxGetAckStatus = true;
-                rfTxReTmCount = 0;
-                rfTxAndGetAckTimeSet_ms = rfTxAndGetAckTime_ms;
-                rfTxAndGetAckTime_ms = 0;
-            }
-            if (rfCtrlMode == UI_PAGE_ID_RX_PACKET)
-            {   
-                setEvent( EVENT_RF_PACKET_TX, false, 0);
-            }
-            LED2_ON_ONE();
-        }
-        if (getEvent(EVENT_RF_RX_ERROR))
-        {
-            myRadio_receiver();
-        }
-        if (getEvent(EVENT_RF_IDLE))
-        {
-            startToCountingRx = false;
-            myRadio_abort();
-            event_clear(EVENT_RF_PACKET_TX);
-        }
-        if (getEvent(EVENT_UART_RECV))
-        {
-            if (uartPacket.isValid)
-            {
-                uartPacket.isValid = false;
-
-                rfTxCount ++;
-                rfTxPacket.len = uartPacket.len;
-                if (rfTxPacket.len > MAX_RF_PACKET_LEN)
-                {
-                    rfTxPacket.len = MAX_RF_PACKET_LEN;
-                }
-                
-                memcpy(rfTxPacket.payload, uartPacket.packet, rfTxPacket.len);
-                myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
-                myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
-                myRadio_transmit(&rfTxPacket);
-            }
-        }
-        if (getEvent(EVENT_UART3_RECV))
-        {
-            if (uart3Packet.isValid)
-            {
-                uart3Packet.isValid = false;
-                uart3Packet.len = 0;
-                myDisplay_ui_rf_rxPacket_buffer(uart3Packet.packet, 0);
-            }
-        }
-        if (getEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS))
-        {
-            deviceInfor.checkSum = crc8_ger((unsigned char*)&deviceInfor, sizeof(userParams_ts) - 1);
-            myFlash_writeParams((uint8_t*)&deviceInfor, sizeof(userParams_ts));
-        }
-        
-        keyPressValue = keyScan();
-        myRadio_process();
-        
-    }     
-} 
-
+#include "main.h"
+#include "ReadKey.h"
+#include "key.h"
+#include "ReadKey.h"
+#include "crc8.h"
+#include "led.h"
+#include "eventUnit.h"
+#include "myADC.h"
+#include "myInputCapture.h"
+#include "myLcd.h"
+#include "myDisplayUnit.h"
+#include "myFlashData.h"
+#include "myTim.h"
+#include "myUart.h"
+#include "myUart3.h"
+#include "myRadio.h"
+
+#define SOFT_VERSION 0x11
+#define SET_RF_FREQ_HZ(base, ch,step) base+ch*step*10*1000
+//---------------key
+KeyParamExt_ts *getKeyReturn;
+key_value_te keyPressValue;
+
+
+static uint16_t present_adcValue;
+static uartPacket_ts uartPacket;
+static uartPacket_ts uart3Packet;
+
+static bool startToCountingRx = false;
+static float present_moduleCurrendValue;
+static float validPackageCount = 0;
+static uint32_t rfContinuousFreq = 1;
+static float rfRxTestRate = 1;
+
+static rfRxPacket_ts rfRecvPacket;
+static rfTxPacket_ts rfTxPacket;
+static uint32_t rfTxCount = 0;
+static uint32_t rfRxCount = 0;
+static uint32_t rfTxAndGetAckTime_ms = 0;
+static uint32_t rfTxAndGetAckTimeSet_ms = 3000;
+static uint32_t rfTxReTmCount = 0;
+static bool rfTxGetAckStatus = false;
+static uint8_t rfCtrlMode;
+const uint32_t rfBaseFreqList[DVTP_MAX_COUNT] = 
+{
+    /*"0"*/420000000,//VG2379S433N0S1
+    /*"1"*/490000000,//VG2379S490N0S1
+    /*"2"*/868000000,//VG2373S868N0S1
+    /*"3"*/915000000,//VG2373S915N0S1
+    /*"4"*/150000000,//VGdd79S170N0S1
+    /*"5"*/420000000,//VGdd79S433N0S1
+    /*"6"*/490000000,//VGdd79S490N0S1
+    /*"7"*/868000000,//VGdd79S868N0S1
+    /*"8"*/915000000,//VGdd79S915N0S1
+    /*"0"*/420000000,//VG2379S433X0M1
+    /*"1"*/490000000,//VG2379S490X0M1
+    /*"2"*/868000000,//VG2373S868X0M1
+    /*"3"*/915000000,//VG2373S915X0M1
+    /*"4"*/150000000,//VGdd79S170X0M1
+    /*"5"*/420000000,//VGdd79S433X0M1
+    /*"6"*/490000000,//VGdd79S490X0M1
+    /*"7"*/868000000,//VGdd79S868X0M1
+    /*"8"*/915000000,//VGdd79S915X0M1
+    /*"0"*/420000000,//VG2379S433X0M2
+    /*"1"*/490000000,//VG2379S490X0M2
+    /*"2"*/868000000,//VG2373S868X0M2
+    /*"3"*/915000000,//VG2373S915X0M2
+    /*"4"*/150000000,//VGdd79S170X0M2
+    /*"5"*/420000000,//VGdd79S433X0M2
+    /*"6"*/490000000,//VGdd79S490X0M2
+    /*"7"*/868000000,//VGdd79S868X0M2
+    /*"8"*/915000000,//VGdd79S915X0M2
+    /*"0"*/420000000,//VG2379S433N0SA
+    /*"1"*/490000000,//VG2379S490N0SA
+    /*"2"*/868000000,//VG2373S868N0SA
+    /*"3"*/915000000,//VG2373S915N0SA
+    /*"4"*/150000000,//VGdd79S170N0SA
+    /*"5"*/420000000,//VGdd79S433N0SA
+    /*"6"*/490000000,//VGdd79S490N0SA
+    /*"7"*/868000000,//VGdd79S868N0SA
+    /*"8"*/915000000,//VGdd79S915N0SA
+};
+const uint32_t rfBaudrateList[MAX_RF_BAUDRATE_COUNT] = 
+{
+    90, 610, 1220, 2441, 5022, 12500, 37500
+};
+const int8_t rfTxPowerList[RF_TX_PWR_MAX_COUNT] = 
+{
+    -9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
+};
+static char deviceNameList[DVTP_MAX_COUNT][20] = 
+{
+    /*"0"*/"VG2379S433N0S1",
+    /*"1"*/"VG2379S490N0S1",
+    /*"2"*/"VG2373S868N0S1",
+    /*"3"*/"VG2373S915N0S1",
+    /*"4"*/"VGdd79S170N0S1",
+    /*"5"*/"VGdd79S433N0S1",
+    /*"6"*/"VGdd79S490N0S1",
+    /*"7"*/"VGdd79S868N0S1",
+    /*"8"*/"VGdd79S915N0S1",
+    /*"0"*/"VG2379S433X0M1",
+    /*"1"*/"VG2379S490X0M1",
+    /*"2"*/"VG2373S868X0M1",
+    /*"3"*/"VG2373S915X0M1",
+    /*"4"*/"VGdd79S170X0M1",
+    /*"5"*/"VGdd79S433X0M1",
+    /*"6"*/"VGdd79S490X0M1",
+    /*"7"*/"VGdd79S868X0M1",
+    /*"8"*/"VGdd79S915X0M1",
+    /*"0"*/"VG2379S433X0M2",
+    /*"1"*/"VG2379S490X0M2",
+    /*"2"*/"VG2373S868X0M2",
+    /*"3"*/"VG2373S915X0M2",
+    /*"4"*/"VGdd79S170X0M2",
+    /*"5"*/"VGdd79S433X0M2",
+    /*"6"*/"VGdd79S490X0M2",
+    /*"7"*/"VGdd79S868X0M2",
+    /*"8"*/"VGdd79S915X0M2",
+    /*"0"*/"VG2379S433N0SA",
+    /*"1"*/"VG2379S490N0SA",
+    /*"2"*/"VG2373S868N0SA",
+    /*"3"*/"VG2373S915N0SA",
+    /*"4"*/"VGdd79S170N0SA",
+    /*"5"*/"VGdd79S433N0SA",
+    /*"6"*/"VGdd79S490N0SA",
+    /*"7"*/"VGdd79S868N0SA",
+    /*"8"*/"VGdd79S915N0SA",
+};
+userParams_ts deviceInforDef = 
+{
+    .projectModel = "VG237x",
+    .deviceId = 1,
+    .rfChannel = 13,
+    .channelStep = 100,
+    .txPower = RF_TX_PWR_P_22,
+    .rfBaudrate = RF_BAUDRATE_1220,
+    .chipType = DVTP_VGdd79S433N0S1,
+};
+userParams_ts deviceInfor;
+#define EVENT_TIME_CYCLE_10ms         0
+#define EVENT_TIME_CYCLE_500ms      1
+#define EVENT_UART3_RECV     2
+#define EVENT_UART_RECV         3
+// #define EVENT_TEST_RX_TIMEOUT       4
+#define EVENT_RF_CONTINUOUS_TX       5
+#define EVENT_RF_CONTINUOUS_RX       6
+#define EVENT_RF_IDLE       7
+#define EVENT_RF_CONTINUOUS_TX_MD       8
+#define EVENT_TIMEOUT_TO_SAVE_PARAMS       9
+#define EVENT_RF_GET_RX_PACKET       10
+#define EVENT_RF_PACKET_TX       11
+#define EVENT_RF_PACKET_RX       12
+#define EVENT_TIMEOUT_CHECK_RF_PACKET       13
+#define EVENT_RF_RX_ERROR       14
+static uint16_t eventReturn;
+
+void dealKeyPressProccess(void)
+{
+    if (getKeyReturn->haveKey == false)
+    {
+        return;
+    }
+    getKeyReturn->haveKey = false;
+
+    switch (getKeyReturn->value)
+    {
+    case LEFT_KEY:
+    {
+        if(getLongKeySt() == true)
+        {
+            clearLongKey(); 
+
+            EnableReleaseKey();
+            myDisplay_enter(ENTER_LAST_PAGE);
+        }
+        else
+        {
+            if (getReleaseKeySt())
+            {
+
+            }
+            else
+            {
+                EnableLongKey(5);   
+            }
+        }
+    }
+        break;
+    case RIGHT_KEY:
+    {
+        if(getLongKeySt() == true)
+        {
+            clearLongKey(); 
+
+            EnableReleaseKey();
+        }
+        else
+        {
+            if (getReleaseKeySt())
+            {
+
+            }
+            else
+            {
+                EnableLongKey(5);   
+            }
+        }
+    }
+        break;
+    case TOP_KEY:
+    {
+        if(getCyclicKeySt() == true)
+        {
+            EnableCyclicKey(30); 
+            myDisplay_change(1);
+        }
+        else
+        {
+            if (getReleaseKeySt())
+            {
+                beep_shortBeep();
+                myDisplay_change(1);
+            }
+            else
+            {
+                EnableReleaseKey();
+                EnableCyclicKey(300);   
+            }
+        }
+    }
+        break;
+    case BOTTOM_KEY:
+    {
+        if(getCyclicKeySt() == true)
+        {
+            EnableCyclicKey(30); 
+            myDisplay_change(0);
+        }
+        else
+        {
+            if (getReleaseKeySt())
+            {
+                beep_shortBeep();
+                myDisplay_change(0);
+            }
+            else
+            {
+                EnableReleaseKey();
+                EnableCyclicKey(300);   
+            }
+        }
+    }
+        break;
+    case OK_KEY:
+    {
+        if(getLongKeySt() == true)
+        {
+            clearLongKey(); 
+
+            EnableReleaseKey();
+            beep_shortBeep();
+            myDisplay_enter(ENTER_NEXT_PAGE);
+        }
+        else
+        {
+            if (getReleaseKeySt())
+            {
+
+            }
+            else
+            {
+                EnableLongKey(5);   
+            }
+        }
+    }
+        break;
+    default:
+        break;
+    }
+}
+
+static void rcc_init(void)
+{
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
+
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
+
+#if defined(STM32F10X_LD_VL) || defined(STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)
+    /* ADCCLK = PCLK2/2 */
+    RCC_ADCCLKConfig(RCC_PCLK2_Div2);
+#else
+    /* ADCCLK = PCLK2/4 */
+    RCC_ADCCLKConfig(RCC_PCLK2_Div4);
+#endif
+}
+
+void UART1_CALLBACK(uint8_t *buf, uint16_t len)
+{
+ if(uartPacket.isValid == 0)
+ {
+    memcpy(uartPacket.packet, buf, len);
+    uartPacket.len = len;
+    uartPacket.isValid = 1;
+    
+    baseCmdFram_ts *baseCmd = (baseCmdFram_ts *)uartPacket.packet;
+    if (checkFramLegal(uartPacket.packet, uartPacket.len))
+    {
+        switch (baseCmd->cmd)
+        {
+        case CMD_TO_BOOTLOADER:
+        {
+            #ifdef BOOTLOADER_APP
+            myFlash_setBootloadFlag();
+            
+            #endif
+            NVIC_SystemReset();
+        }break;
+        default:
+            break;
+        }
+    }
+     event_post(EVENT_UART_RECV);
+ }
+}
+void UART3_CALLBACK(uint8_t *buf, uint16_t len)
+{
+    if(uart3Packet.isValid == 0)
+    {
+        memcpy(uart3Packet.packet, buf, len);
+        uart3Packet.len = len;
+        uart3Packet.isValid = true;
+        event_post(EVENT_UART3_RECV);
+    }
+}
+
+void TIM3_CALLBACK(void)
+{
+    static uint8_t timeCnt_1ms = 0;
+
+    beep_onDriver();
+    if(timeCnt_1ms ++ == 5)
+    {
+        timeCnt_1ms = 0;
+        rfTxAndGetAckTime_ms ++;
+        eventDriver();
+    }
+}
+
+void uiEnterCallback(int pageId, int cursorCount, int status, int value)
+{
+    switch (pageId - 1)
+    {
+    case UI_PAGE_ID_ITEM_MODE:
+    {
+
+    }break;
+    case UI_PAGE_ID_RF_CONTINUOUS:
+    {
+        switch (cursorCount)
+        {
+        case CNT_ITEM_INDEX_TX:
+        {
+            // event_post(status ? EVENT_RF_CONTINUOUS_TX : EVENT_RF_CONTINUOUS_RX);
+            event_post(EVENT_RF_CONTINUOUS_TX);
+            rfCtrlMode = status ? UI_PAGE_ID_RF_CONTINUOUS : 0;
+        }
+            break;
+        case CNT_ITEM_INDEX_RX:
+        {
+            event_post(status ? EVENT_RF_CONTINUOUS_RX : EVENT_RF_IDLE);
+        }
+            break;
+        case CNT_ITEM_INDEX_TX_MD:
+        {
+            event_post(status ? EVENT_RF_CONTINUOUS_TX_MD : EVENT_RF_IDLE);
+        }
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case UI_PAGE_ID_TX_PACKET:
+    {
+        switch (cursorCount)
+        {
+        case 0:
+        {
+            setEvent(status ? EVENT_RF_PACKET_TX : EVENT_RF_IDLE, 
+                    status ? true : false, 
+                    status ? 500 : 0);
+            rfCtrlMode = status ? UI_PAGE_ID_TX_PACKET : 0;
+            rfTxCount = 0;
+            rfRxCount = 0;
+        }
+            break;
+        case 1:
+        default:
+            break;
+        }
+    }
+        break;
+    case UI_PAGE_ID_RX_PACKET:
+    {
+        switch (cursorCount)
+        {
+        case 0:
+        {
+            event_post(status ? EVENT_RF_PACKET_RX : EVENT_RF_IDLE);
+            rfCtrlMode = status ? UI_PAGE_ID_RX_PACKET : 0;
+            rfTxCount = 0;
+            rfRxCount = 0;
+        }
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+    case UI_PAGE_ID_SETTING:
+    {
+        switch (cursorCount)
+        {
+        case SET_ITEM_INDEX_TYPE://chipType
+        {
+            deviceInfor.chipType = value;
+            if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
+            {
+                if (deviceInfor.txPower >= RF_TX_PWR_P_15)
+                {
+                    deviceInfor.txPower = RF_TX_PWR_P_15;
+                }
+                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15 + 1);
+            }
+            else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
+            {
+                if (deviceInfor.txPower >= RF_TX_PWR_P_10)
+                {
+                    deviceInfor.txPower = RF_TX_PWR_P_10;
+                }
+                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10 + 1);
+            }
+            else
+            {
+                myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT);
+            }
+            if ((deviceInfor.chipType >= DVTP_VG2379S433N0SA) && (deviceInfor.chipType <= DVTP_VGdd79S915N0SA))
+            {
+                if (deviceInfor.chipType < DVTP_VGdd79S170N0SA)
+                {
+                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_90, MAX_RF_BAUDRATE_COUNT);
+                }
+                else
+                {
+                    if (deviceInfor.rfBaudrate < RF_BAUDRATE_1220)
+                    {
+                        deviceInfor.rfBaudrate = RF_BAUDRATE_1220;
+                    }
+                    
+                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
+                }
+            }
+            else
+            {
+                if ((deviceInfor.chipType < DVTP_VGdd79S170N0S1) || (deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VG2373S915X0M1))
+                {
+                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_610, MAX_RF_BAUDRATE_COUNT);
+                }
+                else
+                {
+                    if (deviceInfor.rfBaudrate < RF_BAUDRATE_1220)
+                    {
+                        deviceInfor.rfBaudrate = RF_BAUDRATE_1220;
+                    }
+                    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
+                }
+            }
+            myRadio_setTxPower(deviceInfor.txPower);
+            myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
+            myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
+            myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
+            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
+        }
+            break;
+        case SET_ITEM_INDEX_FREQ://Freq
+        {
+            deviceInfor.rfChannel = value;
+            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
+        }
+            break;
+        case SET_ITEM_INDEX_STEP://channelStep
+        {
+            deviceInfor.channelStep = value;
+            myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep*10*1000);
+            myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
+        }
+            break;
+        case SET_ITEM_INDEX_TXPOWER://TxPower
+        {
+            deviceInfor.txPower = value;
+
+            myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
+            myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
+            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
+        }
+        break;
+        case SET_ITEM_INDEX_RFBAUDRATE://RFBAUDRATE
+        {
+            deviceInfor.rfBaudrate = value;
+            myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
+            setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
+        }
+            break;
+        default:
+            break;
+        }
+    }
+        break;
+
+    default:
+        break;
+    }
+}
+void rfRx_callback(uint8_t status, rfRxPacket_ts packet)
+{
+    
+    rfRecvPacket = packet;
+    
+    switch (status)
+    {
+        case RX_STA_SECCESS:
+        {
+            myRadio_receiver();
+            event_post(EVENT_RF_GET_RX_PACKET);
+            if (startToCountingRx)
+            {
+                if (memcmp(rfRecvPacket.payload, "hel", 3) == 0)
+                {
+                    validPackageCount ++;
+                }
+                
+            }
+            else
+            {
+            }
+        }
+        break;
+        case RX_STA_TIMEOUT:
+        {
+            event_post(EVENT_RF_RX_ERROR);
+        }
+        break;
+        case RX_STA_PAYLOAD_ERROR:
+        {
+            event_post(EVENT_RF_RX_ERROR);
+        }
+        break;
+        case TX_STA_SECCESS:
+        {
+            LED1_ON_ONE();
+            myRadio_receiver();
+        }
+        break;
+        default:
+            break;
+    }
+}
+int main(void)
+{
+    userParams_ts userParamsTemp;
+
+    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //
+#ifdef BOOTLOADER_APP
+	SCB->VTOR = FLASH_BASE | 0x000C800;
+#endif
+    rcc_init();
+
+    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //
+    myFlash_readParams((uint8_t *)&deviceInfor, sizeof(userParams_ts));
+    if (crc8_gernCheckT((unsigned char *)&deviceInfor,
+                        sizeof(userParams_ts) - 1,
+                        deviceInfor.checkSum) == 0)
+    {
+        deviceInfor = deviceInforDef;
+    }
+    if (memcmp(deviceInfor.projectModel, deviceInforDef.projectModel, strlen(deviceInforDef.projectModel)) != 0)
+    {
+        deviceInfor = deviceInforDef;
+    }
+    key_init();
+
+    LED_Init();
+
+    // myUart3_init(115200, UART3_CALLBACK);    //
+    myUart1_init(115200, UART1_CALLBACK);
+
+    myTim1_init(200, TIM3_CALLBACK);
+
+    myADC_init();
+
+    beep_init();
+    beep_setFreq(deviceInfor.beepNumb);
+
+    myRadio_setChipType(deviceInfor.chipType);
+    myRadio_init(0, rfRx_callback);
+    myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+    myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
+    myRadio_setBaudrate(deviceInfor.rfBaudrate);
+
+    myDisplay_init(uiEnterCallback);
+    myDisplay_ui_firstUi_setDeviceName(deviceNameList[deviceInfor.chipType]);
+    myDisplay_ui_firstUi_setFreq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+    myDisplay_ui_firstUi_setRfPower(rfTxPowerList[deviceInfor.txPower]);
+    myDisplay_ui_firstUi_setRfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
+    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TYPE, deviceInfor.chipType, 0, DVTP_MAX_COUNT);
+    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_FREQ, deviceInfor.rfChannel, 0, 254 + 1);
+    myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_STEP, deviceInfor.channelStep, 25, 200 + 1);
+    if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
+    {
+        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15 + 1);
+    }
+    else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
+    {
+        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10 + 1);
+    }
+    else
+    {
+        myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT);
+    }
+    if ((deviceInfor.chipType >= DVTP_VG2379S433N0SA) && (deviceInfor.chipType <= DVTP_VGdd79S915N0SA))
+    {
+        if (deviceInfor.chipType < DVTP_VGdd79S170N0S1)
+        {
+            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_90, MAX_RF_BAUDRATE_COUNT);
+        }
+        else
+        {
+            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
+        }
+    }
+    else
+    {
+        if (deviceInfor.chipType < DVTP_VGdd79S170N0S1)
+        {
+            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_610, MAX_RF_BAUDRATE_COUNT);
+        }
+        else
+        {
+            myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_1220, MAX_RF_BAUDRATE_COUNT);
+        }
+    }
+    myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+    myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep * 10 * 1000);
+    myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
+    myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
+    myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
+    myDisplay_ui_deviceInfor_setVer(SOFT_VERSION);
+    myDisplay_ui_deviceInfor_setModule("VGKitBoard_237xS");
+    beep_longBeep();
+
+    setEvent(EVENT_TIME_CYCLE_10ms, true, 10);
+    setEvent(EVENT_TIME_CYCLE_500ms, true, 500);
+    // setEvent(EVENT_RF_PACKET_TX, true, 2000);
+    myRadio_receiver();
+    while(1)
+    {   
+        eventReturn = event_pend();
+
+        if (getEvent(EVENT_TIME_CYCLE_10ms))
+        {
+            getKeyReturn = KeyValueChange(keyPressValue);
+            dealKeyPressProccess();
+        }
+        if (getEvent(EVENT_TIME_CYCLE_500ms))
+        {
+            present_moduleCurrendValue = myADC_getVoltageValue()/50/0.5*1000;
+            myDisplay_ui_rf_continuos_txCurrent(present_moduleCurrendValue);
+            myDisplay_ui_rf_rxPacket_rxCurrent(present_moduleCurrendValue);
+            myDisplay_ui_rf_continuos_rxRssi(myRadio_getRssi());
+            uiTimerFlash_callBack();
+        }
+        if (getEvent(EVENT_RF_CONTINUOUS_RX))
+        {
+            myRadio_setCtrl(RADIO_EXT_CONTROL_RX_SENSITIVITY, 
+                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+            startToCountingRx = true;
+            validPackageCount = 0;
+        }
+        if (getEvent(EVENT_RF_CONTINUOUS_TX))
+        {
+            myRadio_setCtrl(RADIO_EXT_CONTROL_TX_UNMODULATED, 
+                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+        }
+        if (getEvent(EVENT_RF_CONTINUOUS_TX_MD))
+        {
+            myRadio_setTxPower(deviceInfor.txPower);
+            myRadio_setCtrl(RADIO_EXT_CONTROL_TX_MODULATED, 
+                        SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
+        }
+        if (getEvent(EVENT_RF_PACKET_TX))
+        {
+            rfTxPacket.len = strlen("hello world");
+            memcpy(rfTxPacket.payload, "hello world", rfTxPacket.len);
+            rfTxPacket.payload[rfTxPacket.len] = ((rfTxCount) & 0x0f) + 0x30;
+            rfTxPacket.len ++;
+            rfTxPacket.payload[rfTxPacket.len] = 0;
+            myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
+            myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
+            myRadio_transmit(&rfTxPacket);
+            event_clear(EVENT_TIMEOUT_CHECK_RF_PACKET);
+            if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
+            {
+                rfTxCount ++;
+                if(rfTxAndGetAckTimeSet_ms == 0 || rfTxAndGetAckTimeSet_ms > 1500)
+                {
+                    setEvent( EVENT_RF_PACKET_TX, false, 1500);
+                }
+                else
+                {
+                    setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTimeSet_ms*20/10);
+                }
+                rfTxAndGetAckTime_ms = 0;
+                if (rfTxGetAckStatus == false)
+                {
+                    myDisplay_ui_rf_tx_packet_consumeTime(~(uint32_t)0);
+                    rfTxReTmCount ++;
+                    if (rfTxReTmCount == 10)
+                    {
+                        rfTxReTmCount = 0;
+                        rfTxAndGetAckTimeSet_ms = 0;
+                    }
+                }
+                rfTxGetAckStatus = false;
+            }
+        }
+        if (getEvent(EVENT_RF_PACKET_RX))
+        {
+            myRadio_receiver();
+            validPackageCount  = 0;
+        }
+        if (getEvent(EVENT_RF_GET_RX_PACKET))
+        {
+            rfRxCount ++;
+            myDisplay_ui_rf_rxPacket_rssi(rfRecvPacket.rssi, rfRecvPacket.snr);
+            myDisplay_ui_rf_rxPacket_count(rfRxCount);
+            myDisplay_ui_rf_rxPacket_scroll_buffer(rfRecvPacket.payload, 0);
+            myDisplay_ui_rf_rxContinue_scroll_buffer(rfRecvPacket.payload, 0);
+            myDisplay_ui_rf_continuos_rxLen(0, validPackageCount);
+            myUart1_sendArray(rfRecvPacket.payload, rfRecvPacket.len);
+            memset(rfRecvPacket.payload, 0, sizeof(rfRecvPacket.payload));
+            if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
+            {   
+                myDisplay_ui_rf_tx_packet_consumeTime(rfTxAndGetAckTime_ms);
+                myDisplay_ui_rf_tx_packet_ackRssi(rfRecvPacket.rssi);
+                myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
+                if(rfTxAndGetAckTime_ms == 0 || rfTxAndGetAckTime_ms >= 1500)
+                {
+                    setEvent( EVENT_RF_PACKET_TX, false, 1500);
+                }
+                else
+                {
+                    setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTime_ms*20/10);
+                }
+                rfTxGetAckStatus = true;
+                rfTxReTmCount = 0;
+                rfTxAndGetAckTimeSet_ms = rfTxAndGetAckTime_ms;
+                rfTxAndGetAckTime_ms = 0;
+            }
+            if (rfCtrlMode == UI_PAGE_ID_RX_PACKET)
+            {   
+                setEvent( EVENT_RF_PACKET_TX, false, 0);
+            }
+            LED2_ON_ONE();
+        }
+        if (getEvent(EVENT_RF_RX_ERROR))
+        {
+            myRadio_receiver();
+        }
+        if (getEvent(EVENT_RF_IDLE))
+        {
+            startToCountingRx = false;
+            myRadio_abort();
+            event_clear(EVENT_RF_PACKET_TX);
+        }
+        if (getEvent(EVENT_UART_RECV))
+        {
+            if (uartPacket.isValid)
+            {
+                uartPacket.isValid = false;
+
+                rfTxCount ++;
+                rfTxPacket.len = uartPacket.len;
+                if (rfTxPacket.len > MAX_RF_PACKET_LEN)
+                {
+                    rfTxPacket.len = MAX_RF_PACKET_LEN;
+                }
+                
+                memcpy(rfTxPacket.payload, uartPacket.packet, rfTxPacket.len);
+                myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
+                myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
+                myRadio_transmit(&rfTxPacket);
+            }
+        }
+        if (getEvent(EVENT_UART3_RECV))
+        {
+            if (uart3Packet.isValid)
+            {
+                uart3Packet.isValid = false;
+                uart3Packet.len = 0;
+                myDisplay_ui_rf_rxPacket_buffer(uart3Packet.packet, 0);
+            }
+        }
+        if (getEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS))
+        {
+            deviceInfor.checkSum = crc8_ger((unsigned char*)&deviceInfor, sizeof(userParams_ts) - 1);
+            myFlash_writeParams((uint8_t*)&deviceInfor, sizeof(userParams_ts));
+        }
+        
+        keyPressValue = keyScan();
+        myRadio_process();
+        
+    }     
+} 
+

+ 552 - 551
radio/myRadio.c

@@ -1,551 +1,552 @@
-#include "board.h"
-#include "myRadio.h"
-#include "myRadio_gpio.h"
-
-/**-------------------------radio include----------------------------------**/
-#include "radio.h"
-#include "crc.h"
-#include "sx126x-board.h"
-#include "sx126x.h"
-/**-------------------------radio include end----------------------------------**/
-
-static int8_t rfTxPower;
-static uint32_t rfFrequence;
-static uint32_t rfBaudrate;
-static rfRxCallBack rxCb;
-static uint8_t rfRxBuffer[255];
-static uint32_t rf_handle;
-static uint8_t rf_workProcess;
-static uint8_t chipType;
-/**-------------------------radio params----------------------------------**/
-static uint32_t rf_rxTimeout = 3000;   //=0. no time out
-                                    //=0xffffffff, into continuous
-                                    //=other, time out active, unit: ms
-
-const loraBaudrateFrame_ts loraBaudrateFrame[MAX_RF_BAUDRATE_COUNT] = 
-{
-    {//91.55bps,SF=12,BW=62.5kHz(0),CR=4
-    .SpreadingFactor = 12,        
-    .SignalBw = 0,               
-    .ErrorCoding = 4,            
-    },
-    {//610.35bps,SF=10,BW=125kHz(1),CR=4
-    .SpreadingFactor = 10,        
-    .SignalBw = 1,               
-    .ErrorCoding = 4,            
-    },
-    {//1220.7bps,SF=10,BW=250kHz(2),CR=4
-    .SpreadingFactor = 10,        
-    .SignalBw = 2,               
-    .ErrorCoding = 4,            
-    },
-    {//2441.41bps,SF=10,BW=500kHz(3),CR=4
-    .SpreadingFactor = 10,        
-    .SignalBw = 3,               
-    .ErrorCoding = 4,            
-    },
-    {//5022.32bps,SF=9,BW=500kHz(3),CR=3
-    .SpreadingFactor = 9,        
-    .SignalBw = 3,               
-    .ErrorCoding = 3,            
-    },
-    {//12500bps,SF=8,BW=500kHz(3),CR=1
-    .SpreadingFactor = 8,                                                                                
-    .SignalBw = 3,               
-    .ErrorCoding = 1,            
-    },
-    {//37500bps,SF=6,BW=500kHz(3),CR=1
-    .SpreadingFactor = 6,        
-    .SignalBw = 3,               
-    .ErrorCoding = 1,            
-    },
-};
-// #define USE_MODEM_LORA
-#define REGION_CN779
-
-#if defined( REGION_AS923 )
-
-#define RF_FREQUENCY                                923000000 // Hz
-
-#elif defined( REGION_AU915 )
-
-#define RF_FREQUENCY                                915000000 // Hz
-
-#elif defined( REGION_CN779 )
-
-#define RF_FREQUENCY                                433000000 // Hz
-
-#elif defined( REGION_EU868 )
-
-#define RF_FREQUENCY                                868000000 // Hz
-
-#elif defined( REGION_KR920 )
-
-#define RF_FREQUENCY                                920000000 // Hz
-
-#elif defined( REGION_IN865 )
-
-#define RF_FREQUENCY                                865000000 // Hz
-
-#elif defined( REGION_US915 )
-
-#define RF_FREQUENCY                                915000000 // Hz
-
-#elif defined( REGION_US915_HYBRID )
-
-#define RF_FREQUENCY                                915000000 // Hz
-
-#else
-
-    #error "Please define a frequency band in the compiler options."
-
-#endif
-
-#define TX_OUTPUT_POWER                             15        // max 22 dBm
-
-uint16_t  crc_value;
-
-bool LoRaOn = true;
-/*!
- * Radio events function pointer
- */
-
-#define LORA_BANDWIDTH                              2         // [0: 62.5 kHz, 
-                                                              //  1: 125 kHz,
-                                                              //  2: 250 kHz,
-                                                              //  3: 500 kHz]
-#define LORA_SPREADING_FACTOR                       10         // [SF7..SF12]
-#define LORA_CODINGRATE                             4         // [1: 4/5,       
-                                                              //  2: 4/6,
-                                                              //  3: 4/7,
-                                                              //  4: 4/8]
-#define LORA_PREAMBLE_LENGTH                        8         // Same for Tx and Rx
-#define LORA_SYMBOL_TIMEOUT                         0         // Symbols
-#define LORA_FIX_LENGTH_PAYLOAD_ON                  false
-#define LORA_IQ_INVERSION_ON                        false
-
-// #elif defined( USE_MODEM_FSK )
-// #define FSK_FDEV                                    25e3      // Hz 
-// #define FSK_DATARATE                                9600      // bps
-// #define FSK_BANDWIDTH                               100e3     // Hz >> DSB in sx126x
-// #define FSK_AFC_BANDWIDTH                           100e3     // Hz
-// #define FSK_PREAMBLE_LENGTH                         5         // Same for Tx and Rx
-// #define FSK_FIX_LENGTH_PAYLOAD_ON                   false
-#define FSK_FDEV                                    5000      // Hz 
-#define FSK_DATARATE                                4800      // bps
-#define FSK_BANDWIDTH                               20000     // Hz >> DSB in sx126x
-#define FSK_AFC_BANDWIDTH                           50000     // Hz
-#define FSK_PREAMBLE_LENGTH                         3         // Same for Tx and Rx
-#define FSK_FIX_LENGTH_PAYLOAD_ON                   false
-// #define FSK_FDEV                                    47000      // Hz 
-// #define FSK_DATARATE                                100000      // bps
-// #define FSK_BANDWIDTH                               194000     // Hz >> DSB in sx126x
-// #define FSK_AFC_BANDWIDTH                           50000     // Hz
-// #define FSK_PREAMBLE_LENGTH                         5         // Same for Tx and Rx
-// #define FSK_FIX_LENGTH_PAYLOAD_ON                   false
-// #else
-//     #error "Please define a modem in the compiler options."
-// #endif
-
-typedef enum
-{
-    LOWPOWER,
-    RX,
-    RX_TIMEOUT,
-    RX_ERROR,
-    TX,
-    TX_TIMEOUT,
-}States_t;
-
-#define RX_TIMEOUT_VALUE                            0xffff
-#define BUFFER_SIZE                                 64 // Define the payload size here
-
-States_t State = LOWPOWER;
-
-static RadioEvents_t RadioEvents;
-static uint32_t txTimeoutCount;
-extern void RadioOnDioIrq( void );
-void OnTxDone( void );
-void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
-void OnTxTimeout( void );
-void OnRxTimeout( void );
-void OnRxError( void );
-void setLoRaSta( bool sta );
-bool getLoRaSta(void);
-/**-------------------------radio params end----------------------------------**/
-void myRadio_delay(uint32_t time_ms)
-{
-    uint32_t i, j;
-    i = time_ms;
-    while (i --)
-    {
-        for ( j = 0; j < 1000; j++)
-        {
-            ;
-        }
-    }
-}
-/**
- * @brief IO口中断回调
- *      IO口产生中断后会执行该函数
- *      用于接收射频工作的中断响应
- * 
- * @param index 
- */
-void myRadio_gpioCallback(uint8_t index)
-{
-    RadioOnDioIrq();
-}
-/**
- * @brief 射频初始化
- * 
- * @param agr0 
- * @param agr1_ptr 无线工作状态响应回调
- *          产生回调给外部使用,@rfRxCallBack
- */
-void myRadio_init(int agr0, void *agr1_ptr)
-{
-    myRadio_gpio_init(myRadio_gpioCallback);
-    
-/**-------------------------radio init----------------------------------**/
-    // Radio initialization
-    RadioEvents.TxDone = OnTxDone;
-    RadioEvents.RxDone = OnRxDone;
-    RadioEvents.TxTimeout = OnTxTimeout;
-    RadioEvents.RxTimeout = OnRxTimeout;
-    RadioEvents.RxError = OnRxError; 
-    
-    if ((chipType >= DVTP_VG2379S433N0SA) && (chipType <= DVTP_VGdd79S915N0SA))
-    {
-        SX126xEnableTxco(true);
-    }
-    Radio.Init( &RadioEvents );
-    Radio.SetChannel( RF_FREQUENCY );
-
-    
-// #if defined( USE_MODEM_LORA )
-    if (getLoRaSta())
-    {
-        Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
-                                    LORA_SPREADING_FACTOR, LORA_CODINGRATE,
-                                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
-                                    true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
-        
-        Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
-                                    LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
-                                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
-                                    0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
-    }
-    // #elif defined( USE_MODEM_FSK )
-    else
-    {        
-        
-        Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
-                                    FSK_DATARATE, 0,
-                                    FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
-                                    true, 0, 0, 0, 3000 );
-        
-        Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
-                                    0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
-                                    0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, false,
-                                    0, 0,false, false);
-    // #else
-    }
-//     #error "Please define a frequency band in the compiler options."
-// #endif
-    RF_SX126x_EXT_PA_TO_IDLE();
-/**-------------------------radio init end----------------------------------**/
-    if ((rfRxCallBack )agr1_ptr)
-    {
-        rxCb = (rfRxCallBack )agr1_ptr;
-    }
-    rf_handle = 0xe5;
-}
-/**
- * @brief 射频底层执行程序
- *      要放在主循环中执行
- * 
- */
-void myRadio_process(void)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    Radio.IrqProcess();
-}
-/**
- * @brief 退出射频进入休眠
- *  注意:@README.md的开发注意事项
- */
-void myRadio_abort(void)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    RF_SX126x_EXT_PA_TO_IDLE();
-    State = LOWPOWER;
-    rf_workProcess = RF_PRC_SLEEP;
-    Radio.Sleep();
-}
-/**
- * @brief 获取射频工作中心频率
- * 
- * @return uint32_t 
- */
-uint32_t myRadio_getFrequency(void)
-{
-    if (rf_handle == 0)
-    {
-        return 0;
-    }
-    return rfFrequence;
-}
-/**
- * @brief 设置射频工作中心频率
- * 
- * @param freq 
- *      具体频点,单位:Hz
- */
-void myRadio_setFrequency(uint32_t freq)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    rfFrequence = freq;
-    Radio.SetChannel(freq);
-}
-/**
- * @brief 获取发射功率
- * 
- * @return int8_t 
- */
-int8_t myRadio_getTxPower(void)
-{
-    if (rf_handle == 0)
-    {
-        return 0;
-    }
-    return rfTxPower;
-}
-/**
- * @brief 设置发射功率
- * 
- * @param power 
- *          单位:dbm
- */
-void myRadio_setTxPower(int8_t power)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    rfTxPower = power;
-    SX126xSetRfTxPower(rfTxPower);
-}
-/**
- * 获取射频波特率
- * @param : br->
-*/
-uint32_t myRadio_getBaudrate(void)
-{
-    if (rf_handle == 0)
-    {
-        return 0;
-    }
-    return rfBaudrate;
-}
-/**
- * 设置射频波特率
- * @param : br->
-*/
-void myRadio_setBaudrate(uint32_t br)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    rfBaudrate = br;
-    if (getLoRaSta())
-    {
-        Radio.SetTxConfig( MODEM_LORA, rfTxPower, 0, loraBaudrateFrame[br].SignalBw,
-                                    loraBaudrateFrame[br].SpreadingFactor, loraBaudrateFrame[br].ErrorCoding,
-                                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
-                                    true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
-        
-        Radio.SetRxConfig( MODEM_LORA, loraBaudrateFrame[br].SignalBw, loraBaudrateFrame[br].SpreadingFactor,
-                                    loraBaudrateFrame[br].ErrorCoding, 0, LORA_PREAMBLE_LENGTH,
-                                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
-                                    0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
-    }
-}
-/**
- * @brief 设置模组型号
- * 
- * @param type 
- */
-void myRadio_setChipType(uint8_t type)
-{
-    chipType = type;
-}
-/**
- * @brief 获取模组型号
- * 
- * @return uint8_t 
- */
-uint8_t myRadio_getChipType(void)
-{
-    return chipType;
-}
-int16_t myRadio_getRssi(void)
-{
-    return Radio.Rssi(MODEM_LORA);
-}
-/**
- * @brief 无线发送数据包
- * 
- * @param packet 
- */
-void myRadio_transmit(rfTxPacket_ts *packet)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    RF_SX126x_EXT_PA_TO_TX();
-    
-    rf_workProcess = RF_PRC_TX;
-    Radio.Send( packet->payload, packet->len );
-}
-/**
- * @brief 进入无线接收
- * 
- */
-void myRadio_receiver(void)
-{ 
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    RF_SX126x_EXT_PA_TO_RX();
-    Radio.Rx( rf_rxTimeout ); 
-    rf_workProcess = RF_PRC_RX;
-}
-void myRadio_setCtrl(controlMode_te mode, uint32_t value)
-{
-    if (rf_handle == 0)
-    {
-        return;
-    }
-    switch (mode)
-    {
-    case RADIO_EXT_CONTROL_TX_UNMODULATED:
-    {
-        rf_workProcess = RF_PRC_TEST_TX;
-        setLoRaSta(false);
-        myRadio_init(0, 0);
-        RF_SX126x_EXT_PA_TO_TX();
-        Radio.SetTxContinuousWave( rfFrequence, rfTxPower, 0 );
-    }
-        break;
-    case RADIO_EXT_CONTROL_TX_MODULATED:
-    {
-        rf_workProcess = RF_PRC_TEST_TX;
-        setLoRaSta(false);
-        myRadio_init(0, 0);
-        RF_SX126x_EXT_PA_TO_TX();
-        Radio.SetTxContinuousWave( rfFrequence, rfTxPower, 0 );
-    }
-        break;
-    case RADIO_EXT_CONTROL_RX_SENSITIVITY:
-    {
-        rf_workProcess = RF_PRC_RX;
-        setLoRaSta(false);
-        myRadio_init(0, 0);
-        RF_SX126x_EXT_PA_TO_RX();
-        Radio.SetChannel(rfFrequence);
-        Radio.Rx( RX_TIMEOUT_VALUE ); 
-    }
-        break;
-    
-    default:
-        break;
-    }
-}
-
-/**-------------------------radio funtion----------------------------------**/
-void setLoRaSta( bool sta )
-{
-    LoRaOn = sta;
-}
-bool getLoRaSta(void)
-{
-    return LoRaOn;
-}
-
-void OnTxDone( void )
-{
-    rfRxPacket_ts rfRxPacket;
-    RF_SX126x_EXT_PA_TO_IDLE();
-    State = TX;
-    rf_workProcess = RF_PRC_SLEEP;
-    if (rxCb)
-    {
-        rxCb(TX_STA_SECCESS, rfRxPacket);
-    }
-}
-
-void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
-{
-    rfRxPacket_ts rfRxPacket;
-    if (size > MAX_RF_PACKET_LEN)
-    {
-        size = MAX_RF_PACKET_LEN;
-    }
-    State = RX;
-    rf_workProcess = RF_PRC_SLEEP;
-    memset(rfRxPacket.payload, 0, sizeof(rfRxPacket.payload));
-    memcpy(rfRxPacket.payload, payload, size);
-    rfRxPacket.len = size;
-    rfRxPacket.rssi = rssi;
-    if (rxCb)
-    {
-        rxCb(RX_STA_SECCESS, rfRxPacket);
-    }
-}
-
-void OnTxTimeout( void )
-{
-    rfRxPacket_ts rfRxPacket;
-    State = TX_TIMEOUT;
-    rf_workProcess = RF_PRC_SLEEP;
-    if (rxCb)
-    {
-        rxCb(TX_STA_ERROR, rfRxPacket);
-    }
-}
-
-void OnRxTimeout( void )
-{
-    rfRxPacket_ts rfRxPacket;
-    State = RX_TIMEOUT;
-    rf_workProcess = RF_PRC_SLEEP;
-    if (rxCb)
-    {
-        rxCb(RX_STA_TIMEOUT, rfRxPacket);
-    }
-}
-
-void OnRxError( void )
-{
-    rfRxPacket_ts rfRxPacket;
-    State = RX_ERROR;
-    rf_workProcess = RF_PRC_SLEEP;
-    if (rxCb)
-    {
-        rxCb(RX_STA_PAYLOAD_ERROR, rfRxPacket);
-    }
-}
-/**-------------------------radio funtion end----------------------------------**/
+#include "board.h"
+#include "myRadio.h"
+#include "myRadio_gpio.h"
+
+/**-------------------------radio include----------------------------------**/
+#include "radio.h"
+#include "crc.h"
+#include "sx126x-board.h"
+#include "sx126x.h"
+/**-------------------------radio include end----------------------------------**/
+
+static int8_t rfTxPower;
+static uint32_t rfFrequence;
+static uint32_t rfBaudrate;
+static rfRxCallBack rxCb;
+static uint8_t rfRxBuffer[255];
+static uint32_t rf_handle;
+static uint8_t rf_workProcess;
+static uint8_t chipType;
+/**-------------------------radio params----------------------------------**/
+static uint32_t rf_rxTimeout = 3000;   //=0. no time out
+                                    //=0xffffffff, into continuous
+                                    //=other, time out active, unit: ms
+
+const loraBaudrateFrame_ts loraBaudrateFrame[MAX_RF_BAUDRATE_COUNT] = 
+{
+    {//91.55bps,SF=12,BW=62.5kHz(0),CR=4
+    .SpreadingFactor = 12,        
+    .SignalBw = 0,               
+    .ErrorCoding = 4,            
+    },
+    {//610.35bps,SF=10,BW=125kHz(1),CR=4
+    .SpreadingFactor = 10,        
+    .SignalBw = 1,               
+    .ErrorCoding = 4,            
+    },
+    {//1220.7bps,SF=10,BW=250kHz(2),CR=4
+    .SpreadingFactor = 10,        
+    .SignalBw = 2,               
+    .ErrorCoding = 4,            
+    },
+    {//2441.41bps,SF=10,BW=500kHz(3),CR=4
+    .SpreadingFactor = 10,        
+    .SignalBw = 3,               
+    .ErrorCoding = 4,            
+    },
+    {//5022.32bps,SF=9,BW=500kHz(3),CR=3
+    .SpreadingFactor = 9,        
+    .SignalBw = 3,               
+    .ErrorCoding = 3,            
+    },
+    {//12500bps,SF=8,BW=500kHz(3),CR=1
+    .SpreadingFactor = 8,                                                                                
+    .SignalBw = 3,               
+    .ErrorCoding = 1,            
+    },
+    {//37500bps,SF=6,BW=500kHz(3),CR=1
+    .SpreadingFactor = 6,        
+    .SignalBw = 3,               
+    .ErrorCoding = 1,            
+    },
+};
+// #define USE_MODEM_LORA
+#define REGION_CN779
+
+#if defined( REGION_AS923 )
+
+#define RF_FREQUENCY                                923000000 // Hz
+
+#elif defined( REGION_AU915 )
+
+#define RF_FREQUENCY                                915000000 // Hz
+
+#elif defined( REGION_CN779 )
+
+#define RF_FREQUENCY                                433000000 // Hz
+
+#elif defined( REGION_EU868 )
+
+#define RF_FREQUENCY                                868000000 // Hz
+
+#elif defined( REGION_KR920 )
+
+#define RF_FREQUENCY                                920000000 // Hz
+
+#elif defined( REGION_IN865 )
+
+#define RF_FREQUENCY                                865000000 // Hz
+
+#elif defined( REGION_US915 )
+
+#define RF_FREQUENCY                                915000000 // Hz
+
+#elif defined( REGION_US915_HYBRID )
+
+#define RF_FREQUENCY                                915000000 // Hz
+
+#else
+
+    #error "Please define a frequency band in the compiler options."
+
+#endif
+
+#define TX_OUTPUT_POWER                             15        // max 22 dBm
+
+uint16_t  crc_value;
+
+bool LoRaOn = true;
+/*!
+ * Radio events function pointer
+ */
+
+#define LORA_BANDWIDTH                              2         // [0: 62.5 kHz, 
+                                                              //  1: 125 kHz,
+                                                              //  2: 250 kHz,
+                                                              //  3: 500 kHz]
+#define LORA_SPREADING_FACTOR                       10         // [SF7..SF12]
+#define LORA_CODINGRATE                             4         // [1: 4/5,       
+                                                              //  2: 4/6,
+                                                              //  3: 4/7,
+                                                              //  4: 4/8]
+#define LORA_PREAMBLE_LENGTH                        8         // Same for Tx and Rx
+#define LORA_SYMBOL_TIMEOUT                         0         // Symbols
+#define LORA_FIX_LENGTH_PAYLOAD_ON                  false
+#define LORA_IQ_INVERSION_ON                        false
+
+// #elif defined( USE_MODEM_FSK )
+// #define FSK_FDEV                                    25e3      // Hz 
+// #define FSK_DATARATE                                9600      // bps
+// #define FSK_BANDWIDTH                               100e3     // Hz >> DSB in sx126x
+// #define FSK_AFC_BANDWIDTH                           100e3     // Hz
+// #define FSK_PREAMBLE_LENGTH                         5         // Same for Tx and Rx
+// #define FSK_FIX_LENGTH_PAYLOAD_ON                   false
+#define FSK_FDEV                                    5000      // Hz 
+#define FSK_DATARATE                                4800      // bps
+#define FSK_BANDWIDTH                               20000     // Hz >> DSB in sx126x
+#define FSK_AFC_BANDWIDTH                           50000     // Hz
+#define FSK_PREAMBLE_LENGTH                         3         // Same for Tx and Rx
+#define FSK_FIX_LENGTH_PAYLOAD_ON                   false
+// #define FSK_FDEV                                    47000      // Hz 
+// #define FSK_DATARATE                                100000      // bps
+// #define FSK_BANDWIDTH                               194000     // Hz >> DSB in sx126x
+// #define FSK_AFC_BANDWIDTH                           50000     // Hz
+// #define FSK_PREAMBLE_LENGTH                         5         // Same for Tx and Rx
+// #define FSK_FIX_LENGTH_PAYLOAD_ON                   false
+// #else
+//     #error "Please define a modem in the compiler options."
+// #endif
+
+typedef enum
+{
+    LOWPOWER,
+    RX,
+    RX_TIMEOUT,
+    RX_ERROR,
+    TX,
+    TX_TIMEOUT,
+}States_t;
+
+#define RX_TIMEOUT_VALUE                            0xffff
+#define BUFFER_SIZE                                 64 // Define the payload size here
+
+States_t State = LOWPOWER;
+
+static RadioEvents_t RadioEvents;
+static uint32_t txTimeoutCount;
+extern void RadioOnDioIrq( void );
+void OnTxDone( void );
+void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
+void OnTxTimeout( void );
+void OnRxTimeout( void );
+void OnRxError( void );
+void setLoRaSta( bool sta );
+bool getLoRaSta(void);
+/**-------------------------radio params end----------------------------------**/
+void myRadio_delay(uint32_t time_ms)
+{
+    uint32_t i, j;
+    i = time_ms;
+    while (i --)
+    {
+        for ( j = 0; j < 1000; j++)
+        {
+            ;
+        }
+    }
+}
+/**
+ * @brief IO口中断回调
+ *      IO口产生中断后会执行该函数
+ *      用于接收射频工作的中断响应
+ * 
+ * @param index 
+ */
+void myRadio_gpioCallback(uint8_t index)
+{
+    RadioOnDioIrq();
+}
+/**
+ * @brief 射频初始化
+ * 
+ * @param agr0 
+ * @param agr1_ptr 无线工作状态响应回调
+ *          产生回调给外部使用,@rfRxCallBack
+ */
+void myRadio_init(int agr0, void *agr1_ptr)
+{
+    myRadio_gpio_init(myRadio_gpioCallback);
+    
+/**-------------------------radio init----------------------------------**/
+    // Radio initialization
+    RadioEvents.TxDone = OnTxDone;
+    RadioEvents.RxDone = OnRxDone;
+    RadioEvents.TxTimeout = OnTxTimeout;
+    RadioEvents.RxTimeout = OnRxTimeout;
+    RadioEvents.RxError = OnRxError; 
+    
+    if ((chipType >= DVTP_VG2379S433N0SA) && (chipType <= DVTP_VGdd79S915N0SA))
+    {
+        SX126xEnableTxco(true);
+    }
+    Radio.Init( &RadioEvents );
+    Radio.SetChannel( RF_FREQUENCY );
+
+    
+// #if defined( USE_MODEM_LORA )
+    if (getLoRaSta())
+    {
+        Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
+                                    LORA_SPREADING_FACTOR, LORA_CODINGRATE,
+                                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
+                                    true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
+        
+        Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
+                                    LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
+                                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
+                                    0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
+    }
+    // #elif defined( USE_MODEM_FSK )
+    else
+    {        
+        
+        Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
+                                    FSK_DATARATE, 0,
+                                    FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
+                                    true, 0, 0, 0, 3000 );
+        
+        Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
+                                    0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
+                                    0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, false,
+                                    0, 0,false, false);
+    // #else
+    }
+//     #error "Please define a frequency band in the compiler options."
+// #endif
+    RF_SX126x_EXT_PA_TO_IDLE();
+/**-------------------------radio init end----------------------------------**/
+    if ((rfRxCallBack )agr1_ptr)
+    {
+        rxCb = (rfRxCallBack )agr1_ptr;
+    }
+    rf_handle = 0xe5;
+}
+/**
+ * @brief 射频底层执行程序
+ *      要放在主循环中执行
+ * 
+ */
+void myRadio_process(void)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    Radio.IrqProcess();
+}
+/**
+ * @brief 退出射频进入休眠
+ *  注意:@README.md的开发注意事项
+ */
+void myRadio_abort(void)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    RF_SX126x_EXT_PA_TO_IDLE();
+    State = LOWPOWER;
+    rf_workProcess = RF_PRC_SLEEP;
+    Radio.Sleep();
+}
+/**
+ * @brief 获取射频工作中心频率
+ * 
+ * @return uint32_t 
+ */
+uint32_t myRadio_getFrequency(void)
+{
+    if (rf_handle == 0)
+    {
+        return 0;
+    }
+    return rfFrequence;
+}
+/**
+ * @brief 设置射频工作中心频率
+ * 
+ * @param freq 
+ *      具体频点,单位:Hz
+ */
+void myRadio_setFrequency(uint32_t freq)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    rfFrequence = freq;
+    Radio.SetChannel(freq);
+}
+/**
+ * @brief 获取发射功率
+ * 
+ * @return int8_t 
+ */
+int8_t myRadio_getTxPower(void)
+{
+    if (rf_handle == 0)
+    {
+        return 0;
+    }
+    return rfTxPower;
+}
+/**
+ * @brief 设置发射功率
+ * 
+ * @param power 
+ *          单位:dbm
+ */
+void myRadio_setTxPower(int8_t power)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    rfTxPower = power;
+    SX126xSetRfTxPower(rfTxPower);
+}
+/**
+ * 获取射频波特率
+ * @param : br->
+*/
+uint32_t myRadio_getBaudrate(void)
+{
+    if (rf_handle == 0)
+    {
+        return 0;
+    }
+    return rfBaudrate;
+}
+/**
+ * 设置射频波特率
+ * @param : br->
+*/
+void myRadio_setBaudrate(uint32_t br)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    rfBaudrate = br;
+    if (getLoRaSta())
+    {
+        Radio.SetTxConfig( MODEM_LORA, rfTxPower, 0, loraBaudrateFrame[br].SignalBw,
+                                    loraBaudrateFrame[br].SpreadingFactor, loraBaudrateFrame[br].ErrorCoding,
+                                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
+                                    true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
+        
+        Radio.SetRxConfig( MODEM_LORA, loraBaudrateFrame[br].SignalBw, loraBaudrateFrame[br].SpreadingFactor,
+                                    loraBaudrateFrame[br].ErrorCoding, 0, LORA_PREAMBLE_LENGTH,
+                                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
+                                    0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
+    }
+}
+/**
+ * @brief 设置模组型号
+ * 
+ * @param type 
+ */
+void myRadio_setChipType(uint8_t type)
+{
+    chipType = type;
+}
+/**
+ * @brief 获取模组型号
+ * 
+ * @return uint8_t 
+ */
+uint8_t myRadio_getChipType(void)
+{
+    return chipType;
+}
+int16_t myRadio_getRssi(void)
+{
+    return Radio.Rssi(MODEM_LORA);
+}
+/**
+ * @brief 无线发送数据包
+ * 
+ * @param packet 
+ */
+void myRadio_transmit(rfTxPacket_ts *packet)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    RF_SX126x_EXT_PA_TO_TX();
+    
+    rf_workProcess = RF_PRC_TX;
+    Radio.Send( packet->payload, packet->len );
+}
+/**
+ * @brief 进入无线接收
+ * 
+ */
+void myRadio_receiver(void)
+{ 
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    RF_SX126x_EXT_PA_TO_RX();
+    Radio.Rx( rf_rxTimeout ); 
+    rf_workProcess = RF_PRC_RX;
+}
+void myRadio_setCtrl(controlMode_te mode, uint32_t value)
+{
+    if (rf_handle == 0)
+    {
+        return;
+    }
+    switch (mode)
+    {
+    case RADIO_EXT_CONTROL_TX_UNMODULATED:
+    {
+        rf_workProcess = RF_PRC_TEST_TX;
+        setLoRaSta(false);
+        myRadio_init(0, 0);
+        RF_SX126x_EXT_PA_TO_TX();
+        Radio.SetTxContinuousWave( rfFrequence, rfTxPower, 0 );
+    }
+        break;
+    case RADIO_EXT_CONTROL_TX_MODULATED:
+    {
+        rf_workProcess = RF_PRC_TEST_TX;
+        setLoRaSta(false);
+        myRadio_init(0, 0);
+        RF_SX126x_EXT_PA_TO_TX();
+        Radio.SetTxContinuousWave( rfFrequence, rfTxPower, 0 );
+    }
+        break;
+    case RADIO_EXT_CONTROL_RX_SENSITIVITY:
+    {
+        rf_workProcess = RF_PRC_RX;
+        setLoRaSta(false);
+        myRadio_init(0, 0);
+        RF_SX126x_EXT_PA_TO_RX();
+        Radio.SetChannel(rfFrequence);
+        Radio.Rx( RX_TIMEOUT_VALUE ); 
+    }
+        break;
+    
+    default:
+        break;
+    }
+}
+
+/**-------------------------radio funtion----------------------------------**/
+void setLoRaSta( bool sta )
+{
+    LoRaOn = sta;
+}
+bool getLoRaSta(void)
+{
+    return LoRaOn;
+}
+
+void OnTxDone( void )
+{
+    rfRxPacket_ts rfRxPacket;
+    RF_SX126x_EXT_PA_TO_IDLE();
+    State = TX;
+    rf_workProcess = RF_PRC_SLEEP;
+    if (rxCb)
+    {
+        rxCb(TX_STA_SECCESS, rfRxPacket);
+    }
+}
+
+void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
+{
+    rfRxPacket_ts rfRxPacket;
+    if (size > MAX_RF_PACKET_LEN)
+    {
+        size = MAX_RF_PACKET_LEN;
+    }
+    State = RX;
+    rf_workProcess = RF_PRC_SLEEP;
+    memset(rfRxPacket.payload, 0, sizeof(rfRxPacket.payload));
+    memcpy(rfRxPacket.payload, payload, size);
+    rfRxPacket.len = size;
+    rfRxPacket.rssi = rssi;
+    rfRxPacket.snr = snr;
+    if (rxCb)
+    {
+        rxCb(RX_STA_SECCESS, rfRxPacket);
+    }
+}
+
+void OnTxTimeout( void )
+{
+    rfRxPacket_ts rfRxPacket;
+    State = TX_TIMEOUT;
+    rf_workProcess = RF_PRC_SLEEP;
+    if (rxCb)
+    {
+        rxCb(TX_STA_ERROR, rfRxPacket);
+    }
+}
+
+void OnRxTimeout( void )
+{
+    rfRxPacket_ts rfRxPacket;
+    State = RX_TIMEOUT;
+    rf_workProcess = RF_PRC_SLEEP;
+    if (rxCb)
+    {
+        rxCb(RX_STA_TIMEOUT, rfRxPacket);
+    }
+}
+
+void OnRxError( void )
+{
+    rfRxPacket_ts rfRxPacket;
+    State = RX_ERROR;
+    rf_workProcess = RF_PRC_SLEEP;
+    if (rxCb)
+    {
+        rxCb(RX_STA_PAYLOAD_ERROR, rfRxPacket);
+    }
+}
+/**-------------------------radio funtion end----------------------------------**/

+ 177 - 176
radio/myRadio.h

@@ -1,176 +1,177 @@
-#ifndef __MY_RADIO_H
-#define __MY_RADIO_H
-/* Includes ------------------------------------------------------------------*/
-#include <stdio.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-
-#define MAX_RF_PACKET_LEN 256
-
-
-typedef enum
-{
-    RF_TX_PWR_N_9,
-    RF_TX_PWR_N_8,
-    RF_TX_PWR_N_7,
-    RF_TX_PWR_N_6,
-    RF_TX_PWR_N_5,
-    RF_TX_PWR_N_4,
-    RF_TX_PWR_N_3,
-    RF_TX_PWR_N_2,
-    RF_TX_PWR_N_1,
-    RF_TX_PWR_P_0,
-    RF_TX_PWR_P_1,
-    RF_TX_PWR_P_2,
-    RF_TX_PWR_P_3,
-    RF_TX_PWR_P_4,
-    RF_TX_PWR_P_5,
-    RF_TX_PWR_P_6,
-    RF_TX_PWR_P_7,
-    RF_TX_PWR_P_8,
-    RF_TX_PWR_P_9,
-    RF_TX_PWR_P_10,
-    RF_TX_PWR_P_11,
-    RF_TX_PWR_P_12,
-    RF_TX_PWR_P_13,
-    RF_TX_PWR_P_14,
-    RF_TX_PWR_P_15,
-    RF_TX_PWR_P_16,
-    RF_TX_PWR_P_17,
-    RF_TX_PWR_P_18,
-    RF_TX_PWR_P_19,
-    RF_TX_PWR_P_20,
-    RF_TX_PWR_P_21,
-    RF_TX_PWR_P_22,
-    RF_TX_PWR_MAX_COUNT,
-}rf_txPwr_te;
-typedef enum
-{
-    DVTP_VG2379S433N0S1,
-    DVTP_VG2379S490N0S1,
-    DVTP_VG2373S868N0S1,
-    DVTP_VG2373S915N0S1,
-    DVTP_VGdd79S170N0S1,
-    DVTP_VGdd79S433N0S1,
-    DVTP_VGdd79S490N0S1,
-    DVTP_VGdd79S868N0S1,
-    DVTP_VGdd79S915N0S1,
-    DVTP_VG2379S433X0M1,
-    DVTP_VG2379S490X0M1,
-    DVTP_VG2373S868X0M1,
-    DVTP_VG2373S915X0M1,
-    DVTP_VGdd79S170X0M1,
-    DVTP_VGdd79S433X0M1,
-    DVTP_VGdd79S490X0M1,
-    DVTP_VGdd79S868X0M1,
-    DVTP_VGdd79S915X0M1,
-    DVTP_VG2379S433X0M2,
-    DVTP_VG2379S490X0M2,
-    DVTP_VG2373S868X0M2,
-    DVTP_VG2373S915X0M2,
-    DVTP_VGdd79S170X0M2,
-    DVTP_VGdd79S433X0M2,
-    DVTP_VGdd79S490X0M2,
-    DVTP_VGdd79S868X0M2,
-    DVTP_VGdd79S915X0M2,
-    DVTP_VG2379S433N0SA,
-    DVTP_VG2379S490N0SA,
-    DVTP_VG2373S868N0SA,
-    DVTP_VG2373S915N0SA,
-    DVTP_VGdd79S170N0SA,
-    DVTP_VGdd79S433N0SA,
-    DVTP_VGdd79S490N0SA,
-    DVTP_VGdd79S868N0SA,
-    DVTP_VGdd79S915N0SA,
-    DVTP_MAX_COUNT,
-}deviceType_te;
-
-typedef enum
-{
-    RF_BAUDRATE_90,    //91.55bps,SF=12,BW=62.5kHz(6),CR=4
-    RF_BAUDRATE_610,    //610.35bps,SF=10,BW=125kHz(7),CR=4
-    RF_BAUDRATE_1220,    //1220.7bps,SF=10,BW=250kHz(8),CR=4
-    RF_BAUDRATE_2440,    //2441.41bps,SF=10,BW=500kHz(9),CR=4
-    RF_BAUDRATE_5000,    //5022.32bps,SF=9,BW=500kHz(9),CR=3
-    RF_BAUDRATE_12500,    //12500bps,SF=8,BW=500kHz(9),CR=1
-    RF_BAUDRATE_37500,    //37500bps,SF=6,BW=500kHz(9),CR=1
-    MAX_RF_BAUDRATE_COUNT,    //
-}rfBaudrate_te;
-typedef enum
-{
-    FREQ_BAND_315,
-    FREQ_BAND_433,
-    FREQ_BAND_490,
-    FREQ_BAND_868,
-    FREQ_BAND_915,
-    MAX_FREQ_BAND_COUNT,
-}freqBand_te;
-
-typedef enum
-{
-    RF_PRC_IDLE,
-    RF_PRC_SLEEP,
-    RF_PRC_TX,
-    RF_PRC_RX,
-    RF_PRC_TEST_TX,
-    RF_PRC_TEST_RX,
-}rfProccess_te;
-//! \brief Structure for the TX Packet
-typedef struct
-{
-    uint8_t rmvAddr[8];              //
-    uint32_t absTime;                //
-    uint8_t len;                     //
-    uint8_t payload[MAX_RF_PACKET_LEN];       //
-} rfTxPacket_ts;
-
-typedef struct
-{
-    uint8_t rmvAddr[8];              //
-    int16_t rssi;                     //
-    uint32_t absTime;                //
-    uint32_t rxTimeout;              //
-    uint8_t len;                     //
-    uint8_t payload[MAX_RF_PACKET_LEN];
-} rfRxPacket_ts;
-typedef struct
-{
-    uint8_t SignalBw;                   // LORA [0: 7.8 kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz,
-                                        // 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8: 250 kHz, 9: 500 kHz, other: Reserved]  
-    uint8_t SpreadingFactor;            // LORA [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096  chips]
-    uint8_t ErrorCoding;                // LORA [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
-}loraBaudrateFrame_ts;
-typedef enum 
-{
-    RADIO_EXT_CONTROL_TX_UNMODULATED,   //데潼꺼묘쪽꿎桿
-    RADIO_EXT_CONTROL_RX_SENSITIVITY,   //쌈澗쥣츌똑꿎桿
-    RADIO_EXT_CONTROL_TX_MODULATED,   //젯崎딧齡꿎桿
-}controlMode_te;
-typedef enum
-{
-    RX_STA_SECCESS,
-    RX_STA_TIMEOUT,
-    RX_STA_PAYLOAD_ERROR,
-    TX_STA_SECCESS,
-    TX_STA_ERROR,
-}rxStatus_te;
-typedef void (*rfRxCallBack)(uint8_t status, rfRxPacket_ts packet);
-
-void myRadio_init(int agr0, void *agr1_ptr);
-void myRadio_abort(void);
-uint32_t myRadio_getFrequency(void);
-void myRadio_setFrequency(uint32_t freq);
-int8_t myRadio_getTxPower(void);
-void myRadio_setTxPower(int8_t power);
-uint32_t myRadio_getBaudrate(void);
-void myRadio_setBaudrate(uint32_t br);
-void myRadio_setChipType(uint8_t type);
-uint8_t myRadio_getChipType(void);
-int16_t myRadio_getRssi(void);
-void myRadio_transmit(rfTxPacket_ts *packet);
-void myRadio_receiver(void);
-void myRadio_setCtrl(controlMode_te mode, uint32_t value);
-void myRadio_process(void);
-#endif
-
+#ifndef __MY_RADIO_H
+#define __MY_RADIO_H
+/* Includes ------------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#define MAX_RF_PACKET_LEN 256
+
+
+typedef enum
+{
+    RF_TX_PWR_N_9,
+    RF_TX_PWR_N_8,
+    RF_TX_PWR_N_7,
+    RF_TX_PWR_N_6,
+    RF_TX_PWR_N_5,
+    RF_TX_PWR_N_4,
+    RF_TX_PWR_N_3,
+    RF_TX_PWR_N_2,
+    RF_TX_PWR_N_1,
+    RF_TX_PWR_P_0,
+    RF_TX_PWR_P_1,
+    RF_TX_PWR_P_2,
+    RF_TX_PWR_P_3,
+    RF_TX_PWR_P_4,
+    RF_TX_PWR_P_5,
+    RF_TX_PWR_P_6,
+    RF_TX_PWR_P_7,
+    RF_TX_PWR_P_8,
+    RF_TX_PWR_P_9,
+    RF_TX_PWR_P_10,
+    RF_TX_PWR_P_11,
+    RF_TX_PWR_P_12,
+    RF_TX_PWR_P_13,
+    RF_TX_PWR_P_14,
+    RF_TX_PWR_P_15,
+    RF_TX_PWR_P_16,
+    RF_TX_PWR_P_17,
+    RF_TX_PWR_P_18,
+    RF_TX_PWR_P_19,
+    RF_TX_PWR_P_20,
+    RF_TX_PWR_P_21,
+    RF_TX_PWR_P_22,
+    RF_TX_PWR_MAX_COUNT,
+}rf_txPwr_te;
+typedef enum
+{
+    DVTP_VG2379S433N0S1,
+    DVTP_VG2379S490N0S1,
+    DVTP_VG2373S868N0S1,
+    DVTP_VG2373S915N0S1,
+    DVTP_VGdd79S170N0S1,
+    DVTP_VGdd79S433N0S1,
+    DVTP_VGdd79S490N0S1,
+    DVTP_VGdd79S868N0S1,
+    DVTP_VGdd79S915N0S1,
+    DVTP_VG2379S433X0M1,
+    DVTP_VG2379S490X0M1,
+    DVTP_VG2373S868X0M1,
+    DVTP_VG2373S915X0M1,
+    DVTP_VGdd79S170X0M1,
+    DVTP_VGdd79S433X0M1,
+    DVTP_VGdd79S490X0M1,
+    DVTP_VGdd79S868X0M1,
+    DVTP_VGdd79S915X0M1,
+    DVTP_VG2379S433X0M2,
+    DVTP_VG2379S490X0M2,
+    DVTP_VG2373S868X0M2,
+    DVTP_VG2373S915X0M2,
+    DVTP_VGdd79S170X0M2,
+    DVTP_VGdd79S433X0M2,
+    DVTP_VGdd79S490X0M2,
+    DVTP_VGdd79S868X0M2,
+    DVTP_VGdd79S915X0M2,
+    DVTP_VG2379S433N0SA,
+    DVTP_VG2379S490N0SA,
+    DVTP_VG2373S868N0SA,
+    DVTP_VG2373S915N0SA,
+    DVTP_VGdd79S170N0SA,
+    DVTP_VGdd79S433N0SA,
+    DVTP_VGdd79S490N0SA,
+    DVTP_VGdd79S868N0SA,
+    DVTP_VGdd79S915N0SA,
+    DVTP_MAX_COUNT,
+}deviceType_te;
+
+typedef enum
+{
+    RF_BAUDRATE_90,    //91.55bps,SF=12,BW=62.5kHz(6),CR=4
+    RF_BAUDRATE_610,    //610.35bps,SF=10,BW=125kHz(7),CR=4
+    RF_BAUDRATE_1220,    //1220.7bps,SF=10,BW=250kHz(8),CR=4
+    RF_BAUDRATE_2440,    //2441.41bps,SF=10,BW=500kHz(9),CR=4
+    RF_BAUDRATE_5000,    //5022.32bps,SF=9,BW=500kHz(9),CR=3
+    RF_BAUDRATE_12500,    //12500bps,SF=8,BW=500kHz(9),CR=1
+    RF_BAUDRATE_37500,    //37500bps,SF=6,BW=500kHz(9),CR=1
+    MAX_RF_BAUDRATE_COUNT,    //
+}rfBaudrate_te;
+typedef enum
+{
+    FREQ_BAND_315,
+    FREQ_BAND_433,
+    FREQ_BAND_490,
+    FREQ_BAND_868,
+    FREQ_BAND_915,
+    MAX_FREQ_BAND_COUNT,
+}freqBand_te;
+
+typedef enum
+{
+    RF_PRC_IDLE,
+    RF_PRC_SLEEP,
+    RF_PRC_TX,
+    RF_PRC_RX,
+    RF_PRC_TEST_TX,
+    RF_PRC_TEST_RX,
+}rfProccess_te;
+//! \brief Structure for the TX Packet
+typedef struct
+{
+    uint8_t rmvAddr[8];              //
+    uint32_t absTime;                //
+    uint8_t len;                     //
+    uint8_t payload[MAX_RF_PACKET_LEN];       //
+} rfTxPacket_ts;
+
+typedef struct
+{
+    uint8_t rmvAddr[8];              //
+    int16_t rssi;                     //
+    int8_t snr;                     //
+    uint32_t absTime;                //
+    uint32_t rxTimeout;              //
+    uint8_t len;                     //
+    uint8_t payload[MAX_RF_PACKET_LEN];
+} rfRxPacket_ts;
+typedef struct
+{
+    uint8_t SignalBw;                   // LORA [0: 7.8 kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz,
+                                        // 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8: 250 kHz, 9: 500 kHz, other: Reserved]  
+    uint8_t SpreadingFactor;            // LORA [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096  chips]
+    uint8_t ErrorCoding;                // LORA [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
+}loraBaudrateFrame_ts;
+typedef enum 
+{
+    RADIO_EXT_CONTROL_TX_UNMODULATED,   //데潼꺼묘쪽꿎桿
+    RADIO_EXT_CONTROL_RX_SENSITIVITY,   //쌈澗쥣츌똑꿎桿
+    RADIO_EXT_CONTROL_TX_MODULATED,   //젯崎딧齡꿎桿
+}controlMode_te;
+typedef enum
+{
+    RX_STA_SECCESS,
+    RX_STA_TIMEOUT,
+    RX_STA_PAYLOAD_ERROR,
+    TX_STA_SECCESS,
+    TX_STA_ERROR,
+}rxStatus_te;
+typedef void (*rfRxCallBack)(uint8_t status, rfRxPacket_ts packet);
+
+void myRadio_init(int agr0, void *agr1_ptr);
+void myRadio_abort(void);
+uint32_t myRadio_getFrequency(void);
+void myRadio_setFrequency(uint32_t freq);
+int8_t myRadio_getTxPower(void);
+void myRadio_setTxPower(int8_t power);
+uint32_t myRadio_getBaudrate(void);
+void myRadio_setBaudrate(uint32_t br);
+void myRadio_setChipType(uint8_t type);
+uint8_t myRadio_getChipType(void);
+int16_t myRadio_getRssi(void);
+void myRadio_transmit(rfTxPacket_ts *packet);
+void myRadio_receiver(void);
+void myRadio_setCtrl(controlMode_te mode, uint32_t value);
+void myRadio_process(void);
+#endif
+