From: Gerhard Sittig Date: Sun, 19 Mar 2023 16:51:26 +0000 (+0100) Subject: serial_bt: add generic conn=bt/notify/ "chip type" X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=dae34e302180a8c884f730b2587f6f9482984f42 serial_bt: add generic conn=bt/notify/ "chip type" Add support for the rather generic 'notify' Bluetooth "chip type". This avoids the necessity to come up with chip names for yet unsupported or unknown BLE modules. Might be less confusing for users. All RX/TX/CCCD handles must be provided by users. --- diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 04a08ca8..8147fe57 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -1621,6 +1621,7 @@ struct sr_serial_dev_inst { SER_BT_CONN_NRF51, /**!< BLE, Nordic nRF51, notifications */ SER_BT_CONN_CC254x, /**!< BLE, TI CC254x, notifications */ SER_BT_CONN_AC6328, /**!< BLE, JL AC6328B, notifications */ + SER_BT_CONN_NOTIFY, /**!< BLE, generic notifications */ SER_BT_CONN_MAX, /**!< sentinel */ } bt_conn_type; char *bt_addr_local; diff --git a/src/serial_bt.c b/src/serial_bt.c index 67b4e6a5..4dad01ff 100644 --- a/src/serial_bt.c +++ b/src/serial_bt.c @@ -114,6 +114,7 @@ static const char *ser_bt_conn_names[SER_BT_CONN_MAX] = { [SER_BT_CONN_NRF51] = "nrf51", [SER_BT_CONN_CC254x] = "cc254x", [SER_BT_CONN_AC6328] = "ac6328", + [SER_BT_CONN_NOTIFY] = "notify", }; static enum ser_bt_conn_t lookup_conn_name(const char *name) @@ -305,6 +306,11 @@ static int ser_bt_parse_conn_spec( if (cccd_val) *cccd_val = 0x0001; break; + case SER_BT_CONN_NOTIFY: + /* All other values must be provided externally. */ + if (cccd_val) + *cccd_val = 0x0001; + break; default: return SR_ERR_ARG; } @@ -508,6 +514,7 @@ static int ser_bt_open(struct sr_serial_dev_inst *serial, int flags) case SER_BT_CONN_NRF51: case SER_BT_CONN_CC254x: case SER_BT_CONN_AC6328: + case SER_BT_CONN_NOTIFY: rc = sr_bt_config_notify(desc, read_hdl, write_hdl, cccd_hdl, cccd_val, ble_mtu); @@ -543,6 +550,7 @@ static int ser_bt_open(struct sr_serial_dev_inst *serial, int flags) case SER_BT_CONN_NRF51: case SER_BT_CONN_CC254x: case SER_BT_CONN_AC6328: + case SER_BT_CONN_NOTIFY: rc = sr_bt_connect_ble(desc); if (rc < 0) return SR_ERR; @@ -620,6 +628,7 @@ static int ser_bt_write(struct sr_serial_dev_inst *serial, case SER_BT_CONN_NRF51: case SER_BT_CONN_CC254x: case SER_BT_CONN_AC6328: + case SER_BT_CONN_NOTIFY: /* * Assume that when applications call the serial layer's * write routine, then the BLE chip/module does support @@ -686,6 +695,7 @@ static int ser_bt_read(struct sr_serial_dev_inst *serial, case SER_BT_CONN_NRF51: case SER_BT_CONN_CC254x: case SER_BT_CONN_AC6328: + case SER_BT_CONN_NOTIFY: dlen = sr_ser_has_queued_data(serial); rc = sr_bt_check_notify(serial->bt_desc); if (rc < 0) @@ -784,6 +794,7 @@ static int bt_source_cb(int fd, int revents, void *cb_data) case SER_BT_CONN_NRF51: case SER_BT_CONN_CC254x: case SER_BT_CONN_AC6328: + case SER_BT_CONN_NOTIFY: dlen = sr_ser_has_queued_data(serial); rc = sr_bt_check_notify(serial->bt_desc); if (rc < 0)