본문 바로가기

Hello CE,Mobile

COMSTAT


typedef struct __RX_BUFFER_INFO {

    ULONG    Read;                  /* @field Current Read index. */

    ULONG    Write;                 /* @field Current Write index. */

    ULONG    Length;                /* @field Length of buffer */

    BOOL     DataAvail;             /* @field BOOL reflecting existence of data. */

    PUCHAR   RxCharBuffer;          /* @field Start of buffer */

    CRITICAL_SECTION    CS;         /* @field Critical section */

} RX_BUFFER_INFO, *PRX_BUFFER_INFO;


#define RxResetFifo(pSH)     pSH.Write = pSH.Read = 0

#define RxEnterCS(pSH)       EnterCriticalSection (&(pSH.CS))

#define RxLeaveCS(pSH)       LeaveCriticalSection (&(pSH.CS))

#define RxWrite(pSH)         (pSH.Write)                      // Write 인덱스 번호

#define RxRead(pSH)          (pSH.Read)                       // Read 인덱스 번호

#define RxLength(pSH)        (pSH.Length)                     // 버퍼길이(2048)

//APP이 읽어간 버퍼

#define RxBytesAvail(pSH)    (RxWrite(pSH) - RxRead(pSH)) & (RxLength(pSH) - 1)) 

#define RxBuffWrite(pSH)     (pSH.RxCharBuffer+pSH.Write)     // FIFO의 쓸때 포인터

#define RxBuffRead(pSH)      (pSH.RxCharBuffer+pSH.Read)      // FIFO의 읽을떄 포인터


Read         : APP이 ReadFile 요청시 FiFo 에서 읽었을 때의 인덱스

Write        : Interrupt 스레드에서 FiFo 쓸 때 Write 인덱스를 사용하며 인덱스 업데이트 

RxCharBuffer : Interrupt 스레드와 COM_READ 사이에서 버퍼 역할을 해줌.


==========================================================================================

Example

========================================================================================== 

BYTE tx[100] = "abcdefg";

       

WriteToPort(g_hCom,tx,4);

WriteToPort(g_hCom,tx,3);

WriteToPort(g_hCom,tx,2);

WriteToPort(g_hCom,tx,1);


R

W

a

b

c

d

 

 

 

 

 

 

 

 

R

W

a

b

c

d

a

b

c

 

 

 

 

 

R

W

a

b

c

d

a

b

c

a

b

c

 

 






         

==========================================================================================

typedef struct __TX_BUFFER_INFO {

    DWORD   Permissions;        /* @field Current permissions */

    ULONG   Read;               /* @field Current Read index. */

    ULONG   Length;             /* @field Length of buffer */

    PUCHAR  TxCharBuffer;       /* @field Start of buffer */

    CRITICAL_SECTION    CS;     /* @field Critical section */

} TX_BUFFER_INFO, *PTX_BUFFER_INFO;


#define TxEnterCS(pSH)     EnterCriticalSection (&(pSH->TxBufferInfo.CS))

#define TxLeaveCS(pSH)     LeaveCriticalSection (&(pSH->TxBufferInfo.CS))

#define TxRead(pSH)        (pSH->TxBufferInfo.Read)          // 버퍼에서 읽은 인덱스

#define TxLength(pSH)      (pSH->TxBufferInfo.Length)        // APP이 보낸 데이터길이

#define TxBytesAvail(pSH)  (TxLength(pSH)-TxRead(pSH))       // 버퍼에서 남은 데이터 갯수

// 버퍼에서 읽을 인덱스 주소

#define TxBuffRead(pSH)    (pSH->TxBufferInfo.TxCharBuffer+pSH->TxBufferInfo.Read) 


==========================================================================================

Example

==========================================================================================

APP

a

b

c

d

a

b

c

a

b

c

 

 

 

MDD APP에서의 버퍼 시작 포인터와 DataLength 전달 받음.

a

b

c

d

a

b

c

a

b

c

 

 

 

DoTxData() -> HWTxIntrHandler()

R

a

b

c

d

a

b

c

a

b

c

 

 

 

R

a

b

c

d

a

b

c

a

b

c

 

 

 


0658 +COM_WRITE(0x103F730, 0x9A36840, 1002)
0666 TxRead = 0, TxLength = 1002, TxBytesAvail = 1002.
0682 TxRead = 16, TxLength = 1002, TxBytesAvail = 986.
0701 TxRead = 32, TxLength = 1002, TxBytesAvail = 970.
0720 TxRead = 48, TxLength = 1002, TxBytesAvail = 954.
0721 -COM_WRITE(0x103F730, 0x9A36840, 1002)

========================================================================================== 

이함수는 ClearCommError 함수에 의해 채워진다.


typedef struct _COMSTAT {

    DWORD fCtsHold  : 1;    // 

    DWORD fDsrHold  : 1;

    DWORD fRlsdHold : 1;

    DWORD fXoffHold : 1;

    DWORD fXoffSent : 1;

    DWORD fEof      : 1;

    DWORD fTxim     : 1;

    DWORD fReserved : 25;

    DWORD cbInQue;

    DWORD cbOutQue;

} COMSTAT, *LPCOMSTAT;


* 출처 : MSDN


'Hello CE,Mobile' 카테고리의 다른 글

TouchCalibrate()  (0) 2012.07.25
CE,Mobile 설치 상대경로  (0) 2012.07.16
TouchPowerHandler  (0) 2011.05.17
Prefast tools 의 유용성  (0) 2010.11.18
Windows Mobile 6 Tips and Tricks in Registry  (0) 2010.11.15