diff --git a/app/src/split/bluetooth/service.c b/app/src/split/bluetooth/service.c index 8a8dd151..5da5401d 100644 --- a/app/src/split/bluetooth/service.c +++ b/app/src/split/bluetooth/service.c @@ -4,7 +4,6 @@ * SPDX-License-Identifier: MIT */ -#include #include #include #include @@ -21,23 +20,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include #include -#include - -#if ZMK_KEYMAP_HAS_SENSORS -struct sensor_event { - uint8_t sensor_number; - struct sensor_value value; -} sensor_event; - -static ssize_t split_svc_sensor_state(struct bt_conn *conn, const struct bt_gatt_attr *attrs, - void *buf, uint16_t len, uint16_t offset) { - return bt_gatt_attr_read(conn, attrs, buf, len, offset, &sensor_event, sizeof(sensor_event)); -} - -static void split_svc_sensor_state_ccc(const struct bt_gatt_attr *attr, uint16_t value) { - LOG_DBG("value %d", value); -} -#endif /* ZMK_KEYMAP_HAS_SENSORS */ #define POS_STATE_LEN 16 @@ -116,14 +98,8 @@ BT_GATT_SERVICE_DEFINE( BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE_ENCRYPT, NULL, split_svc_run_behavior, &behavior_run_payload), BT_GATT_DESCRIPTOR(BT_UUID_NUM_OF_DIGITALS, BT_GATT_PERM_READ, split_svc_num_of_positions, NULL, - &num_of_positions), -#if ZMK_KEYMAP_HAS_SENSORS - BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID), - BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, - split_svc_sensor_state, NULL, &sensor_event), - BT_GATT_CCC(split_svc_sensor_state_ccc, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), -#endif /* ZMK_KEYMAP_HAS_SENSORS */ -); + &num_of_positions), ); + K_THREAD_STACK_DEFINE(service_q_stack, CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_STACK_SIZE); struct k_work_q service_work_q; @@ -174,50 +150,7 @@ int zmk_split_bt_position_released(uint8_t position) { WRITE_BIT(position_state[position / 8], position % 8, false); return send_position_state(); } -#if ZMK_KEYMAP_HAS_SENSORS -K_MSGQ_DEFINE(sensor_state_msgq, sizeof(sensor_event), - CONFIG_ZMK_SPLIT_BLE_PERIPHERAL_POSITION_QUEUE_SIZE, 4); -void send_sensor_state_callback(struct k_work *work) { - struct sensor_event ev; - - while (k_msgq_get(&sensor_state_msgq, &ev, K_NO_WAIT) == 0) { - int err = bt_gatt_notify(NULL, &split_svc.attrs[5], &ev, sizeof(ev)); - if (err) { - LOG_DBG("Error notifying %d", err); - } - } -}; - -K_WORK_DEFINE(service_sensor_notify_work, send_sensor_state_callback); - -int send_sensor_state() { - int err = k_msgq_put(&sensor_state_msgq, &sensor_event, K_MSEC(100)); - if (err) { - // retry... - switch (err) { - case -EAGAIN: { - LOG_WRN("Sensor state message queue full, popping first message and queueing again"); - struct sensor_event discarded_state; - k_msgq_get(&sensor_state_msgq, &discarded_state, K_NO_WAIT); - return send_sensor_state(); - } - default: - LOG_WRN("Failed to queue sensor state to send (%d)", err); - return err; - } - } - - k_work_submit_to_queue(&service_work_q, &service_sensor_notify_work); - return 0; -} - -int zmk_split_bt_sensor_triggered(uint8_t sensor_number, struct sensor_value value) { - sensor_event.sensor_number = sensor_number; - sensor_event.value = value; - return send_sensor_state(); -} -#endif /* ZMK_KEYMAP_HAS_SENSORS */ int service_init(const struct device *_arg) { static const struct k_work_queue_config queue_config = { .name = "Split Peripheral Notification Queue"};