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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gpsvirtualdriver.cpp

?? 虛擬GPS串口信息源代碼
?? CPP
字號(hào):
// GpsVirtualDriver.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

//#define LOG_CALLS

char * atoh = "0123456789ABCDEF";

//             "   0    1    2    3    4    5    6    7    8    9 : ; < = > ? @    A    B    C    D    E    F"
BYTE htoa1[] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0,0,0,0,0,0,0,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0};
BYTE htoa2[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0,0,0,0,0,0,0,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};

void Convert( LPVOID pBuffer, DWORD Count )
{
	char* pCh = (char*)pBuffer;
	char ch, crc1, crc2; DWORD nCRC; BYTE state = 10;
	for (DWORD i=0;i<Count; i++)
	{
		ch = pCh[i];

		if (ch == '$') 
			state = 11; 
		else
		{
			switch ( state )
			{
	//		case 10: state = ch == '$'? 11:10; break;
			case 11: state = ch == 'G'? 12:10; break;
			case 12: state = ch == 'P'? 13:10; break;
			case 13: state = ch == 'R'? 14:10; break;
			case 14: state = ch == 'M'? 15:10; break;
			case 15: state = ch == 'C'? 16:10; break;
			case 16: state = ch == ','? 20:10; break;

			case 20:     if (ch == 'A') state = 21; break;
			case 21: state = ch == '*'? 22:20; break;
			case 22: 
					crc1 = ch; state = 23; break;
			case 23: 
				{ 
					crc2 = ch; 

					// get the crc
					nCRC = htoa1[crc1 - '0'] + htoa2[crc2 - '0'];

					// remove the chars we are deleting
					nCRC -= 'A';
					nCRC -= ',';

					// ... ,,A*72\n
					//          ^ current pos
					//      ^ current pos

					pCh[i-4]='*';
					pCh[i-3]=atoh[(nCRC & 0xF0) >> 4];
					pCh[i-2]=atoh[ nCRC & 0x0F ];
					pCh[i-1]=13;
					pCh[i-0]=10;

					state = 10;
				}
				break;
			}
		}
	}
}


#ifdef LOG_CALLS
void Log(LPCTSTR szStr, bool bLF = true)
{
	HANDLE hFile = CreateFile ( _T("\\log.txt"), GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL);

	SetFilePointer( hFile, 0, 0, FILE_END );

	DWORD dwLen;
	BOOL bOK = WriteFile( hFile, szStr, _tcslen(szStr)*sizeof(TCHAR), &dwLen, NULL );

	WriteFile( hFile, _T("\n"), _tcslen(_T("\n")), &dwLen, NULL );

	CloseHandle( hFile );

	OutputDebugString( szStr );
/*
	FILE *f = fopen("\\DemoDriverLog.txt", "a");
	fprintf(f, "%u", GetTickCount());
	fprintf(f, "%s", szStr);
	if (bLF)
		fprintf(f, "\n");
	fflush(f);
	fclose(f);
*/
}
#endif

GPSVIRTUALDRIVERDLL_API DWORD COM_Init(LPCTSTR pContext, LPCVOID lpvBusContext);
GPSVIRTUALDRIVERDLL_API BOOL COM_Deinit( DWORD hDeviceContext );
GPSVIRTUALDRIVERDLL_API DWORD COM_Open( DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode );
GPSVIRTUALDRIVERDLL_API BOOL COM_Close( DWORD hOpenContext );
GPSVIRTUALDRIVERDLL_API BOOL COM_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut );
GPSVIRTUALDRIVERDLL_API void COM_PowerUp( DWORD hDeviceContext );
GPSVIRTUALDRIVERDLL_API void COM_PowerDown( DWORD hDeviceContext );
GPSVIRTUALDRIVERDLL_API DWORD COM_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count );
GPSVIRTUALDRIVERDLL_API DWORD COM_Write( DWORD hOpenContext, LPCVOID pBuffer, DWORD Count );
GPSVIRTUALDRIVERDLL_API DWORD COM_Seek( DWORD hOpenContext, long Amount, WORD Type );

#define DEVICE_CONTEXT	0x1450
#define OPEN_CONTEXT 0x1451

HANDLE hComm = INVALID_HANDLE_VALUE;
DWORD dwManagePort = 1;

BOOL APIENTRY DllMain( HANDLE hModule, 
					  DWORD  ul_reason_for_call, 
					  LPVOID lpReserved
					  )
{
	switch ( ul_reason_for_call )
	{
	case DLL_PROCESS_ATTACH:
		break;
	case DLL_PROCESS_DETACH:
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	}
	return TRUE;
}

GPSVIRTUALDRIVERDLL_API DWORD COM_Init( LPCTSTR pContext, LPCVOID lpvBusContext)
{
#ifdef LOG_CALLS
	Log(_T("Init\n"));
#endif
	DWORD dwPort = 0;
	HKEY hKey;
	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, pContext, 0, 0, &hKey) == ERROR_SUCCESS)
	{
		TCHAR szDriverKey[255];
		DWORD dwSize = 255;
		DWORD dwType;
		if (RegQueryValueEx(hKey, L"Key", 0, &dwType, (BYTE *)szDriverKey, &dwSize) == ERROR_SUCCESS)
		{
			RegCloseKey(hKey);
			if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szDriverKey, 0, 0, &hKey) == ERROR_SUCCESS)
			{
				dwSize=4;
				if (RegQueryValueEx(hKey, L"ManagePort", 0, &dwType, (BYTE *)&dwPort, &dwSize) != ERROR_SUCCESS)
					dwPort = 0;
				RegCloseKey(hKey);
			}
		}
	}
	if (dwPort != 0)
		dwManagePort = dwPort;

	return DEVICE_CONTEXT;
}

GPSVIRTUALDRIVERDLL_API BOOL COM_Deinit( DWORD hDeviceContext )
{
	if (hDeviceContext != DEVICE_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False Deinst\n"));
#endif
		return FALSE;
	}

#ifdef LOG_CALLS
	Log(_T("DeInit\n"));
#endif
	return TRUE;
}

GPSVIRTUALDRIVERDLL_API DWORD COM_Open( DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode )
{
	if (hDeviceContext != DEVICE_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False Open\n"));
#endif
		return 0;
	}
	TCHAR szPort[255];
	swprintf(szPort, L"COM%u:", dwManagePort);

    hComm = CreateFile(
		szPort, 
		AccessCode,
		ShareMode,
		NULL,
		OPEN_EXISTING,
		0,
		NULL);

#ifdef LOG_CALLS
	TCHAR buf[255];
	_stprintf(buf, _T("Open port %s for access %u and share %u %s\n"), szPort, AccessCode, ShareMode, hComm ? _T("OK") : _T("Failed"));
	Log(buf);
#endif

	if (hComm == INVALID_HANDLE_VALUE)
		return 0;
	else
		return OPEN_CONTEXT;
}

GPSVIRTUALDRIVERDLL_API BOOL COM_Close( DWORD hOpenContext )
{
	if (hOpenContext != OPEN_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False Close\n"));
#endif
		return 0;
	}

#ifdef LOG_CALLS
	Log(_T("Close\n"));
#endif
	BOOL bRet = CloseHandle(hComm);
	hComm = INVALID_HANDLE_VALUE;
	return bRet;
}

GPSVIRTUALDRIVERDLL_API BOOL COM_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut )
{
	if (hOpenContext != OPEN_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False IOControl\n"));
#endif
		return 0;
	}

#ifdef LOG_CALLS
	TCHAR buf[255];
	_stprintf(buf, _T("Control code=%u, inlen=%u\n"), dwCode, dwLenIn);
	Log(buf);
#endif

	BOOL bRet=DeviceIoControl(
		hComm, 
		dwCode, 
		pBufIn, 
		dwLenIn, 
		pBufOut, 
		dwLenOut,
		pdwActualOut, 
		NULL);

#ifdef LOG_CALLS
	_stprintf(buf, _T("IOControl return bRet=%d, outlen=%u\n"), bRet, *pdwActualOut);
	Log(buf);
#endif

	return bRet;
}

GPSVIRTUALDRIVERDLL_API void COM_PowerUp( DWORD hDeviceContext )
{
}

GPSVIRTUALDRIVERDLL_API void COM_PowerDown( DWORD hDeviceContext )
{
}

GPSVIRTUALDRIVERDLL_API DWORD COM_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count )
{
	if (hOpenContext != OPEN_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False Read\n"));
#endif
		return 0;
	}

	DWORD dwBytes = 0;
	ReadFile(hComm, pBuffer, Count, &dwBytes, NULL);

	Convert( pBuffer, dwBytes );

#ifdef LOG_CALLS
	TCHAR buf[100];
	_stprintf( buf, _T("Read max=%u, read count: %u\n"), Count, dwBytes );
	Log(buf);
#endif

	return dwBytes;
}

GPSVIRTUALDRIVERDLL_API DWORD COM_Write( DWORD hOpenContext, LPCVOID pBuffer, DWORD Count )
{
	if (hOpenContext != OPEN_CONTEXT)
	{
#ifdef LOG_CALLS
		Log(_T("False Write\n"));
#endif
		return 0;
	}

#ifdef LOG_CALLS
	TCHAR buf[255];
	_stprintf(buf, _T("Write bytes=%u\n"), Count);
	Log(buf);
#endif
	DWORD dwBytes = 0;
	WriteFile(hComm, pBuffer, Count, &dwBytes, NULL);
	return dwBytes;
}

GPSVIRTUALDRIVERDLL_API DWORD COM_Seek( DWORD hOpenContext, long Amount, WORD Type )
{
#ifdef LOG_CALLS
	TCHAR buf[255];
	_stprintf(buf, _T("Seek Amount=%u, Type=%u\n"), Amount, Type);
	Log(buf);
#endif

	return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美成人一区| 欧美无人高清视频在线观看| 久久这里只有精品首页| 国产精品一区二区视频| 久久精品亚洲麻豆av一区二区| 国产精品一区二区视频| 国产精品天美传媒沈樵| 日本久久一区二区三区| 香港成人在线视频| 欧美成人vps| 国产iv一区二区三区| 亚洲欧洲日韩一区二区三区| 欧洲视频一区二区| 日本亚洲天堂网| 欧美国产日本视频| 欧美在线三级电影| 日韩精品成人一区二区在线| 国产亚洲精品超碰| 色又黄又爽网站www久久| 视频一区二区三区在线| 国产欧美日韩三区| 欧美日韩在线播放三区| 久久99蜜桃精品| 亚洲天堂成人在线观看| 337p亚洲精品色噜噜噜| 成人激情免费电影网址| 天天av天天翘天天综合网| 国产亚洲欧美色| 欧美色老头old∨ideo| 国产自产2019最新不卡| 一区二区国产盗摄色噜噜| 久久久噜噜噜久久中文字幕色伊伊| 99re66热这里只有精品3直播| 美女一区二区视频| 亚洲精品高清在线| 国产欧美一二三区| 欧美精选午夜久久久乱码6080| 国产精品影视在线观看| 丝袜美腿高跟呻吟高潮一区| 国产欧美精品在线观看| 欧美一区二区播放| 在线亚洲高清视频| 国产风韵犹存在线视精品| 亚洲va中文字幕| 亚洲人成影院在线观看| 亚洲精品在线免费观看视频| 欧洲生活片亚洲生活在线观看| 国产激情视频一区二区在线观看 | 7777精品伊人久久久大香线蕉完整版| 久久 天天综合| 丝袜诱惑亚洲看片| 亚洲国产精品麻豆| 日韩久久一区二区| 国产欧美日本一区视频| 欧美精品一区视频| 欧美一区二区三区小说| 欧美天堂一区二区三区| 91色九色蝌蚪| 99精品热视频| 不卡的av电影| 成人黄色777网| 成人激情综合网站| 国产一区二区免费看| 久久精品久久综合| 日本中文一区二区三区| 亚洲成av人影院在线观看网| 一区二区国产视频| 一区二区三区成人| 一区二区国产盗摄色噜噜| 亚洲三级电影全部在线观看高清| 国产欧美精品一区二区色综合| 久久理论电影网| 久久久午夜精品| 国产情人综合久久777777| 国产色一区二区| 欧美激情综合在线| 国产精品亲子乱子伦xxxx裸| 国产精品乱码人人做人人爱| 国产精品久久久久久久浪潮网站| 国产精品美女久久久久aⅴ | 精品亚洲porn| 国产在线一区二区综合免费视频| 激情综合色播激情啊| 久久国产欧美日韩精品| 久久99精品久久久久久动态图| 久久国产尿小便嘘嘘| 国产激情一区二区三区四区 | 欧美一区二区三区免费视频 | 欧美日韩三级一区二区| 欧美日韩另类一区| 91.成人天堂一区| 欧美v日韩v国产v| 国产欧美精品一区aⅴ影院| 亚洲欧美综合网| 亚洲大尺度视频在线观看| 蜜臀久久99精品久久久久宅男 | 欧美日韩高清一区| 日韩网站在线看片你懂的| 精品久久一二三区| 国产精品毛片久久久久久久| 亚洲精品国久久99热| 日韩福利视频网| 国产高清精品在线| 一本高清dvd不卡在线观看| 欧美亚洲精品一区| 欧美xxxx老人做受| 亚洲欧美在线另类| 日韩av中文在线观看| 国产乱理伦片在线观看夜一区| 成人免费视频一区| 欧美色图在线观看| 国产亚洲欧美日韩日本| 夜夜嗨av一区二区三区中文字幕| 日本不卡一二三| 成人性生交大合| 欧美日韩三级一区二区| 久久一日本道色综合| 一区二区三区.www| 国产精品影视在线| 欧美色男人天堂| 欧美国产乱子伦| 香蕉加勒比综合久久| 成人激情电影免费在线观看| 在线电影院国产精品| 国产日本欧洲亚洲| 欧美aⅴ一区二区三区视频| 99久久久国产精品免费蜜臀| 欧美一区二区三区在线| 亚洲欧美日韩一区| 国产精品一区在线观看你懂的| 欧美影院一区二区| 中文字幕巨乱亚洲| 寂寞少妇一区二区三区| 欧美日韩一区二区在线视频| 国产精品区一区二区三| 美脚の诱脚舐め脚责91| 欧美综合久久久| 国产精品久久久久久福利一牛影视| 日韩中文字幕一区二区三区| 99久久精品99国产精品| 国产色综合一区| 激情综合色播五月| 欧美精品v日韩精品v韩国精品v| 综合久久国产九一剧情麻豆| 国产一区二区三区四 | 日韩精品一区二区在线观看| 一区二区三区高清| 91麻豆精品视频| 亚洲国产精华液网站w| 精品亚洲国内自在自线福利| 欧美一区二区三区免费视频| 亚洲高清在线视频| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久久久一区二区三区| 国产精品资源在线观看| 欧美videofree性高清杂交| 日韩av电影免费观看高清完整版 | 国产精品中文字幕日韩精品| 日韩精品在线一区二区| 美女一区二区久久| 日韩一区二区麻豆国产| 奇米四色…亚洲| 日韩一二三区视频| 奇米在线7777在线精品| 欧美一区日韩一区| 六月丁香综合在线视频| 精品少妇一区二区三区在线播放 | 久久精品亚洲国产奇米99| 蜜臀久久久99精品久久久久久| 91精品国产91综合久久蜜臀| 日本亚洲欧美天堂免费| 日韩一区二区三区四区| 狠狠色丁香久久婷婷综合_中| www亚洲一区| 国产精品 欧美精品| 亚洲欧洲av一区二区三区久久| 97精品久久久午夜一区二区三区| 亚洲码国产岛国毛片在线| 欧美影院一区二区三区| 日韩激情一二三区| 久久亚洲一区二区三区四区| 国产精品18久久久久久久久久久久 | 国产日本亚洲高清| 99精品视频在线免费观看| 亚洲人精品一区| 在线91免费看| 黄一区二区三区| 国产精品久久久久婷婷二区次| 日本精品免费观看高清观看| 丝袜美腿亚洲综合| 久久九九久久九九| 日本精品免费观看高清观看| 日韩黄色在线观看| 中文字幕巨乱亚洲| 欧美喷潮久久久xxxxx| 国产一区二区伦理| 亚洲综合在线观看视频| 日韩免费一区二区三区在线播放| 国产福利一区二区| 亚洲香肠在线观看|