diff --git a/EDA/SMT/quack-bom.numbers b/EDA/SMT/quack-bom.numbers index 5434c1c..56e214d 100755 Binary files a/EDA/SMT/quack-bom.numbers and b/EDA/SMT/quack-bom.numbers differ diff --git a/main/blue.c b/main/blue.c index 27845a9..aebf3e9 100644 --- a/main/blue.c +++ b/main/blue.c @@ -34,9 +34,11 @@ #include "nvs_flash.h" #include "esp_bt.h" #include "esp_bt_defs.h" +#if CONFIG_BT_BLE_ENABLED #include "esp_gap_ble_api.h" #include "esp_gatts_api.h" #include "esp_gatt_defs.h" +#endif #include "esp_bt_main.h" #include "esp_bt_device.h" #include "esp_timer.h" @@ -75,8 +77,8 @@ static esp_hid_raw_report_map_t *blue_hid_rm_get(esp_hidh_dev_t *dev); void blue_set_boot_protocol(esp_hidh_dev_t *dev); static bool blue_support_boot(esp_hidh_dev_t *dev); -/* direct calls to bluedroid */ -extern void BTA_HhSetProtoMode(uint8_t handle, uint8_t t_type); +/* direct calls to esp_hid_* */ +void bt_gap_event_handler(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param); /* Device specific functions blue_d_* */ static void blue_d_callback(void *handler_args, esp_event_base_t base, int32_t id, void *event_data) @@ -133,22 +135,21 @@ static void blue_d_connect() { static void blue_d_disconnect(esp_hidd_event_data_t *dev) { ESP_LOGI(TAG, "Host disconnected, reason: %s", esp_hid_disconnect_reason_str(esp_hidd_dev_transport_get(dev->disconnect.dev), dev->disconnect.reason)); +#if CONFIG_BT_BLE_ENABLED esp_hid_ble_gap_adv_start(); +#endif xTaskNotify(t_blue, LED_SLOW, eSetValueWithOverwrite); } static void blue_d_init() { esp_err_t ret; - ret = esp_hid_ble_gap_adv_init(ESP_HID_APPEARANCE_MOUSE, m4848_config.device_name); - ESP_ERROR_CHECK( ret ); - - if ((ret = esp_ble_gatts_register_callback(esp_hidd_gatts_event_handler)) != ESP_OK) { - ESP_LOGE(TAG, "GATTS register callback failed: %d", ret); + if ((ret = esp_bt_gap_register_callback(bt_gap_event_handler)) != ESP_OK) { + ESP_LOGE(TAG, "BT GAP register callback failed: %d", ret); return; } - ESP_ERROR_CHECK(esp_hidd_dev_init(&m4848_config, ESP_HID_TRANSPORT_BLE, blue_d_callback, &hid_dev)); + ESP_ERROR_CHECK(esp_hidd_dev_init(&m4848_config, ESP_HID_TRANSPORT_BT, blue_d_callback, &hid_dev)); xTaskCreate(blue_adb2hid, "ADB2BT", 2 * 1024, NULL, tskIDLE_PRIORITY + 1, &t_adb2hid); } @@ -161,12 +162,16 @@ static void blue_d_start() { ESP_LOGD(TAG, "Bluetooth stack started"); xTaskNotify(t_blue, LED_SLOW, eSetValueWithOverwrite); +#if CONFIG_BT_BLE_ENABLED esp_hid_ble_gap_adv_start(); +#endif } /* * Called by the ADB stack from adb_task_host on mouse activity * Convert the 16bit ADB data to a 3 bytes HID INPUT REPORT matching the m4848 + * + * The format is also BOOT compatible so don't bother to check what mode we are in */ void blue_adb2hid(void *pvParameters) { @@ -335,9 +340,7 @@ void blue_init(void) ESP_LOGD(TAG, "Starting Bluetooth init on core %d", xPortGetCoreID()); ESP_ERROR_CHECK(ret); - /* ESP_BT_MODE_CLASSIC_BT doesn't work, it freezes esp_hidh_init */ - ESP_ERROR_CHECK(esp_hid_gap_init(ESP_BT_MODE_BTDM)); - ESP_ERROR_CHECK(esp_ble_gattc_register_callback(esp_hidh_gattc_event_handler)); + ESP_ERROR_CHECK(esp_hid_gap_init(ESP_BT_MODE_CLASSIC_BT)); esp_log_level_set("event", ESP_LOG_INFO); /* complains about wrong data len on BOOT mode and CCONTROL */ @@ -555,12 +558,11 @@ void blue_scan(void *pvParameters) { esp_hid_scan_result_t *r = results; while (r) { - ESP_LOGI(TAG, "found %s %s device: " ESP_BD_ADDR_STR ", RSSI: %d, NAME: %s", - (r->transport == ESP_HID_TRANSPORT_BLE) ? "BLE" : "BT", - esp_hid_cod_major_str(r->bt.cod.major), - ESP_BD_ADDR_HEX(r->bda), r->rssi, r->name ? r->name : ""); + /* + * as of v1.4.5, esp_hid_gap will print detected devices in console (handle_bt_device_result()) + * just look for something that looks like Bluetooth Classic mouse + */ - /* search for something that looks like Bluetooth Classic mouse */ if (r->transport == ESP_HID_TRANSPORT_BT && strcmp("PERIPHERAL", esp_hid_cod_major_str(r->bt.cod.major)) == 0 && (r->bt.cod.minor & ESP_HID_COD_MIN_MOUSE)) { diff --git a/main/esp_hid_gap.c b/main/esp_hid_gap.c index 5d71844..1e0c396 100644 --- a/main/esp_hid_gap.c +++ b/main/esp_hid_gap.c @@ -381,14 +381,16 @@ static void handle_ble_device_result(struct ble_scan_result_evt_param *scan_rst) } #endif /* CONFIG_BT_BLE_ENABLED */ +#warning here1 #if CONFIG_BT_HID_HOST_ENABLED /* * BT GAP * */ -static void bt_gap_event_handler(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) +#warning here2 +void bt_gap_event_handler(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) { - switch (event) { + switch (event) { case ESP_BT_GAP_DISC_STATE_CHANGED_EVT: { ESP_LOGV(TAG, "BT GAP DISC_STATE %s", (param->disc_st_chg.state == ESP_BT_GAP_DISCOVERY_STARTED) ? "START" : "STOP"); if (param->disc_st_chg.state == ESP_BT_GAP_DISCOVERY_STOPPED) { diff --git a/main/esp_hid_gap.h b/main/esp_hid_gap.h index f2fb240..e04a7a0 100644 --- a/main/esp_hid_gap.h +++ b/main/esp_hid_gap.h @@ -1,31 +1,51 @@ -// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at +/* + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. #ifndef _ESP_HID_GAP_H_ #define _ESP_HID_GAP_H_ +#define HIDH_IDLE_MODE 0x00 +#define HIDH_BLE_MODE 0x01 +#define HIDH_BT_MODE 0x02 +#define HIDH_BTDM_MODE 0x03 + +#if CONFIG_BT_HID_HOST_ENABLED +#if CONFIG_BT_BLE_ENABLED +#define HID_HOST_MODE HIDH_BTDM_MODE +#else +#define HID_HOST_MODE HIDH_BT_MODE +#endif +#elif CONFIG_BT_BLE_ENABLED +#define HID_HOST_MODE HIDH_BLE_MODE +#elif CONFIG_BT_NIMBLE_ENABLED +#define HID_HOST_MODE HIDH_BLE_MODE +#else +#define HID_HOST_MODE HIDH_IDLE_MODE +#endif + #include "esp_err.h" #include "esp_log.h" #include "esp_bt.h" +#if !CONFIG_BT_NIMBLE_ENABLED #include "esp_bt_defs.h" #include "esp_bt_main.h" +#include "esp_gap_bt_api.h" +#endif +#include "esp_hid_common.h" +#if CONFIG_BT_BLE_ENABLED #include "esp_gattc_api.h" #include "esp_gatt_defs.h" #include "esp_gap_ble_api.h" -#include "esp_gap_bt_api.h" -#include "esp_hid_common.h" +#endif + +#if CONFIG_BT_NIMBLE_ENABLED +#include "nimble/ble.h" +#endif #ifdef __cplusplus extern "C" { @@ -33,13 +53,18 @@ extern "C" { typedef struct esp_hidh_scan_result_s { struct esp_hidh_scan_result_s *next; +#if CONFIG_BT_NIMBLE_ENABLED + uint8_t bda[6]; +#else + esp_bd_addr_t bda; +#endif - esp_bd_addr_t bda; const char *name; int8_t rssi; esp_hid_usage_t usage; esp_hid_transport_t transport; //BT, BLE or USB union { + #if !CONFIG_BT_NIMBLE_ENABLED struct { esp_bt_cod_t cod; esp_bt_uuid_t uuid; @@ -48,6 +73,12 @@ typedef struct esp_hidh_scan_result_s { esp_ble_addr_type_t addr_type; uint16_t appearance; } ble; + #else + struct { + uint8_t addr_type; + uint16_t appearance; + } ble; + #endif }; } esp_hid_scan_result_t; @@ -58,8 +89,10 @@ void esp_hid_scan_results_free(esp_hid_scan_result_t *results); esp_err_t esp_hid_ble_gap_adv_init(uint16_t appearance, const char *device_name); esp_err_t esp_hid_ble_gap_adv_start(void); +#if !CONFIG_BT_NIMBLE_ENABLED void print_uuid(esp_bt_uuid_t *uuid); const char *ble_addr_type_str(esp_ble_addr_type_t ble_addr_type); +#endif #ifdef __cplusplus } diff --git a/sdkconfig b/sdkconfig index bce28c1..dbcd9a6 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1,6 +1,6 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) Project Configuration # CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" @@ -410,24 +410,7 @@ CONFIG_BT_HID_ENABLED=y CONFIG_BT_HID_HOST_ENABLED=y # CONFIG_BT_HID_DEVICE_ENABLED is not set CONFIG_BT_SSP_ENABLED=y -CONFIG_BT_BLE_ENABLED=y -CONFIG_BT_GATTS_ENABLE=y -# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set -# CONFIG_BT_BLE_BLUFI_ENABLE is not set -CONFIG_BT_GATT_MAX_SR_PROFILES=8 -CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100 -# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0 -# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set -# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set -# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set -CONFIG_BT_GATTC_ENABLE=y -CONFIG_BT_GATTC_MAX_CACHE_CHAR=40 -# CONFIG_BT_GATTC_CACHE_NVS_FLASH is not set -CONFIG_BT_GATTC_CONNECT_RETRY_COUNT=3 -CONFIG_BT_BLE_SMP_ENABLE=y -# CONFIG_BT_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set +# CONFIG_BT_BLE_ENABLED is not set # CONFIG_BT_STACK_NO_LOG is not set # @@ -604,12 +587,11 @@ CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2 # end of BT DEBUG LOG LEVEL CONFIG_BT_ACL_CONNECTIONS=4 -CONFIG_BT_MULTI_CONNECTION_ENBALE=y +# CONFIG_BT_MULTI_CONNECTION_ENBALE is not set # CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST is not set # CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY is not set # CONFIG_BT_BLE_HOST_QUEUE_CONG_CHECK is not set CONFIG_BT_SMP_ENABLE=y -# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30 CONFIG_BT_MAX_DEVICE_NAME_LEN=32 # CONFIG_BT_BLE_RPA_SUPPORTED is not set @@ -621,9 +603,8 @@ CONFIG_BT_BLE_RPA_TIMEOUT=900 # Controller Options # # CONFIG_BTDM_CTRL_MODE_BLE_ONLY is not set -# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set -CONFIG_BTDM_CTRL_MODE_BTDM=y -CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 +CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=y +# CONFIG_BTDM_CTRL_MODE_BTDM is not set CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN=2 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN=0 # CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_HCI is not set @@ -636,11 +617,9 @@ CONFIG_BTDM_CTRL_PCM_POLAR_FALLING_EDGE=y # CONFIG_BTDM_CTRL_PCM_POLAR_RISING_EDGE is not set CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 -CONFIG_BTDM_CTRL_AUTO_LATENCY=y -CONFIG_BTDM_CTRL_AUTO_LATENCY_EFF=y CONFIG_BTDM_CTRL_LEGACY_AUTH_VENDOR_EVT=y CONFIG_BTDM_CTRL_LEGACY_AUTH_VENDOR_EVT_EFF=y -CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=2 CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y @@ -658,20 +637,7 @@ CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y # end of MODEM SLEEP Options -CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 -CONFIG_BTDM_BLE_SCAN_DUPL=y -CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set -# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set -CONFIG_BTDM_SCAN_DUPL_TYPE=0 -CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=200 -CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0 -# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set -CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y -CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 -CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_BTDM_RESERVE_DRAM=0xdb5c CONFIG_BTDM_CTRL_HLI=y # end of Controller Options @@ -1928,14 +1894,6 @@ CONFIG_BTU_TASK_STACK_SIZE=4096 CONFIG_CLASSIC_BT_ENABLED=y # CONFIG_A2DP_ENABLE is not set # CONFIG_HFP_ENABLE is not set -CONFIG_GATTS_ENABLE=y -# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set -CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y -CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0 -CONFIG_GATTC_ENABLE=y -# CONFIG_GATTC_CACHE_NVS_FLASH is not set -CONFIG_BLE_SMP_ENABLE=y -# CONFIG_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set # CONFIG_HCI_TRACE_LEVEL_NONE is not set # CONFIG_HCI_TRACE_LEVEL_ERROR is not set CONFIG_HCI_TRACE_LEVEL_WARNING=y @@ -2099,32 +2057,19 @@ CONFIG_BLUFI_TRACE_LEVEL_WARNING=y CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2 # CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set CONFIG_SMP_ENABLE=y -# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30 # CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY is not set -# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set -CONFIG_BTDM_CONTROLLER_MODE_BTDM=y -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 +CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY=y +# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN=2 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN=0 -CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=2 CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y # CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y -CONFIG_BLE_SCAN_DUPLICATE=y -CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set -# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set -CONFIG_SCAN_DUPLICATE_TYPE=0 -CONFIG_DUPLICATE_SCAN_CACHE_SIZE=200 -# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set -CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y -CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 -CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 CONFIG_ADC2_DISABLE_DAC=y # CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_SW_COEXIST_ENABLE is not set