/
HCI.h
272 lines (235 loc) · 8.91 KB
/
HCI.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#ifndef __HCI_H
#define __HCI_H
class HCI: public Handler
{
public:
Boolean fLinkKeyValid;
UByte fLinkKey[16];
UByte fPeerAddress[6];
UByte fPSRepMode;
UByte fPSMode;
UByte fPairAddress[6];
Char fPairPINCode[64];
UByte fPacket[2048];
ULong fPacketLength;
Short fConnectionHandle;
Short fHCIBufferSize;
Byte fHCIWindowSize;
Short fOutstandingPackets;
Char fName[64];
HCI* fControlChannel;
HCI (void);
~HCI ();
Boolean CheckPacketComplete (TExtendedCircleBuf *buffer, Boolean alwaysConsume);
Boolean IsMyPacket (TExtendedCircleBuf *buffer);
Boolean HandleData (TExtendedCircleBuf *buffer);
void RemoveUnhandledPackets (TExtendedCircleBuf *buffer);
Boolean CheckPacketComplete (Boolean alwaysConsume);
Boolean IsMyPacket ();
Boolean HandleData ();
void RemoveUnhandledPackets ();
void HandleTimer (void *userData);
void Transition (ULong event, void *eventData);
int Action (int state, void *eventData);
void ProcessACLData (void);
HCI* GetHandler (Short handle);
HCI* GetHandler (UByte *);
Boolean IsWindowFull ();
Boolean IsWindowCritical ();
Boolean IsWindowOk ();
// Packet header
void SndPacketHeader (Byte flags, Size length);
// Event handlers
Boolean ResetState ();
Boolean ConnectState ();
Boolean ConnectedState ();
Boolean DisconnectState ();
Boolean AcceptState ();
Boolean DiscoverState ();
Boolean PairIncomingState ();
Boolean PairOutgoingState ();
void CompleteConnection (NewtonErr err);
void SetConnectionData ();
void CompleteDisconnect (Short handle);
void CompleteDisconnect (UByte *addr);
void TrackCompletedPackets ();
// High level commands
void Pair (UByte *addr, Char *PIN);
void Connect ();
void Status ();
// Link Control Commands
void Inquiry (UByte time, UByte amount);
void InquiryCancel (void);
void PeriodicInquiryMode (void);
void ExitPeriodicInquiryMode (void);
void CreateConnection (UByte *bd_addr, Byte psRep, Byte psMode);
void Disconnect (Byte reason);
void AddSCOConnection (void);
void AcceptConnectionRequest (UByte *bd_addr, Byte role);
void RejectConnectionRequest (void);
void LinkKeyRequestReply (UByte *bd_addr, UByte *linkKey);
void LinkKeyRequestNegativeReply (UByte *bd_addr);
void PINCodeRequestReply (UByte *bd_addr, Char *PINCode);
void PINCodeRequestNegativeReply (void);
void ChangeConnectionPacketType (void);
void AuthenticationRequested (Short handle);
void SetConnectionEncryption (void);
void ChangeConnectionLinkKey (void);
void MasterLinkKey (void);
void RemoteNameRequest (UByte *bdAddr, Byte psRep, Byte psMode);
void ReadRemoteSupportedFeatures (void);
void ReadRemoteVersionInformation (void);
void ReadClockOffset (void);
// Link Policy Commands
void HoldMode (void);
void SniffMode (void);
void ExitSniffMode (void);
void ParkMode (void);
void ExitParkMode (void);
void QoSSetup (void);
void RoleDiscovery (void);
void SwitchRole (void);
void ReadLinkPolicySettings (void);
void WriteLinkPolicySettings (void);
// Host Controller & Baseband Commands
void SetEventMask (void);
void Reset (void);
void SetEventFilter (void);
void Flush (void);
void ReadPINType (void);
void WritePINType (void);
void CreateNewUnitKey (void);
void ReadStoredLinkKey (void);
void WriteStoredLinkKey (void);
void DeleteStoredLinkKey (void);
void ChangeLocalName (UByte *name);
void ReadLocalName (void);
void ReadConnectionAcceptTimeout (void);
void WriteConnectionAcceptTimeout (void);
void ReadPageTimeout (void);
void WritePageTimeout (void);
void ReadScanEnable (void);
void WriteScanEnable (UByte enable);
void ReadPageScanActivity (void);
void WritePageScanActivity (UShort interval, UShort window);
void ReadInquiryScanActivity (void);
void WriteInquiryScanActivity (UShort interval, UShort window);
void ReadAuthenticationEnable (void);
void WriteAuthenticationEnable (void);
void ReadEncryptionMode (void);
void WriteEncryptionMode (void);
void ReadClassofDevice (void);
void WriteClassofDevice (UByte *deviceClass);
void ReadVoiceSetting (void);
void WriteVoiceSetting (void);
void ReadAutomaticFlushTimeout (void);
void WriteAutomaticFlushTimeout (void);
void ReadNumBroadcastRetransmissions (void);
void WriteNumBroadcastRetransmissions (void);
void ReadHoldModeActivity (void);
void WriteHoldModeActivity (void);
void ReadTransmitPowerLevel (void);
void ReadSCOFlowControlEnable (void);
void WriteSCOFlowControlEnable (void);
void SetHostControllerToHostFlowControl (void);
void HostBufferSize (void);
void HostNumberOfCompletedPackets (void);
void ReadLinkSupervisionTimeout (void);
void WriteLinkSupervisionTimeout (void);
void ReadNumberOfSupportedIAC (void);
void ReadCurrentIACLAP (void);
void WriteCurrentIACLAP (void);
void ReadPageScanPeriodMode (void);
void WritePageScanPeriodMode (void);
void ReadPageScanMode (void);
void WritePageScanMode (void);
// Informational Parameters
void ReadLocalVersionInformation (void);
void ReadLocalSupportedFeatures (void);
void ReadBufferSize (void);
void ReadCountryCode (void);
void ReadBdAddr (void);
// Status Parameters
void ReadFailedContactCounter (void);
void ResetFailedContactCounter (void);
void GetLinkQuality (Short handle);
void ReadRSSI (void);
// Testing Commands
void ReadLoopbackMode (void);
void WriteLoopbackMode (void);
void EnableDeviceUnderTestMode (void);
// Possible Events
void InquiryComplete (void);
void InquiryResult (void);
void ConnectionComplete (void);
void ConnectionRequest (void);
void DisconnectionComplete (void);
void AuthenticationComplete (void);
void RemoteNameRequestComplete (void);
void EncryptionChange (void);
void ChangeConnectionLinkKeyComplete (void);
void MasterLinkKeyComplete (void);
void ReadRemoteSupportedFeaturesComplete (void);
void ReadRemoteVersionInformationComplete (void);
void QoSSetupComplete (void);
void CommandComplete (void);
void CommandStatus (void);
void HardwareError (void);
void FlushOccurred (void);
void RoleChange (void);
void NumberOfCompletedPackets (void);
void ModeChange (void);
void ReturnLinkKeys (void);
void PINCodeRequest (void);
void LinkKeyRequest (void);
void LinkKeyNotification (void);
void LoopbackCommand (void);
void DataBufferOverflow (void);
void MaxSlotsChange (void);
void ReadClockOffsetComplete (void);
void ConnectionPacketTypeChanged (void);
void QoSViolation (void);
void PageScanModeChange (void);
void PageScanRepetitionModeChange (void);
};
#define HCIERR_UNKNOWN_COMMAND 0x01
#define HCIERR_NO_CONNECTION 0x02
#define HCIERR_HARDWARE_FAILURE 0x03
#define HCIERR_PAGE_TIMEOUT 0x04
#define HCIERR_AUTHENTICATION_FAILURE 0x05
#define HCIERR_KEY_MISSING 0x06
#define HCIERR_MEMORY_FULL 0x07
#define HCIERR_CONNECTION_TIMEOUT 0x08
#define HCIERR_MAX_NUMBER_OF_CONNECTIONS 0x09
#define HCIERR_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0A
#define HCIERR_ACL_CONNECTION_ALREADY_EXISTS 0x0B
#define HCIERR_COMMAND_DISALLOWED 0x0C
#define HCIERR_REJECTED_LIMITED_RESOURCES 0x0D
#define HCIERR_REJECTED_SECURITY_REASONS 0x0E
#define HCIERR_REJECTED_PERSONAL_DEVICE 0x0F
#define HCIERR_HOST_TIMEOUT 0x10
#define HCIERR_UNSUPPORTED 0x11
#define HCIERR_INVALID_PARAMETERS 0x12
#define HCIERR_TERMINATED_USER 0x13
#define HCIERR_TERMINATED_LOW_RESOURCES 0x14
#define HCIERR_TERMINATED_POWER_OFF 0x15
#define HCIERR_TERMINATED_LOCAL_HOST 0x16
#define HCIERR_REPEATED_ATTEMPTS 0x17
#define HCIERR_UNKNOWN_LMP_PDU 0x19
#define HCIERR_UNSUPPORTED_REMOTE_FEATURE 0x1A
#define HCIERR_SCO_OFFSET_REJECTED 0x1B
#define HCIERR_SCO_INTERVAL_REJECTED 0x1C
#define HCIERR_SCO_AIR_MODE_REJECTED 0x1D
#define HCIERR_INVALID_LMP_PARAMETERS 0x1E
#define HCIERR_UNSPECIFIED 0x1F
#define HCIERR_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
#define HCIERR_ROLE_CHANGE_NOT_ALLOWED 0x21
#define HCIERR_LMP_RESPONSE_TIMEOUT 0x22
#define HCIERR_LMP_TRANSACTION_COLLISION 0x23
#define HCIERR_LMP_PDU_NOT_ALLOWED 0x24
#define HCIERR_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25
#define HCIERR_UNIT_KEY_USED 0x26
#define HCIERR_QOS_IS_NOT_SUPPORTED 0x27
#define HCIERR_INSTANT_PASSED 0x28
#define HCIERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
#endif