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