hci

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 12, 2020 License: BSD-3-Clause Imports: 15 Imported by: 3

README

LE Command Requirements

List of the commands and events that a Controller supporting LE shall implement. [Vol 2 Part A.3.19]

  • Mandatory

    • Vol 2, Part E, 7.7.14 - Command Complete Event (0x0E)
    • Vol 2, Part E, 7.7.15 - Command Status Event (0x0F)
    • Vol 2, Part E, 7.8.16 - LE Add Device To White List Command (0x08|0x0011)
    • Vol 2, Part E, 7.8.15 - LE Clear White List Command (0x08|0x0010)
    • Vol 2, Part E, 7.8.2 - LE Read Buffer Size Command (0x08|0x0002)
    • Vol 2, Part E, 7.4.3 - Read Local Supported Features Command (0x04|0x0003)
    • Vol 2, Part E, 7.8.27 - LE Read Supported States Command (0x08|0x001C)
    • Vol 2, Part E, 7.8.14 - LE Read White List Size Command (0x08|0x000F)
    • Vol 2, Part E, 7.8.17 - LE Remove Device From White List Command (0x08|0x0012)
    • Vol 2, Part E, 7.8.1 - LE Set Event Mask Command (0x08|0x0001)
    • Vol 2, Part E, 7.8.30 - LE Test End Command (0x08|0x001F)
    • Vol 2, Part E, 7.4.6 - Read BD_ADDR Command (0x04|0x0009)
    • Vol 2, Part E, 7.8.3 - LE Read Local Supported Features Command (0x08|0x0003)
    • Vol 2, Part E, 7.4.1 - Read Local Version Information Command (0x04|0x0001)
    • Vol 2, Part E, 7.3.2 - Reset Command (0x03|0x003)
    • Vol 2, Part E, 7.4.2 - Read Local Supported Commands Command (0x04|0x0002)
    • Vol 2, Part E, 7.3.1 - Set Event Mask Command (0x03|0x0001)
  • C1: Mandatory if Controller supports transmitting packets, otherwise optional.

    • Vol 2, Part E, 7.8.6 - LE Read Advertising Channel Tx Power Command (0x08|0x0007)
    • Vol 2, Part E, 7.8.29 - LE Transmitter Test Command (0x08|0x001E)
    • Vol 2, Part E, 7.8.9 - LE Set Advertise Enable Command (0x08|0x000A)
    • Vol 2, Part E, 7.8.7 - LE Set Advertising Data Command (0x08|0x0008)
    • Vol 2, Part E, 7.8.5 - LE Set Advertising Parameters Command (0x08|0x0006)
    • Vol 2, Part E, 7.8.4 - LE Set Random Address Command (0x08|0x0005)
  • C2: Mandatory if Controller supports receiving packets, otherwise optional.

    • Vol 2, Part E, 7.7.65.2 - LE Advertising Report Event (0x3E)
    • Vol 2, Part E, 7.8.28 - LE Receiver Test Command (0x08|0x001D)
    • Vol 2, Part E, 7.8.11 - LE Set Scan Enable Command (0x08|0x000C)
    • Vol 2, Part E, 7.8.10 - LE Set Scan Parameters Command (0x08|0x000B)
  • C3: Mandatory if Controller supports transmitting and receiving packets, otherwise optional.

    • Vol 2, Part E, 7.1.6 - Disconnect Command (0x01|0x0006)
    • Vol 2, Part E, 7.7.5 - Disconnection Complete Event (0x05)
    • Vol 2, Part E, 7.7.65.1 - LE Connection Complete Event (0x3E)
    • Vol 2, Part E, 7.8.18 - LE Connection Update Command (0x08|0x0013)
    • Vol 2, Part E, 7.7.65.3 - LE Connection Update Complete Event (0x0E)
    • Vol 2, Part E, 7.8.12 - LE Create Connection Command (0x08|0x000D)
    • Vol 2, Part E, 7.8.13 - LE Create Connection Cancel Command (0x08|0x000E)
    • Vol 2, Part E, 7.8.20 - LE Read Channel Map Command (0x08|0x0015)
    • Vol 2, Part E, 7.8.21 - LE Read Remote Used Features Command (0x08|0x0016)
    • Vol 2, Part E, 7.7.65.4 - LE Read Remote Used Features Complete Event (0x3E)
    • Vol 2, Part E, 7.8.19 - LE Set Host Channel Classification Command (0x08|0x0014)
    • Vol 2, Part E, 7.8.8 - LE Set Scan Response Data Command (0x08|0x0009)
    • Vol 2, Part E, 7.3.40 - Host Number Of Completed Packets Command (0x03|0x0035)
    • Vol 2, Part E, 7.3.35 - Read Transmit Power Level Command (0x03|0x002D)
    • Vol 2, Part E, 7.1.23 - Read Remote Version Information Command (0x01|0x001D)
    • Vol 2, Part E, 7.7.12 - Read Remote Version Information Complete Event (0x0C)
    • Vol 2, Part E, 7.5.4 - Read RSSI Command (0x05|0x0005)
  • C4: Mandatory if LE Feature (LL Encryption) is supported otherwise optional.

    • Vol 2, Part E, 7.7.8 - Encryption Change Event (0x08)
    • Vol 2, Part E, 7.7.39 - Encryption Key Refresh Complete Event (0x30)
    • Vol 2, Part E, 7.8.22 - LE Encrypt Command (0x08|0x0017)
    • Vol 2, Part E, 7.7.65.5 - LE Long Term Key Request Event (0x3E)
    • Vol 2, Part E, 7.8.25 - LE Long Term Key Request Reply Command (0x08|0x001A)
    • Vol 2, Part E, 7.8.26 - LE Long Term Key Request Negative Reply Command (0x08|0x001B)
    • Vol 2, Part E, 7.8.23 - LE Rand Command (0x08|0x0018)
    • Vol 2, Part E, 7.8.24 - LE Start Encryption Command (0x08|0x0019)
  • C5: Mandatory if BR/EDR is supported otherwise optional. [Won't supported]

    • Vol 2, Part E, 7.4.5 - Read Buffer Size Command
    • Vol 2, Part E, 7.3.78 - Read LE Host Support
    • Vol 2, Part E, 7.3.79 - Write LE Host Support Command (0x03|0x006D)
  • C6: Mandatory if LE Feature (Connection Parameters Request procedure) is supported, otherwise optional.

    • Vol 2, Part E, 7.8.31 - LE Remote Connection Parameter Request Reply Command (0x08|0x0020)
    • Vol 2, Part E, 7.8.32 - LE Remote Connection Parameter Request Negative Reply Command (0x08|0x0021)
    • Vol 2, Part E, 7.7.65.6 - LE Remote Connection Parameter Request Event (0x3E)
  • C7: Mandatory if LE Ping is supported otherwise excluded

    • Vol 2, Part E, 7.3.94 - Write Authenticated Payload Timeout Command (0x01|0x007C)
    • Vol 2, Part E, 7.3.93 - Read Authenticated Payload Timeout Command (0x03|0x007B)
    • Vol 2, Part E, 7.7.75 - Authenticated Payload Timeout Expired Event (0x57)
    • Vol 2, Part E, 7.3.69 - Set Event Mask Page 2 Command (0x03|0x0063)
  • Optional support

    • Vol 2, Part E, 7.7.26 - Data Buffer Overflow Event (0x1A)
    • Vol 2, Part E, 7.7.16 - Hardware Error Event (0x10)
    • Vol 2, Part E, 7.3.39 - Host Buffer Size Command (0x03|0x0033)
    • Vol 2, Part E, 7.7.19 - Number Of Completed Packets Event (0x13)
    • Vol 2, Part E, 7.3.38 - Set Controller To Host Flow Control Command

    Vol 3, Part A, 4 L2CAP Signaling mandatory for LE-U

    • Vol 3, Part A, 4.1 - Command Reject (0x01)
    • Vol 3, Part A, 4.6 - Disconnect Request (0x06)
    • Vol 3, Part A, 4.7 - Disconnect Response (0x07)
    • Vol 3, Part A, 4.20 - Connection Parameter Update Request (0x12)
    • Vol 3, Part A, 4.21 - Connection Parameter Update Response (0x13)
    • Vol 3, Part A, 4.22 - LE Credit Based Connection Request (0x14)
    • Vol 3, Part A, 4.23 - LE Credit Based Connection Response (0x15)
    • Vol 3, Part A, 4.24 - LE Flow Control Credit (0x16)

Documentation

Index

Constants

View Source
const (
	EvtTypAdvInd        = 0x00 // Connectable undirected advertising (ADV_IND).
	EvtTypAdvDirectInd  = 0x01 // Connectable directed advertising (ADV_DIRECT_IND).
	EvtTypAdvScanInd    = 0x02 // Scannable undirected advertising (ADV_SCAN_IND).
	EvtTypAdvNonconnInd = 0x03 // Non connectable undirected advertising (ADV_NONCONN_IND).
	EvtTypScanRsp       = 0x04 // Scan Response (SCAN_RSP).
)

[Vol 6, Part B, 4.4.2] [Vol 3, Part C, 11]

View Source
const (
	PktTypeCommand uint8 = 0x01
	PktTypeACLData uint8 = 0x02
	PktTypeSCOData uint8 = 0x03
	PktTypeEvent   uint8 = 0x04
	PktTypeVendor  uint8 = 0xFF
)

HCI Packet types

View Source
const (
	PbfHostToControllerStart = 0x00 // Start of a non-automatically-flushable from host to controller.
	PbfContinuing            = 0x01 // Continuing fragment.
	PbfControllerToHostStart = 0x02 // Start of a non-automatically-flushable from controller to host.
	PbfCompleteL2CAPPDU      = 0x03 // A automatically flushable complete PDU. (Not used in LE-U).
)

Packet boundary flags of HCI ACL Data Packet [Vol 2, Part E, 5.4.2].

View Source
const (
	RoleMaster = 0x00
	RoleSlave  = 0x01
)
View Source
const (
	IoCapsDisplayOnly     = 0x00
	IoCapsDisplayYesNo    = 0x01
	IoCapsKeyboardOnly    = 0x02
	IoCapsNone            = 0x03
	IoCapsKeyboardDisplay = 0x04
	IoCapsReservedStart   = 0x05
)
View Source
const SignalCommandReject = 0x01

SignalCommandReject is the code of Command Reject signaling packet.

View Source
const SignalConnectionParameterUpdateRequest = 0x12

SignalConnectionParameterUpdateRequest is the code of Connection Parameter Update Request signaling packet.

View Source
const SignalConnectionParameterUpdateResponse = 0x13

SignalConnectionParameterUpdateResponse is the code of Connection Parameter Update Response signaling packet.

View Source
const SignalDisconnectRequest = 0x06

SignalDisconnectRequest is the code of Disconnect Request signaling packet.

View Source
const SignalDisconnectResponse = 0x07

SignalDisconnectResponse is the code of Disconnect Response signaling packet.

View Source
const SignalLECreditBasedConnectionRequest = 0x14

SignalLECreditBasedConnectionRequest is the code of LE Credit Based Connection Request signaling packet.

View Source
const SignalLECreditBasedConnectionResponse = 0x15

SignalLECreditBasedConnectionResponse is the code of LE Credit Based Connection Response signaling packet.

View Source
const SignalLEFlowControlCredit = 0x16

SignalLEFlowControlCredit is the code of LE Flow Control Credit signaling packet.

Variables

View Source
var (
	ErrBusyScanning    = errors.New("busy scanning")
	ErrBusyAdvertising = errors.New("busy advertising")
	ErrBusyDialing     = errors.New("busy dialing")
	ErrBusyListening   = errors.New("busy listening")
	ErrInvalidAddr     = errors.New("invalid address")
)

errors

View Source
var DefaultSmpConfig = SmpConfig{
	IoCapsKeyboardDisplay, byte(OobNotPresent), 0x09, 16, 0x00, 0x01,
}

todo: make these configurable

View Source
var Logger = log.New("hci")

Functions

This section is empty.

Types

type Advertisement struct {
	// contains filtered or unexported fields
}

Advertisement implements ble.Advertisement and other functions that are only available on Linux.

func NewAdvertisement

func NewAdvertisement(e evt.LEAdvertisingReport, i int) (*Advertisement, error)

func (*Advertisement) Addr

func (a *Advertisement) Addr() ble.Addr

Addr returns the address of the remote peripheral.

func (*Advertisement) AddrWErr

func (a *Advertisement) AddrWErr() (ble.Addr, error)

func (*Advertisement) AddressType

func (a *Advertisement) AddressType() uint8

AddressType returns the address type of the Advertisement. This is linux specific.

func (*Advertisement) Connectable

func (a *Advertisement) Connectable() bool

Connectable indicates weather the remote peripheral is connectable.

func (*Advertisement) Data

func (a *Advertisement) Data() []byte

Data returns the advertising data of the packet. This is linux specific.

func (*Advertisement) EventType

func (a *Advertisement) EventType() uint8

EventType returns the event type of Advertisement. This is linux specific.

func (*Advertisement) LocalName

func (a *Advertisement) LocalName() string

LocalName returns the LocalName of the remote peripheral.

func (*Advertisement) ManufacturerData

func (a *Advertisement) ManufacturerData() []byte

ManufacturerData returns the ManufacturerData of the advertisement.

func (*Advertisement) OverflowService

func (a *Advertisement) OverflowService() []ble.UUID

OverflowService returns the UUIDs of overflowed service.

func (*Advertisement) RSSI

func (a *Advertisement) RSSI() int

RSSI returns RSSI signal strength.

func (*Advertisement) ScanResponse

func (a *Advertisement) ScanResponse() []byte

ScanResponse returns the scan response of the packet, if it presents. This is linux specific.

func (*Advertisement) ServiceData

func (a *Advertisement) ServiceData() []ble.ServiceData

ServiceData returns the service data of the advertisement.

func (*Advertisement) Services

func (a *Advertisement) Services() []ble.UUID

Services returns the service UUIDs of the advertisement.

func (*Advertisement) SetScanResponse

func (a *Advertisement) SetScanResponse(sr *Advertisement) error

setScanResponse associate scan response to the existing advertisement.

func (*Advertisement) SolicitedService

func (a *Advertisement) SolicitedService() []ble.UUID

SolicitedService returns UUIDs of solicited services.

func (*Advertisement) ToMap

func (a *Advertisement) ToMap() (map[string]interface{}, error)

func (*Advertisement) TxPowerLevel

func (a *Advertisement) TxPowerLevel() int

TxPowerLevel returns the tx power level of the remote peripheral.

type BondInfo

type BondInfo interface {
	LongTermKey() []byte
	EDiv() uint16
	Random() uint64
	Legacy() bool
}

func NewBondInfo

func NewBondInfo(longTermKey []byte, ediv uint16, random uint64, legacy bool) BondInfo

type BondManager

type BondManager interface {
	Find(addr string) (BondInfo, error)
	Save(string, BondInfo) error
	Exists(addr string) bool
}

type BufferPool

type BufferPool interface {
	Lock()
	Unlock()
	Get() *bytes.Buffer
	Put()
	PutAll()
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client ...

func NewClient

func NewClient(p *Pool) *Client

NewClient ...

func (*Client) Get

func (c *Client) Get() *bytes.Buffer

Get returns a buffer from the shared buffer pool.

func (*Client) Lock

func (c *Client) Lock()

LockPool ...

func (*Client) Put

func (c *Client) Put()

Put puts the oldest sent buffer back to the shared pool.

func (*Client) PutAll

func (c *Client) PutAll()

PutAll puts all the sent buffers back to the shared pool.

func (*Client) Unlock

func (c *Client) Unlock()

UnlockPool ...

type Command

type Command interface {
	OpCode() int
	Len() int
	Marshal([]byte) error
}

Command ...

type CommandRP

type CommandRP interface {
	Unmarshal(b []byte) error
}

CommandRP ...

type CommandReject

type CommandReject struct {
	Reason uint16
	Data   []byte
}

CommandReject implements Command Reject (0x01) [Vol 3, Part A, 4.1].

func (CommandReject) Code

func (s CommandReject) Code() int

Code returns the event code of the command.

func (*CommandReject) Marshal

func (s *CommandReject) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*CommandReject) Unmarshal

func (s *CommandReject) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type Connection

type Connection interface {
	ble.Conn
	Run()
	PutPacket([]byte)
	Role() uint8
	BufferPool() BufferPool
	CloseInputChannel()
	SetClosed()
	CancelContext()
}

type ConnectionFactory

type ConnectionFactory interface {
	Create(Controller, evt.LEConnectionComplete) Connection
}

type ConnectionParameterUpdateRequest

type ConnectionParameterUpdateRequest struct {
	IntervalMin       uint16
	IntervalMax       uint16
	SlaveLatency      uint16
	TimeoutMultiplier uint16
}

ConnectionParameterUpdateRequest implements Connection Parameter Update Request (0x12) [Vol 3, Part A, 4.20].

func (ConnectionParameterUpdateRequest) Code

Code returns the event code of the command.

func (*ConnectionParameterUpdateRequest) Marshal

func (s *ConnectionParameterUpdateRequest) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*ConnectionParameterUpdateRequest) Unmarshal

func (s *ConnectionParameterUpdateRequest) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type ConnectionParameterUpdateResponse

type ConnectionParameterUpdateResponse struct {
	Result uint16
}

ConnectionParameterUpdateResponse implements Connection Parameter Update Response (0x13) [Vol 3, Part A, 4.21].

func (ConnectionParameterUpdateResponse) Code

Code returns the event code of the command.

func (*ConnectionParameterUpdateResponse) Marshal

func (s *ConnectionParameterUpdateResponse) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*ConnectionParameterUpdateResponse) Unmarshal

func (s *ConnectionParameterUpdateResponse) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type Controller

type Controller interface {
	RequestBufferPool() BufferPool
	RequestSmpManager(SmpConfig) (SmpManager, error)
	DispatchError(error)
	SocketWrite([]byte) (int, error)
	Send(Command, CommandRP) error
	Addr() ble.Addr
	CloseConnection(handle uint16) error
	Context() context.Context
}

type DisconnectRequest

type DisconnectRequest struct {
	DestinationCID uint16
	SourceCID      uint16
}

DisconnectRequest implements Disconnect Request (0x06) [Vol 3, Part A, 4.6].

func (DisconnectRequest) Code

func (s DisconnectRequest) Code() int

Code returns the event code of the command.

func (*DisconnectRequest) Marshal

func (s *DisconnectRequest) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*DisconnectRequest) Unmarshal

func (s *DisconnectRequest) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type DisconnectResponse

type DisconnectResponse struct {
	DestinationCID uint16
	SourceCID      uint16
}

DisconnectResponse implements Disconnect Response (0x07) [Vol 3, Part A, 4.7].

func (DisconnectResponse) Code

func (s DisconnectResponse) Code() int

Code returns the event code of the command.

func (*DisconnectResponse) Marshal

func (s *DisconnectResponse) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*DisconnectResponse) Unmarshal

func (s *DisconnectResponse) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type ErrCommand

type ErrCommand byte

ErrCommand [Vol2, Part D, 1.3 ]

const (
	ErrUnknownCommand       ErrCommand = 0x01 // Unknown HCI Command
	ErrConnID               ErrCommand = 0x02 // Unknown Connection Identifier
	ErrHardware             ErrCommand = 0x03 // Hardware Failure
	ErrPageTimeout          ErrCommand = 0x04 // Page Timeout
	ErrAuth                 ErrCommand = 0x05 // Authentication Failure
	ErrPINMissing           ErrCommand = 0x06 // PIN or Key Missing
	ErrMemoryCapacity       ErrCommand = 0x07 // Memory Capacity Exceeded
	ErrConnTimeout          ErrCommand = 0x08 // Connection Timeout
	ErrConnLimit            ErrCommand = 0x09 // Connection Limit Exceeded
	ErrSCOConnLimit         ErrCommand = 0x0A // Synchronous Connection Limit To A Device Exceeded
	ErrACLConnExists        ErrCommand = 0x0B // ACL Connection Already Exists
	ErrDisallowed           ErrCommand = 0x0C // Command Disallowed
	ErrLimitedResource      ErrCommand = 0x0D // Connection Rejected due to Limited Resources
	ErrSecurity             ErrCommand = 0x0E // Connection Rejected Due To Security Reasons
	ErrBDADDR               ErrCommand = 0x0F // Connection Rejected due to Unacceptable BD_ADDR
	ErrConnAcceptTimeout    ErrCommand = 0x10 // Connection Accept Timeout Exceeded
	ErrUnsupportedParams    ErrCommand = 0x11 // Unsupported Feature or Parameter Value
	ErrInvalidParams        ErrCommand = 0x12 // Invalid HCI Command Parameters
	ErrRemoteUser           ErrCommand = 0x13 // Remote User Terminated Connection
	ErrRemoteLowResources   ErrCommand = 0x14 // Remote Device Terminated Connection due to Low Resources
	ErrRemotePowerOff       ErrCommand = 0x15 // Remote Device Terminated Connection due to Power Off
	ErrLocalHost            ErrCommand = 0x16 // Connection Terminated By Local Host
	ErrRepeatedAttempts     ErrCommand = 0x17 // Repeated Attempts
	ErrPairingNotAllowed    ErrCommand = 0x18 // Pairing Not Allowed
	ErrUnknownLMP           ErrCommand = 0x19 // Unknown LMP PDU
	ErrUnsupportedLMP       ErrCommand = 0x1A // Unsupported Remote Feature / Unsupported LMP Feature
	ErrSCOOffset            ErrCommand = 0x1B // SCO Offset Rejected
	ErrSCOInterval          ErrCommand = 0x1C // SCO Interval Rejected
	ErrSCOAirMode           ErrCommand = 0x1D // SCO Air Mode Rejected
	ErrInvalidLLParams      ErrCommand = 0x1E // Invalid LMP Parameters / Invalid LL Parameters
	ErrUnspecified          ErrCommand = 0x1F // Unspecified Error
	ErrUnsupportedLLParams  ErrCommand = 0x20 // Unsupported LMP Parameter Value / Unsupported LL Parameter Value
	ErrRoleChangeNotAllowed ErrCommand = 0x21 // Role Change Not Allowed
	ErrLLResponseTimeout    ErrCommand = 0x22 // LMP Response Timeout / LL Response Timeout
	ErrLMPTransColl         ErrCommand = 0x23 // LMP Error Transaction Collision
	ErrLMPPDU               ErrCommand = 0x24 // LMP PDU Not Allowed
	ErrEncNotAccepted       ErrCommand = 0x25 // Encryption Mode Not Acceptable
	ErrLinkKey              ErrCommand = 0x26 // Link Key cannot be Changed
	ErrQoSNotSupported      ErrCommand = 0x27 // Requested QoS Not Supported
	ErrInstantPassed        ErrCommand = 0x28 // Instant Passed
	ErrUnitKeyNotSupported  ErrCommand = 0x29 // Pairing With Unit Key Not Supported
	ErrDifferentTransColl   ErrCommand = 0x2A // Different Transaction Collision
	ErrQOSParameter         ErrCommand = 0x2C // QoS Unacceptable Parameter
	ErrQOSReject            ErrCommand = 0x2D // QoS Rejected
	ErrChannelClass         ErrCommand = 0x2E // Channel Classification Not Supported
	ErrInsufficientSecurity ErrCommand = 0x2F // Insufficient Security
	ErrOutOfRange           ErrCommand = 0x30 // Parameter Out Of Mandatory Range
	ErrRoleSwitchPending    ErrCommand = 0x32 // Role Switch Pending
	ErrReservedSlot         ErrCommand = 0x34 // Reserved Slot Violation
	ErrRoleSwitch           ErrCommand = 0x35 // Role Switch Failed
	ErrEIRTooLarge          ErrCommand = 0x36 // Extended Inquiry Response Too Large
	ErrSecureSimplePairing  ErrCommand = 0x37 // Secure Simple Pairing Not Supported By Host
	ErrHostBusy             ErrCommand = 0x38 // Host Busy - Pairing
	ErrNoChannel            ErrCommand = 0x39 // Connection Rejected due to No Suitable Channel Found
	ErrControllerBusy       ErrCommand = 0x3A // Controller Busy
	ErrConnParams           ErrCommand = 0x3B // Unacceptable Connection Parameters
	ErrDirAdvTimeout        ErrCommand = 0x3C // Directed Advertising Timeout
	ErrMIC                  ErrCommand = 0x3D // Connection Terminated due to MIC Failure
	ErrEstablished          ErrCommand = 0x3E // Connection Failed to be Established
	ErrMACConn              ErrCommand = 0x3F // MAC Connection Failed
	ErrCoarseClock          ErrCommand = 0x40 // Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging

)

HCI Command Errors [Vol2, Part D, 1.3 ] FIXME: Terrible shorthand. Name them properly.

func (ErrCommand) Error

func (e ErrCommand) Error() string

type LECreditBasedConnectionRequest

type LECreditBasedConnectionRequest struct {
	LEPSM          uint16
	SourceCID      uint16
	MTU            uint16
	MPS            uint16
	InitialCredits uint16
}

LECreditBasedConnectionRequest implements LE Credit Based Connection Request (0x14) [Vol 3, Part A, 4.22].

func (LECreditBasedConnectionRequest) Code

Code returns the event code of the command.

func (*LECreditBasedConnectionRequest) Marshal

func (s *LECreditBasedConnectionRequest) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*LECreditBasedConnectionRequest) Unmarshal

func (s *LECreditBasedConnectionRequest) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type LECreditBasedConnectionResponse

type LECreditBasedConnectionResponse struct {
	DestinationCID    uint16
	MTU               uint16
	MPS               uint16
	InitialCreditsCID uint16
	Result            uint16
}

LECreditBasedConnectionResponse implements LE Credit Based Connection Response (0x15) [Vol 3, Part A, 4.23].

func (LECreditBasedConnectionResponse) Code

Code returns the event code of the command.

func (*LECreditBasedConnectionResponse) Marshal

func (s *LECreditBasedConnectionResponse) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*LECreditBasedConnectionResponse) Unmarshal

func (s *LECreditBasedConnectionResponse) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type LEFlowControlCredit

type LEFlowControlCredit struct {
	CID     uint16
	Credits uint16
}

LEFlowControlCredit implements LE Flow Control Credit (0x16) [Vol 3, Part A, 4.24].

func (LEFlowControlCredit) Code

func (s LEFlowControlCredit) Code() int

Code returns the event code of the command.

func (*LEFlowControlCredit) Marshal

func (s *LEFlowControlCredit) Marshal() ([]byte, error)

Marshal serializes the command parameters into binary form.

func (*LEFlowControlCredit) Unmarshal

func (s *LEFlowControlCredit) Unmarshal(b []byte) error

Unmarshal de-serializes the binary data and stores the result in the receiver.

type OobDataFlag

type OobDataFlag byte
const (
	OobNotPresent OobDataFlag = iota
	OobPreset
)

type Pool

type Pool struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Pool ...

func NewPool

func NewPool(sz int, cnt int) *Pool

NewPool ...

type RandomAddress

type RandomAddress struct {
	ble.Addr
}

RandomAddress is a Random Device Address.

type SmpConfig

type SmpConfig struct {
	IoCap, OobFlag, AuthReq, MaxKeySize, InitKeyDist, RespKeyDist byte
}

type SmpManager

type SmpManager interface {
	InitContext(localAddr, remoteAddr []byte,
		localAddrType, remoteAddrType uint8)
	Handle(data []byte) error
	Pair(authData ble.AuthData, to time.Duration) error
	BondInfoFor(addr string) BondInfo
	StartEncryption() error
	SetWritePDUFunc(func([]byte) (int, error))
	SetEncryptFunc(func(BondInfo) error)
	LegacyPairingInfo() (bool, []byte)
}

type SmpManagerFactory

type SmpManagerFactory interface {
	Create(SmpConfig) SmpManager
	SetBondManager(BondManager)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL