2010년 1월 19일 화요일

HCI GUI Tool #2

HCI GUI Tool #2

Topic
HCI spec study.

Contents
-HCI: Host Controller Interface
-HCI는 interface시에 총 4 type의 packet을 사용하여 통신함.

 1. packets: there are 4 types of packet.
-HCI command packet (host -> controller)
-HCI ACL data packet (bi-directional)
-HCI synchronous data packet (bi-directional)
-HCI event packet (controller -> host)

   1)HCI command packet

 








-format: OpCode(16 bit) + Parameter length(16 bit) + Parameter + ....
-OpCode is consist of OGF, OCF.
   .OGF(OpCode Group Field): upper 6 bits
   .OCF(OpCode Command Field): remaining 10 bits
      => OpCode (16bits) = OCF(10bits) + OGF(6bits)
 so, Command packet = OCF(10bits) + OGF(6bits) + Para length(16bits) 로 구성됨.

   .OGF라는 category안에 여러개의 OCF가 존재하는 형태.
-OGF=0x01: HCI Link Control Commands
-Inquiry Command
-Inquiry Cancel Command
-Periodic Inquiry Mode Command
-Exit Periodic Inquiry Mode Command
-Create Connection Command .... and so on..
        -OGF=0x02: HCI Link Policy Commands:
-Hold Mode Command
-Sniff Mode Command ... and so on
        -OGF=0x03: HCI Host Controller & BB Commands
-Set Event Mask Command
-Reset Command
-Set Event Filter Command
-Flush Command
-Read Pin Type Command .... and so on
        -OGF=0x04: HCI Informational Parameters
-Read Local Version Information Command
-Read Local Supported Commands Command
-.....
-Read BD_ADDR Command
        -OGF=0x05: HCI Status Parameters
-Read Failed Contact Counter Command
-Reset Failed Contact Counter Command
-Read Link Quality Command
-Read RSSI Command ....... and so on
        -OGF=0x06: HCI Testing Commands.
-Read Loopback Mode Command
-Write Loopback Mode Command
-Enable Device Under Test Mode Command
-Write Simple Pairing Debug Mode Command
        -OGF=0x3e: TCI-L2CAP
        -OGF=0x3f: HCI Vendor Commands

   2)HCI event packet







ex) "Read_BD_ADDR" command 입력시 전달되는 packet.














[Command packet]
  > Read_BD_ADDR is in 'Information Parameters' Group. so, OGF: 0x04(0000 0100)
  > and its OCF: 0x0009(0000 0000 0000 1001)
  > 따라서 전체 OpCode의 상위 6bits를 구성하는 OGF는 => 00 0100 (0x04)
     remaining 10bits 인 OCF는 => 00 0000 1001(0x009)
     combining above 2 terms(OGF+OCF), total OpCode is "0001 0000 0000 1001"(0x1009)
  > 즉, 총 16bit의 OpCode이며, upper 6bits는 0x04(means "Information Parameters"Group),
     remaining 10bits는 0x0009(means "Read_BD_ADDR")
  > 이를 command packet 형식에 맞게 mapping하면
     OpCode packet = OCF + OGF 이므로
                             = 0x09 + 0x10 = 0000 1001 0001 0000 의 형태로 mapping
  > 위의 예에서 보면, "09(1 byte) 10(1 byte) 00(1byte)"의 총 3byte의 command packet이 전달됐으며
     09 10:(2byte) Opcode를 나타내고,
     00: (1byte) Length(뒤에 parameter가 아무것도 없으므로 0)를 의미

[Event packet]
  > [Event Code] + [Length] + [Parameter]로 구성(refer to above figure)
  > 위의 예에서
     0E: Command Complete Event (1byte Event Code)
     0A: Length(1byte, 뒤에 총 10 byte가 따라오므로 0x0A)
     또한 Command Complete Event의 경우에는 다음과 같은 parameter가 따라온다.
     1)Num_HCI_Command_Packets: 1byte. HCI Command packet의 갯수
     2)Command_Opcode: 2byte. Opcode of the Command which caused this event.
     3)Return Parameters: xbyte(Depends on Command) Opcode Command에 따른 return para.
  > 따라서 위의 경우를 예로 하여 계속 살펴보면..
     01: (1byte)Num_HCI_Command_Packets, 'Read_BD_ADDR' command 하나이므로. 0x01
     09 10: (2byte) Command Opcode."Read_BD_ADDR"를 의미
     00: (1byte) Status?? 왜 Command Complete Event진행중에 느닷없이 Status event가 끼어들지?
     2A 01 DE A4 01 00: (6byte) BD_ADDR. Return parameter에 해당하며 spec에 나와 있는대로
                                   HCI는 "Little Endian" Format을 사용하므로
                                   이를 제대로 translate하기위해서는 순서를 뒤집어 줘야함


PS)
 1.  'Portmon', 즉 port monitor라는 프로그램을 통해 실제 serial port를 monitoring할수가 있는데
  이를 통해 관찰해 보면 Command packet의 경우 '01'이, Event packet의 경우 '04'가 맨 앞에 출력됨.
  즉, 위의 경우(Read BD_ADDR)를 예로 들면,
   Command: 01 09 10 00
   Event:       04 0E 0A 01 09 10 00 2A 01 DE A4 01 00
  각각 위와 같은 data가 monitoring됨. but i dont know what these are............
  BT spec을 찾아봐도 안보이고..
  RS-232 spec인가??

  2010.03.10)Answers is..
  "01" means HCI Command Packet
  "02" means HCI ACL Data Packet
  "03" means HCI Sync. Data Packet
  "04" menas HCI Event Packet.

 2. Little Endian
  MSB가 큰 메모리 번지에 저장되는 방식이며 Intel CPU계열에서 역시 이를 사용함.
  반대로 Big Endian방식은 MSB가 작은 메모리번지에 저장되는 방식.

Q) 왜 Command Complete Event진행중에 느닷없이 Status event가 끼어들지?
     Command Complete Event 다음에는 위의 1),2),3)에서 적은바와 같이
     Num_HCI_Command_Packets -> Command_Opcode -> Return parameter순으로
     오게 되어 있는데 "09 10" 다음의 "00"이 Status event라면
     Command event + Status event + return parameter의 순이라는 말인가..

댓글 없음:

댓글 쓰기