Skip to content
Snippets Groups Projects
Verified Commit 2c9fc36c authored by Hauke Mehrtens's avatar Hauke Mehrtens Committed by rahix
Browse files

BLE: UART: Convert to static service registration


Convert to static service registration

Signed-off-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
parent 3b79a771
No related branches found
No related tags found
No related merge requests found
...@@ -31,52 +31,78 @@ enum { UART_SVC_HDL = UART_START_HDL, /*!< \brief UART service declaration */ ...@@ -31,52 +31,78 @@ enum { UART_SVC_HDL = UART_START_HDL, /*!< \brief UART service declaration */
/* clang-format off */ /* 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 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}; 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}; 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}; static const uint16_t uartTxCh_len = sizeof(uartTxCh);
/* clang-format on */ 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 */ static uint8_t uartTxCh_buf[128];
pSHdl = AttsDynCreateGroup(UART_START_HDL, UART_END_HDL); static uint16_t uartTxCh_buf_len = sizeof(uartTxCh_buf);
/* clang-format on */
if (pSHdl != NULL) { /* Attribute list for uriCfg group */
/* clang-format off */ static const attsAttr_t uartAttrCfgList[] = {
/* Primary service */ /* Primary service */
AttsDynAddAttrConst( pSHdl, attPrimSvcUuid, UARTSvc, sizeof(UARTSvc), {
0, ATTS_PERMIT_READ); .pUuid = attPrimSvcUuid,
.pValue = (uint8_t *)UARTSvc,
.pLen = (uint16_t *)&UARTSvc_len,
.maxLen = sizeof(UARTSvc),
.settings = 0,
.permissions = ATTS_PERMIT_READ,
},
/* UART rx characteristic */ /* UART rx characteristic */
AttsDynAddAttrConst( pSHdl, attChUuid, uartRxCh, sizeof(uartRxCh), {
0, ATTS_PERMIT_READ); .pUuid = attChUuid,
// XXX: attUartRxChUuid is 16 bytes but nothing says so.... .pValue = (uint8_t *)uartRxCh,
.pLen = (uint16_t *)&uartRxCh_len,
.maxLen = sizeof(uartRxCh),
.settings = 0,
.permissions = ATTS_PERMIT_READ,
},
/* UART rx value */ /* UART rx value */
// XXX: not sure if max value of 128 is fine... {
AttsDynAddAttr( pSHdl, attUartRxChUuid, NULL, 0, 128, .pUuid = attUartRxChUuid,
ATTS_SET_WRITE_CBACK | ATTS_SET_VARIABLE_LEN, ATTS_PERMIT_WRITE); .pValue = NULL,
.pLen = NULL,
.maxLen = 128,
.settings = ATTS_SET_WRITE_CBACK | ATTS_SET_VARIABLE_LEN,
.permissions = ATTS_PERMIT_WRITE,
},
/* UART tx characteristic */ /* UART tx characteristic */
AttsDynAddAttrConst( pSHdl, attChUuid, uartTxCh, sizeof(uartTxCh), {
0, ATTS_PERMIT_READ); .pUuid = attChUuid,
.pValue = (uint8_t *)uartTxCh,
.pLen = (uint16_t *)&uartTxCh_len,
.maxLen = sizeof(uartTxCh),
.settings = 0,
.permissions = ATTS_PERMIT_READ,
},
/* UART tx value */ /* UART tx value */
/* TODO: do we need ATTS_SET_READ_CBACK ? */ /* TODO: do we need ATTS_SET_READ_CBACK ? */
AttsDynAddAttr( pSHdl, attUartTxChUuid, NULL, 0, sizeof(uint8_t), {
ATTS_SET_READ_CBACK, ATTS_PERMIT_READ); .pUuid = attUartTxChUuid,
.pValue = uartTxCh_buf,
.pLen = &uartTxCh_buf_len,
.maxLen = sizeof(uartTxCh_buf),
.settings = ATTS_SET_READ_CBACK,
.permissions = ATTS_PERMIT_READ,
},
/* UART tx CCC descriptor */ /* UART tx CCC descriptor */
AttsDynAddAttr( pSHdl, attCliChCfgUuid, initCcc, sizeof(uint16_t), sizeof(uint16_t), {
ATTS_SET_CCC, ATTS_PERMIT_READ | ATTS_PERMIT_WRITE); .pUuid = attCliChCfgUuid,
/* clang-format on */ .pValue = NULL,
} .pLen = NULL,
.maxLen = 0,
return pSHdl; .settings = ATTS_SET_CCC,
} .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_WRITE,
},
};
dmConnId_t active_connection = 0; dmConnId_t active_connection = 0;
...@@ -165,11 +191,16 @@ void ble_uart_write(uint8_t *pValue, uint8_t len) ...@@ -165,11 +191,16 @@ void ble_uart_write(uint8_t *pValue, uint8_t len)
} }
} }
static attsGroup_t uartCfgGroup = {
.pAttr = (attsAttr_t *)uartAttrCfgList,
.readCback = UARTReadCback,
.writeCback = UARTWriteCback,
.startHandle = UART_START_HDL,
.endHandle = UART_END_HDL,
};
void bleuart_init(void) void bleuart_init(void)
{ {
/* Add the UART service dynamically */ /* Add the UART service */
void *pSHdl; AttsAddGroup(&uartCfgGroup);
pSHdl = SvcUARTAddGroupDyn();
AttsDynRegister(pSHdl, UARTReadCback, UARTWriteCback);
//AttsDynRegister(pSHdl, NULL, UARTWriteCback);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment