⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _main_form.cpp

📁 蓝牙芯片ZV4301的调试工具源码.做蓝牙产品时很有参考价值内部有串口的编程序源码,对有串口编成需求的同志有参考价值.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
      DebugPrintf("Serial Baudrate Change to %d bps", hcomm_sets.used_baudrate);
    }
  }
  else
  {
    baudrate_item->Checked = true;
    hcomm_sets.used_baudrate = baudrate_list[baudrate_item->MenuIndex];
  }
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::Exit1Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::MENU_CFG_COMM_REFRESHClick(TObject *Sender)
{
  COMM_LIST_UPDATE();
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::MENU_CFG_COMM_CLOSEClick(TObject *Sender)
{
  if(hcomm_sets.selected)
  {
     if(hcomm_sets.item)
     {
       hcomm_sets.item->Checked = false;
       hcomm_sets.item = NULL;
     }
     hcomm_sets.selected = 0;
     hcomm.Close();
     MAIN_FORM->Caption = "Zeevo MP Tool";
     DebugPrintf("Serial Communication Closed");
     MENU_CFG_COMM_OPEN->Checked = false;
     ZV_ENGINEER_LIST->Enabled = false;
  }
}
//---------------------------------------------------------------------------
void __fastcall TMAIN_FORM::ReceiveSerialData(unsigned __int8 *data, unsigned __int16 len)
{
  LIGHT();
  ctrlfsm.Input(data, len);
  ctrlfsm.Execute();
}
//---------------------------------------------------------------------------
void HCOMM_ON_RECEIVE(char *data, UINT16 count)
{
  if(count)
  {
    char buff[2048];
    sprintf(buff, "Data Received (%d bytes)", count);
    //for(int i=0; i<count;i++)
    //  sprintf(&buff[strlen(buff)], "%02X ", (unsigned __int8)data[i]);

    DebugPrintf(buff);
    //Send Data To Control FSM
    MAIN_FORM->ReceiveSerialData(data, count);
  }
}
//---------------------------------------------------------------------------
int DebugPrintf( char *pFormat, ... )
{
   va_list     args;
   int         cnt;
   char buf[10240];

   va_start( args, pFormat );
   cnt = vsprintf( buf, pFormat, args );
   if( cnt < 0 )
      return 0;

   //while(MAIN_FORM->DEBUG_LIST->Count >= 500)
   //  MAIN_FORM->DEBUG_LIST->Items->Delete(0);
   MAIN_FORM->DEBUG_LIST->Items->Add(buf);
   MAIN_FORM->DEBUG_LIST->ItemIndex = MAIN_FORM->DEBUG_LIST->Count - 1;

   return cnt;
}
void __fastcall TMAIN_FORM::Clear1Click(TObject *Sender)
{
  DEBUG_LIST->Clear();
}
//---------------------------------------------------------------------------
static void CTRLFSM_SEND(unsigned __int8 *data, unsigned __int16 len)
{
  MAIN_FORM->SendSerialData(data, len);
}
//---------------------------------------------------------------------------
void __fastcall TMAIN_FORM::SendSerialData(unsigned __int8 *data, unsigned __int16 len)
{
  if(len > 0 && data)
  {
    if(hcomm_sets.item) // Check if Open
    {
      char buff[1024];
      hcomm.Send(data, len, NULL);
      sprintf(buff, "Data Sent (%d bytes): ", len);
      for(int i=0; i<len;i++)
        sprintf(&buff[strlen(buff)], "%02X ", (unsigned __int8)data[i]);

      DebugPrintf(buff);
    }
    else if(MENU_CFG_USEUSB->Checked)
    {
      //husb[0]->sendHCICommand(data, len);
      husb[0]->sendHCICommand(&data[1], len-1);
//      USB_READ_TASK->Enabled = true;
    }
  }
}

void __fastcall TMAIN_FORM::MENU_CFG_INTEFACE_ZERIALClick(TObject *Sender)
{
  hcomm_sets.used_interface = CI_ZERIAL;
  ctrlfsm.Interface = hcomm_sets.used_interface;
  MENU_CFG_INTEFACE_ZERIAL->Checked = true;
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::MENU_CFG_INTEFACE_HCIClick(TObject *Sender)
{
  hcomm_sets.used_interface = CI_HCI;
  ctrlfsm.Interface = hcomm_sets.used_interface;
  MENU_CFG_INTEFACE_HCI->Checked = true;
}
//---------------------------------------------------------------------------

static unsigned __int8 color_interval = 0xFF - 0x80;
static float color_percent = (float)color_interval / 25.;
void __fastcall TMAIN_FORM::LED_TIMERTimer(TObject *Sender)
{
  if(led_count == 25)
  {
    LED->Brush->Color = (TColor)0x8000;
    LED_TIMER->Enabled = false;
    led_count = 0;
  }
  else
  {
    LED->Brush->Color = (TColor)(0x00FF - (unsigned __int16)(color_percent * (float)led_count)) * 0x0100;
    led_count++;
  }
}

void __fastcall TMAIN_FORM::LIGHT(void)
{
  if(LED_TIMER->Enabled)
  {
    led_count = 0;
  }
  else
  {
    LED_TIMER->Enabled = true;
  }
}

//---------------------------------------------------------------------------
static void ZEEVO_PRINT(Thci_evt_zeevo_event_print *Value)
{
  MAIN_FORM->ZVPrint(Value);
}

void __fastcall TMAIN_FORM::ZVPrint(Thci_evt_zeevo_event_print *Value)
{
  if(CTRL_PAGE->ActivePage == CONTROL_PAGE_ZVCMD)
  {
    char buff[1024];
    strcpy(buff, Value->value);
    int len = strlen(buff);
    if(len >= 2)
    {
      if(buff[len-2] == 0x0A && buff[len-1] == 0x0D)
         buff[len-2] = 0x00;
    }

    ZV_PRINT_LIST->Items->Add(buff);
    ZV_PRINT_LIST->ItemIndex = ZV_PRINT_LIST->Items->Count - 1;
  }
  else if(CTRL_PAGE->ActivePage == CONTROL_PAGE_ZVENGINEERTOOL)
  {
    int serach_idx;
    char buff[256];
    if( (SEARCH_STR(Value->value, "Done. [reset]")) >= 0)
    {
      Sleep(2000);
      ZV_ENGINEER_LISTClick(NULL);

      return;
    }
    switch(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].Type){
      case CC_BUILD:
        if(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].CanUse)
        {
          if( (serach_idx = SEARCH_STR(Value->value, "Build:")) >= 0)
          {
            TStringToken Line(&Value->value[serach_idx]);
            Line.GetMsg(1, buff);
            ZEP_BUILD_BUILD->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Signature : ")) >= 0)
          {
            TStringToken Line(&Value->value[serach_idx]);
            Line.GetMsg(2, buff);
            ZEP_BUILD_SIGNATURE->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Comment")) >= 0)
          {
            int head = SEARCH_STR(Value->value, "\"")+1;
            int tail = SEARCH_STR(&Value->value[head], "\"")-1 + head;
            memset(buff, 0, 256);
            memcpy(buff, &Value->value[head], tail - head + 1);
            ZEP_BUILD_COMMENT->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Date: ")) >= 0)
          {
            strcpy(buff, &Value->value[serach_idx + strlen("Date: ")]);
            ZEP_BUILD_DATE->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Chip")) >= 0)
          {
            char  buff2[256];
            TStringToken Line(&Value->value[serach_idx]);
            Line.GetMsg(1, buff2);
            ZEP_BUILD_CHIP->Text = buff2;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "RF parameters: ")) >= 0)
          {
            strcpy(buff, &Value->value[serach_idx + strlen("RF parameters: ")]);
            ZEP_BUILD_RFPARAM->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Package")) >= 0)
          {
            char  buff2[256];
            TStringToken Line(&Value->value[serach_idx]);
            Line.GetMsg(1, buff2);
            ZEP_BUILD_PKG->Text = buff2;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Host Interface: ")) >= 0)
          {
            strcpy(buff, &Value->value[serach_idx + strlen("Host Interface: ")]);
            ZEP_BUILD_HI->Text = buff;
          }
          else if( (serach_idx = SEARCH_STR(Value->value, "Built from Library Version : ")) >= 0)
          {
            strcpy(buff, &Value->value[serach_idx + strlen("Built from Library Version : ")]);
            if(ZEP_BUILD_CHIPBASE->Text.Length() == 0)
              ZEP_BUILD_CHIPBASE->Text = buff;
            else
              ZEP_BUILD_BTLLSTACK->Text = buff;
          }

        }
        break;      case CC_SETBDADDR:
        if(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].CanUse)
        {
          if( (serach_idx = SEARCH_STR(Value->value, "BdAddr:")) >= 0)
          {
            char  buff2[256];
            TStringToken Line(&Value->value[serach_idx]);
            Line.GetMsg(1, buff2);
            buff2[12] = 0x00;
            ZEP_BDADDR_BDADDR->Text = buff2;
          }
          if( (serach_idx = SEARCH_STR(Value->value, "Curr Bd Addr Type: ")) >= 0)
          {
            strcpy(buff, &Value->value[serach_idx + strlen("Curr Bd Addr Type: ")]);
            ZEP_BDADDR_TYPE->Text = buff;
          }

          if((serach_idx = SEARCH_STR(Value->value, "Printf Buffer Overflow")) >= 0)
            ctrlfsm.CmdConsole(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].InitCmd);
        }
        break;
      case CC_DEVCMD:
        if(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].CanUse)
        {
          if((serach_idx = SEARCH_STR(Value->value, "ZV continoustx/continousrx/continousnulltx")) >= 0)
            ZEP_DEV_STATUS->Caption = "Command OK!";
          else if((serach_idx = SEARCH_STR(Value->value, "Done. [txpower]")) >= 0)
            ZEP_DEV_STATUS->Caption = "Command OK!";
          else if((serach_idx = SEARCH_STR(Value->value, "Done. [freq]")) >= 0)
            ZEP_DEV_STATUS->Caption = "Command OK!";
        }
        break;
      case CC_CRYSTAL:
        if(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].CanUse)
        {
          if((serach_idx = SEARCH_STR(Value->value, "Crystal tunning history: ")) >= 0)
          {
            char buff2[64] = "ff";
            unsigned __int16 reg[4];
            int count = 0;
            TStringToken Line(&Value->value[serach_idx + strlen("Crystal tunning history: ")]);
            ZEP_CRYSTAL_TUNNING_FLASH->Text = buff2;
            for(int i=0; i<4; i++)
            {
              Line.GetMsg(i, buff2);
              sscanf(buff2,"%x",&reg[i]);
              if(reg[i] != 0xff)
              {
                ZEP_CRYSTAL_TUNNING_FLASH->Text = buff2;
                count++;
              }
            }
            ZEP_CRYSTAL_COUNT->Text = count;
          }
          else if((serach_idx = SEARCH_STR(Value->value, "Done. [xtaltest]")) >= 0)
          {
            ZEP_CRYSTAL_TUNNING_01STEP1->Enabled = false;
            ZEP_CRYSTAL_TUNNING_01STEP2->Enabled = true;
            ZEP_CRYSTAL_TUNNING_01STEP3->Enabled = true;
          }
          else if((serach_idx = SEARCH_STR(Value->value, "Done. [preparedut]")) >= 0)
          {
            if(ZEP_CRYSTAL_TUNNING_02STEP1->Enabled)
            {
              ZEP_CRYSTAL_TUNNING_02STEP1->Enabled = false;
              ZEP_CRYSTAL_TUNNING_02STEP2->Enabled = true;
            }
            else
              ZEP_CRYSTAL_TUNNING_03STEP1->Enabled = false;
          }
          else if((serach_idx = SEARCH_STR(Value->value, "Done. [freq]")) >= 0)
          {
            ZEP_CRYSTAL_TUNNING_02STEP2->Enabled = false;
            ZEP_CRYSTAL_TUNNING_02STEP3->Enabled = true;
            ZEP_CRYSTAL_TUNNING_02STEP4->Enabled = true;
          }
          else if((serach_idx = SEARCH_STR(Value->value, "Printf Buffer Overflow")) >= 0)
          {
            // Resend again
            ctrlfsm.CmdConsole(EngineerCtrl[ZV_ENGINEER_LIST->ItemIndex].InitCmd);
          }

        }
        break;

    }
  }
}
void __fastcall TMAIN_FORM::USER_CONSOLE_CMDKeyPress(TObject *Sender,
      char &Key)
{
  if(Key == '\r')
  {
    if(USER_CONSOLE_CMD->Items->Count == 20)
      USER_CONSOLE_CMD->Items->Delete(19);
    USER_CONSOLE_CMD->Items->Insert(0,USER_CONSOLE_CMD->Text);
    if(hcomm_sets.item || MENU_CFG_USEUSB->Enabled)
      if(USER_CONSOLE_CMD->Text.Length())
        ctrlfsm.CmdConsole(USER_CONSOLE_CMD->Text.c_str());
  }
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::ZV_PRINT_CLEARClick(TObject *Sender)
{
  ZV_PRINT_LIST->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TMAIN_FORM::ZV_PRINT_SAVEClick(TObject *Sender)
{
  if(SaveTXT->Execute())
  {
    SaveZVPrintList(SaveTXT->FileName.c_str());
  }
}
//---------------------------------------------------------------------------
void __fastcall TMAIN_FORM::SaveZVPrintList(AnsiString FileName)
{
  char filename[128];
  int len = FileName.Length();
  sprintf(filename, FileName.c_str());
  if(len > 4)
  {
    if(
        filename[len - 4] == '.' &&
        (filename[len - 3] == 'T' || filename[len - 3] == 't') &&
        (filename[len - 2] == 'X' || filename[len - 2] == 'x') &&
        (filename[len - 1] == 'T' || filename[len - 1] == 't')
      )
    {
      FileName = FileName;
    }
    else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -