Documentation
¶
Index ¶
- Constants
- Variables
- type Advertisement
- func (a *Advertisement) Addr() ble.Addr
- func (a *Advertisement) AddrWErr() (ble.Addr, error)
- func (a *Advertisement) AddressType() uint8
- func (a *Advertisement) Connectable() bool
- func (a *Advertisement) Data() []byte
- func (a *Advertisement) EventType() uint8
- func (a *Advertisement) LocalName() string
- func (a *Advertisement) ManufacturerData() []byte
- func (a *Advertisement) OverflowService() []ble.UUID
- func (a *Advertisement) RSSI() int
- func (a *Advertisement) ScanResponse() []byte
- func (a *Advertisement) ServiceData() []ble.ServiceData
- func (a *Advertisement) Services() []ble.UUID
- func (a *Advertisement) SetScanResponse(sr *Advertisement) error
- func (a *Advertisement) SolicitedService() []ble.UUID
- func (a *Advertisement) ToMap() (map[string]interface{}, error)
- func (a *Advertisement) TxPowerLevel() int
- type BondInfo
- type BondManager
- type BufferPool
- type Client
- type Command
- type CommandRP
- type CommandReject
- type Connection
- type ConnectionFactory
- type ConnectionParameterUpdateRequest
- type ConnectionParameterUpdateResponse
- type Controller
- type DisconnectRequest
- type DisconnectResponse
- type ErrCommand
- type LECreditBasedConnectionRequest
- type LECreditBasedConnectionResponse
- type LEFlowControlCredit
- type OobDataFlag
- type Pool
- type RandomAddress
- type SmpConfig
- type SmpManager
- type SmpManagerFactory
Constants ¶
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]
const ( PktTypeCommand uint8 = 0x01 PktTypeACLData uint8 = 0x02 PktTypeSCOData uint8 = 0x03 PktTypeEvent uint8 = 0x04 PktTypeVendor uint8 = 0xFF )
HCI Packet types
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].
const ( RoleMaster = 0x00 RoleSlave = 0x01 )
const ( IoCapsDisplayOnly = 0x00 IoCapsDisplayYesNo = 0x01 IoCapsKeyboardOnly = 0x02 IoCapsNone = 0x03 IoCapsKeyboardDisplay = 0x04 IoCapsReservedStart = 0x05 )
const SignalCommandReject = 0x01
SignalCommandReject is the code of Command Reject signaling packet.
const SignalConnectionParameterUpdateRequest = 0x12
SignalConnectionParameterUpdateRequest is the code of Connection Parameter Update Request signaling packet.
const SignalConnectionParameterUpdateResponse = 0x13
SignalConnectionParameterUpdateResponse is the code of Connection Parameter Update Response signaling packet.
const SignalDisconnectRequest = 0x06
SignalDisconnectRequest is the code of Disconnect Request signaling packet.
const SignalDisconnectResponse = 0x07
SignalDisconnectResponse is the code of Disconnect Response signaling packet.
const SignalLECreditBasedConnectionRequest = 0x14
SignalLECreditBasedConnectionRequest is the code of LE Credit Based Connection Request signaling packet.
const SignalLECreditBasedConnectionResponse = 0x15
SignalLECreditBasedConnectionResponse is the code of LE Credit Based Connection Response signaling packet.
const SignalLEFlowControlCredit = 0x16
SignalLEFlowControlCredit is the code of LE Flow Control Credit signaling packet.
Variables ¶
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
var DefaultSmpConfig = SmpConfig{ IoCapsKeyboardDisplay, byte(OobNotPresent), 0x09, 16, 0x00, 0x01, }
todo: make these configurable
var Logger = log.New("hci")
Functions ¶
This section is empty.
Types ¶
type Advertisement ¶
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) 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) 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 BondManager ¶
type BufferPool ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client ...
func (*Client) Put ¶
func (c *Client) Put()
Put puts the oldest sent buffer back to the shared pool.
type CommandReject ¶
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 ¶
func (s ConnectionParameterUpdateRequest) Code() int
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 ¶
func (s ConnectionParameterUpdateResponse) Code() int
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 DisconnectRequest ¶
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 ¶
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 ¶
func (s LECreditBasedConnectionRequest) Code() int
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 ¶
func (s LECreditBasedConnectionResponse) Code() int
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 ¶
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 RandomAddress ¶
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)
}