📄 sertest.c
字号:
#include <windows.h>
BOOL GetArguments(LPWSTR, LPDCB);
void Usage(void);
BYTE nDataBuffer[1024];
TCHAR m_tchCom[10];
DWORD LoopCount;
int WINAPI
WinMain (
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
HANDLE hComPort;
DCB dcb;
DWORD dwSize;
DWORD i;
DWORD n;
BYTE data;
// if ( GetArguments(lpCmdLine, &dcb) == FALSE ){
// return 0;
// }
_tcsncpy(m_tchCom, TEXT("COM1:"), 5);
hComPort = CreateFile(
m_tchCom,
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL );
if ( hComPort == INVALID_HANDLE_VALUE ) {
RETAILMSG(1, ( TEXT( "COM open function is failed.\r\n" ) ) );
return 0;
}
if( !GetCommState( hComPort, &dcb ) ){ // get current DCB
RETAILMSG(1, ( TEXT( "GetCommState returned error. code = %x\r\n" ), GetLastError() ) );
CloseHandle( hComPort );
return 0;
}
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
if ( GetArguments(lpCmdLine, &dcb) == FALSE ){
CloseHandle( hComPort );
return 0;
}
if( !SetCommState( hComPort, &dcb )){ //set DCB
RETAILMSG(1, ( TEXT( "SetCommState returned error. code = %x\r\n" ), GetLastError() ) );
CloseHandle( hComPort );
return 0;
}
i = 0;
while( TRUE ){
dwSize = 0;
data = 0x31;
for (n = 0; n < 8; n++){
nDataBuffer[n] = (BYTE)data++;
dwSize ++;
}
/**
WriteFile( hComPort, (LPVOID)nDataBuffer, dwSize, &dwSize, NULL);
RETAILMSG( 1, ( TEXT( "WriteFile() : %d\r\n" ), dwSize ) );
{
BOOL bMode = SetKMode(TRUE);
RETAILMSG(1, (TEXT("DSAR0 : %x\r\n"), *((volatile unsigned long * const)(0xff801000+(0x40*11)))));
RETAILMSG(1, (TEXT("DDAR0 : %x\r\n"), *((volatile unsigned long * const)(0xff801004+(0x40*11)))));
RETAILMSG(1, (TEXT("DTCR0 : %x\r\n"), *((volatile unsigned long * const)(0xff801008+(0x40*11)))));
RETAILMSG(1, (TEXT("DSASR0 : %x\r\n"), *((volatile unsigned long * const)(0xff801018+(0x40*11)))));
RETAILMSG(1, (TEXT("DDASR0 : %x\r\n"), *((volatile unsigned long * const)(0xff80101c+(0x40*11)))));
RETAILMSG(1, (TEXT("DTCSR0 : %x\r\n"), *((volatile unsigned long * const)(0xff801020+(0x40*11)))));
RETAILMSG(1, (TEXT("DPTR : %x\r\n"), *((volatile unsigned long * const)(0xff801024+(0x40*11)))));
RETAILMSG(1, (TEXT("DINTSR : %x\r\n"), *((volatile unsigned long * const)(0xff80180c))));
RETAILMSG(1, (TEXT("DINTMR : %x\r\n"), *((volatile unsigned long * const)(0xff801814))));
SetKMode(bMode);
}
**/
ReadFile( hComPort, (LPVOID)nDataBuffer, 1024, &dwSize, NULL);
RETAILMSG( 1, ( TEXT( "ReadFile() : %d\r\n" ), dwSize) );
{
BOOL bMode = SetKMode(TRUE);
RETAILMSG(1, (TEXT("REG:%x\r\n"), *((volatile unsigned short * const)0xff923008)));
// RETAILMSG(1, (TEXT("REG:%x\r\n"), *((volatile unsigned long * const)0xff800014)));
// RETAILMSG(1, (TEXT("REG:%x\r\n"), *((volatile unsigned long * const)0xff800018)));
// RETAILMSG(1, (TEXT("REG:%x\r\n"), *((volatile unsigned long * const)0xff80001c)));
// RETAILMSG(1, (TEXT("REG:%x\r\n"), *((volatile unsigned long * const)0xff800020)));
SetKMode(bMode);
}
if( dwSize == 0 ){
if ( i < LoopCount ){
i++;
}else{
break;
}
}
// i = 0;
WriteFile( hComPort, (LPVOID)nDataBuffer, dwSize, &dwSize, NULL);
RETAILMSG( 1, ( TEXT( "WriteFile() : %d\r\n" ), dwSize ) );
}
CloseHandle( hComPort );
return 0;
}
BOOL
GetArguments(
LPWSTR pCmdLine,
LPDCB dcb
)
{
PTSTR pOption;
TCHAR ws[] = TEXT(" \t");
PTSTR pParameter;
dcb->BaudRate = CBR_38400;
// dcb->BaudRate = CBR_38400;
// dcb->BaudRate = CBR_19200;
dcb->fParity = 0;
dcb->Parity = 0;
dcb->ByteSize = 8;
dcb->StopBits = 0;
LoopCount = 0;
_tcsncpy(m_tchCom, TEXT("COM1:"), 5);
m_tchCom[5] = 0;
for (pOption = _tcstok(pCmdLine, ws); pOption != NULL; pOption = _tcstok(NULL, ws)) {
if (pOption[0] != '/' && pOption[0] != '-') {
RETAILMSG(1, (TEXT("Unrecognized argument %s\r\n"), pOption));
continue;
}
pParameter = _tcstok(NULL, ws);
if (pParameter == NULL) {
RETAILMSG(1, (TEXT("Missing parameter to option %s\r\n"), pOption));
}
switch (pOption[1]) {
case 'r':
dcb->BaudRate = _ttoi(pParameter);
break;
case 'p':
dcb->Parity = (BYTE)_ttoi(pParameter);
if ( dcb->Parity )
dcb->fParity = 1;
break;
case 'b':
dcb->ByteSize = (BYTE)_ttoi(pParameter);
break;
case 's':
dcb->StopBits = (BYTE)_ttoi(pParameter);
break;
case 'c':
_tcsncpy(m_tchCom, pParameter, 5);
m_tchCom[5] = 0;
break;
case 'l':
LoopCount = (DWORD)_ttoi(pParameter);
break;
case 'h':
case '?':
Usage();
return FALSE;
default:
RETAILMSG(1, (TEXT("Unrecognized option %s\r\n"), pOption));
break;
}
}
return TRUE;
}
PTSTR usage_text[] =
{
TEXT("usage:\r\n"),
TEXT(" -c <Port> COM1: - COM9:\r\n"),
TEXT(" -r <BaudRate> 110 - 115200\r\n"),
TEXT(" -p <Parity> 0:None, 1:Odd, 2:Event\r\n"),
TEXT(" -b <ByteSize> 5 - 8\r\n"),
TEXT(" -s <StopBits> 0:1, 1:1.5, 2:2\r\n"),
TEXT(" -l <LoopCount> 0 - ???\r\n"),
TEXT(" -? help\r\n"),
};
#define NELEMS(a) (sizeof(a)/sizeof((a)[0]))
void
Usage(void)
{
int i;
for (i = 0; i < NELEMS(usage_text); i++) {
RETAILMSG(1, (usage_text[i]));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -