2025-11-03 4:29 PM
Greetings,
There is a post explaining how the aci_gatt_write_char_desc() function should be used to enable notification events for a characteristic that may be notified by the server/peripheral. The opcode, defined as
rq.ogf = 0x3f;
rq.ocf = 0x121;
is the 16 bit opcode 0xFD21. The September 2025 release of AN5270 (revision 32) omits this command.
Can we get an update to the AN5270 with an explanation of this command?
Cheers
2025-11-03 10:17 PM
Hello @MSing.1713
Thanks for your post.
I am checking this internally with the relevant team to clarify this topic (internal ticket number 221063)
We will provide you an update as soon as possible.
Thanks for your contribution.
(PS: ticket number 221063 is an internal tracking number and is not accessible or usable by customers).
2025-11-03 10:35 PM
Cool.
I also noticed that there are two opcodes with the same description, or at least as far as I can tell.
2.6.31 ACI_GATT_WRITE_WITHOUT_RESP
2.6.44 ACI_GATT_WRITE_WITHOUT_RESP
There may be a difference somewhere in the description, but I'm not seeing it.
Thoughts?
2025-11-04 2:21 PM
I found a few other anomalies. These commands are declared in the API. The following opcodes are present in the firmware implementation, but not in the documentation v32. AN5270. Amusingly, there are two in the documentation and not declared in code.
ACI_GATT_WRITE_WITHOUT_RESP 0xFD40
ACI_GATT_WRITE_WITH_RESP_EXT 0xFD41
I did not scan the HCI commands, only the ACI extensions. As far as I can see, these below are the only undocumented commands defined in the sample code.
-------------------------------------------
tBleStatus aci_gatt_write_long_char_desc( uint16_t Connection_Handle,
tBleStatus status = 0;
rq.ogf = 0x3f;
rq.ocf = 0x11f;
tBleStatus aci_gatt_read_long_char_desc( uint16_t Connection_Handle,
tBleStatus status = 0;
rq.ogf = 0x3f;
rq.ocf = 0x120;
tBleStatus aci_gatt_write_char_desc( uint16_t Connection_Handle,
tBleStatus status = 0;
rq.ogf = 0x3f;
rq.ocf = 0x121;
tBleStatus aci_gatt_read_char_desc( uint16_t Connection_Handle,
tBleStatus status = 0;
rq.ogf = 0x3f;
rq.ocf = 0x122;
tBleStatus aci_gatt_deny_read( uint16_t Connection_Handle,
tBleStatus status = 0;
rq.ogf = 0x3f;
rq.ocf = 0x12d;
2025-11-06 1:13 AM
Hi @MSing.1713 ,
After an internal cross-check with the Wireless team, In fact the latest release aims to improve and simplify the code by avoiding duplicate commands, there is indeed few commands such as: ACI_GATT_READ_CHAR_DESC, ACI_GATT_READ_LONG_CHAR_DESC, ACI_GATT_WRITE_CHAR_DESC and ACI_GATT_WRITE_LONG_CHAR_DESC which can be considered as “replaced” by the existing API (now ending by _VALUE).
“Replaced” means that an old API has been replaced to a new API (the old API can be used with the ble_legacy.h file, but for new application it's recommended to use the new API).
Concerning the duplication of ACI_GATT_WRITE_WITHOUT_RESP (in 2.6.31 and 2.6.44 sections):
Indeed, we confirm it is a mistake, it is just that the command ACI_GATT_WRITE_WITHOUT_RESP_EXT should be present (and not twice ACI_GATT_WRITE_WITHOUT_RESP). This change will be present in coming new version Rev33.