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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bthamb.cxx

?? Windows CE操作系統(tǒng)中適用的藍(lán)牙驅(qū)動程序
?? CXX
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
// 
//      Bluetooth HCI UART interface
// 
// 
// Module Name:
// 
//      bthamb.cxx
// 
// Abstract:
// 
//      This file implements Bluetooth HCI UART interface
// 
// 
//------------------------------------------------------------------------------
#include <windows.h>

#if ! defined (UNDER_CE)
#include <assert.h>
#define ASSERT assert
#endif

#include <bt_buffer.h>
#include <bt_hcip.h>
#include <bt_os.h>
#include <bt_debug.h>
#include <bt_tdbg.h>

static HANDLE hFile = INVALID_HANDLE_VALUE;
static HANDLE hWriteEvent = NULL;
static HANDLE hReadEvent = NULL;
static HCI_TransportCallback gCallback = NULL;

#define PACKET_SIZE_R		(64 * 1024 + 128)
#define PACKET_SIZE_W		(255 + 3)

#define DEFAULT_COM_NAME	L"COM2:"

#define DEBUG_READ_BUFFER_HEADER	4
#define DEBUG_WRITE_BUFFER_HEADER	8
#define DEBUG_READ_BUFFER_TRAILER	1
#define DEBUG_WRITE_BUFFER_TRAILER	3

DECLARE_DEBUG_VARS();

// AmbiCom specific code for Ericsson module
#if 1
unsigned char HCC_RESET[] = {01, 03,  0x0c,  00};
#define EricssonBaudRatePos 4
unsigned char HCC_ERICSSON_SET_BAUD_RATE[] = {0x01, 0x09, 0xfc,  0x01, 0x02};
unsigned char HCC_READ_BT_ADDR[] = {0x01, 0x09, 0x01, 0x00};
static BOOL WriteCommPort (unsigned char *pBuffer, unsigned int cSize);
BOOL SendHCC(HANDLE commPort, unsigned char* pHCC, DWORD size)
{
	DWORD nWritten = 0;
	if(WriteFile(commPort, pHCC, size,  &nWritten, 0))
			return TRUE;
	IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:SendHCC-WriteFile Fail. GetLastError = 0x%08x\n", GetLastError ()));
	return FALSE;
}
#define HEAD_LEN 7
BOOL ReadHCE(HANDLE commPort)
{
	DWORD nRead = 0;
	unsigned char received[10];
	ZeroMemory(received, sizeof(received));
	if(ReadFile(commPort, received, HEAD_LEN, &nRead, 0) && nRead)
	{
		return TRUE;
	}
	IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:ReadHCE-ReadFile Fail. GetLastError = 0x%08x\n", GetLastError ()));
	return FALSE;
}
BOOL UART_SetBaudRate(HANDLE commPort, DWORD dwBaudRate)
{
	DWORD dwWinSDKBaudRate;
	DCB dcb;
	Sleep(1000);
	ZeroMemory(&dcb, sizeof(dcb));
	if(!GetCommState(commPort, &dcb))
	{
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:UART_SetBaudRate-GetCommState Fail. GetLastError = 0x%08x\n", GetLastError ()));
	}
	if(SendHCC(commPort, HCC_RESET, sizeof(HCC_RESET)))
	{
		Sleep(100);
		if(!ReadHCE(commPort))
		{
			return FALSE;
		}
		PurgeComm(commPort,  PURGE_TXCLEAR | PURGE_RXCLEAR);
	}
	Sleep(100);
	switch(dwBaudRate)
	{
		case 57600:  //14400 * 4 = 57600
			HCC_ERICSSON_SET_BAUD_RATE[EricssonBaudRatePos] = 3;
			break;
		case 115200: //28800 * 4 = 115200
			HCC_ERICSSON_SET_BAUD_RATE[EricssonBaudRatePos] = 2;
			break;
		case 230400: //57600 * 4 = 230400
			HCC_ERICSSON_SET_BAUD_RATE[EricssonBaudRatePos] = 1;
			break;
		case 460800: //115200 * 4 = 460800
			HCC_ERICSSON_SET_BAUD_RATE[EricssonBaudRatePos] = 0;
			break;
		default:
		{
#if 0
			TCHAR err[128];
			_stprintf(err, _T("Invalid Baud Rate : %d !"), dwBaudRate);
			MessageBox(NULL,err, 0, 0);
#else
			IFDBG(DebugOut (DEBUG_ERROR, L"Invalid Baud Rate : %d\n", dwBaudRate));

#endif
			return FALSE;
		}
	}
	dwWinSDKBaudRate = dwBaudRate > 115200 * 4 ? 115200 : dwBaudRate / 4;

	if(SendHCC(commPort, HCC_ERICSSON_SET_BAUD_RATE, sizeof(HCC_ERICSSON_SET_BAUD_RATE)))
	{
		Sleep(100);
		if(ReadHCE(commPort))
		{
			PurgeComm(commPort,  PURGE_TXCLEAR | PURGE_RXCLEAR);
			//GetCommState(commPort, &dcb);
			dcb.BaudRate = dwWinSDKBaudRate;
			if(SetCommState(commPort, &dcb))
			{
				//MessageBox(NULL, _T("HCC_ERICSSON_SET_BAUD_RATE OK!"), 0, 0);
				//Sleep(500);
				return TRUE;
			}
			else
				IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Failed SetCommState in UART HCI Interface. GetLastError = 0x%08x\n", GetLastError ()));
		}
		else
			IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:HCC_ERICSSON_SET_BAUD_RATE return event fail\n"));
			//MessageBox(NULL, _T("HCC_ERICSSON_SET_BAUD_RATE return event fail!"), 0, 0);
	}
	else
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Send HCC_ERICSSON_SET_BAUD_RATE fail\n"));
		//MessageBox(NULL, _T("Send HCC_ERICSSON_SET_BAUD_RATE fail!"), 0, 0);
	return FALSE;
}
#endif //_ERICSSON

int HCI_ReadHciParameters (HCI_PARAMETERS *pParms) {
	if (pParms->uiSize < sizeof (*pParms))
		return FALSE;

	memset (pParms, 0, sizeof(*pParms));

	pParms->uiSize             = sizeof(*pParms);
	pParms->fInterfaceVersion  = HCI_INTERFACE_VERSION_1_1;
	pParms->iMaxSizeRead       = PACKET_SIZE_R;
	pParms->iMaxSizeWrite      = PACKET_SIZE_W;
	pParms->iWriteBufferHeader = 4;
	pParms->iReadBufferHeader  = 4;
	pParms->fHardwareVersion   = HCI_HARDWARE_VERSION_V_1_0_B;
	pParms->uiWriteTimeout     = HCI_DEFAULT_WRITE_TIMEOUT;
	pParms->uiFlags            = HCI_FLAGS_NORESET | HCI_FLAGS_NOROLESWITCH;

#if defined (DEBUG) || defined (_DEBUG)
	pParms->iReadBufferHeader   = DEBUG_READ_BUFFER_HEADER;
	pParms->iReadBufferTrailer  = DEBUG_READ_BUFFER_TRAILER;
	pParms->iWriteBufferHeader  = DEBUG_WRITE_BUFFER_HEADER;
	pParms->iWriteBufferTrailer = DEBUG_WRITE_BUFFER_TRAILER;
#endif

	return TRUE;
}

int HCI_StartHardware (void) {
	IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:+HCI_StartHardware\n"));
	if (hFile != INVALID_HANDLE_VALUE) {
		IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:-HCI_StartHardware (already started)\n"));
		return TRUE;
	}

	if (! gCallback) {
		IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:-HCI_StartHardware (not registered)\n"));
		return FALSE;
	}

	return ERROR_SUCCESS == gCallback (DEVICE_UP, NULL);
}

int HCI_StopHardware (void) {
	IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:+HCI_StopHardware\n"));
	if (hFile == INVALID_HANDLE_VALUE) {
		IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:-HCI_StopHardware (already stopped)\n"));
		return TRUE;
	}

	if (! gCallback) {
		IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:-HCI_StopHardware (not registered)\n"));
		return FALSE;
	}

	return ERROR_SUCCESS == gCallback (DEVICE_DOWN, NULL);
}

int HCI_SetCallback (HCI_TransportCallback pfCallback) {
	gCallback = pfCallback;

	if (gCallback)
		DebugInit();
	else
		DebugDeInit();

	return ERROR_SUCCESS;
}

int HCI_OpenConnection (void) {
	IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:HCI_OpenConnection - Started\n"));

	if (hFile != INVALID_HANDLE_VALUE)
		return FALSE;

	WCHAR szComPortName[_MAX_PATH];
	DWORD dwBaud = 0;

#if 1
	HKEY hk;
	if (ERROR_SUCCESS == RegOpenKeyEx (HKEY_BASE, L"software\\microsoft\\bluetooth\\hci", 0, KEY_READ, &hk)) {
		DWORD dwType;
		DWORD dwSize = sizeof(szComPortName);
		if ((ERROR_SUCCESS == RegQueryValueEx (hk, L"Name", NULL, &dwType, (LPBYTE)szComPortName, &dwSize)) &&
			(dwType == REG_SZ) && (dwSize > 0) && (dwSize < _MAX_PATH))
			;
		else
		{
			wcscpy (szComPortName, DEFAULT_COM_NAME);
			IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:Failed to read COM port from registry, use default port %s", szComPortName));
		}

		dwSize = sizeof(dwBaud);
		if ((ERROR_SUCCESS == RegQueryValueEx (hk, L"baud", NULL, &dwType, (LPBYTE)&dwBaud, &dwSize)) &&
			(dwType == REG_DWORD) && (dwSize == sizeof(dwBaud)))
			;
		else
		{
			dwBaud = 115200;
			IFDBG(DebugOut (DEBUG_HCI_INIT, L"BthAmb:Failed to read baud rate from registry, use default baud rate %d", dwBaud));
		}

		RegCloseKey (hk);

		IFDBG(DebugOut (DEBUG_HCI_INIT, L"Opening port %s (rate %d) for I/O with unit\n", szComPortName, dwBaud));
	}
	
#endif
//	_tcscpy(szComPortName, _T("COM2:"));
//	dwBaud = 115200;
    hFile = CreateFile(szComPortName,
                GENERIC_READ | GENERIC_WRITE,
                0,    // comm devices must be opened w/exclusive-access
                NULL, // no security attrs
                OPEN_EXISTING, // comm devices must use OPEN_EXISTING
#if ! defined (UNDER_CE)
				FILE_FLAG_OVERLAPPED |
#endif
                FILE_ATTRIBUTE_NORMAL,    // overlapped I/O 
                NULL  // hTemplate must be NULL for comm devices  
				);

    if (hFile == INVALID_HANDLE_VALUE) {
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Failed CreateFile in UART HCI Interface. GetLastError = 0x%08x\n", GetLastError ()));
		CloseHandle (hFile);
		hFile = INVALID_HANDLE_VALUE;
		return FALSE;

    }

    if (! SetupComm (hFile, 20000, 20000)) {
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Failed SetupComm in UART HCI Interface. GetLastError = 0x%08x\n", GetLastError ()));
		CloseHandle (hFile);
		hFile = INVALID_HANDLE_VALUE;
		return FALSE;
    } 

    // purge any information in the buffer

    if ( ! PurgeComm (hFile, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR )) {
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Failed PurgeComm in UART HCI Interface. GetLastError = 0x%08x\n", GetLastError ()));
		CloseHandle (hFile);
		hFile = INVALID_HANDLE_VALUE;
		return FALSE;
    }

    COMMTIMEOUTS CommTimeOuts;
    CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
    CommTimeOuts.ReadTotalTimeoutConstant = 1000 ;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 0 ;
    CommTimeOuts.WriteTotalTimeoutConstant = 1000 ;

    if (! SetCommTimeouts (hFile, &CommTimeOuts)) {
		IFDBG(DebugOut (DEBUG_ERROR, L"BthAmb:Failed SetCommTimeouts in UART HCI Interface. GetLastError = 0x%08x\n", GetLastError ()));
		CloseHandle (hFile);
		hFile = INVALID_HANDLE_VALUE;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品一区| 国产精品美女www爽爽爽| 风流少妇一区二区| 亚洲一区二区五区| 久久综合九色综合久久久精品综合| 91视频91自| 国产一区91精品张津瑜| 午夜精品福利一区二区蜜股av| 久久久美女毛片| 91成人网在线| 成人精品国产一区二区4080| 日韩av电影免费观看高清完整版 | 丁香五精品蜜臀久久久久99网站 | 成人免费高清视频在线观看| 亚洲va国产va欧美va观看| 国产日韩欧美精品综合| 一本久久a久久精品亚洲| 国产91精品一区二区麻豆亚洲| 日本网站在线观看一区二区三区 | 久久不见久久见免费视频1| 樱桃国产成人精品视频| 中文在线一区二区| 2023国产精品| 欧美一级二级在线观看| 日本精品一级二级| 99精品视频一区二区| 国产成人丝袜美腿| 狠狠色丁香婷综合久久| 美洲天堂一区二卡三卡四卡视频| 亚洲韩国一区二区三区| 亚洲一区二区三区激情| 亚洲欧洲中文日韩久久av乱码| 国产亚洲成av人在线观看导航| 精品久久久久久最新网址| 91精品国产综合久久精品| 欧美日韩国产免费一区二区| 在线观看不卡一区| 欧美综合一区二区| 欧美在线观看一区二区| 日本精品免费观看高清观看| 色视频一区二区| 欧美亚洲一区三区| 欧美色图一区二区三区| 欧美午夜不卡在线观看免费| 欧美日韩亚洲综合一区二区三区| 欧美性猛交一区二区三区精品| 欧美中文字幕一区| 欧美高清www午色夜在线视频| 欧美日韩电影在线播放| 日韩欧美一区二区视频| 欧美videossexotv100| 久久久久久**毛片大全| 国产精品伦理在线| 亚洲男同1069视频| 婷婷久久综合九色国产成人| 奇米一区二区三区| 国产激情视频一区二区在线观看 | 日韩精品欧美成人高清一区二区| 日日夜夜免费精品视频| 美腿丝袜亚洲一区| 国产精品香蕉一区二区三区| 成人免费毛片aaaaa**| 99re在线视频这里只有精品| 欧美在线一区二区三区| 911精品国产一区二区在线| 精品久久久久久最新网址| 欧美国产一区二区在线观看| 亚洲另类在线制服丝袜| 日本欧美肥老太交大片| 国产电影一区二区三区| 色94色欧美sute亚洲线路二| 91精品欧美综合在线观看最新| 欧美精品一区二| 亚洲久草在线视频| 麻豆精品视频在线观看| 成人激情开心网| 在线成人av影院| 中文字幕国产一区| 日精品一区二区| 高清日韩电视剧大全免费| 欧美日韩一区二区三区在线| 久久综合久久综合亚洲| 亚洲综合久久久久| 国产精品羞羞答答xxdd| 欧美伊人久久久久久久久影院| 亚洲精品在线三区| 一区二区三区日韩| 国产美女一区二区| 欧美精品123区| 综合久久久久久久| 精品一区二区精品| 欧美亚洲综合另类| 国产精品视频九色porn| 日韩国产精品久久久| av在线不卡免费看| 日韩精品一区二区在线| 一区二区在线观看视频在线观看| 久久超级碰视频| 欧美日韩精品专区| 综合欧美亚洲日本| 国产成人欧美日韩在线电影| 777精品伊人久久久久大香线蕉| 国产精品全国免费观看高清| 麻豆久久一区二区| 欧美三级资源在线| 亚洲色图欧洲色图| 国产91精品免费| 久久先锋影音av鲁色资源网| 午夜天堂影视香蕉久久| 91在线免费视频观看| 久久精品一区二区三区不卡牛牛| 日韩精品1区2区3区| 91久久香蕉国产日韩欧美9色| 欧美国产日本韩| 经典三级在线一区| 欧美一二三区精品| 性做久久久久久免费观看| 91浏览器入口在线观看| 国产精品国产自产拍高清av | 丁香桃色午夜亚洲一区二区三区| 欧美一区二区观看视频| 一区二区三区在线视频播放| www.久久久久久久久| 国产欧美综合在线观看第十页| 蜜桃久久久久久久| 日韩一级完整毛片| 日本vs亚洲vs韩国一区三区二区 | 国产婷婷色一区二区三区四区| 麻豆精品一区二区三区| 日韩欧美视频一区| 麻豆久久一区二区| 日韩一区二区在线播放| 奇米精品一区二区三区在线观看| 欧美唯美清纯偷拍| 五月天亚洲婷婷| 欧美精品乱码久久久久久| 日韩中文字幕区一区有砖一区| 欧美日韩国产精品成人| 日韩中文字幕一区二区三区| 欧美军同video69gay| 舔着乳尖日韩一区| 欧美一级视频精品观看| 久久精品国产99久久6| 欧美va在线播放| 国产福利一区在线| 国产精品情趣视频| 日本高清不卡视频| 午夜精品久久久久久久久久| 91精品国产色综合久久ai换脸 | 亚洲成人精品影院| 91精品免费观看| 久久99九九99精品| 国产日韩欧美激情| 91小视频免费观看| 午夜一区二区三区视频| 日韩女优视频免费观看| 国产老肥熟一区二区三区| 中文字幕第一页久久| 日本精品一区二区三区高清 | 久久久不卡网国产精品二区| 成人毛片老司机大片| 亚洲一区电影777| 91精品国产综合久久精品性色| 国产一区二区三区免费看| 中文字幕va一区二区三区| 在线视频综合导航| 蜜桃在线一区二区三区| 国产女人18毛片水真多成人如厕 | 欧美在线色视频| 麻豆视频观看网址久久| 欧美国产在线观看| 欧美日韩一区三区| 国产精品66部| 一区二区欧美视频| 精品91自产拍在线观看一区| 97久久久精品综合88久久| 日本vs亚洲vs韩国一区三区二区| 国产午夜精品在线观看| 欧美性做爰猛烈叫床潮| 狠狠色狠狠色综合日日91app| 亚洲免费在线观看视频| 欧美成人r级一区二区三区| 不卡av电影在线播放| 日韩高清在线观看| 中文字幕亚洲成人| 日韩情涩欧美日韩视频| 91视频在线观看免费| 精品一区二区三区不卡| 亚洲一区二区高清| 亚洲国产成人在线| 成人精品视频一区| 日本欧美久久久久免费播放网| 中文字幕制服丝袜一区二区三区 | 中文字幕 久热精品 视频在线 | 国产东北露脸精品视频| 婷婷丁香激情综合| 《视频一区视频二区| 久久久久久毛片| 91精品免费在线观看| 91女神在线视频|