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

📄 statdlg.c

📁 一个代码齐全功能强大的串口初步学习应用教程,值得大家下载.
💻 C
字号:
/************************************************************************
    StatDlg.c
     -- Show dialog to display port status.

        History:   Date       Author         Comment
                   3/1/98     Casper         Wrote it.

*************************************************************************/

#include	<windows.h>
#include	<stdio.h>
#include	"PComm.h"
#include	"comm.h"
#include	"resource.h"

#define	MX_REFRESH	(WM_USER+100)

extern	HINSTANCE	GhInst;
extern	COMMDATA	GCommData;
extern	HWND		GhDlgStatus;

#define	IDT_TIMER	100
static void Refresh(HWND hDlg);

BOOL CALLBACK StatusDlgProc(HWND hDlg,UINT iMsg,WPARAM wParam,LPARAM lParam)
{
        switch(iMsg){
        case WM_INITDIALOG:
            Refresh(hDlg);
            SetTimer(hDlg,IDT_TIMER,100,NULL);
            return TRUE;

        case WM_TIMER:
            Refresh(hDlg);
            return TRUE;

        case WM_COMMAND:
            switch (LOWORD(wParam)){
            case IDCANCEL:
                KillTimer(hDlg,IDT_TIMER);
                DestroyWindow(hDlg);
                GhDlgStatus = NULL;
                return TRUE;
            }
            break;
        case MX_REFRESH:
            Refresh(hDlg);
            break;
        }

        return FALSE;
}


#define	DATABITSMSK	(BIT_5 | BIT_6 | BIT_7 | BIT_8)
#define STOPBITSMSK	(STOP_1 | STOP_2)
#define	PARITYMSK	(P_EVEN | P_ODD	| P_SPC	| P_MRK	| P_NONE)

static void Refresh(HWND hDlg)
{
        int     port;
        char    buf[80];
        long    baud;
        int     mode,databits,stopbits,parity;
        int     lstatus;
        int     txhold;
        int     d_status;
        int     flow;
        int     i;

        port = GCommData.Port;

        /* sio_data_status();This should be called first !! */
        d_status = sio_data_status(port);;
        if(d_status & 0x01){
            wsprintf(buf,"%s","parity error");
            SendDlgItemMessage(hDlg,IDC_ST_DATASTAT,
                    LB_ADDSTRING,0,(LPARAM)buf);
        }

        if(d_status & 0x02){
            wsprintf(buf,"%s","framing error");
            SendDlgItemMessage(hDlg,IDC_ST_DATASTAT,
                    LB_ADDSTRING,0,(LPARAM)buf);
        }

        if(d_status & 0x04){
            wsprintf(buf,"%s","overrun error");
            SendDlgItemMessage(hDlg,IDC_ST_DATASTAT,
                    LB_ADDSTRING,0,(LPARAM)buf);
        }

        if(d_status & 0x08){
            wsprintf(buf,"%s","overflow error");
            SendDlgItemMessage(hDlg,IDC_ST_DATASTAT,
                    LB_ADDSTRING,0,(LPARAM)buf);
        }

        wsprintf(buf,"COM%d",port);
        SetWindowText(GetDlgItem(hDlg,IDC_ST_PORT),buf);

        /* sio_getbaud() */
        baud = sio_getbaud(port);
        wsprintf(buf,"%ld",baud);
        SetWindowText(GetDlgItem(hDlg,IDC_ST_BAUD),buf);

	/* sio_getmode() */
        mode = sio_getmode(port);
        parity = mode & PARITYMSK;
        databits = mode & DATABITSMSK;
        stopbits = mode & STOPBITSMSK;
        for(i=0;i<5;i++)
            if(parity==GParityTable[i]){
                LoadString(GhInst,IDS_PARITYNONE+i,buf,sizeof(buf));
                break;
            }
        SetWindowText(GetDlgItem(hDlg,IDC_ST_PARITY),buf);

        for(i=0;i<4;i++)
            if(databits==GDataBitsTable[i]){
                LoadString(GhInst,IDS_DATABIT5+i,buf,sizeof(buf));
                break;
            }
        SetWindowText(GetDlgItem(hDlg,IDC_ST_DATABITS),buf);

        for(i=0;i<2;i++)
            if(stopbits==GStopBitsTable[i]){
                LoadString(GhInst,IDS_ONESTOPBIT+i,buf,sizeof(buf));
                break;
            }
        SetWindowText(GetDlgItem(hDlg,IDC_ST_STOPBITS),buf);

	/* sio_getflow() */
        flow = sio_getflow(port);
        if(flow==0){
            lstrcpy(buf,"NONE");
            SetWindowText(GetDlgItem(hDlg,IDC_ST_FLOW),buf);
        }else{
            lstrcpy(buf,"");
            if(flow&0x01)
                lstrcat(buf,"<CTS>");
            if(flow&0x02)
                lstrcat(buf,"<RTS>");
            if(flow&0x04)
                lstrcat(buf,"<Tx XON/XOFF>");
            if(flow&0x08)
                lstrcat(buf,"<Rx XON/XOFF>");
            SetWindowText(GetDlgItem(hDlg,IDC_ST_FLOW),buf);
        }

        /* sio_lstatus() */
        lstatus = sio_lstatus(port);
        wsprintf(buf,"%s",lstatus & S_CTS ? "CTS": "cts");
        SetWindowText(GetDlgItem(hDlg,IDC_ST_CTS),buf);
        wsprintf(buf,"%s",lstatus & S_DSR ? "DSR": "dsr");
        SetWindowText(GetDlgItem(hDlg,IDC_ST_DSR),buf);
        wsprintf(buf,"%s",lstatus & S_RI ? "RI": "ri");
        SetWindowText(GetDlgItem(hDlg,IDC_ST_RI),buf);
        wsprintf(buf,"%s",lstatus & S_CD ? "DCD": "dcd");
        SetWindowText(GetDlgItem(hDlg,IDC_ST_DCD),buf);

        /* sio_iqueue() */
        wsprintf(buf,"%ld",sio_iqueue(port));
        SetWindowText(GetDlgItem(hDlg,IDC_ST_IQUEUE),buf);

        /* sio_oqueue() */
        wsprintf(buf,"%ld",sio_oqueue(port));
        SetWindowText(GetDlgItem(hDlg,IDC_ST_OQUEUE),buf);


        /* sio_Tx_hold */
        SendDlgItemMessage(hDlg,IDC_ST_TXHOLD,
                    LB_RESETCONTENT,0,0);
        txhold = sio_Tx_hold(port);
        if(txhold & 0x01){
            wsprintf(buf,"%s","CTS is low");
            SendDlgItemMessage(hDlg,IDC_ST_TXHOLD,
                    LB_ADDSTRING,0,(LPARAM)buf);
        }
        if(txhold & 0x02){
            wsprintf(buf,"%s","XOFF char received");
            SendDlgItemMessage(hDlg,IDC_ST_TXHOLD,
                        LB_ADDSTRING,0,(LPARAM)buf);
        }
        if(txhold & 0x04){
            wsprintf(buf,"%s","by sio_disableTx()");
            SendDlgItemMessage(hDlg,IDC_ST_TXHOLD,
                        LB_ADDSTRING,0,(LPARAM)buf);
        }

}


⌨️ 快捷键说明

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