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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? psconfig.cpp

?? 關于S3C2442平臺藍牙模塊驅動
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
// 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: PSConfig.cpp
//
//
// Abstract: This module is a lightweight WinCE port of PS update code 
//

/* Int'l Corp. 2005
$Modifier     	sign				 Description
==========================================================================================

*/

#include <windows.h>
#include <types.h>
#include <stdio.h>
#include <stdlib.h>
#include "ubcsp.h"
#include "PSConfig.h"
#include "SerialCSR.h"
#include "PSKey.h"


#define  LINKTIMEOUT   4000 
#define BT_DBGMSG          NKDbgPrintfW 

#define PS_DBG	FALSE

int ReadPSKey(DWORD Count);

// Declarations
//char*                        gchFileName         = "\\Windows\\PSConfig.txt";    // Persistent store keys
int                          giPDUCount          = 0;                 // Count of pdu entries
int                          giPDUIndex          = 0;                 // Index of pdu entries
BCCMDPDU                     *gPDU;                                   // Array of pdu entries to update persistent store with
int                          giResetSent         = 0;
HANDLE                       ghPort              = NULL;
static struct uBCSPQueue     uBCSP_TXQueue;
static struct uBCSPQueue     uBCSP_RXQueue;
uint16 stores_; 
int			     giStartTime         = 0;
bool                         gbLinkTimeOut       = FALSE;
bool                         gbLinked            = FALSE;
extern BOOL	  gbBTPower;


//evan_note
typedef struct 
{	
	uint16 pskey;
	//uint16 data[8];		//RAD_R03_060213a
	uint16 data[100];		//RAD_R03_060213a
	uint16 len;		
}PSDATA;

static PSDATA psdata[] = 
{
	{PSKEY_BADADDR,		{0x0010, 0x05fd, 0x006e, 0x0006} , 	4},
	{PSKEY_ANA_FREQ,	{0x6590},                  		1},
	{PSKEY_UART_BAUDRATE,	{0x01d8},                  		1},
	{PSKEY_PCM_CONFIG32,	{0x0080, 0x0000},		   	2},
	{PSKEY_ANA_FTRIM,	{0x0000},				1},
	{PSKEY_LC_MAX_TX_POWER,	{0x0004},				1},
	{PSKEY_TX_PRE_LVL,	{0x000e},				1},
	{PSKEY_UNKNOWN,		{0x0008},				1},
	{PSKEY_LOOP_FILTER_TRIM,{0x06bb},				1},
	{PSKEY_TX_GAIN_RAMP,	{0x30a0},				1},
	{PSKEY_RF_RESONANCE_TRIM,{0x130f},				1}
};

// Monitor states
extern struct ubcsp_configuration ubcsp_config;            //  NB uBCSP decl changed from static

//HANDLE com_handle;

//Jonathan_test start
// HCI Command Queues
struct HCIQueue
{
	uint8 NoOfOpcodes;
	uint8 commandnumber;
	uint8 HCIOpcode[2];
	uint8 NoOfRetries;
};

static struct HCIQueue HCI_TXQueue;
static struct HCIQueue HCI_RXQueue;

static uint8 Enable_Device_Under_Test_Mode[] =
{ 
  0x03, 0x18, 0x00
};

static uint8 HCICommand_Write_Scan_Enable[] =
{
  0x1A, 0x0C, 0x01, 0x03
};

static uint8 Set_Event_Filter[] =
{
  0x05, 0x0C, 0x03, 0x02, 0x00, 0x02
}; 

//Jonathan_test end

/////////////////////////////////////////////////////////////////////////
BOOL PSConfig(HANDLE hPort)
{

	int           iDelay;
	BOOL          bLastSentPacket;
	unsigned char chActivity;
	unsigned char chSendBuffer[512],	chReceiveBuffer[512];
	struct        ubcsp_packet  SendPacket, ReceivePacket;
	
	RETAILMSG(PS_DBG,(TEXT("PSConfig start\r\n")));
        
	// Construct pdus
	ghPort = hPort;

	giResetSent = 0;  
	chActivity = 0;
	giPDUIndex=0;
	gbLinked=FALSE;
	ubcsp_initialize ();
	
	
/*//evan_note		
	FILE *stream;
	stream = fopen(gchFileName, "r"); //Read PSConfig.psr
	if(stream)
	{
		// Count entries
		giPDUCount     = 0;
		giPDUCount     = ReadPSRFile(stream, false);    // Count only
		if(giPDUCount  == 0)
		{
		BT_DBGMSG(TEXT("!!!! read file fail !!!!\r\n"));	
		return FALSE;                                   // No data
		}
		else
		//BT_DBGMSG(TEXT("!!!! read file ok !!!!\r\n"));		
		gPDU = new BCCMDPDU[giPDUCount + 1];            // Last pdu is warm reset
		fseek(stream, 0, SEEK_SET);                     // Seek start of stream
		giPDUCount = 0;                                 // Reset to zero and load pdu array
		ReadPSRFile(stream, true);                      // Adds .psr file pdu's
		giPDUCount++;                                   // Extra reset pdu
	        ConfigResetPDU();                               // Construct Reset PDU
                
		// Close file
		fclose(stream);
	}else
		{
		BT_DBGMSG(TEXT("!!!! load file fail !!!!\r\n"));	
		RETAILMSG(1,(TEXT("PSConfig read file fail !!!!!!\r\n")));
		return FALSE;                                   // File access problem
	}
*///evan_note	
        //RETAILMSG(1,(TEXT("PSConfig start1\r\n")));
	/*
	 // Initialise com port
        if(!Initialise(chComPort))                              // Setup port for communication
        return FALSE;
	*/
	
	giPDUCount = 0;
	giPDUCount    = (sizeof(psdata) / sizeof(PSDATA));
	
	
	if(giPDUCount  == 0)
        return FALSE;                         // No data
       
        gPDU = new BCCMDPDU[giPDUCount + 1];  // Last pdu is warm reset
        
        giPDUCount = 0;                       // Reset to zero and load pdu array
        ReadPSKey(sizeof(psdata) / sizeof(PSDATA));
        giPDUCount++;                         // Extra reset pdu
        ConfigResetPDU();   
	
	
	// Setup packets payload
	SendPacket.payload          = chSendBuffer;
	ReceivePacket.payload       = chReceiveBuffer;
	ReceivePacket.length        = 512;
       
	// Ask ubcsp to receive a packet
	ubcsp_receive_packet (&ReceivePacket);
	uBCSP_TXQueue.CommandNumber = RECEIVED_STATE;
	uBCSP_TXQueue.NoOfOpcodes   = 0;
	uBCSP_TXQueue.NoOfRetries   = 0;

	// Start Link establishment timer
        giStartTime  = GetTickCount();
       
	// Reset packet counter
	bLastSentPacket = FALSE;
	
        	
        // Enter loop to 'listen' to uBCSP commands
	while(gbBTPower)
	{
		switch(uBCSP_TXQueue.CommandNumber)
		{
			case POLL_STATE:
			{
				// Poll uBCSP for activity
				iDelay = ubcsp_poll (&chActivity);
				uBCSP_TXQueue.CommandNumber = RECEIVED_STATE;
				RETAILMSG(PS_DBG,(TEXT("POLL_STATE\r\n")));
			
				// Link Init check
				if((GetTickCount() - giStartTime > LINKTIMEOUT) && !gbLinked)
					{
						RETAILMSG(PS_DBG,(TEXT("!!!! Link time out  !!!!\r\n")));	
						uBCSP_TXQueue.CommandNumber = EXIT_STATE;   
					}

				if(ubcsp_config.link_establishment_state > 0)
					gbLinked = TRUE;
			}
			break;

			case RECEIVED_STATE:
			{
				RETAILMSG(PS_DBG,(TEXT("RECEIVED_STATE ac=%x\r\n"),chActivity));
			
				uBCSP_TXQueue.CommandNumber = PEER_RESET_STATE;
	                        		
				if(chActivity & UBCSP_PACKET_RECEIVED)
					GetReceiveState(&ReceivePacket, chReceiveBuffer);

				if(chActivity & UBCSP_PACKET_SENT)
				{
					// Acknowledge sent package
					if(!bLastSentPacket)
					{
						// Link is established
						RETAILMSG(PS_DBG,(TEXT("Link is now Established\r\n")));
						uBCSP_TXQueue.CommandNumber = SENT_STATE;
					}	
					bLastSentPacket = TRUE;
				}
			}
			break;

			case SENT_STATE:
			{
				// Returns the appropriate next state
				RETAILMSG(PS_DBG,(TEXT("SENT_STATE\r\n")));
			
				GetSentState(&SendPacket);
			}
			break;

			case PEER_RESET_STATE:
			{
                                 RETAILMSG(PS_DBG,(TEXT("PSConfig peer reset state\r\n")));
                       
				   //Jonathan1223a 
				   if((chActivity & UBCSP_PEER_RESET) && giResetSent > 0)				                                 
				   {
		                        // This function is wait uBCSP Peer Reset Activity 
		                        // and Send PSKey PDU finish command, Then will leave 
		                        // the CSR PSKey Update Function.--Jonathan1223a
		                        
		                        // Peer reset detected
				   	RETAILMSG(PS_DBG,(TEXT("uBCSP Peer Reset Received\r\n")));
				   	uBCSP_TXQueue.CommandNumber = EXIT_STATE;
				   	break;
				   }
				   
				   uBCSP_TXQueue.CommandNumber = SLEEP_STATE;
				   RETAILMSG(PS_DBG,(TEXT("PEER_RESET_STATE : SLEEP_STATE\r\n"))); 
			
			}
			break;

			case SLEEP_STATE:
			{
				RETAILMSG(PS_DBG,(TEXT("PSConfig sleep\r\n")));//jack debug
			
				//BT_DBGMSG(TEXT("CSR sleep \r\n"));
				if(iDelay)
				{
					// If we need to delay, sleep for minimum period
					Sleep(1);
				}
				uBCSP_TXQueue.CommandNumber = POLL_STATE;
			}
			break;

			case EXIT_STATE:
			{
				// Exit module
				
				//BT_DBGMSG(TEXT("@exit\r\n"));
				ExitMod();
				return 0;
			}
			break;
		}
	}
	RETAILMSG(PS_DBG,(TEXT("PSConfig end\r\n")));
	return 0;
}

/*//evan_note
int ReadPSRFile(FILE* ist, bool bBuild)
{
	char linebuf[LineDatabufSize];
	uint16 data[LineDatabufSize];
	uint16 *pdata;
	char *p, *end;
	int key;
	bool query_mode = false;

	while (fgets(linebuf, LineDatabufSize, ist))
	{
		// Does it start with an &?
		p = linebuf;
		linebuf[LineDatabufSize - 1] = '\0';
		end = &linebuf[strlen(linebuf)];
		while ((p < end) && isspace(*p))
			p++;
		if (p == end)
			continue;
		if (*p == '?')
			query_mode = true;
		else if (*p != '&')
			continue; // Not a valid line.
		p++;
		
		// Are there digits next?
		key = 0;
		while ((p < end) && isxdigit(*p))
		{
			key = (key * 16) + Hex2Int(*p);
			p++;
		}
		if (key == 0)
			continue;
		while ((p < end) && isspace(*p))
			p++;
		if (p == end)		
		{   // No operation?  
			continue;  // Next line please.
		}

		// Read the operation
		if (*p != '=')
			continue;  // Next line please.

		if (p < end)
			p++;
    
		// Key counter
		giPDUCount++;

		if(bBuild)   //  If building pdu array read data and set key
		{
			// Read the data
			pdata = data;
			for (;;)
			{
			  while ((p < end) && isspace(*p))
				  p++;
			  if (p == end)
				  break;
			  if (*p == '\"')
			  {
				  p++;
				  while (p < end)
				  {	
					  *pdata++ = *p++;
				  }
				  break;
			  }
			  else
			  {
				  if (p >= end || (!isxdigit(*p)))
					  break;
				  *pdata = 0;
				  while ((p < end) && isxdigit(*p))
				  {
					  *pdata = (*pdata * 16) + Hex2Int(*p);
					  p++;
				  }	
				  pdata++;
			  }
			}

			// Create pdu
			ConfigPSRPDU(key, data, pdata-data);
			//BT_DBGMSG(TEXT("Read file key=%x\r\n"),key);
		}
	}
	return giPDUCount;
}
*///evan_note

int ReadPSKey(DWORD Count)
//int ReadPSKey(bool bBuild)
{
   PSDATA *pskeydata;
   DWORD i;
   //RETAILMSG(PS_DBG,(TEXT("ReadPSKey=%d\r\n"),Count));
   pskeydata = psdata;
   
   for(i =0 ; i < Count; i++)
   {
     giPDUCount++;
     ConfigPSRPDU(pskeydata->pskey, pskeydata->data, pskeydata->len);
     pskeydata++;
   }
   
   return giPDUCount;	
}




// BCCMD Protocol : "Message Structure"
//         ----------------------------------------------------------------------------------
//         | Type | Pdulen | seqno | varid | status |           Pay .... load               |
//         ----------------------------------------------------------------------------------
// uint16s |   1  |    2   |   3   |   4   |   5    |    6    |    7    |    8    |    9    | 
//   bytes |             1    .....   10            | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |  
//         |<--------------- Header --------------->|<------------- payload --------------->|
//         |<---------------------------------- Message ----------------------------------->|
           
void ConfigPSRPDU(const pskey key, const uint16 *data, uint16 len )  
{
    // Construct data unit
    //RETAILMSG(PS_DBG,(TEXT("ConfigPSRPDU+++\n")));
    BCCMDPDU *p    = (BCCMDPDU *)malloc(BCCMDPDU_MAXBUFSIZ_PC);
    memset(p, 0, BCCMDPDU_MAXBUFSIZ_PC);
    p->type        = BCCMDPDU_SETREQ;
    if (len > MAX_PS_VALUE_LEN_XAP)
		len = (uint16)MAX_PS_VALUE_LEN_XAP;
    p->pdulen      = BCCMDPDUMIN + len;    // XAP_PDU_LEN(len);
    p->seqno       = giPDUCount;
    p->varid       = BCCMDVARID_PS;        // Persistent store
    p->status      = BCCMDPDU_STAT_OK;
    p->d.ps.id     = key;
    p->d.ps.len    = len;
    p->d.ps.stores = stores_;

    // Assign pdu to global array
    gPDU[giPDUCount-1] = *p;                                    // *** Confirm doing this doesn't clobber anything
    memcpy(gPDU[giPDUCount-1].d.ps.psmem, data, PC_SIZE(len));  // *** ie.  pointer to something already malloc'd ?
    free(p );
    //RETAILMSG(PS_DBG,(TEXT("ConfigPSRPDU---\n")));
}

void ConfigResetPDU()
{
	// Write reset pdu
	//RETAILMSG(1,(TEXT("ConfigResetPDU+++\n")));
	BCCMDPDU *p          = (BCCMDPDU *)malloc(BCCMDPDU_MAXBUFSIZ_PC);
	memset(p, 0, BCCMDPDU_MAXBUFSIZ_PC);
	p->type              = BCCMDPDU_SETREQ;
	p->pdulen            = BCCMDPDUMIN + 1;
	p->varid             = BCCMDVARID_WARM_RESET;
	p->status            = BCCMDPDU_STAT_OK;
	gPDU[giPDUCount-1]   = *p;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av一区二| 宅男在线国产精品| 欧美高清视频www夜色资源网| 欧美一级片在线看| 亚洲免费av高清| 国产91丝袜在线18| 欧美高清视频一二三区| 一区视频在线播放| 国产酒店精品激情| 欧美二区在线观看| 亚洲综合一区二区精品导航| 国产一区二区三区四区五区入口 | 色噜噜狠狠色综合欧洲selulu| 欧美一区三区四区| 夜夜夜精品看看| 不卡在线观看av| 国产欧美综合在线观看第十页| 奇米在线7777在线精品| 欧美丝袜丝交足nylons| 亚洲三级免费观看| 99精品黄色片免费大全| 国产欧美一区二区精品婷婷| 麻豆成人91精品二区三区| 欧美三片在线视频观看| 亚洲激情五月婷婷| 91麻豆精品在线观看| 中文字幕国产一区| 成人美女在线观看| 中文字幕+乱码+中文字幕一区| 国产一区二区三区美女| 久久影视一区二区| 国产乱人伦精品一区二区在线观看| 日韩一级片网站| 蜜桃久久av一区| 精品国产乱码久久久久久图片 | 国产精品国产馆在线真实露脸 | 精品日韩在线一区| 精品一区二区三区影院在线午夜| 91麻豆精品国产91久久久| 日韩在线卡一卡二| 欧美一区二区免费观在线| 免费视频最近日韩| 久久综合久久久久88| 国产一区二区三区久久悠悠色av| 久久久久久久久免费| 岛国精品一区二区| 综合久久综合久久| 欧美日韩免费在线视频| 日本午夜精品视频在线观看| 欧美xxxxxxxxx| 国产成人精品免费| 亚洲精品五月天| 91精品国产色综合久久久蜜香臀| 日本视频一区二区三区| 久久影院视频免费| 一本色道久久综合亚洲aⅴ蜜桃 | 在线精品国精品国产尤物884a| 亚洲电影一区二区三区| 日韩一区二区免费电影| 国产电影一区在线| 亚洲最大成人网4388xx| 日韩视频免费观看高清完整版| 激情av综合网| 亚洲精品乱码久久久久久久久| 欧美肥妇毛茸茸| 成人黄色在线看| 视频一区二区三区中文字幕| 久久综合久久综合亚洲| 色综合久久天天| 麻豆成人91精品二区三区| 国产精品久久三区| 91精品国产手机| 成人av综合在线| 另类综合日韩欧美亚洲| 国产精品国产a| 在线播放欧美女士性生活| 国产成人在线影院| 亚洲国产成人av网| 中文字幕av免费专区久久| 7777精品伊人久久久大香线蕉的 | 欧美一级夜夜爽| 波多野洁衣一区| 久久电影国产免费久久电影| 最新国产精品久久精品| 日韩女同互慰一区二区| 色综合久久久久综合99| 国产在线乱码一区二区三区| 亚洲一区在线观看视频| 中文av字幕一区| 欧美成人一区二区三区片免费| 97久久精品人人爽人人爽蜜臀| 久久91精品国产91久久小草| 亚洲一区二区三区免费视频| 中文av一区二区| 久久综合久久99| 日韩女优av电影在线观看| 欧美亚洲国产一区在线观看网站| 福利电影一区二区三区| 九九**精品视频免费播放| 亚洲成人av电影在线| 亚洲黄色录像片| 1024成人网| 国产精品成人一区二区艾草| 久久伊人中文字幕| 亚洲精品在线电影| 日韩欧美国产电影| 欧美一区二区三区精品| 欧美视频在线一区二区三区| 91香蕉视频污| 97se亚洲国产综合自在线不卡| 国产福利91精品一区二区三区| 久久精品二区亚洲w码| 免费成人小视频| 久久精品99国产精品| 日韩av在线播放中文字幕| 日韩精品电影在线观看| 天堂va蜜桃一区二区三区| 亚洲va欧美va天堂v国产综合| 一区二区欧美视频| 精品一区二区久久久| 日韩精品电影在线| 日本美女视频一区二区| 久久精品国产精品青草| 国产中文字幕精品| 丁香啪啪综合成人亚洲小说| 处破女av一区二区| 91原创在线视频| 欧美在线|欧美| 538在线一区二区精品国产| 欧美疯狂做受xxxx富婆| 精品国产第一区二区三区观看体验 | 男人的j进女人的j一区| 免费成人你懂的| 国产高清成人在线| 91麻豆免费看片| 欧美日产在线观看| 久久网这里都是精品| 国产精品久久久久一区二区三区 | 午夜精品久久久久久久99水蜜桃| 亚洲香蕉伊在人在线观| 卡一卡二国产精品| 国产一区福利在线| 99久久精品国产一区| 欧美私模裸体表演在线观看| 日韩西西人体444www| 欧美国产日韩一二三区| 亚洲自拍另类综合| 免费观看久久久4p| jvid福利写真一区二区三区| 欧美三日本三级三级在线播放| 在线不卡a资源高清| 日本一区二区免费在线| 亚洲电影中文字幕在线观看| 精品一区二区国语对白| 色综合网色综合| 久久久久久9999| 亚洲色图制服诱惑| 美女视频黄久久| av激情成人网| 精品久久久久久久久久久久久久久| 国产精品福利电影一区二区三区四区| 亚洲国产日韩综合久久精品| 国产一区二区三区四| 欧美吻胸吃奶大尺度电影 | 欧美国产成人在线| 亚洲成a人片综合在线| 懂色中文一区二区在线播放| 欧美肥妇bbw| 一个色在线综合| 国产传媒日韩欧美成人| 欧美一级午夜免费电影| 一区二区三区在线免费播放| 国产成人综合网| 日韩欧美在线影院| 亚洲成a人在线观看| av不卡免费在线观看| 久久久久亚洲蜜桃| 日本不卡123| 欧美视频一区二区在线观看| 亚洲欧美综合色| 国产麻豆成人精品| 欧美xxxx在线观看| 秋霞午夜鲁丝一区二区老狼| 欧美丝袜丝nylons| 亚洲美女屁股眼交| 99视频在线观看一区三区| 欧美韩日一区二区三区四区| 久久精工是国产品牌吗| 日韩一区二区三区在线观看| 亚洲在线观看免费| 色综合久久久久久久| 亚洲三级免费观看| 一本久道久久综合中文字幕| 中文在线资源观看网站视频免费不卡| 黄色小说综合网站| 久久精品夜色噜噜亚洲aⅴ| 久久99九九99精品| 久久亚洲一区二区三区明星换脸| 另类专区欧美蜜桃臀第一页| 日韩欧美在线观看一区二区三区|