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

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

?? serialcsr.cpp

?? 關(guān)于S3C2442平臺(tái)藍(lán)牙模塊驅(qū)動(dòng)
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
//
// Copyright (c) Cambridge Silicon Radio.  All rights reserved.
//
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Module Name: SerialCSR.cpp 
//
//
// Abstract:  
//
// This file contains the SERIALCSR code.  This is a wrapper library
// intended to provide a shim layer above an OEM serial library for 
// updating the persistent store on CSR Bluecore based devices for 
// the WinCE Operating System.  Wrapped functions include all those
// defined in mdd.c from the Microsoft sample serial driver code.
//
// Wrapped Functions:
//
// EXTERNAL
//  COM_Init
//  COM_Open                          
//  COM_Close
//  COM_Deinit
//  COM_Read
//  COM_Write
//  COM_Seek
//  COM_PowerUp
//  COM_PowerDown
//  COM_IOControl
//
// INTERNAL
//  SerialEventHandler
//  SerialDispatchThread
//  ApplyDCB
//  SerialGetDroppedByteNumber
//  WaitCommEvent
//  EvaluateEventFlag
//  ProcessExiting
//
//
// Notes: 
//  1) COM_Init is modified to update the persistent store using uBCSP
//     via UART.
//  2) When COM_Powerup is detected a flag is set indicating a rewrite
//     should be attempted on next access.
//  3) This library provides pass through for all other standard serial
//     MDD functions.
//
/* Int'l Corp. 2005
$Modifier     	sign				 Description
==========================================================================================

*/

#include <windows.h>
#include <types.h>
#include "Pegdser.h"
#include "SerialCSR.h"
#include "ubcsp.h"
#include "PSConfig.h"
#include "S3c2440a_base_regs.h"
#include "S3c2440a_ioport.h"
#include <pm.h>
#include "serpriv.h"


//#define SC_DBG	TRUE
#define SC_DBG	1


#define DEFAULTBAUD  115200
#define PAGE_SIZE 0x1000
#define ALIGNMENT_MASK (PAGE_SIZE-1)

//jack debug
#define IOCTL_HAL_GET_BTPARAM CTL_CODE( FILE_DEVICE_HAL, 2075, METHOD_BUFFERED, FILE_ANY_ACCESS )
#define IOCTL_HAL_SET_BTPARAM CTL_CODE( FILE_DEVICE_HAL, 2076, METHOD_BUFFERED, FILE_ANY_ACCESS )
//jack debug


//bryant del
//wchar_t*  gchwLibName   = L"BTSerial.dll";
wchar_t*  gchwLibName   = L"serial_smdk2440.dll";
HINSTANCE ghLibInst     = NULL;
HANDLE    ghSerialHead  = NULL;
HMODULE   ghInstSerLib  = NULL;
BOOL      gbUpdatePS    = FALSE;
HANDLE  hBTTest = NULL; 
BOOL bTestMode = FALSE;
BOOL	  gbBTPower		= FALSE;
HANDLE    hBTinitEvent          = NULL;


static volatile  S3C2440A_IOPORT_REG *s2440IOP = NULL;

PSKEY_UPDATE    pSkey;
static DWORD PSKeyUpdate(PPSKEY_UPDATE pSkey);

BOOL BTEnable(BOOL bIsOn); 
PVOID VirtualAllocCopyPhysical(unsigned size, char *str, PVOID pPhysicalAddress);
void ShowIOPort(void);

// Function pointers
PFNCOM_Init                       gpfnCOM_Init                       = NULL;
PFNCOM_Open                       gpfnCOM_Open                       = NULL;
PFNCOM_Close                      gpfnCOM_Close                      = NULL;
PFNCOM_Deinit                     gpfnCOM_Deinit                     = NULL;
PFNCOM_Read                       gpfnCOM_Read                       = NULL;
PFNCOM_Write                      gpfnCOM_Write                      = NULL;
PFNCOM_Seek                       gpfnCOM_Seek                       = NULL;
PFNCOM_Power                      gpfnCOM_PowerUp                    = NULL;
PFNCOM_Power                      gpfnCOM_PowerDown                  = NULL;
PFNCOM_IOControl                  gpfnCOM_IOControl                  = NULL;
//PFNSerialEventHandler             gpfnSerialEventHandler             = NULL;
//PFNSerialDispatchThread           gpfnSerialDispatchThread           = NULL;
PFNSerialGetDroppedByteNumber     gpfnSerialGetDroppedByteNumber     = NULL;
//PFNWaitCommEvent                  gpfnWaitCommEvent                  = NULL;
//PFNEvaluateEventFlag              gpfnEvaluateEventFlag              = NULL;
//PFNProcessExiting                 gpfnProcessExiting                 = NULL;
//PFNApplyDCB                       gpfnApplyDCB                       = NULL;




////////////////////////////////////////////////////////////////////////
// DllMain
//
// Entry point
//

BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, 
					   LPVOID lpReserved)
{
    	switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		{
			DisableThreadLibraryCalls((HMODULE) hModule);
			ghLibInst = LoadLibrary(gchwLibName);
                	if(!ghLibInst)
                	{
                	 	RETAILMSG(TRUE,(TEXT("bryant: init load lib failed !!!!\r\n")));
				return FALSE;
                	}
			else	
				RETAILMSG(SC_DBG,(TEXT("bryant: bluetooth -----------\r\n")));
				RETAILMSG(SC_DBG,(TEXT("bryant: init load lib ok !!!!\r\n")));
			// Setup Function pointers
			if(!GetLibraryPointers())
			{
				RETAILMSG(TRUE,(TEXT("!!!! init get lib pointer failed !!!!\r\n")));
				return FALSE;
			}
			else
				RETAILMSG(SC_DBG,(TEXT("@@ init get lib ok !!!!\r\n")));
			
			
			RETAILMSG(SC_DBG,(TEXT("DLL_PROCESS_ATTACH finish\r\n")));
		}
		break;

		case DLL_THREAD_ATTACH:
		break;

		case DLL_THREAD_DETACH:
		break;

		case DLL_PROCESS_DETACH:
		{
			// Free
			RETAILMSG(TRUE,(TEXT("DLL_PROCESS_DETACH finish\r\n")));
			FreeLibrary(ghLibInst);
		}
		break;
    }
    return TRUE;
}

BOOL GetLibraryPointers(void)
{   
	
	RETAILMSG(SC_DBG,(TEXT("GetLibraryPointer:enter\r\n")));
		//Init
	gpfnCOM_Init = (PFNCOM_Init)GetProcAddress(ghLibInst, _T("COM_Init"));
	if(!gpfnCOM_Init)
		return FALSE;
		//Open
	gpfnCOM_Open = (PFNCOM_Open)GetProcAddress(ghLibInst, _T("COM_Open"));
	if(!gpfnCOM_Open)
		return FALSE;
		// Close
	gpfnCOM_Close = (PFNCOM_Close)GetProcAddress(ghLibInst, _T("COM_Close"));
	if(!gpfnCOM_Close)
		return FALSE;
		// Deinit
	gpfnCOM_Deinit = (PFNCOM_Deinit)GetProcAddress(ghLibInst, _T("COM_Deinit"));
	if(!gpfnCOM_Deinit)
		return FALSE;
		// Read
	gpfnCOM_Read = (PFNCOM_Read)GetProcAddress(ghLibInst, _T("COM_Read"));
	if(!gpfnCOM_Read)
		return FALSE;
		// Write
	gpfnCOM_Write = (PFNCOM_Write)GetProcAddress(ghLibInst, _T("COM_Write"));
	if(!gpfnCOM_Write)
		return FALSE;
		// PowerUp
	gpfnCOM_PowerUp = (PFNCOM_Power)GetProcAddress(ghLibInst, _T("COM_PowerUp"));
	if(!gpfnCOM_PowerUp)
		return FALSE;
		// PowerDown
	gpfnCOM_PowerDown = (PFNCOM_Power)GetProcAddress(ghLibInst, _T("COM_PowerDown"));
	if(!gpfnCOM_PowerDown)
		return FALSE;
		// IOControl
	gpfnCOM_IOControl = (PFNCOM_IOControl)GetProcAddress(ghLibInst, _T("COM_IOControl"));
	if(!gpfnCOM_IOControl)
		return FALSE;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////
// COM_Init Wrapper
//
// By design this function returns a pointer to the serial head, 
// which then is passed as a device handle into the entry points
// COM_Open and COM_Deinit.
//
// The CSR implementation of this function ensures the persistent
// store of the CSR chip is updated on first access to the device
//
BOOL
WINAPI
CSR_Deinit(void)
{
	BOOL bResult = NULL;

	if(ghLibInst)
	{
		if(gpfnCOM_Deinit)
			bResult = gpfnCOM_Deinit();
	}
	
	if (pSkey.PSKeyEvent && CloseHandle(pSkey.PSKeyEvent))
            pSkey.PSKeyEvent = NULL;
                    
        if (pSkey.PSKey && CloseHandle(pSkey.PSKey))
            pSkey.PSKey = NULL;

        
	return bResult;                   
	
}

/////////////////////////////////////////////////////////////////////
// COM_Open Wrapper
//
// The CSR implementation of this function ensures the persistent
// store of the CSR chip is updated on first access to the device
//
HANDLE
WINAPI
CSR_Open(HANDLE pContext, DWORD AccessCode, DWORD ShareMode)
{
	HANDLE hResult = NULL;
		

	if (ghLibInst)
	{
		
		if (gpfnCOM_Open)
		{
			RETAILMSG(SC_DBG,(TEXT("CSR_Open Start\r\n")));
			
			
			hResult = gpfnCOM_Open(pContext, AccessCode, ShareMode);
                        hBTTest = hResult ; ////0505 for BT test
                        
			// Update persistent store
			if(gbUpdatePS)
			{
			  
			  BTEnable(TRUE);
	
			  gbUpdatePS = FALSE;
			  UpdatePersistentStore(hResult);
			  
			}
		}
	}
	
	RETAILMSG(SC_DBG,(TEXT("CSR_Open Finish\r\n")));
	return hResult;
}

/////////////////////////////////////////////////////////////////////
// COM_Close Wrapper
//
// The CSR implementation of this function ensures the persistent
// store of the CSR chip is updated on first access to the device
//
BOOL
WINAPI
CSR_Close(DWORD pContext)
{
	BOOL bResult = NULL;
	
	if(ghLibInst)
	{
		if(gpfnCOM_Close)
		{
			RETAILMSG(SC_DBG,(TEXT("CSR_Close Start\r\n")));
			bResult = gpfnCOM_Close(pContext);
			if(!bTestMode) 
			{
				BTEnable(FALSE);
		        }
		        bTestMode = FALSE;
		}
		gbUpdatePS = TRUE;
	}
	RETAILMSG(SC_DBG,(TEXT("CSR_Close Finish\r\n")));
		
	return bResult;
}

/////////////////////////////////////////////////////////////////////
// COM_Deinit Wrapper
//
// The CSR implementation of this function is a simple passthrough
//
HANDLE
WINAPI
CSR_Init(ULONG Identifier)
{
       
	HANDLE hPort = NULL;
	DWORD dwErr = ERROR_SUCCESS;
	ULONG lpBytesReturned;

	RETAILMSG(SC_DBG,(TEXT("CSR_Init:enter---------------------------\r\n")));
	RETAILMSG(1,(TEXT("CSR_Init:enter\r\n")));
	s2440IOP = ( S3C2440A_IOPORT_REG *) VirtualAllocCopyPhysical(sizeof(S3C2440A_IOPORT_REG),(char *)TEXT("SerailCSR: s2440IOP"), (PVOID)(S3C2440A_BASE_REG_PA_IOPORT));	  
	
	if (s2440IOP==NULL)
//bryant add
	{                 
           RETAILMSG(TRUE,(TEXT("@@ CSR init VirtualAllocCopy fail !!!!\r\n")));		
             goto _error_exit;
	        }
//bryant del	BTEnable(FALSE);
         BTEnable(TRUE);
	if(ghLibInst)
	{       //ghlibinst,serial lib
		if(gpfnCOM_Init)
		{
			RETAILMSG(SC_DBG,(TEXT("CSR_Init Start\r\n")));
			
			ghSerialHead = gpfnCOM_Init(Identifier);
			if (!ghSerialHead)
			{
				RETAILMSG(TRUE,(TEXT("!!!! COM init failed head=%x id=%s!!!!\r\n"),ghSerialHead,Identifier));
				goto _error_exit;
			}
			
			pSkey.PSKeyEvent = CreateEvent(NULL, FALSE, FALSE, NULL); 
			
			if ((pSkey.PSKey = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) PSKeyUpdate, (LPVOID)&pSkey, 0, NULL)) == NULL) 
			{
                        	dwErr = GetLastError();
                        	RETAILMSG(TRUE,(TEXT("CreateThread ERROR: Unable to create PSKey: %u\r\n"), dwErr));
                        	goto _error_exit;
                        }
                        
	                if ( !CeSetThreadPriority(pSkey.PSKey, 101)) {	                
	                    dwErr = GetLastError();
	                    RETAILMSG(TRUE, (TEXT("CeSetThreadPriority ERROR:%d \r\n"), dwErr));
	                    goto _error_exit;
	                }                        

		}
	}    
	
	RETAILMSG(SC_DBG,(TEXT("CSR_Init Finish\r\n")));
	
	_error_exit:
	return ghSerialHead;
}

/////////////////////////////////////////////////////////////////////
// COM_Read Wrapper
//
// The CSR implementation of this function ensures the persistent
// store of the CSR chip is updated on first access to the device
//
ULONG
WINAPI
CSR_Read(HANDLE pContext, PUCHAR pTargetBuffer, 
	 ULONG BufferLength, PULONG pBytesRead)
{
	ULONG lResult = NULL;
        
        RETAILMSG(SC_DBG,(TEXT("CSR_Read:Enter\r\n")));
	if(ghLibInst)
	{
		if(gpfnCOM_Read)
		{	
			lResult = gpfnCOM_Read(pContext, pTargetBuffer, BufferLength, pBytesRead);
			RETAILMSG(SC_DBG,(TEXT("CSR_Read 2: len=%d,readBytes=%d,data=%x\r\n"),BufferLength,*pBytesRead,pTargetBuffer[0]));
		}
	}
	RETAILMSG(SC_DBG,(TEXT("CSR_Read:Finish : lResult=%x\r\n"),lResult));
	return lResult;
}

/////////////////////////////////////////////////////////////////////
// COM_Write Wrapper
//
// The CSR implementation of this function is a simple passthrough
//
DWORD
WINAPI
CSR_Write(HANDLE pContext, PUCHAR pSourceBytes, ULONG NumberOfBytes)
{
	ULONG lResult = NULL;
	
   	RETAILMSG(SC_DBG,(TEXT("CSR_Write:Enter\r\n")));
	if(ghLibInst)
	{
		if(gpfnCOM_Write)
		{
			RETAILMSG(SC_DBG,(TEXT("CSR_Write:gpfnCOM_Write==TRUE\r\n")));
			
			lResult = gpfnCOM_Write(pContext, pSourceBytes, NumberOfBytes);
		}
	}
	RETAILMSG(SC_DBG,(TEXT("CSR_Write:Finish : lResult=%x\r\n"),lResult));
	return lResult;
}

/////////////////////////////////////////////////////////////////////
// COM_Seek Wrapper
//
// The CSR implementation of this function is a simple passthrough
//
ULONG
WINAPI
CSR_Seek(HANDLE pHead, LONG Position, DWORD Type)
{
	ULONG lResult = NULL;

	if(ghLibInst)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合色综合久久| 亚洲一区二区免费视频| 欧美日韩久久一区| 懂色av一区二区三区蜜臀| 亚洲国产综合在线| 国产精品国产三级国产专播品爱网| 欧美亚洲综合另类| 波多野结衣精品在线| 久久精品理论片| 亚洲国产欧美在线人成| 欧美韩日一区二区三区| 欧美成人精品3d动漫h| 欧美伊人久久久久久久久影院| 国产黄色91视频| 午夜精品久久久久久久久久| 亚洲免费观看高清完整版在线观看 | 亚洲美女视频在线观看| 26uuu国产日韩综合| 欧美一区三区四区| 欧美在线观看一二区| 波波电影院一区二区三区| 激情六月婷婷综合| 美女视频黄 久久| 亚洲高清在线视频| 亚洲黄色小视频| 最新欧美精品一区二区三区| 国产亚洲欧洲一区高清在线观看| 欧美成人精品1314www| 3atv在线一区二区三区| 欧美日韩不卡一区二区| 欧美三级资源在线| 欧美性做爰猛烈叫床潮| 91精品福利在线| 色偷偷一区二区三区| 91免费精品国自产拍在线不卡| 粉嫩13p一区二区三区| 国产超碰在线一区| 国产a视频精品免费观看| 国产一区二区三区免费在线观看| 久久99国产精品免费| 蜜桃在线一区二区三区| 蜜桃视频在线观看一区| 老司机精品视频导航| 麻豆久久一区二区| 韩国v欧美v亚洲v日本v| 国精品**一区二区三区在线蜜桃| 国产真实乱对白精彩久久| 经典一区二区三区| 国产乱理伦片在线观看夜一区| 国产精品自拍在线| 国产成人免费视频网站| 丁香亚洲综合激情啪啪综合| 成人黄动漫网站免费app| 91网站在线观看视频| 欧美性受xxxx黑人xyx| 777午夜精品免费视频| 日韩欧美亚洲另类制服综合在线| 亚洲精品在线电影| 国产精品色噜噜| 亚洲欧美一区二区在线观看| 亚洲午夜视频在线观看| 日产精品久久久久久久性色| 国内成人免费视频| 99r精品视频| 欧美美女bb生活片| 久久亚洲欧美国产精品乐播| 国产精品乱码妇女bbbb| 亚洲制服欧美中文字幕中文字幕| 亚洲va欧美va人人爽| 久久国产剧场电影| 97久久人人超碰| 欧美精品国产精品| 国产三级精品三级在线专区| 亚洲欧美一区二区三区国产精品| 天天影视涩香欲综合网| 国产麻豆精品95视频| 91丝袜美女网| 日韩免费看网站| 亚洲欧美国产三级| 美女一区二区在线观看| 99久久亚洲一区二区三区青草| 69精品人人人人| 国产精品久久夜| 日产国产欧美视频一区精品| 成人99免费视频| 51久久夜色精品国产麻豆| 中国av一区二区三区| 天堂久久一区二区三区| 成人动漫视频在线| 日韩一级片网址| 亚洲色图制服诱惑| 国产一区二区三区黄视频 | 欧美色涩在线第一页| 久久久久久久久久久久电影| 亚洲制服丝袜一区| 高清国产午夜精品久久久久久| 欧美精品乱人伦久久久久久| 国产精品欧美极品| 久久av资源网| 欧美日韩在线观看一区二区 | 丝袜亚洲另类丝袜在线| 成人99免费视频| 欧美mv和日韩mv的网站| 亚洲成a人片在线不卡一二三区| 国产电影一区二区三区| 日韩一本二本av| 亚洲国产精品久久久久秋霞影院| 成人h版在线观看| 精品国产乱码久久久久久牛牛 | 欧美一区二区三区免费在线看| 日韩理论在线观看| 国产成人在线视频网址| 日韩一级免费一区| 日韩中文字幕不卡| 欧美日韩成人在线| 亚洲国产日韩a在线播放性色| 99久精品国产| 国产精品久久久久久久岛一牛影视 | 国产激情一区二区三区四区 | 午夜精品一区二区三区三上悠亚| bt欧美亚洲午夜电影天堂| 久久精品亚洲麻豆av一区二区| 看电影不卡的网站| 欧美精品vⅰdeose4hd| 亚洲国产美女搞黄色| 91精品办公室少妇高潮对白| 中文字幕一区免费在线观看| 懂色一区二区三区免费观看| 国产欧美一区视频| 国产成人啪免费观看软件| 国产人妖乱国产精品人妖| 国产伦精品一区二区三区免费| 精品成人一区二区三区四区| 精品一区二区免费在线观看| 精品美女一区二区三区| 狠狠网亚洲精品| 久久久99精品久久| 成人免费毛片app| 中文字幕中文字幕一区二区| 99久久精品免费观看| 中文字幕一区二区三区四区不卡| www.亚洲激情.com| 亚洲女同ⅹxx女同tv| 欧美最猛黑人xxxxx猛交| 亚洲一二三区在线观看| 欧美喷潮久久久xxxxx| 日本视频在线一区| 久久综合久久综合久久综合| 国产久卡久卡久卡久卡视频精品| 久久只精品国产| 成人动漫中文字幕| 亚洲一二三区视频在线观看| 337p亚洲精品色噜噜狠狠| 另类小说图片综合网| 久久久一区二区| 成a人片国产精品| 亚洲与欧洲av电影| 欧美一区日韩一区| 国产精品自在欧美一区| 成人免费在线观看入口| 欧美日韩在线播放一区| 国产精品理伦片| 欧美日韩和欧美的一区二区| 麻豆国产精品视频| 国产精品剧情在线亚洲| 欧美日韩精品系列| 激情五月激情综合网| 最新热久久免费视频| 欧美日韩一本到| 国产乱码精品一品二品| 亚洲精品视频免费观看| 日韩欧美高清dvd碟片| 成人精品免费视频| 亚洲成av人在线观看| 久久久欧美精品sm网站| 色丁香久综合在线久综合在线观看| 日韩黄色免费网站| 中文字幕 久热精品 视频在线 | 午夜精品一区二区三区电影天堂| 精品盗摄一区二区三区| 色综合久久久久综合| 蜜桃一区二区三区在线| 亚洲免费在线观看| 精品国精品国产| 欧美在线一区二区| 国产高清久久久| 日产精品久久久久久久性色| 国产精品不卡在线| 精品日韩99亚洲| 欧美综合亚洲图片综合区| 国产毛片一区二区| 日一区二区三区| 亚洲男女一区二区三区| 久久婷婷国产综合精品青草| 欧美日韩一卡二卡三卡| 成人国产视频在线观看| 国产尤物一区二区在线| 天堂久久一区二区三区| 亚洲最新在线观看| 国产精品久久久久aaaa樱花|