亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utitech.c

?? 工業組態軟件modbus驅動源代碼, 包括幫助文件.共享.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $Header: "%n Ver=%v  %f  LastEdit=%w  Locker=%l" */
/* "UDSERIAL.C Ver=4  25-Nov-97,17:08:20  LastEdit=JIMV  Locker=***_NOBODY_***" */
/***********************************************************************\
*                                                                       *
*       Copyright Wonderware Software Development Corp. 1992-1997       *
*                                                                       *
*       ThisFileName="L:\ww\dde_serv\src\udsample\udserial\udserial.c"  *
*       LastEditDate="1997 Nov 25  17:08:00"                            *
*                                                                       *
\***********************************************************************/

/******************************************/
/* >>>>>>>> Sample Serial Server <<<<<<<< */
/******************************************/

//#define SIMULATING              /* enable I/O to simulated device */

#define LINT_ARGS
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#if !defined(__MSC)
#include <conio.h>
#else
/* Note:  BORLAND conio.h include is disabled for Windows apps. */
/* It includes prototypes for inp & outp which are OK for Windows, */
/* but the whole include file is disabled so these are copied here: */
int         _Cdecl inport( int __portid );
void        _Cdecl outport( int __portid, int __value );
    /* These are in-line functions.  These prototypes just clean up
       some syntax checks and code generation.
     */
unsigned char _Cdecl    __inportb__( int __portid );
unsigned int _Cdecl     __inportw__( int __portid );
void        _Cdecl      __outportb__( int __portid, unsigned char __value );
void        _Cdecl      __outportw__( int __portid, unsigned int __value );
#define inportb         __inportb__
#define inportw         __inportw__
#define outportb        __outportb__
#define outportw        __outportw__
#define inp( portid ) inportb( portid )
#define outp( portid,v )  outportb( portid,v )
#define inpw( portid ) inportw( portid )
#define outpw( portid,v )  outportw( portid,v )
#endif

#include "ntconv.h"
#include "hmemcpy.h"
#include "chainmgr.h"
#include "Utitech.h"
#include "uddefs.h"
#include "config.h"
#include "ntsrvr.h"
#include "debug.h"
#include "tmpbuf.h"
#include "permissn.h"
#include "udgetstr.h"
#include "wwassert.h"

USES_ASSERT

BOOL bFlushOnError = TRUE;      /* =TRUE if should flush port buffers
                                   while processing an error */

static int WriteSimComm(int idComDev, const void FAR *lpvBuf, int cbWrite);
static int ReadSimComm(int idComDev, void FAR *lpvBuf, int cbRead);

/*加入一個函數用于切割讀回的字符串。該函數將有效的讀回數據寫入變量lpPort,并把有效的字符串長度寫入變量len。*/
static BYTE	inQueBuf[8][INQSIZE];
int	
WINAPI
Utitech_ReadComm(LPPORT lpPort)
{
	static	int		qIdx = -1;

	BOOL	eof_wait;
	BYTE cch,*pInQueBuf;
	int		i,idxQue;
	LPSTAT	lpTopic;
	BYTE	plcAddr;
	static WORD    len;

	// next QUEUE stack
	qIdx ++;
	eof_wait = FALSE;
	idxQue = 0;

	pInQueBuf = (BYTE *)&inQueBuf[qIdx];
	i = ReadComm(lpPort->mbCid,(LPSTR)pInQueBuf, INQSIZE);

	if (i > 0) {
		lpTopic = lpPort->mbCurTopic;
		plcAddr = lpTopic->statTopic;

		while (i--)  {
			cch = *pInQueBuf ++;
			idxQue = lpPort->mbRspIndex;
			lpPort->mbRspBuffer[idxQue] = cch;

			switch (idxQue) {
				case	0:
					len = 1023;
					if (cch == plcAddr)	++idxQue;		// start
					break;

				case	2:
					++ idxQue;
					// if ERROR return
					if (lpPort->mbRspBuffer[1] & 0x80) {
						len = 5;
					}
					else {
						switch (lpPort->mbRspBuffer[1]){
							
							case 0x1:
							case 0x2:
								len = (BYTE)cch + 5;
								break;
							case 0x10:
							case 0x0f:
							case 0x05:
								len = 8;
								break;

							default:
								len = (WORD)cch + 5;
								break;
							}
					}
					break;

				default:
					/*
					if ((cch == 10) || (cch == 13)) {			// BCC
						lpPort->mbRspExpLen = idxQue;
						eof_wait = TRUE;
						break;
					}
					*/

					if (++ idxQue >= ( INQSIZE-1)) {
						idxQue = 0;			// out of QUEUE
						break;
					}

					if (idxQue >= len) {
						lpPort->mbRspExpLen = idxQue;
						eof_wait = TRUE;
					}

					break;
			}	/* switch */

			lpPort->mbRspIndex = idxQue;
			if (idxQue >= lpPort->mbRspExpLen) break;
		} /* while */
	}

	// release QUEUE stack
	qIdx --;

	return	idxQue;
}

/***********************************************************************/
/** get COMPORT name corresponding to the port for indicated station **/


void
WINAPI
ExtractPortName (LPSTNPARAM lpStnParam, LPSTR lpName, int iMax)
{
    int i;

    /* get length of name */
    i = lstrlen (lpStnParam->spChannelName);

    /* ensure name will fit in target buffer */
    if (i >= iMax)
        i = iMax - 1;

    /* copy name to destination */
    _fstrncpy (lpName, lpStnParam->spChannelName, i);
    lpName[i] = '\0';
} /* ExtractPortName */

/***********************************************************************/
/** Set up port configuration info for indicated station **/

void
WINAPI
SetPortConfigInfo (LPPORT lpPort, LPSTNPARAM lpStnParam)
{
    /* copy COMPORT mode string to port structure */
    lstrcpy (lpPort->mbConfigString, lpStnParam->spConfigString);
} /* SetPortConfigInfo */

/***********************************************************************/
/** This function checks the communications port for events and logs them. **/

void
WINAPI
checkEvents(LPPORT  lpPort)
{
    int events;

    /* get and clear event mask for indicated COM port */
    events = GetCommEventMask(lpPort->mbCid, EV_RXCHAR | EV_TXEMPTY);

    if (!ShowingEvents)
        /* not displaying events, just return */
        return;

    /* have logger display appropriate event string */
    if ((events & (EV_RXCHAR | EV_TXEMPTY)) == (EV_RXCHAR | EV_TXEMPTY)) {
        debug(GetString(STRUSER + 89) /* "RXCHAR and TXEMPTY" */ );
    } else if ((events & (EV_RXCHAR | EV_TXEMPTY)) == EV_RXCHAR) {
        debug(GetString(STRUSER + 90) /* "RXCHAR" */ );
    } else if ((events & (EV_RXCHAR | EV_TXEMPTY)) == EV_TXEMPTY) {
        debug(GetString(STRUSER + 91) /* "TXEMPTY" */ );
    }
} /* checkEvents */

/***********************************************************************/
/** Check the communications port for serious errors
    and print debug messages showing the problem.
    return TRUE if event is a serious problem **/

BOOL
WINAPI
UdprotCheckErrors(LPPORT  lpPort)
{
    int    ec;
    BOOL   serious;

    /* get and clear COM error mask for indicated port */
    if ((ec = GetCommError(lpPort->mbCid, (COMSTAT FAR *)NULL)) == 0)
        /* no errors, just return */
        return FALSE;
    /* determine whether error is serious */
    serious = (ec &
     (CE_OVERRUN | CE_RXPARITY | CE_FRAME | CE_BREAK | CE_TXFULL)) != 0;
    if (!ShowingErrors)
        /* not displaying errors, just return indicator */
        return serious;
    /* formulate appropriate error message */
    dbgBuf[0] = '\0';
    if (ec & CE_MODE)
        sprintf(&dbgBuf[strlen(dbgBuf)],
           GetString(STRUSER + 92) /* "Bad comm port handle. " */ );
    if (ec & CE_RXOVER)
        sprintf(&dbgBuf[strlen(dbgBuf)],
         GetString(STRUSER + 93) /* "Receive queue overflow. " */ );
    if (ec & CE_OVERRUN)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 94) /* "Receive overrun. " */ );
    if (ec & CE_RXPARITY)
        sprintf(&dbgBuf[strlen(dbgBuf)],
           GetString(STRUSER + 95) /* "Receive parity error. " */ );
    if (ec & CE_FRAME)
        sprintf(&dbgBuf[strlen(dbgBuf)],
          GetString(STRUSER + 96) /* "Receive framing error. " */ );
    if (ec & CE_BREAK)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 97) /* "Received BREAK. " */ );
#ifndef WIN32
    if (ec & CE_CTSTO)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 98) /* "CTS timeout. " */ );
    if (ec & CE_DSRTO)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 99) /* "DSR timeout. " */ );
    if (ec & CE_RLSDTO)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 100) /* "DCD timeout. " */ );
#endif
    if (ec & CE_TXFULL)
        sprintf(&dbgBuf[strlen(dbgBuf)],
            GetString(STRUSER + 101)    /* "Transmit queue overflow. " */ );
    /* output error message to logger */
    debug(dbgBuf);
    /* return indication of whether error is serious */
    return serious;
} /* UdprotCheckErrors */

/***********************************************************************/
/** Report error code
    Called when an OpenComm() fails.
    Translates the error code into plain English. **/

void
WINAPI
UdprotReportOpenErrorCode (LPPORT lpPort)
{
    /* select appropriate message */
    switch (lpPort->mbCid) {
    case IE_BADID:
        /* "Failed to open device name (%Fs)" */
        sprintf(dbgBuf, GetString(STRUSER + 56), lpPort->mbPortName);
        break;
    case IE_OPEN:
        /* "Device already open (%Fs)" */
        sprintf(dbgBuf, GetString(STRUSER + 57), lpPort->mbPortName);
        break;
    case IE_NOPEN:
        /* "Device not open (%Fs)" */
        sprintf(dbgBuf, GetString(STRUSER + 58), lpPort->mbPortName);
        break;
    case IE_MEMORY:
        /* "Unable to allocate queues" */
        strcpy(dbgBuf, GetString(STRUSER + 59));
        break;
    case IE_DEFAULT:
        /* "Error in default parameters" */
        strcpy(dbgBuf, GetString(STRUSER + 60));
        break;
    case IE_HARDWARE:
        /* "Hardware not present or already allocated (%Fs)" */
        sprintf(dbgBuf, GetString(STRUSER + 61), lpPort->mbPortName);
        break;
    case IE_BYTESIZE:
        /* "Invalid byte size" */
        strcpy(dbgBuf, GetString(STRUSER + 62) );
        break;
    case IE_BAUDRATE:
        /* "Unsupported baud rate" */
        strcpy(dbgBuf, GetString(STRUSER + 63) );
        break;
    default:
        /* "Unknown error from OpenComm: 0x%x" */
        sprintf(dbgBuf, GetString(STRUSER + 64), lpPort->mbCid);
        break;

    }
    /* display message on screen */
    MessageBox(hWndParent, dbgBuf, GetAppName(),
           MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
} /* UdprotReportOpenErrorCode */

#ifndef SIMULATING

/***********************************************************************/
/* open indicated port */

BOOL
WINAPI
OpenPort (LPPORT lpPort)
{
    DCB             dcb;
    BOOL Trick19200 = FALSE;
    char ModeString [21], tempString [21];
    char *baudPtr;

    /* attempt to open COM port */
    lpPort->mbCid = OpenComm(lpPort->mbPortName, INQSIZE, OUTQSIZE);
    if (lpPort->mbCid < 0) {
        /* OpenComm() failed, display error code */
        UdprotReportOpenErrorCode(lpPort);
        return FALSE;
    }

    /*  initialize the DCB with current values */
    if( NTSrvr_GetCommState(lpPort->mbCid, (DCB FAR *)&dcb) != 0) {
        CloseComm(lpPort->mbCid);
        return FALSE;
    }
    /*
     * Translate the DOS MODE-style string into the corresponding fields
     * in the DCB.
     */

    /* copy the mode string to a local string */
    lstrcpy (ModeString, lpPort->mbConfigString);
    /* point to the baud rate */
    baudPtr = strchr (ModeString, ':');
    assert (baudPtr);
    baudPtr++;
    /* check whether the baud rate setting exceeds 4 characters */
    if (strncmp (baudPtr, "19200", 5) == 0) {
        /** Baud rate string is longer than BuildCommDCB can handle,
            so substitute 9600 in the string and set up the DCB.
            We will correct the baud rate in the DCB later. **/
        Trick19200 = TRUE;
        strncpy (baudPtr, " 9600 ", 5); /* Careful, string2 has to     */
                                        /* be longer than 5, or the    */
                                        /* function will insert a NULL */
        strcpy (tempString, baudPtr+1); /* drop out leading space */
        strcpy (baudPtr, tempString);
    }

    if (NTSrvr_BuildCommDCB(ModeString, (DCB FAR *) & dcb) == 0) {
        /* Set up the port as needed for the driver's operation */

        dcb.fBinary      = 1;    /* Binary operation               */

        /* enable RTS handshake, enable DTR */
        NTSrvr_SetDCB_Rts( (DCB FAR *)&dcb, NTSrvr_RTS_ENABLE );
        NTSrvr_SetDCB_Dtr( (DCB FAR *)&dcb, NTSrvr_DTR_ENABLE );

        dcb.fParity      = 0;    /* No Parity checking             */
        dcb.fOutxCtsFlow = 0;    /* No CTS output flow control     */
        dcb.fOutxDsrFlow = 0;    /* No DSR output flow control     */
        dcb.fOutX        = 0;    /* XON/XOFF output flow control   */
        dcb.fInX         = 0;    /* No XON/XOFF input flow control */
        dcb.fNull        = 0;    /* No null                        */
        dcb.XonChar      = 0x11; /* XON is ^Q                      */
        dcb.XoffChar     = 0x13; /* XOFF is ^S                     */

        /* check whether baud rate trick was used */
        if (Trick19200) {
            /* yes, force DCB baud rate to correct value */
            dcb.BaudRate = 19200;
        }

        /* Now set the port to the configuration in the DCB */
        if (NTSrvr_SetCommState( lpPort->mbCid, (DCB FAR *) & dcb) != 0) {
            /* unable to set COM port state, close COM port and exit */
            CloseComm(lpPort->mbCid);
            return FALSE;
        }

    } else {
        /* Parsing of config string failed, close COM port and exit */
        CloseComm(lpPort->mbCid);
        return FALSE;
    }

    /* indicate success */
    return TRUE;
} /* OpenPort */

/***********************************************************************/
/* shut down serial port */

void
WINAPI
ClosePort (LPPORT lpPort)
{
    CloseComm(lpPort->mbCid);
} /* ClosePort */

#endif

/***********************************************************************/
/** Flush indicated port **/

void
WINAPI
FlushPort (LPPORT lpPort, LPSTR lpErrMsg)
{
#ifndef SIMULATING
    /* flush COM port input and output buffers */
    FlushComm(lpPort->mbCid, 0);
    FlushComm(lpPort->mbCid, 1);
#endif
} /* FlushPort */

/***********************************************************************/
/** Read and discard any pending port input,
    return TRUE if port is quiet **/

BOOL
WINAPI
WaitForQuietPort (LPPORT lpPort, LPSTR lpErrMsg)
{
    int len;

    /* read any incoming characters, check for errors */
#ifndef SIMULATING
    len = ReadComm(lpPort->mbCid, (LPSTR) lpPort->mbRspBuffer, 1024);
#else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区成人在线视频 | 日韩视频中午一区| 美女精品自拍一二三四| 国产精品久久夜| 精品国产91九色蝌蚪| 99天天综合性| 黄色资源网久久资源365| 亚洲午夜一区二区| 亚洲日本一区二区| 久久久av毛片精品| 在线播放一区二区三区| 91美女视频网站| 成人美女在线视频| 久久99久久精品| 亚洲成a人片在线不卡一二三区| 中文字幕免费在线观看视频一区| 91精品国产综合久久精品麻豆| 不卡av电影在线播放| 国产乱国产乱300精品| 美国三级日本三级久久99| 亚洲.国产.中文慕字在线| 亚洲精品国产第一综合99久久 | 青青国产91久久久久久 | 国产精品女人毛片| 国产夜色精品一区二区av| 日韩欧美成人一区| 欧美一区欧美二区| 欧美精选午夜久久久乱码6080| 在线亚洲精品福利网址导航| 成人a免费在线看| 国产成人免费视频网站| 国内一区二区在线| 国内精品久久久久影院薰衣草| 日韩经典中文字幕一区| 日韩中文欧美在线| 蜜臀久久99精品久久久久久9| 天堂va蜜桃一区二区三区漫画版| 亚洲第四色夜色| 亚洲国产日韩一区二区| 午夜成人免费电影| 99久久99久久精品国产片果冻| 国产精品影音先锋| 国产99久久久国产精品潘金| 国产成人在线视频网址| 成人丝袜18视频在线观看| 粉嫩av一区二区三区粉嫩| www.色精品| 欧美在线一二三| 4hu四虎永久在线影院成人| 欧美一区二区三区小说| 欧美电影免费观看高清完整版在线 | 69精品人人人人| 欧美人动与zoxxxx乱| 91精品国产综合久久婷婷香蕉 | 日韩美女视频一区| 一区二区三区四区不卡视频| 亚洲综合成人网| 首页国产丝袜综合| 久久成人羞羞网站| 国产精品一二二区| 91麻豆蜜桃一区二区三区| 欧美网站大全在线观看| 欧美人与z0zoxxxx视频| 日韩精品一区二区三区老鸭窝 | 午夜国产精品一区| 美女脱光内衣内裤视频久久影院| 国产美女在线观看一区| 国产91精品一区二区麻豆网站| 99麻豆久久久国产精品免费| 日本高清无吗v一区| 欧美丰满一区二区免费视频| 日韩一区二区三区高清免费看看| 久久综合狠狠综合| 亚洲三级视频在线观看| 午夜一区二区三区视频| 国产一区二区在线观看视频| jlzzjlzz欧美大全| 欧美日韩久久久一区| 欧美r级电影在线观看| 国产精品国产自产拍在线| 五月天婷婷综合| 国产福利一区在线观看| 久久色在线观看| 一区精品在线播放| 首页亚洲欧美制服丝腿| 成人午夜在线播放| 欧美军同video69gay| 日本一区二区成人| 日韩电影网1区2区| 91论坛在线播放| 欧美一区二区人人喊爽| 国产精品成人免费| 国产一区视频网站| 欧美日韩一级视频| 国产精品毛片高清在线完整版| 亚洲成国产人片在线观看| 国产精选一区二区三区| 欧美日韩三级在线| 一区在线观看免费| 狠狠色丁香久久婷婷综| 欧美日韩精品久久久| 国产精品二三区| 国产综合色视频| 欧美日韩在线播放三区四区| 国产蜜臀av在线一区二区三区| 亚洲一二三区不卡| 99re视频这里只有精品| 欧美成人video| 午夜精品福利一区二区蜜股av| 成人avav影音| 国产日韩av一区| 久久99精品国产.久久久久| 在线观看不卡视频| 最新欧美精品一区二区三区| 国产精品资源站在线| 日韩欧美www| 日本va欧美va精品发布| 欧洲在线/亚洲| 亚洲另类色综合网站| www.欧美日韩| 国产欧美在线观看一区| 韩国三级电影一区二区| 精品日韩在线观看| 久久精品国产精品亚洲红杏| 欧美日本一区二区| 亚洲午夜一区二区| 日本道在线观看一区二区| 国产精品国产三级国产有无不卡| 国产精品一区二区免费不卡| 精品粉嫩aⅴ一区二区三区四区 | av爱爱亚洲一区| 国产精品久久久久婷婷| 国产成人免费xxxxxxxx| 一区二区三区四区五区视频在线观看| 懂色av噜噜一区二区三区av| 久久奇米777| 国产一区视频在线看| 久久综合狠狠综合久久激情| 韩国理伦片一区二区三区在线播放 | 在线亚洲欧美专区二区| 亚洲男同性恋视频| 欧美写真视频网站| 婷婷中文字幕一区三区| 欧美一区二区福利在线| 久久精品免费观看| 久久综合久久鬼色中文字| 国产激情视频一区二区在线观看 | 欧美电影免费观看完整版| 久久精品国产99国产精品| 日韩午夜激情av| 国产精品一区二区三区网站| 久久久噜噜噜久久人人看| 国产91精品欧美| 亚洲色图欧美激情| 欧美日韩精品一区二区在线播放| 日韩福利电影在线观看| 欧美电影免费观看高清完整版在线| 黑人巨大精品欧美黑白配亚洲| 国产清纯白嫩初高生在线观看91| www.欧美色图| 婷婷激情综合网| 精品va天堂亚洲国产| 国产jizzjizz一区二区| 一区二区三区中文字幕电影| 欧美猛男超大videosgay| 精品制服美女丁香| 国产精品午夜在线| 精品视频在线免费观看| 美女网站色91| 亚洲视频资源在线| 7777精品伊人久久久大香线蕉超级流畅 | 精品福利av导航| av亚洲精华国产精华| 一区二区免费在线播放| 日韩免费电影一区| 波多野结衣中文一区| 亚洲一级不卡视频| 久久日一线二线三线suv| 色综合久久久久久久久久久| 天天综合色天天综合| 国产欧美一区二区精品忘忧草| 色综合欧美在线视频区| 久草这里只有精品视频| 亚洲人精品午夜| 亚洲精品一区二区在线观看| 91小视频免费观看| 美女在线观看视频一区二区| 国产精品精品国产色婷婷| 欧美一级免费观看| 91美女片黄在线| 国产精品综合二区| 香蕉成人伊视频在线观看| 国产欧美精品一区| 亚洲人成网站在线| 精品久久人人做人人爽| 在线观看www91| 大尺度一区二区| 免费看精品久久片| 亚洲曰韩产成在线| 国产清纯白嫩初高生在线观看91 |