📄 _main_form.cpp
字号:
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",®[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 + -