No ACL setup yet! Denying access to everyone.
en:edu:zmitac:s2:aih:lab:nrf52zephyrbleperipheral
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:edu:zmitac:s2:aih:lab:nrf52zephyrbleperipheral [2024/01/13 13:08] – ktokarz | en:edu:zmitac:s2:aih:lab:nrf52zephyrbleperipheral [2024/01/13 15:23] (current) – [Adding the possibility of reading the characteristic] ktokarz | ||
|---|---|---|---|
| Line 81: | Line 81: | ||
| The meaning of parameters are as follows: | The meaning of parameters are as follows: | ||
| * _uuid – Characteristic attribute uuid. | * _uuid – Characteristic attribute uuid. | ||
| - | * _props | + | * _props |
| - | * _perm – Characteristic Attribute access permissions. | + | * _perm – Characteristic Attribute access permissions |
| - | * _read – Characteristic Attribute read callback. | + | * _read – Characteristic Attribute read callback |
| - | * _write | + | * _write |
| - | * _user_data – Characteristic Attribute user data. | + | * _user_data – Characteristic Attribute user data (optional pointer to the characteristic data). |
| The indication mechanism allows the server to send data to the client only when needed (for example periodically or on value change). The client must enable indication by setting the descriptor with UUID 0x2902 to 0x0002. This can be done in the nRF Connect application by tapping the two arrows symbol, as in figure {{ref> | The indication mechanism allows the server to send data to the client only when needed (for example periodically or on value change). The client must enable indication by setting the descriptor with UUID 0x2902 to 0x0002. This can be done in the nRF Connect application by tapping the two arrows symbol, as in figure {{ref> | ||
| <figure arrow_indicate> | <figure arrow_indicate> | ||
| Line 102: | Line 102: | ||
| * write the callback function that calls bt_gatt_attr_read() (example function in the following code) | * write the callback function that calls bt_gatt_attr_read() (example function in the following code) | ||
| * register callback function within the BT_GATT_CHARACTERISTIC macro using the " | * register callback function within the BT_GATT_CHARACTERISTIC macro using the " | ||
| + | Notice that the temperature data sent in the original example by indications is encoded in the following format, which can be automatically decoded by nRF Connect software. | ||
| + | < | ||
| + | bool temp_in_fahr_units | ||
| + | bool time_stamp_present | ||
| + | bool temp_type_present | ||
| + | ieee_float32_t temp_in_celcius | ||
| + | ieee_float32_t temp_in_fahr | ||
| + | ble_date_time_t time_stamp | ||
| + | uint8_t temp_type | ||
| + | </ | ||
| + | All boolean flags are set to 0 (the first byte which is sent is 0x00), so the only data is the temperature expressed as a 32-bit floating point number encoded as an 8-bit exponent and 24-bit mantissa (ieee_float32_t). | ||
| + | < | ||
| + | In the ieee_float32_t format, the exponent is encoded as a signed 8-bit binary 10-based number. The mantissa is encoded as a signed 24-bit binary number. This format is incompatible with single or double-precision formats used in microprocessors, | ||
| + | </ | ||
| An example of the callback function which simulates the thermometer value can look like this: | An example of the callback function which simulates the thermometer value can look like this: | ||
| < | < | ||
| Line 108: | Line 122: | ||
| | | ||
| { | { | ||
| - | uint8_t | + | uint8_t |
| - | return bt_gatt_attr_read(conn, | + | double temp_read; |
| + | uint32_t mantissa; | ||
| + | uint8_t exponent; | ||
| + | |||
| + | temp_read | ||
| + | temp_buffer[0] = 0x00; | ||
| + | |||
| + | // | ||
| + | //mantissa is 24 bits signed binary | ||
| + | //exponent is 8 bits signed 10-base binary | ||
| + | |||
| + | mantissa = (uint32_t)(temp_read * 100); | ||
| + | exponent = (uint8_t)-2; | ||
| + | sys_put_le24(mantissa, | ||
| + | temp_buffer[4] = exponent; | ||
| + | return bt_gatt_attr_read(conn, | ||
| } | } | ||
| </ | </ | ||
| + | |||
| ===== Tasks to do during the laboratory ===== | ===== Tasks to do during the laboratory ===== | ||
| - Import the peripheral_ht example. | - Import the peripheral_ht example. | ||
en/edu/zmitac/s2/aih/lab/nrf52zephyrbleperipheral.1705147721.txt.gz · Last modified: by ktokarz
