• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1little_endian_packets
2
3enum AttOpcode : 8 {
4  ERROR_RESPONSE = 0x01,
5
6  EXCHANGE_MTU_REQUEST = 0x02,
7  EXCHANGE_MTU_RESPONSE = 0x03,
8
9  FIND_INFORMATION_REQUEST = 0x04,
10  FIND_INFORMATION_RESPONSE = 0x05,
11
12  FIND_BY_TYPE_VALUE_REQUEST = 0x06,
13  FIND_BY_TYPE_VALUE_RESPONSE = 0x07,
14
15  READ_BY_TYPE_REQUEST = 0x08,
16  READ_BY_TYPE_RESPONSE = 0x09,
17
18  READ_REQUEST = 0x0A,
19  READ_RESPONSE = 0x0B,
20
21  READ_BLOB_REQUEST = 0x0C,
22  READ_BLOB_RESPONSE = 0x0D,
23
24  READ_MULTIPLE_REQUEST = 0x0E,
25  READ_MULTIPLE_RESPONSE = 0x0F,
26
27  READ_BY_GROUP_TYPE_REQUEST = 0x10,
28  READ_BY_GROUP_TYPE_RESPONSE = 0x11,
29
30  WRITE_REQUEST = 0x12,
31  WRITE_RESPONSE = 0x13,
32
33  WRITE_COMMAND = 0x52,
34
35  PREPARE_WRITE_REQUEST = 0x16,
36  PREPARE_WRITE_RESPONSE = 0x17,
37  EXECUTE_WRITE_REQUEST = 0x18,
38  EXECUTE_WRITE_RESPONSE = 0x19,
39
40  READ_MULTIPLE_VARIABLE_REQUEST = 0x20,
41  READ_MULTIPLE_VARIABLE_RESPONSE = 0x21,
42
43  HANDLE_VALUE_NOTIFICATION = 0x1B,
44
45  HANDLE_VALUE_INDICATION = 0x1D,
46  HANDLE_VALUE_CONFIRMATION = 0x1E,
47
48  SIGNED_WRITE_COMMAND = 0xD2,
49}
50
51packet Att {
52  opcode : AttOpcode,
53  _payload_,
54}
55
56// TODO(aryarahul) - add support for profile-specific error codes
57// So probably this enum will need to move out of PDL
58enum AttErrorCode : 8 {
59  INVALID_HANDLE = 0x01,
60  READ_NOT_PERMITTED = 0x02,
61  WRITE_NOT_PERMITTED = 0x03,
62  INVALID_PDU = 0x04,
63  INSUFFICIENT_AUTHENTICATION = 0x05,
64  REQUEST_NOT_SUPPORTED = 0x06,
65  ATTRIBUTE_NOT_FOUND = 0x0A,
66  ATTRIBUTE_NOT_LONG = 0x0B,
67  UNLIKELY_ERROR = 0x0E,
68  UNSUPPORTED_GROUP_TYPE = 0x10,
69  APPLICATION_ERROR = 0x80,
70  WRITE_REQUEST_REJECTED = 0xFC,
71  CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR_IMPROPERLY_CONFIGURED = 0xFD,
72  PROCEDURE_ALREADY_IN_PROGRESS = 0xFE,
73  OUT_OF_RANGE = 0xFF,
74}
75
76struct AttHandle {
77  handle : 16,
78}
79
80packet AttFindInformationRequest : Att(opcode = FIND_INFORMATION_REQUEST) {
81  starting_handle : AttHandle,
82  ending_handle : AttHandle,
83}
84
85struct Uuid {
86  data: 8[],
87}
88
89struct Uuid16 {
90  data: 16,
91}
92
93struct Uuid128 {
94  data: 8[16],
95}
96
97enum AttFindInformationResponseFormat : 8 {
98  SHORT = 0x01,
99  LONG = 0x02,
100}
101
102struct AttFindInformationResponseShortEntry {
103  handle : AttHandle,
104  uuid : Uuid16,
105}
106
107struct AttFindInformationResponseLongEntry {
108  handle : AttHandle,
109  uuid : Uuid128,
110}
111
112packet AttFindInformationResponse : Att(opcode = FIND_INFORMATION_RESPONSE) {
113  format : AttFindInformationResponseFormat,
114  _payload_,
115}
116
117packet AttFindInformationShortResponse : AttFindInformationResponse(format = SHORT) {
118  data: AttFindInformationResponseShortEntry[],
119}
120
121packet AttFindInformationLongResponse : AttFindInformationResponse(format = LONG) {
122  data: AttFindInformationResponseLongEntry[],
123}
124
125struct GattCharacteristicProperties {
126  broadcast: 1,
127  read: 1,
128  write_without_response: 1,
129  write: 1,
130  notify: 1,
131  indicate: 1,
132  authenticated_signed_writes: 1,
133  extended_properties: 1,
134}
135
136struct GattCharacteristicDeclarationValue : AttAttributeData {
137  properties: GattCharacteristicProperties,
138  handle: AttHandle,
139  uuid: Uuid,
140}
141
142struct GattServiceDeclarationValue : AttAttributeData {
143  uuid: Uuid,
144}
145
146struct GattClientCharacteristicConfiguration : AttAttributeData {
147  notification: 1,
148  indication: 1,
149  _reserved_: 14,
150}
151
152struct GattServiceChanged : AttAttributeData {
153  start_handle: AttHandle,
154  end_handle: AttHandle,
155}
156
157struct UuidAsAttData : AttAttributeData {
158  uuid: Uuid,
159}
160
161struct AttAttributeData {
162  _payload_
163}
164
165packet AttFindByTypeValueRequest : Att(opcode = FIND_BY_TYPE_VALUE_REQUEST) {
166  starting_handle : AttHandle,
167  ending_handle : AttHandle,
168  attribute_type : Uuid16,
169  attribute_value : AttAttributeData,
170}
171
172struct AttributeHandleRange {
173  found_attribute_handle : AttHandle,
174  group_end_handle : AttHandle,
175}
176
177packet AttFindByTypeValueResponse : Att(opcode = FIND_BY_TYPE_VALUE_RESPONSE) {
178  handles_info : AttributeHandleRange[],
179}
180
181packet AttReadByGroupTypeRequest : Att(opcode = READ_BY_GROUP_TYPE_REQUEST) {
182  starting_handle : AttHandle,
183  ending_handle : AttHandle,
184  attribute_group_type : Uuid,
185}
186
187struct AttReadByGroupTypeDataElement {
188  handle : AttHandle,
189  end_group_handle : AttHandle,
190  value : AttAttributeData,
191}
192
193packet AttReadByGroupTypeResponse : Att(opcode = READ_BY_GROUP_TYPE_RESPONSE) {
194  _elementsize_(data) : 8,
195  data: AttReadByGroupTypeDataElement[],
196}
197
198packet AttReadByTypeRequest : Att(opcode = READ_BY_TYPE_REQUEST) {
199  starting_handle : AttHandle,
200  ending_handle : AttHandle,
201  attribute_type : Uuid,
202}
203
204struct AttReadByTypeDataElement {
205  handle : AttHandle,
206  value : AttAttributeData,
207}
208
209packet AttReadByTypeResponse : Att(opcode = READ_BY_TYPE_RESPONSE) {
210  _elementsize_(data) : 8,
211  data: AttReadByTypeDataElement[],
212}
213
214packet AttReadRequest : Att(opcode = READ_REQUEST) {
215  attribute_handle : AttHandle,
216}
217
218packet AttReadResponse : Att(opcode = READ_RESPONSE) {
219  value: AttAttributeData,
220}
221
222packet AttWriteRequest : Att(opcode = WRITE_REQUEST) {
223  handle : AttHandle,
224  value : AttAttributeData,
225}
226
227packet AttWriteResponse : Att(opcode = WRITE_RESPONSE) {}
228
229packet AttErrorResponse : Att(opcode = ERROR_RESPONSE) {
230  opcode_in_error: AttOpcode,
231  handle_in_error: AttHandle,
232  error_code: AttErrorCode,
233}
234
235packet AttHandleValueIndication : Att(opcode = HANDLE_VALUE_INDICATION) {
236  handle: AttHandle,
237  value: AttAttributeData,
238}
239
240packet AttHandleValueConfirmation : Att(opcode = HANDLE_VALUE_CONFIRMATION) {}
241
242packet AttExchangeMtuRequest : Att(opcode = EXCHANGE_MTU_REQUEST) {
243  mtu: 16,
244}
245
246packet AttExchangeMtuResponse : Att(opcode = EXCHANGE_MTU_RESPONSE) {
247  mtu: 16,
248}
249
250packet AttWriteCommand : Att(opcode = WRITE_COMMAND) {
251  handle : AttHandle,
252  value : AttAttributeData,
253}
254