diff --git a/src/platform/silabs/BLEManagerImpl.h b/src/platform/silabs/BLEManagerImpl.h index 29be7edab47205..b13f9fb2901603 100644 --- a/src/platform/silabs/BLEManagerImpl.h +++ b/src/platform/silabs/BLEManagerImpl.h @@ -25,7 +25,7 @@ #pragma once #if CHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE -#ifdef BLE_ENABLE +#if (BLE_ENABLE || RSI_BLE_ENABLE) #define BLE_MIN_CONNECTION_INTERVAL_MS 45 // 45 msec #define BLE_MAX_CONNECTION_INTERVAL_MS 45 // 45 msec #define BLE_SLAVE_LATENCY_MS 0 @@ -33,7 +33,7 @@ #endif // RSI_BLE_ENABLE #include "FreeRTOS.h" #include "timers.h" -#ifdef BLE_ENABLE +#if (BLE_ENABLE || RSI_BLE_ENABLE) #ifdef __cplusplus extern "C" { #endif @@ -64,7 +64,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla public: void HandleBootEvent(void); -#ifdef BLE_ENABLE +#if (BLE_ENABLE || RSI_BLE_ENABLE) void HandleConnectEvent(void); void HandleConnectionCloseEvent(uint16_t reason); void HandleWriteEvent(rsi_ble_event_write_t evt); @@ -81,12 +81,12 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla void HandleTxConfirmationEvent(BLE_CONNECTION_OBJECT conId); void HandleTXCharCCCDWrite(volatile sl_bt_msg_t * evt); void HandleSoftTimerEvent(volatile sl_bt_msg_t * evt); -#endif // RSI_BLE_ENABLE +#endif // RSI_BLE_ENABLEHandleConnectEvent CHIP_ERROR StartAdvertising(void); CHIP_ERROR StopAdvertising(void); #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING -#ifdef BLE_ENABLE +#if (BLE_ENABLE || RSI_BLE_ENABLE) static void HandleC3ReadRequest(void); #else #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING @@ -163,7 +163,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla struct CHIPoBLEConState { -#ifndef BLE_ENABLE +#if !(BLE_ENABLE || RSI_BLE_ENABLE) bd_addr address; #endif uint16_t mtu : 10; @@ -192,7 +192,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla CHIP_ERROR EncodeAdditionalDataTlv(); #endif -#ifdef BLE_ENABLE +#if (BLE_ENABLE || RSI_BLE_ENABLE) void HandleRXCharWrite(rsi_ble_event_write_t * evt); #else void HandleRXCharWrite(volatile sl_bt_msg_t * evt); diff --git a/src/platform/silabs/rs911x/rsi_ble_config.h b/src/platform/silabs/rs911x/rsi_ble_config.h new file mode 100644 index 00000000000000..e733baed4c3f2f --- /dev/null +++ b/src/platform/silabs/rs911x/rsi_ble_config.h @@ -0,0 +1,259 @@ +/******************************************************************************* + * @file rsi_ble_config.h + * @brief + ******************************************************************************* + * # License + * Copyright 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#ifndef RSI_BLE_CONFIG_H +#define RSI_BLE_CONFIG_H + +#include "rsi_ble_apis.h" +#include +/****************************************************** + * * Macros + * ******************************************************/ +//! application event list +// TODO: remove this define after integration of the new wifi sdk +#ifndef RSI_FAILURE +// failure return value +#define RSI_FAILURE -1 +#endif + +#define RSI_BLE_CONN_EVENT (0x01) +#define RSI_BLE_DISCONN_EVENT (0x02) +#define RSI_BLE_GATT_WRITE_EVENT (0x03) +#define RSI_BLE_MTU_EVENT (0x04) +#define RSI_BLE_GATT_INDICATION_CONFIRMATION (0x05) +#define RSI_BLE_RESP_ATT_VALUE (0x06) +#define RSI_SSID (0x0D) +#define RSI_SECTYPE (0x0E) +#define RSI_BLE_WLAN_DISCONN_NOTIFY (0x0F) +#define RSI_WLAN_ALREADY (0x10) +#define RSI_WLAN_NOT_ALREADY (0x11) +#define RSI_BLE_WLAN_TIMEOUT_NOTIFY (0x12) +#define RSI_BLE_WLAN_JOIN_STATUS (0x15) +#define RSI_APP_FW_VERSION (0x13) +#define RSI_BLE_WLAN_DISCONNECT_STATUS (0x14) + +#define RSI_REM_DEV_ADDR_LEN (18) +#define RSI_REM_DEV_NAME_LEN (31) + +#define RSI_BLE_DEV_NAME "CCP_DEVICE" +#define RSI_BLE_SET_RAND_ADDR "00:23:A7:12:34:56" + +#define CLEAR_WHITELIST (0x00) +#define ADD_DEVICE_TO_WHITELIST (0x01) +#define DELETE_DEVICE_FROM_WHITELIST (0x02) + +#define ALL_PHYS (0x00) + +#define RSI_BLE_DEV_ADDR_RESOLUTION_ENABLE (0) + +#define RSI_OPERMODE_WLAN_BLE (13) + +/***********************************************************************************************************************************************/ +//! Characteristic Presenatation Format Fields +/***********************************************************************************************************************************************/ +#define RSI_BLE_UINT8_FORMAT (0x04) +#define RSI_BLE_EXPONENT (0x00) +#define RSI_BLE_PERCENTAGE_UNITS_UUID (0x27AD) +#define RSI_BLE_NAME_SPACE (0x01) +#define RSI_BLE_DESCRIPTION (0x010B) + +//! BLE characteristic custom service uuid +#define RSI_BLE_CUSTOM_SERVICE_UUID (0xFFF6) +#define RSI_BLE_CUSTOM_LEVEL_UUID (0x1FF1) + +#ifdef RSI_M4_INTERFACE +#define RSI_BLE_MAX_NBR_ATT_REC (20) +#define RSI_BLE_MAX_NBR_SLAVES (1) +#define RSI_BLE_NUM_CONN_EVENTS (2) +#else +#define RSI_BLE_MAX_NBR_ATT_REC (80) +#define RSI_BLE_MAX_NBR_SLAVES (3) +#define RSI_BLE_NUM_CONN_EVENTS (20) +#endif + +#define RSI_BLE_MAX_NBR_ATT_SERV (10) + +#define RSI_BLE_MAX_NBR_MASTERS (1) +#define RSI_BLE_GATT_ASYNC_ENABLE (1) +#define RSI_BLE_GATT_INIT (0) + +#define RSI_BLE_START_SCAN (0x01) +#define RSI_BLE_STOP_SCAN (0x00) + +#define RSI_BLE_SCAN_TYPE SCAN_TYPE_ACTIVE +#define RSI_BLE_SCAN_FILTER_TYPE SCAN_FILTER_TYPE_ALL +/* Number of BLE GATT RECORD SIZE IN (n*16 BYTES), eg:(0x40*16)=1024 bytes */ +#define RSI_BLE_NUM_REC_BYTES (0x40) + +#define RSI_BLE_INDICATE_CONFIRMATION_FROM_HOST (0) + +/*=======================================================================*/ +//! Advertising command parameters +/*=======================================================================*/ + +#define RSI_BLE_ADV_TYPE UNDIR_CONN +#define RSI_BLE_ADV_FILTER_TYPE ALLOW_SCAN_REQ_ANY_CONN_REQ_ANY +#define RSI_BLE_ADV_DIR_ADDR_TYPE LE_PUBLIC_ADDRESS +#define RSI_BLE_ADV_DIR_ADDR "00:15:83:6A:64:17" + +//! Reduced the BLE adv interval time to match with EFR BLE +#define RSI_BLE_ADV_INT_MIN (0x20) +#define RSI_BLE_ADV_INT_MAX (0x20) + +#define RSI_BLE_ADV_CHANNEL_MAP (0x07) + +//! Advertise status +//! Start the advertising process +#define RSI_BLE_START_ADV (0x01) +//! Stop the advertising process +#define RSI_BLE_STOP_ADV (0x00) + +//! BLE Tx Power Index On Air +#define RSI_BLE_PWR_INX (30) + +//! BLE Active H/w Pwr Features +#define BLE_DISABLE_DUTY_CYCLING (0) +#define BLE_DUTY_CYCLING (1) +#define BLR_DUTY_CYCLING (2) +#define BLE_4X_PWR_SAVE_MODE (4) +#define RSI_BLE_PWR_SAVE_OPTIONS BLE_DISABLE_DUTY_CYCLING + +//! Advertise types + +/* Advertising will be visible(discoverable) to all the devices. + * Scanning/Connection is also accepted from all devices + * */ +#define UNDIR_CONN (0x80) + +/* Advertising will be visible(discoverable) to the particular device + * mentioned in RSI_BLE_ADV_DIR_ADDR only. + * Scanning and Connection will be accepted from that device only. + * */ +#define DIR_CONN (0x81) + +/* Advertising will be visible(discoverable) to all the devices. + * Scanning will be accepted from all the devices. + * Connection will be not be accepted from any device. + * */ +#define UNDIR_SCAN (0x82) + +/* Advertising will be visible(discoverable) to all the devices. + * Scanning and Connection will not be accepted from any device + * */ +#define UNDIR_NON_CONN (0x83) + +/* Advertising will be visible(discoverable) to the particular device + * mentioned in RSI_BLE_ADV_DIR_ADDR only. + * Scanning and Connection will be accepted from that device only. + * */ +#define DIR_CONN_LOW_DUTY_CYCLE (0x84) + +//! Advertising flags +#define LE_LIMITED_DISCOVERABLE (0x01) +#define LE_GENERAL_DISCOVERABLE (0x02) +#define LE_BR_EDR_NOT_SUPPORTED (0x04) + +//! Advertise filters +#define ALLOW_SCAN_REQ_ANY_CONN_REQ_ANY (0x00) +#define ALLOW_SCAN_REQ_WHITE_LIST_CONN_REQ_ANY (0x01) +#define ALLOW_SCAN_REQ_ANY_CONN_REQ_WHITE_LIST (0x02) +#define ALLOW_SCAN_REQ_WHITE_LIST_CONN_REQ_WHITE_LIST (0x03) + +//! Address types +#define LE_PUBLIC_ADDRESS (0x00) +#define LE_RANDOM_ADDRESS (0x01) +#define LE_RESOLVABLE_PUBLIC_ADDRESS (0x02) +#define LE_RESOLVABLE_RANDOM_ADDRESS (0x03) + +/*=======================================================================*/ + +/*=======================================================================*/ +//! Connection parameters +/*=======================================================================*/ +#define LE_SCAN_INTERVAL (0x0100) +#define LE_SCAN_WINDOW (0x0050) + +#define CONNECTION_INTERVAL_MIN (0x00A0) +#define CONNECTION_INTERVAL_MAX (0x00A0) + +#define CONNECTION_LATENCY (0x0000) +#define SUPERVISION_TIMEOUT (0x07D0) // 2000 + +/*=======================================================================*/ + +/*=======================================================================*/ +//! Scan command parameters +/*=======================================================================*/ + +#define SL_WFX_BLE_SCAN_TYPE SCAN_TYPE_ACTIVE +#define SL_WFX_BLE_SCAN_FILTER_TYPE SCAN_FILTER_TYPE_ALL + +//! Scan status +#define SL_WFX_BLE_START_SCAN (0x01) +#define SL_WFX_BLE_STOP_SCAN (0x00) + +//! Scan types +#define SCAN_TYPE_ACTIVE (0x01) +#define SCAN_TYPE_PASSIVE (0x00) + +//! Scan filters +#define SCAN_FILTER_TYPE_ALL (0x00) +#define SCAN_FILTER_TYPE_ONLY_WHITE_LIST (0x01) + +#define SL_WFX_SEL_INTERNAL_ANTENNA (0x00) +#define SL_WFX_SEL_EXTERNAL_ANTENNA (0x01) + +#define SL_WFX_BT_CTRL_REMOTE_USER_TERMINATED (0x4E13) +#define SL_WFX_BT_CTRL_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES (0x4E14) +#define SL_WFX_BT_CTRL_REMOTE_POWERING_OFF (0x4E15) +#define SL_WFX_BT_CTRL_TERMINATED_MIC_FAILURE (0x4E3D) +#define SL_WFX_BT_FAILED_TO_ESTABLISH_CONN (0x4E3E) +#define SL_WFX_BT_INVALID_RANGE (0x4E60) + +/***********************************************************************************************************************************************/ +//! RS9116 Firmware Configurations +/***********************************************************************************************************************************************/ +/*=======================================================================*/ +//! Power save command parameters +/*=======================================================================*/ +//! set handshake type of power mode +#define RSI_HAND_SHAKE_TYPE GPIO_BASED + +#define BLE_ATT_REC_SIZE (500) +#define NO_OF_VAL_ATT (5) //! Attribute value count + +/***********************************************************************************************************************************************/ +//! user defined structure +/***********************************************************************************************************************************************/ +typedef struct rsi_ble_att_list_s +{ + uuid_t char_uuid; + uint16_t handle; + uint16_t value_len; + uint16_t max_value_len; + uint8_t char_val_prop; + void * value; +} rsi_ble_att_list_t; +typedef struct rsi_ble_s +{ + uint8_t DATA[BLE_ATT_REC_SIZE]; + uint16_t DATA_ix; + uint16_t att_rec_list_count; + rsi_ble_att_list_t att_rec_list[NO_OF_VAL_ATT]; +} rsi_ble_t; + +#endif \ No newline at end of file