⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcilinkcontrolcmdproc.cpp

📁 蓝牙协议HCI层指令发送,主要用于测试HCI以下的代码及RF部分测试.
💻 CPP
字号:
//--------------------------------------------------------------- %FILH_BEG% --
//-----------------------------------------------------------------------------
//
//  Project:		$$ProjectName
//
//  File name:		HCILinkControlCmdProc.cpp
//  Author:			 
//  Description:	  
//
//  Revision History:
//  $Log: $
//
//  Rev 1.00  15 July 2000 Initial release
//    
//
//  Copyright (c) TelenComm Corporation  2000   -   All rights reserved    
//--------------------------------------------------------------- %FILH_END% 
//------------------------------------------------------------------------------
//
//  Includes
//
//------------------------------------------------------------------------------

#include "..\..\Common\ErrDef.h"
#include "..\..\Inc\HCIDef.h"
#include "..\..\Inc\HCIError.h"
#include "..\Inc\HCILinkControlCmdProc.h"
#include "..\..\Inc\RemoteDevInfo.h"
#include "..\Inc\HCICmdPacket.h"


//------------------------------------------------------------------------------
//
//  Types
//
//------------------------------------------------------------------------------

 

//------------------------------------------------------------------------------
//
//  Class Declarations
//
//------------------------------------------------------------------------------


uint8 CHCILinkControlCmdProcessor::Inquiry(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::InquiryCancel(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::PeriodicInquiryMode(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::ExitPeriodicInquiryMode(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::CreateConnection(CHCI_CmdPacket& HCI_CmdPacket)
{
  sBD_ADDR  sDevAddr;
  eBaseBandPacketType       PacketType;
  ePageScanMode             PageScanMode;
  ePageScanRepMode          PageScanRepMode;
  tClock_Offset             Clock_Offset;
  tAllowRoleSwitch          AllowRoleSwitch;

  if(!HCI_CmdPacket.IsValidCmdPacket())                                   return eHCI_ERROR_INVALID_CMD_PACKET;

  CRemoteDevListIterator RemoteDevListIterator(g_RemoteDevList);

  HCI_CmdPacket.RetrieveParameter(&sDevAddr, sizeof(sBD_ADDR));
  if(!(RemoteDevListIterator.IsValidBD_ADDR(sDevAddr)))                   return eHCI_ERROR_INVALID_BD_ADDR;

  PacketType=(eBaseBandPacketType)HCI_CmdPacket.RetrieveHalfWordParameter();
  if(!(RemoteDevListIterator.IsValidBaseBandPacketType(PacketType)))      return eHCI_ERROR_INVALID_PACKET_TYPE;

  PageScanRepMode=(ePageScanRepMode)HCI_CmdPacket.RetrieveByteParameter();
  if(!(RemoteDevListIterator.IsValidPageScanRepMode(PageScanRepMode)))    return eHCI_ERROR_INVALID_PAGE_SCAN_REP_MODE;

  PageScanMode=(ePageScanMode)HCI_CmdPacket.RetrieveByteParameter();
  if(!(RemoteDevListIterator.IsValidPageScanMode(PageScanMode)))          return eHCI_ERROR_INVALID_PAGE_SCAN_MODE;

  Clock_Offset=HCI_CmdPacket.RetrieveHalfWordParameter(); 
  if(AllowRoleSwitch=HCI_CmdPacket.RetrieveByteParameter() > ALLOW_ROLE_SWITCH_MAX_VAL)   
                                                                          return eHCI_ERROR_INVALID_ROLE_SWITCH_FLAG;
  //CreateConnection(sDevAddr,PacketType,PageScanMode,PageScanRepMode,Clock_Offset,AllowRoleSwitch);
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::Disconnect(CHCI_CmdPacket& HCI_CmdPacket)
{
  tConnectionHandle ConnectionHandle;
  tReason Reason;
  if(!HCI_CmdPacket.IsValidCmdPacket())                                   return eHCI_ERROR_INVALID_CMD_PACKET;

  ConnectionHandle=(tConnectionHandle)HCI_CmdPacket.RetrieveHalfWordParameter();
  if(ConnectionHandle > CONNECTION_HANDLE_MAX_VAL )                       return eHCI_ERROR_INVALID_CONNECTION_HANDLE;
  Reason=HCI_CmdPacket.RetrieveByteParameter();
  switch(Reason)
  {
  case eHCI_ERROR_OTHER_END_TERMINATED_CONNECTION_USER_ENDED_CONNECTION:
  case eHCI_ERROR_OTHER_END_TERMINATED_CONNECTION_LOW_RESOURCES:
  case eHCI_ERROR_OTHER_END_TERMINATED_CONNECTION_ABOUT_TO_POWER_OFF:
  case eHCI_ERROR_UNSUPPORTED_REMOTE_FEATURE:
    //Disconnect(ConnectionHandle,Reason);
    return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
  }
  return eHCI_ERROR_UNKNOWN_REASON_FOR_DISCONNECTION;
}

uint8 CHCILinkControlCmdProcessor::AddSCOConnection(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::AcceptConnectionRequest(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::RejectConnectionRequest(CHCI_CmdPacket& HCI_CmdPacket)
{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;

}
uint8 CHCILinkControlCmdProcessor::LinkKeyRequestReply(CHCI_CmdPacket& HCI_CmdPacket)


{
  sBD_ADDR  sDevAddr;
  tLinkKey  LinkKey;

  if(!HCI_CmdPacket.IsValidCmdPacket())                                   
	  return eHCI_ERROR_INVALID_CMD_PACKET;

  CRemoteDevListIterator RemoteDevListIterator(g_RemoteDevList);

  HCI_CmdPacket.RetrieveParameter(&sDevAddr, sizeof(sBD_ADDR));
  if(!(RemoteDevListIterator.IsValidBD_ADDR(sDevAddr)))
	  return eHCI_ERROR_INVALID_BD_ADDR;

  HCI_CmdPacket.RetrieveParameter(&LinkKey, sizeof(tLinkKey));
  //if(!(RemoteDevListIterator.IsValidLink_Key(LinkKey)))
	  return eHCI_ERROR_INVALID_LINK_KEY;

  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::LinkKeyRequestNegativeReply(CHCI_CmdPacket& HCI_CmdPacket)
{
  sBD_ADDR  sDevAddr;

  if(!HCI_CmdPacket.IsValidCmdPacket())                                   
	  return eHCI_ERROR_INVALID_CMD_PACKET;

  CRemoteDevListIterator RemoteDevListIterator(g_RemoteDevList);

  HCI_CmdPacket.RetrieveParameter(&sDevAddr, sizeof(sBD_ADDR));
  if(!(RemoteDevListIterator.IsValidBD_ADDR(sDevAddr)))
	  return eHCI_ERROR_INVALID_BD_ADDR;

	return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::PinCodeRequestReply(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::PinCodeRequestNegativeReply(CHCI_CmdPacket& HCI_CmdPacket)


{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::ChangeConnectionPacketType(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::AuthenticationRequested(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::SetConnectionEncryption(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::ChangeConnectionLinkKey(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::MasterLinkKey(CHCI_CmdPacket& HCI_CmdPacket)

{
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::RemoteNameRequest(CHCI_CmdPacket& HCI_CmdPacket)
{
  sBD_ADDR  sDevAddr;
  ePageScanMode             PageScanMode;
  ePageScanRepMode          PageScanRepMode;
  uint16                    Clock_Offset;

  if(!HCI_CmdPacket.IsValidCmdPacket())                                   return eHCI_ERROR_INVALID_CMD_PACKET;

  CRemoteDevListIterator RemoteDevListIterator(g_RemoteDevList);

  HCI_CmdPacket.RetrieveParameter(&sDevAddr, sizeof(sBD_ADDR));
  if(!(RemoteDevListIterator.IsValidBD_ADDR(sDevAddr)))                   return eHCI_ERROR_INVALID_BD_ADDR;

  PageScanRepMode=(ePageScanRepMode)HCI_CmdPacket.RetrieveByteParameter();
  if(!(RemoteDevListIterator.IsValidPageScanRepMode(PageScanRepMode)))    return eHCI_ERROR_INVALID_PAGE_SCAN_REP_MODE;

  PageScanMode=(ePageScanMode)HCI_CmdPacket.RetrieveByteParameter();
  if(!(RemoteDevListIterator.IsValidPageScanMode(PageScanMode)))          return eHCI_ERROR_INVALID_PAGE_SCAN_MODE;

  Clock_Offset=HCI_CmdPacket.RetrieveHalfWordParameter(); 
  //RemoteNameRequest(sDevAddr,PageScanMode,PageScanRepMode,Clock_Offset);
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::ReadRemoteSupportedFeatures(CHCI_CmdPacket& HCI_CmdPacket)
{
  tConnectionHandle ConnectionHandle;
  ConnectionHandle=(tConnectionHandle)HCI_CmdPacket.RetrieveHalfWordParameter();
  if(ConnectionHandle > CONNECTION_HANDLE_MAX_VAL )                       return eHCI_ERROR_INVALID_CONNECTION_HANDLE;
  //ReadRemoteSupportedFeatures(ConnectionHandle);
  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::ReadRemoteVersionInformation(CHCI_CmdPacket& HCI_CmdPacket)
{
  tConnectionHandle ConnectionHandle;
  ConnectionHandle=(tConnectionHandle)HCI_CmdPacket.RetrieveHalfWordParameter();
  if(ConnectionHandle > CONNECTION_HANDLE_MAX_VAL )                       return eHCI_ERROR_INVALID_CONNECTION_HANDLE;
  //ReadRemoteVersionInformation(ConnectionHandle);

  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}
uint8 CHCILinkControlCmdProcessor::ReadClockOffset(CHCI_CmdPacket& HCI_CmdPacket)

{
  tConnectionHandle ConnectionHandle;
  ConnectionHandle=(tConnectionHandle)HCI_CmdPacket.RetrieveHalfWordParameter();
  if(ConnectionHandle > CONNECTION_HANDLE_MAX_VAL )                       return eHCI_ERROR_INVALID_CONNECTION_HANDLE;
  //ReadClockOffset(ConnectionHandle);

  return eHCI_ERROR_COMMAND_CURRENTLY_IN_PENDING;
}

//------------------------------------------------------------------------------
// End of HCILinkControlCmd.cpp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -