diff --git a/epicardium/ble/card10.c b/epicardium/ble/card10.c index 2105ac02ca03e168fe8711f8c2797799e6801070..78e128bb4e82ac74133614cad0ef56cd0f198d89 100644 --- a/epicardium/ble/card10.c +++ b/epicardium/ble/card10.c @@ -256,228 +256,272 @@ static uint16_t initLightSensorLen = sizeof(initLightSensorValue); */ static const attsAttr_t card10SvcAttrList[] = { - { .pUuid = attPrimSvcUuid, - .pValue = (uint8_t *)UUID_svc, - .pLen = (uint16_t *)&UUID_len, - .maxLen = sizeof(UUID_svc), - .permissions = ATTS_PERMIT_READ }, + { + .pUuid = attPrimSvcUuid, + .pValue = (uint8_t *)UUID_svc, + .pLen = (uint16_t *)&UUID_len, + .maxLen = sizeof(UUID_svc), + .permissions = ATTS_PERMIT_READ, + }, // TIME - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_time, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_time), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_time, - .pValue = timeValue, - .pLen = &timeLen, - .maxLen = sizeof(uint64_t), - .settings = (ATTS_SET_WRITE_CBACK | ATTS_SET_READ_CBACK), - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH | ATTS_PERMIT_READ | - ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_time, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_time), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_time, + .pValue = timeValue, + .pLen = &timeLen, + .maxLen = sizeof(uint64_t), + .settings = ATTS_SET_WRITE_CBACK | ATTS_SET_READ_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH | ATTS_PERMIT_READ | + ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, + }, // VIBRA - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_vibra, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_vibra), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_vibra, - .pValue = NULL, - .maxLen = sizeof(uint16_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_vibra, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_vibra), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_vibra, + .pValue = NULL, + .maxLen = sizeof(uint16_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // ROCKETS - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_rockets, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_rockets), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_rockets, - .pValue = NULL, - .maxLen = 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_rockets, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_rockets), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_rockets, + .pValue = NULL, + .maxLen = 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // BG LED Bottom left - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_led_bg_bottom_left, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_led_bg_bottom_left), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_led_bg_bottom_left, - .pValue = NULL, - .maxLen = 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_led_bg_bottom_left, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_led_bg_bottom_left), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_led_bg_bottom_left, + .pValue = NULL, + .maxLen = 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // BG LED Bottom right - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_led_bg_bottom_right, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_led_bg_bottom_right), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_led_bg_bottom_right, - .pValue = NULL, - .maxLen = 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_led_bg_bottom_right, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_led_bg_bottom_right), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_led_bg_bottom_right, + .pValue = NULL, + .maxLen = 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // BG LED top right - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_led_bg_top_right, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_led_bg_top_right), - .settings = 0, - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_led_bg_top_right, - .pValue = NULL, - .maxLen = 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_led_bg_top_right, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_led_bg_top_right), + .settings = 0, + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_led_bg_top_right, + .pValue = NULL, + .maxLen = 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // BG LED top left - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_led_bg_top_left, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_led_bg_top_left), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_led_bg_top_left, - .pValue = NULL, - .maxLen = 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_led_bg_top_left, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_led_bg_top_left), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_led_bg_top_left, + .pValue = NULL, + .maxLen = 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // Dim bottom module - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_leds_bottom_dim, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_leds_bottom_dim), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_leds_bottom_dim, - .pValue = NULL, - .pLen = 0, - .maxLen = sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_leds_bottom_dim, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_leds_bottom_dim), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_leds_bottom_dim, + .pValue = NULL, + .pLen = 0, + .maxLen = sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // Dim top module - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_leds_top_dim, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_leds_top_dim), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_leds_top_dim, - .pValue = NULL, - .maxLen = sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_leds_top_dim, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_leds_top_dim), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_leds_top_dim, + .pValue = NULL, + .maxLen = sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // led powersafe - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_led_powersafe, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_led_powersafe), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_led_powersafe, - .pValue = NULL, - .maxLen = sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_led_powersafe, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_led_powersafe), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_led_powersafe, + .pValue = NULL, + .maxLen = sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // flashlight - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_flashlight, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_flashlight), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_flashlight, - .pValue = NULL, - .maxLen = sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_flashlight, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_flashlight), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_flashlight, + .pValue = NULL, + .maxLen = sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // personal state - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_personal_state, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_personal_state), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_personal_state, - .pValue = &personalStateValue, - .pLen = &personalStateLen, - .maxLen = sizeof(uint16_t), - .settings = (ATTS_SET_WRITE_CBACK | ATTS_SET_READ_CBACK), - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH | ATTS_PERMIT_READ | - ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_personal_state, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_personal_state), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_personal_state, + .pValue = &personalStateValue, + .pLen = &personalStateLen, + .maxLen = sizeof(uint16_t), + .settings = ATTS_SET_WRITE_CBACK | ATTS_SET_READ_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH | ATTS_PERMIT_READ | + ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, + }, // ABOVE LEDS - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_leds_above, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_leds_above), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_leds_above, - .pValue = NULL, - .maxLen = 11 * 3 * sizeof(uint8_t), - .settings = ATTS_SET_WRITE_CBACK, - .permissions = - (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | - ATTS_PERMIT_WRITE_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_leds_above, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_leds_above), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_leds_above, + .pValue = NULL, + .maxLen = 11 * 3 * sizeof(uint8_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, // Light sensor - { .pUuid = attChUuid, - .pValue = (uint8_t *)UUID_char_light_sensor, - .pLen = (uint16_t *)&UUID_char_len, - .maxLen = sizeof(UUID_char_light_sensor), - .permissions = ATTS_PERMIT_READ }, - { .pUuid = UUID_attChar_light_sensor, - .pValue = initLightSensorValue, - .pLen = &initLightSensorLen, - .maxLen = sizeof(uint8_t), - .settings = ATTS_SET_READ_CBACK, - .permissions = - (ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | - ATTS_PERMIT_READ_AUTH) }, + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_light_sensor, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_light_sensor), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = UUID_attChar_light_sensor, + .pValue = initLightSensorValue, + .pLen = &initLightSensorLen, + .maxLen = sizeof(uint8_t), + .settings = ATTS_SET_READ_CBACK, + .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | + ATTS_PERMIT_READ_AUTH, + }, }; // validating, that the service really get all charateristics diff --git a/epicardium/ble/filetransfer.c b/epicardium/ble/filetransfer.c index fa2cff4d3e8f884a6f382f469fab13c7126045cb..88b31308bf19cf9c02f45615a34b58fa19d5300f 100644 --- a/epicardium/ble/filetransfer.c +++ b/epicardium/ble/filetransfer.c @@ -143,7 +143,8 @@ static const attsAttr_t fileTransCfgList[] = { .pLen = NULL, .maxLen = 128, .settings = ATTS_SET_WRITE_CBACK | ATTS_SET_VARIABLE_LEN, - .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_AUTH, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, }, /* File transfer Central RX characteristic */ { @@ -161,7 +162,8 @@ static const attsAttr_t fileTransCfgList[] = { .pLen = &attRxChConfigValue_len, .maxLen = sizeof(attRxChConfigValue), .settings = ATTS_SET_VARIABLE_LEN, - .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_AUTH, + .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | + ATTS_PERMIT_READ_AUTH, }, /* File transfer Central RX notification channel */ { @@ -170,8 +172,9 @@ static const attsAttr_t fileTransCfgList[] = { .pLen = &attRxChConfigValue_len, .maxLen = sizeof(attRxChConfigValue), .settings = ATTS_SET_CCC, - .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_AUTH | - ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_AUTH, + .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | + ATTS_PERMIT_READ_AUTH | ATTS_PERMIT_WRITE | + ATTS_PERMIT_WRITE_ENC | ATTS_PERMIT_WRITE_AUTH, }, }; diff --git a/epicardium/ble/uart.c b/epicardium/ble/uart.c index 584ae0ea211cc6728963bb6d3669344307ad527f..5fdfb74ac9885975e125f51216bd2953986eca9c 100644 --- a/epicardium/ble/uart.c +++ b/epicardium/ble/uart.c @@ -31,66 +31,84 @@ enum { UART_SVC_HDL = UART_START_HDL, /*!< \brief UART service declaration */ /* clang-format off */ static const uint8_t UARTSvc[] = {0x9E,0xCA,0xDC,0x24,0x0E,0xE5,0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x01,0x00,0x40,0x6E}; +static const uint16_t UARTSvc_len = sizeof(UARTSvc); static const uint8_t uartRxCh[] = {ATT_PROP_WRITE, UINT16_TO_BYTES(UART_RX_HDL), 0x9E,0xCA,0xDC,0x24,0x0E,0xE5,0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x02,0x00,0x40,0x6E}; -const uint8_t attUartRxChUuid[] = {0x9E,0xCA,0xDC,0x24,0x0E,0xE5, 0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x02,0x00,0x40,0x6E}; +static const uint16_t uartRxCh_len = sizeof(uartRxCh); +static const uint8_t attUartRxChUuid[] = {0x9E,0xCA,0xDC,0x24,0x0E,0xE5, 0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x02,0x00,0x40,0x6E}; static const uint8_t uartTxCh[] = {ATT_PROP_READ | ATT_PROP_NOTIFY, UINT16_TO_BYTES(UART_TX_HDL), 0x9E,0xCA,0xDC,0x24,0x0E,0xE5,0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x03,0x00,0x40,0x6E}; -const uint8_t attUartTxChUuid[] = {0x9E,0xCA,0xDC,0x24,0x0E,0xE5, 0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x03,0x00,0x40,0x6E}; -/* clang-format on */ +static const uint16_t uartTxCh_len = sizeof(uartTxCh); +static const uint8_t attUartTxChUuid[] = {0x9E,0xCA,0xDC,0x24,0x0E,0xE5, 0xA9,0xE0,0x93,0xF3,0xA3,0xB5,0x03,0x00,0x40,0x6E}; -static void *SvcUARTAddGroupDyn(void) -{ - void *pSHdl; - uint8_t initCcc[] = { UINT16_TO_BYTES(0x0000) }; - - /* Create the service */ - pSHdl = AttsDynCreateGroup(UART_START_HDL, UART_END_HDL); - - if (pSHdl != NULL) { - /* clang-format off */ - /* Primary service */ - AttsDynAddAttrConst( pSHdl, attPrimSvcUuid, UARTSvc, sizeof(UARTSvc), - 0, ATTS_PERMIT_READ); - - /* UART rx characteristic */ - AttsDynAddAttrConst( pSHdl, attChUuid, uartRxCh, sizeof(uartRxCh), - 0, ATTS_PERMIT_READ); - // XXX: attUartRxChUuid is 16 bytes but nothing says so.... - /* UART rx value */ - // XXX: not sure if max value of 128 is fine... - AttsDynAddAttr( pSHdl, attUartRxChUuid, NULL, 0, 128, - ATTS_SET_WRITE_CBACK | ATTS_SET_VARIABLE_LEN, ATTS_PERMIT_WRITE); - - /* UART tx characteristic */ - AttsDynAddAttrConst( pSHdl, attChUuid, uartTxCh, sizeof(uartTxCh), - 0, ATTS_PERMIT_READ); - /* UART tx value */ - /* TODO: do we need ATTS_SET_READ_CBACK ? */ - AttsDynAddAttr( pSHdl, attUartTxChUuid, NULL, 0, sizeof(uint8_t), - ATTS_SET_READ_CBACK, ATTS_PERMIT_READ); - /* UART tx CCC descriptor */ - AttsDynAddAttr( pSHdl, attCliChCfgUuid, initCcc, sizeof(uint16_t), sizeof(uint16_t), - ATTS_SET_CCC, ATTS_PERMIT_READ | ATTS_PERMIT_WRITE); - /* clang-format on */ - } +static uint8_t ble_uart_tx_buf[128]; +static uint16_t ble_uart_buf_tx_fill = 0; +/* clang-format on */ - return pSHdl; -} +/* Attribute list for uriCfg group */ +static const attsAttr_t uartAttrCfgList[] = { + /* Primary service */ + { + .pUuid = attPrimSvcUuid, + .pValue = (uint8_t *)UARTSvc, + .pLen = (uint16_t *)&UARTSvc_len, + .maxLen = sizeof(UARTSvc), + .settings = 0, + .permissions = ATTS_PERMIT_READ, + }, + /* UART rx characteristic */ + { + .pUuid = attChUuid, + .pValue = (uint8_t *)uartRxCh, + .pLen = (uint16_t *)&uartRxCh_len, + .maxLen = sizeof(uartRxCh), + .settings = 0, + .permissions = ATTS_PERMIT_READ, + }, + /* UART rx value */ + { + .pUuid = attUartRxChUuid, + .pValue = NULL, + .pLen = NULL, + .maxLen = 128, + .settings = ATTS_SET_WRITE_CBACK | ATTS_SET_VARIABLE_LEN, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH, + }, + /* UART tx characteristic */ + { + .pUuid = attChUuid, + .pValue = (uint8_t *)uartTxCh, + .pLen = (uint16_t *)&uartTxCh_len, + .maxLen = sizeof(uartTxCh), + .settings = 0, + .permissions = ATTS_PERMIT_READ, + }, + /* UART tx value */ + { + .pUuid = attUartTxChUuid, + .pValue = ble_uart_tx_buf, + .pLen = &ble_uart_buf_tx_fill, + .maxLen = sizeof(ble_uart_tx_buf), + .settings = 0, + .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | + ATTS_PERMIT_READ_AUTH, + }, + /* UART tx CCC descriptor */ + { + .pUuid = attCliChCfgUuid, + .pValue = NULL, + .pLen = NULL, + .maxLen = 0, + .settings = ATTS_SET_CCC, + .permissions = ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH | ATTS_PERMIT_READ | + ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, + }, +}; dmConnId_t active_connection = 0; -static uint8_t UARTReadCback( - dmConnId_t connId, - uint16_t handle, - uint8_t operation, - uint16_t offset, - attsAttr_t *pAttr -) { - printf("read callback\n"); - return ATT_SUCCESS; -} - static uint8_t UARTWriteCback( dmConnId_t connId, uint16_t handle, @@ -119,8 +137,6 @@ static uint8_t UARTWriteCback( return ATT_SUCCESS; } -static uint8_t ble_uart_tx_buf[128]; -static uint8_t ble_uart_buf_tx_fill; static int ble_uart_lasttick = 0; void ble_uart_write(uint8_t *pValue, uint8_t len) @@ -134,11 +150,6 @@ void ble_uart_write(uint8_t *pValue, uint8_t len) if (ble_uart_buf_tx_fill == 128 || pValue[i] == '\r' || pValue[i] == '\n') { if (ble_uart_buf_tx_fill > 0) { - AttsSetAttr( - UART_TX_HDL, - ble_uart_buf_tx_fill, - ble_uart_tx_buf - ); if (active_connection) { int x = xTaskGetTickCount() - ble_uart_lasttick; @@ -165,11 +176,15 @@ void ble_uart_write(uint8_t *pValue, uint8_t len) } } +static attsGroup_t uartCfgGroup = { + .pAttr = (attsAttr_t *)uartAttrCfgList, + .writeCback = UARTWriteCback, + .startHandle = UART_START_HDL, + .endHandle = UART_END_HDL, +}; + void bleuart_init(void) { - /* Add the UART service dynamically */ - void *pSHdl; - pSHdl = SvcUARTAddGroupDyn(); - AttsDynRegister(pSHdl, UARTReadCback, UARTWriteCback); - //AttsDynRegister(pSHdl, NULL, UARTWriteCback); + /* Add the UART service */ + AttsAddGroup(&uartCfgGroup); }