blob: c8079bec42bdcb1cd26a5290b5e4790ede97f46b [file] [log] [blame]
little_endian_packets
enum AttOpcode : 8 {
ERROR_RESPONSE = 0x01,
EXCHANGE_MTU_REQUEST = 0x02,
EXCHANGE_MTU_RESPONSE = 0x03,
FIND_INFORMATION_REQUEST = 0x04,
FIND_INFORMATION_RESPONSE = 0x05,
FIND_BY_TYPE_VALUE_REQUEST = 0x06,
FIND_BY_TYPE_VALUE_RESPONSE = 0x07,
READ_BY_TYPE_REQUEST = 0x08,
READ_BY_TYPE_RESPONSE = 0x09,
READ_REQUEST = 0x0A,
READ_RESPONSE = 0x0B,
READ_BLOB_REQUEST = 0x0C,
READ_BLOB_RESPONSE = 0x0D,
READ_MULTIPLE_REQUEST = 0x0E,
READ_MULTIPLE_RESPONSE = 0x0F,
READ_BY_GROUP_TYPE_REQUEST = 0x10,
READ_BY_GROUP_TYPE_RESPONSE = 0x11,
WRITE_REQUEST = 0x12,
WRITE_RESPONSE = 0x13,
WRITE_COMMAND = 0x52,
PREPARE_WRITE_REQUEST = 0x16,
PREPARE_WRITE_RESPONSE = 0x17,
EXECUTE_WRITE_REQUEST = 0x18,
EXECUTE_WRITE_RESPONSE = 0x19,
READ_MULTIPLE_VARIABLE_REQUEST = 0x20,
READ_MULTIPLE_VARIABLE_RESPONSE = 0x21,
HANDLE_VALUE_NOTIFICATION = 0x1B,
HANDLE_VALUE_INDICATION = 0x1D,
HANDLE_VALUE_CONFIRMATION = 0x1E,
SIGNED_WRITE_COMMAND = 0xD2,
}
packet Att {
opcode : AttOpcode,
_payload_,
}
// TODO(aryarahul) - add support for profile-specific error codes
// So probably this enum will need to move out of PDL
enum AttErrorCode : 8 {
INVALID_HANDLE = 0x01,
READ_NOT_PERMITTED = 0x02,
WRITE_NOT_PERMITTED = 0x03,
INVALID_PDU = 0x04,
INSUFFICIENT_AUTHENTICATION = 0x05,
REQUEST_NOT_SUPPORTED = 0x06,
ATTRIBUTE_NOT_FOUND = 0x0A,
ATTRIBUTE_NOT_LONG = 0x0B,
UNLIKELY_ERROR = 0x0E,
UNSUPPORTED_GROUP_TYPE = 0x10,
APPLICATION_ERROR = 0x80,
WRITE_REQUEST_REJECTED = 0xFC,
CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR_IMPROPERLY_CONFIGURED = 0xFD,
PROCEDURE_ALREADY_IN_PROGRESS = 0xFE,
OUT_OF_RANGE = 0xFF,
}
struct AttHandle {
handle : 16,
}
packet AttFindInformationRequest : Att(opcode = FIND_INFORMATION_REQUEST) {
starting_handle : AttHandle,
ending_handle : AttHandle,
}
struct Uuid {
data: 8[],
}
struct Uuid16 {
data: 16,
}
struct Uuid128 {
data: 8[16],
}
enum AttFindInformationResponseFormat : 8 {
SHORT = 0x01,
LONG = 0x02,
}
struct AttFindInformationResponseShortEntry {
handle : AttHandle,
uuid : Uuid16,
}
struct AttFindInformationResponseLongEntry {
handle : AttHandle,
uuid : Uuid128,
}
packet AttFindInformationResponse : Att(opcode = FIND_INFORMATION_RESPONSE) {
format : AttFindInformationResponseFormat,
_payload_,
}
packet AttFindInformationShortResponse : AttFindInformationResponse(format = SHORT) {
data: AttFindInformationResponseShortEntry[],
}
packet AttFindInformationLongResponse : AttFindInformationResponse(format = LONG) {
data: AttFindInformationResponseLongEntry[],
}
struct GattCharacteristicProperties {
broadcast: 1,
read: 1,
write_without_response: 1,
write: 1,
notify: 1,
indicate: 1,
authenticated_signed_writes: 1,
extended_properties: 1,
}
struct GattCharacteristicDeclarationValue : AttAttributeData {
properties: GattCharacteristicProperties,
handle: AttHandle,
uuid: Uuid,
}
struct GattServiceDeclarationValue : AttAttributeData {
uuid: Uuid,
}
struct GattClientCharacteristicConfiguration : AttAttributeData {
notification: 1,
indication: 1,
_reserved_: 14,
}
struct GattServiceChanged : AttAttributeData {
start_handle: AttHandle,
end_handle: AttHandle,
}
struct UuidAsAttData : AttAttributeData {
uuid: Uuid,
}
struct AttAttributeData {
_payload_
}
packet AttFindByTypeValueRequest : Att(opcode = FIND_BY_TYPE_VALUE_REQUEST) {
starting_handle : AttHandle,
ending_handle : AttHandle,
attribute_type : Uuid16,
attribute_value : AttAttributeData,
}
struct AttributeHandleRange {
found_attribute_handle : AttHandle,
group_end_handle : AttHandle,
}
packet AttFindByTypeValueResponse : Att(opcode = FIND_BY_TYPE_VALUE_RESPONSE) {
handles_info : AttributeHandleRange[],
}
packet AttReadByGroupTypeRequest : Att(opcode = READ_BY_GROUP_TYPE_REQUEST) {
starting_handle : AttHandle,
ending_handle : AttHandle,
attribute_group_type : Uuid,
}
struct AttReadByGroupTypeDataElement {
handle : AttHandle,
end_group_handle : AttHandle,
value : AttAttributeData,
}
packet AttReadByGroupTypeResponse : Att(opcode = READ_BY_GROUP_TYPE_RESPONSE) {
_elementsize_(data) : 8,
data: AttReadByGroupTypeDataElement[],
}
packet AttReadByTypeRequest : Att(opcode = READ_BY_TYPE_REQUEST) {
starting_handle : AttHandle,
ending_handle : AttHandle,
attribute_type : Uuid,
}
struct AttReadByTypeDataElement {
handle : AttHandle,
value : AttAttributeData,
}
packet AttReadByTypeResponse : Att(opcode = READ_BY_TYPE_RESPONSE) {
_elementsize_(data) : 8,
data: AttReadByTypeDataElement[],
}
packet AttReadRequest : Att(opcode = READ_REQUEST) {
attribute_handle : AttHandle,
}
packet AttReadResponse : Att(opcode = READ_RESPONSE) {
value: AttAttributeData,
}
packet AttWriteRequest : Att(opcode = WRITE_REQUEST) {
handle : AttHandle,
value : AttAttributeData,
}
packet AttWriteResponse : Att(opcode = WRITE_RESPONSE) {}
packet AttErrorResponse : Att(opcode = ERROR_RESPONSE) {
opcode_in_error: AttOpcode,
handle_in_error: AttHandle,
error_code: AttErrorCode,
}
packet AttHandleValueIndication : Att(opcode = HANDLE_VALUE_INDICATION) {
handle: AttHandle,
value: AttAttributeData,
}
packet AttHandleValueConfirmation : Att(opcode = HANDLE_VALUE_CONFIRMATION) {}
packet AttExchangeMtuRequest : Att(opcode = EXCHANGE_MTU_REQUEST) {
mtu: 16,
}
packet AttExchangeMtuResponse : Att(opcode = EXCHANGE_MTU_RESPONSE) {
mtu: 16,
}
packet AttWriteCommand : Att(opcode = WRITE_COMMAND) {
handle : AttHandle,
value : AttAttributeData,
}