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

📄 wab_uart.c

📁 LabwindowsCVI编写的一个串口通信小程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "windows.h" 
#include <cvirte.h>		
#include <userint.h>
#include "wab_uart.h"
#include "toolbox.h"
#include <utility.h>
#include <formatio.h>
#include <rs232.h>
#include <string.h>

static int mWindow;
int config_handel;
int portopen;
int baudrate;
int parity;
int data_bits;
int stop_bits;
int com_port;
int config_flag = 1;
int inqlen;
int outqlen;
int inputq;
int outputq;
int portindex;
int RS232Error;
int data_will_rd;
int bytes_read;
int com_status;
char msg[100];
char devicename[30];
char read_data[2000];
char tbox_read_data[2000];
char com_msg[500];

//菜单栏语言选择标志1:中文;2:英语
int language_flag = 1;

//右键菜单栏
static int rc_menubar_handle;

//panel原始大小
int panel_height_original;
int panel_width_original;

//LED control signals
int led_handel;
char led1_flag = 1;
char led2_flag = 1;
char led3_flag = 1;
char led1[] = "led1";
char led2[] = "led2";
char led3[] = "led3";
char ledp[] = "ledp";
char ledoff[] = "ledoff";
char display_message = 1;

void GetConfigParam(void);
void SetConfigParam(void);
void DisplayRS232Error (void);
void RD_ComData(int portNumber, int eventMask, void *callbackdata);
void DisplayComStatus (void);

int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((mWindow = LoadPanel (0, "wab_uart.uir", M_WINDOW)) < 0)
		return -1;
	DisplayPanel (mWindow);
	
	////////////////////////////////////////////////////////////////////
	config_handel = LoadPanel (mWindow, "wab_uart.uir", CONFIG);
	//InstallPopup (config_handel);
	//config_handel = LoadPanel (0, "rs232.uir", CONFIG);
	DisplayPanel(config_handel);
	
	//
	rc_menubar_handle = LoadMenuBar (config_handel, "wab_uart.uir", R_C_BAR);
	SetPanelAttribute (config_handel, ATTR_MENU_BAR_VISIBLE, 0);
	
	//获得原始panel的大小
	GetPanelAttribute (mWindow, ATTR_HEIGHT, &panel_height_original);
	GetPanelAttribute (mWindow, ATTR_WIDTH, &panel_width_original);
	
	RunUserInterface ();
	DiscardPanel (mWindow);
	return 0;
}

int CVICALLBACK M_Callback (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	int panelheight;
	int panelwidth;
	int virtualkey;
	int zoom;
	int titlebar;
	int handle;
	switch (event)
	{
		case EVENT_GOT_FOCUS:

			break;
		case EVENT_LOST_FOCUS:

			break;
		case EVENT_CLOSE:
			if (portopen) {
				outqlen = GetOutQLen (com_port);
				if (outqlen > 0) {
					MessagePopup ("RS232 Message", "The output queue has\n"
									"data in it. Wait for device to receive\n"
									"the data or flush the queue.\n");
					break;
				}
				RS232Error = CloseCom (com_port);
				if (RS232Error)
					DisplayRS232Error ();
			}
			QuitUserInterface (0);
			break;
		case EVENT_PANEL_SIZE:
			GetPanelAttribute (mWindow, ATTR_HEIGHT, &panelheight);
			GetPanelAttribute (mWindow, ATTR_WIDTH, &panelwidth);
			SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_LEFT, 5);
			SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_TOP, 30);
			SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_HEIGHT, panelheight-35);
			SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_WIDTH, panelwidth-10);
			break;
		case EVENT_KEYPRESS:
			virtualkey = GetKeyPressEventVirtualKey (eventData2);
			if (virtualkey == VAL_ESC_VKEY)
			{
				SetPanelAttribute (mWindow, ATTR_MENU_BAR_VISIBLE, 1);
				SetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, 1);
				SetPanelAttribute (mWindow, ATTR_WINDOW_ZOOM, VAL_NO_ZOOM);
				SetPanelAttribute (mWindow, ATTR_HEIGHT, panel_height_original);
				SetPanelAttribute (mWindow, ATTR_WIDTH, panel_width_original);
				SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_LEFT, 5);
				SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_TOP, 30);
				SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_HEIGHT, panel_height_original-35);
				SetCtrlAttribute (mWindow, M_WINDOW_RCV_BOX, ATTR_WIDTH, panel_width_original-10);
			}
			break;
		case EVENT_LEFT_CLICK:
			GetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, &titlebar);
			GetPanelAttribute (mWindow, ATTR_WINDOW_ZOOM, &zoom);
			if (titlebar == 0 && zoom != VAL_MAXIMIZE)
			{
				GetPanelAttribute (mWindow, ATTR_SYSTEM_WINDOW_HANDLE, &handle);   
				ReleaseCapture(); 
				SendMessage ((HWND)handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
			}
			break;
	}
	return 0;
}

int CVICALLBACK CON_OK (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			portopen = 0;
			GetConfigParam();
			DisableBreakOnLibraryErrors ();
			RS232Error = OpenComConfig (com_port, devicename, baudrate, parity,
                                        data_bits, stop_bits, inputq, outputq);
			EnableBreakOnLibraryErrors ();
            if (RS232Error) DisplayRS232Error ();
            if (RS232Error == 0) {
                portopen = 1;
				InstallComCallback (com_port, LWRS_RXCHAR, 0, 0, RD_ComData, 0);
            }
			DiscardPanel (config_handel);
			break;
	}
	return 0;
}

int CVICALLBACK Con_cancel (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			DiscardPanel(config_handel);
			break;
	}
	return 0;
}

int CVICALLBACK CON_HELP (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			MessagePopup ("RS232 Message" , "This window is used to set you com");
			break;
	}
	return 0;
}

void CVICALLBACK new_connection (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Disconnect (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	if (portopen) {
		outqlen = GetOutQLen (com_port);
		if (outqlen > 0) {
			MessagePopup ("RS232 Message", "The output queue has\n"
						"data in it. Wait for device to receive\n"
						"the data or flush the queue.\n");
			return;
		}
		RS232Error = CloseCom (com_port);
		if (RS232Error)
			DisplayRS232Error ();
		portopen = 0;
	}
}

void CVICALLBACK Exit (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	if (portopen) {
		outqlen = GetOutQLen (com_port);
		if (outqlen > 0) {
			MessagePopup ("RS232 Message", "The output queue has\n"
							"data in it. Wait for device to receive\n"
							"the data or flush the queue.\n");
			return;
		}
		RS232Error = CloseCom (com_port);
		if (RS232Error)
			DisplayRS232Error ();
	}
	QuitUserInterface (0);
}

void CVICALLBACK Copy (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Paste (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Clear_screen (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	ResetTextBox (mWindow,M_WINDOW_RCV_BOX,"\0");
}

void CVICALLBACK Clear_rcv_buffer (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Clear_xmit_buffer (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Set_serial_port (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	config_handel = LoadPanel (mWindow, "wab_uart.uir", CONFIG);
	//InstallPopup (config_handel);
	//config_handel = LoadPanel (0, "rs232.uir", CONFIG);
	DisplayPanel(config_handel);
	if(config_flag)
		SetConfigParam();
	else
		config_flag = 1;
}

void CVICALLBACK Get_inqlen (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	if(portopen == 1) {
		inqlen = GetInQLen (com_port);
		Fmt (msg, "%s<Input queue length = %i", inqlen);
		MessagePopup ("RS232 Message", msg);
	} else {
		MessagePopup ("RS232 Message" , "The COM didn't open!");
	}
}

void CVICALLBACK Get_outqlen (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	if(portopen == 1) {
		outqlen = GetOutQLen (com_port);
		Fmt (msg, "%s<Output queue length = %i", outqlen);
		MessagePopup ("RS232 Message", msg);
	} else {
		MessagePopup ("RS232 Message" , "The COM didn't open!");
	}
}

void CVICALLBACK Set_window (int menuBar, int menuItem, void *callbackData,
		int panel)
{
}

void CVICALLBACK Help_index (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	char filedir[MAX_PATHNAME_LEN];
	char filename[MAX_PATHNAME_LEN];
	GetProjectDir (filedir);  
	filename[0] = '\0';
	strcat (filename, filedir);
	strcat (filename, "\\sounds.chm");
	ShowHtmlHelp (filename, HH_DISPLAY_TOPIC, 0);
}

void CVICALLBACK Help_about (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	MessagePopup ("RS232 Message" , "This is a test...\n"
									"auther:kingyou\n"
									"date:09/03/08");
}

void GetConfigParam(void)
{
	GetCtrlVal (config_handel,CONFIG_PORT,&com_port);
	GetCtrlVal (config_handel,CONFIG_BAUD_RATE,&baudrate);
	GetCtrlVal (config_handel,CONFIG_DATA_BITS,&data_bits);
	GetCtrlVal (config_handel,CONFIG_PARITY,&parity);
	GetCtrlVal (config_handel,CONFIG_STOP_BITS,&stop_bits);
	GetCtrlVal (config_handel,CONFIG_INPUTQLEN,&inputq);
	GetCtrlVal (config_handel,CONFIG_OUTPUTQLEN,&outputq);
	GetCtrlIndex (config_handel, CONFIG_PORT, &portindex);
	GetLabelFromIndex (config_handel, CONFIG_PORT, portindex, devicename);
}

void SetConfigParam(void)
{
	SetCtrlVal (config_handel,CONFIG_PORT,com_port);

⌨️ 快捷键说明

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