📄 wab_uart.c
字号:
SetCtrlVal (config_handel,CONFIG_BAUD_RATE,baudrate);
SetCtrlVal (config_handel,CONFIG_DATA_BITS,data_bits);
SetCtrlVal (config_handel,CONFIG_PARITY,parity);
SetCtrlVal (config_handel,CONFIG_STOP_BITS,stop_bits);
SetCtrlVal (config_handel,CONFIG_INPUTQLEN,inputq);
SetCtrlVal (config_handel,CONFIG_OUTPUTQLEN,outputq);
SetCtrlIndex (config_handel, CONFIG_PORT, portindex);
}
/*---------------------------------------------------------------------------*/
/* Display error information to the user. */
/*---------------------------------------------------------------------------*/
void DisplayRS232Error (void)
{
char ErrorMessage[200];
switch (RS232Error)
{
default :
if (RS232Error < 0)
{
Fmt (ErrorMessage, "%s<RS232 error number %i", RS232Error);
MessagePopup ("RS232 Message", ErrorMessage);
}
break;
case 0 :
MessagePopup ("RS232 Message", "No errors.");
break;
case -2 :
Fmt (ErrorMessage, "%s", "Invalid port number (must be in the "
"range 1 to 8).");
MessagePopup ("RS232 Message", ErrorMessage);
break;
case -3 :
Fmt (ErrorMessage, "%s", "No port is open.\n"
"Check COM Port setting in Configure.");
MessagePopup ("RS232 Message", ErrorMessage);
break;
case -99 :
Fmt (ErrorMessage, "%s", "Timeout error.\n\n"
"Either increase timeout value,\n"
" check COM Port setting, or\n"
" check device.");
MessagePopup ("RS232 Message", ErrorMessage);
break;
}
}
void RD_ComData(int portNumber, int eventMask, void *callbackdata)
{
data_will_rd = GetInQLen (com_port);
bytes_read = ComRdTerm (com_port, read_data, data_will_rd,10);
/* Copy subset of read_data into tbox string for display.
ComRdTerm does not automatically put null byte after
number of bytes read into read_data string. */
if(display_message == 1) {
CopyString (tbox_read_data, 0, read_data, 0, bytes_read);
SetCtrlVal (mWindow, M_WINDOW_RCV_BOX, tbox_read_data);
}
RS232Error = ReturnRS232Err ();
if (RS232Error)
DisplayRS232Error ();
}
void CVICALLBACK Get_COM_Status (int menuBar, int menuItem, void *callbackData,
int panel)
{
if(portopen == 1) {
com_status = GetComStat (com_port);
DisplayComStatus ();
} else {
MessagePopup ("RS232 Message" , "The Port is not open!");
}
}
void DisplayComStatus ()
{
com_msg[0] = '\0';
if (com_status & 0x0001)
strcat (com_msg, "Input lost: Input queue"
" filled and characters were lost.\n");
if (com_status & 0x0002)
strcat (com_msg, "Asynch error: Problem "
"determining number of characters in input queue.\n");
if (com_status & 0x0010)
strcat (com_msg, "Parity error.\n");
if (com_status & 0x0020)
strcat (com_msg, "Overrun error: Received"
" characters were lost.\n");
if (com_status & 0x0040)
strcat (com_msg, "Framing error: Stop bits were not received"
" as expected.\n");
if (com_status & 0x0080)
strcat (com_msg, "Break: A break signal was detected.\n");
if (com_status & 0x1000)
strcat (com_msg, "Remote XOFF: An XOFF character was received."
"\nIf XON/XOFF was enabled, no characters are removed"
" from the output queue and sent to another device "
"until that device sends an XON character.\n");
if (com_status & 0x2000)
strcat (com_msg, "Remote XON: An XON character was received."
"\nTransmisson can resume.\n");
if (com_status & 0x4000)
strcat (com_msg, "Local XOFF: An XOFF character was sent to\n"
" the other device. If XON/XOFF was enabled, XOFF is\n"
" transmitted when the input queue is 50%, 75%, and 90%\n"
" full.\n");
if (com_status & 0x8000)
strcat (com_msg, "Local XON: An XON character was sent to\n"
" the other device. If XON/XOFF was enabled, XON is\n"
" transmitted when the input queue empties after XOFF\n"
" was sent. XON tells the other device that it can \n"
" resume sending data.\n");
if (strlen (com_msg) == 0)
strcat (com_msg, "No status bits are set.");
MessagePopup ("RS232 Message", com_msg);
}
int CVICALLBACK Rcv_Box_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int key_vk;
int key_asc;
switch (event)
{
case EVENT_COMMIT:
break;
case EVENT_KEYPRESS:
if(portopen == 1) {
key_asc = eventData1 & VAL_ASCII_KEY_MASK;
key_vk = eventData1 & VAL_VKEY_MASK;
if(key_vk == 0x0500)
ComWrtByte (com_port, 0x0d);
else if(key_vk == 0x0200)
ComWrtByte (com_port, 0x08);
else if(key_vk == 0x0300)
ComWrtByte (com_port, 0x1b);
else
ComWrtByte (com_port, key_asc);
}
break;
case EVENT_RIGHT_CLICK:
RunPopupMenu (rc_menubar_handle, R_C_BAR_rightclick, mWindow, eventData1, eventData2, 0, 0, 0, 0);
break;
}
return 0;
}
/////////////////////////////////////////////////////////////
//选择一个文件发送
//功能还未实现
/////////////////////////////////////////////////////////////
void CVICALLBACK Send_File (int menuBar, int menuItem, void *callbackData,
int panel)
{
char pathname[MAX_PATHNAME_LEN];
FileSelectPopup ("", "*.txt", "*.txt", "WAB : Send File", VAL_LOAD_BUTTON, 0, 0, 1, 0, pathname);
}
/////////////////////////////////////////////////////////////
//装载LED控制面板
//装载同时熄灭所有灯
/////////////////////////////////////////////////////////////
void CVICALLBACK LED_Test (int menuBar, int menuItem, void *callbackData,
int panel)
{
led_handel = LoadPanel (mWindow, "wab_uart.uir", LED_PANEL);
InstallPopup (led_handel);
display_message = 0;
if(portopen == 1) {
ComWrt(com_port, ledoff, 6);
ComWrtByte (com_port, 0x0d);//enter
led1_flag = 1;
led2_flag = 1;
led3_flag = 1;
}
}
/////////////////////////////////////////////////////////////
//关闭LED面板
/////////////////////////////////////////////////////////////
int CVICALLBACK LED_Callback (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
if(portopen == 1) {
ComWrt(com_port, ledp, 4);
ComWrtByte (com_port, 0x0d);//enter
}
DiscardPanel (led_handel);
display_message = 1;
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
/////////////////////////////////////////////////////////////
//控制LED灯状态的变化
/////////////////////////////////////////////////////////////
//点亮或者熄灭LED1
int CVICALLBACK LED1_OP (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(portopen == 1) {
if(led1_flag == 1) {
led1_flag = 0;
ComWrt(com_port, led1, 4);
ComWrtByte (com_port, 0x0d);//enter
} else {
led1_flag = 1;
ComWrt(com_port, ledoff, 6);
ComWrtByte (com_port, 0x0d);//enter
}
led2_flag = 1;
led3_flag = 1;
} else {
MessagePopup("RS232 Message","The COM is not open!");
}
break;
}
return 0;
}
//点亮或者熄灭LED2
int CVICALLBACK LED2_OP (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(portopen == 1) {
if(led2_flag == 1) {
led2_flag = 0;
ComWrt(com_port, led2, 4);
ComWrtByte (com_port, 0x0d);//enter
} else {
led2_flag = 1;
ComWrt(com_port, ledoff, 6);
ComWrtByte (com_port, 0x0d);//enter
}
led1_flag = 1;
led3_flag = 1;
} else {
MessagePopup("RS232 Message","The COM is not open!");
}
break;
}
return 0;
}
//点亮或者熄灭LED3
int CVICALLBACK LED3_OP (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(portopen == 1) {
if(led3_flag == 1) {
led3_flag = 0;
ComWrt(com_port, led3, 4);
ComWrtByte (com_port, 0x0d);//enter
} else {
led3_flag = 1;
ComWrt(com_port, ledoff, 6);
ComWrtByte (com_port, 0x0d);//enter
}
led1_flag = 1;
led2_flag = 1;
} else {
MessagePopup("RS232 Message","The COM is not open!");
}
break;
}
return 0;
}
//让LED1,LED2,LED3跑马灯运行
int CVICALLBACK LED_PAO (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if(portopen == 1) {
ComWrt(com_port, ledp, 4);
ComWrtByte (com_port, 0x0d);//enter
led1_flag = 1;
led2_flag = 1;
led3_flag = 1;
} else {
MessagePopup("RS232 Message","The COM is not open!");
}
break;
}
return 0;
}
void CVICALLBACK EnglishCallback (int menuBar, int menuItem, void *callbackData,
int panel)
{
int menubar_handle;
if(language_flag == 2)
return;
language_flag = 2;
menubar_handle = GetPanelMenuBar(mWindow);
DiscardMenuBar (menubar_handle);
menubar_handle = LoadMenuBar (mWindow, "wab_uart.uir", rs232_menu);
}
void CVICALLBACK ChineseCallback (int menuBar, int menuItem, void *callbackData,
int panel)
{
int menubar_handle;
if(language_flag == 1)
return;
language_flag = 1;
menubar_handle = GetPanelMenuBar(mWindow);
DiscardMenuBar (menubar_handle);
menubar_handle = LoadMenuBar (mWindow, "wab_uart.uir", Menu_CHN);
}
void CVICALLBACK visable_menu (int menuBar, int menuItem, void *callbackData,
int panel)
{
SetPanelAttribute (mWindow, ATTR_MENU_BAR_VISIBLE, 1);
SetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, 1);
}
void CVICALLBACK hide_menu (int menuBar, int menuItem, void *callbackData,
int panel)
{
SetPanelAttribute (mWindow, ATTR_MENU_BAR_VISIBLE, 0);
SetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -