/*******************************************************************************
* @file wfx_sl_ble_init.h
* @brief
*******************************************************************************
* # License
* Copyright 2021 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* Copyright (c) 2022 Project CHIP Authors
*
* 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
*
* 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.
*/
#pragma once
/**
* Include files
* */
// BLE include file to refer BLE APIs
#include "ble_config.h"
#include "cmsis_os2.h"
#include "wfx_host_events.h"
#include "wfx_rsi.h"
#include
#include
#include
#include
#include
#include
#include
#include
#define ATT_REC_IN_HOST (0)
#define WFX_QUEUE_SIZE 10
#define RSI_BT_CTRL_REMOTE_USER_TERMINATED (0x4E13)
#define RSI_BT_CTRL_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES (0x4E14)
#define RSI_BT_CTRL_REMOTE_POWERING_OFF (0x4E15)
#define RSI_BT_CTRL_TERMINATED_MIC_FAILURE (0x4E3D)
#define RSI_BT_FAILED_TO_ESTABLISH_CONN (0x4E3E)
#define RSI_BT_INVALID_RANGE (0x4E60)
#define RSI_BLE_MATTER_CUSTOM_SERVICE_UUID (0)
#define RSI_BLE_MATTER_CUSTOM_SERVICE_SIZE (2)
#define RSI_BLE_MATTER_CUSTOM_SERVICE_VALUE_16 (0xFFF6)
#define RSI_BLE_MATTER_CUSTOM_SERVICE_DATA (0x00)
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_SIZE (16)
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_RESERVED 0x00, 0x00, 0x00
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_VALUE_128_DATA_1 0x18EE2EF5
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_VALUE_128_DATA_2 0x263D
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_VALUE_128_DATA_3 0x4559
#define RSI_BLE_CUSTOM_CHARACTERISTIC_RX_VALUE_128_DATA_4 0x9F, 0x95, 0x9C, 0x4F, 0x11, 0x9D, 0x9F, 0x42
#define RSI_BLE_CHARACTERISTIC_RX_ATTRIBUTE_HANDLE_LOCATION (1)
#define RSI_BLE_CHARACTERISTIC_RX_VALUE_HANDLE_LOCATION (2)
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_SIZE (16)
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_RESERVED 0x00, 0x00, 0x00
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_VALUE_128_DATA_1 0x18EE2EF5
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_VALUE_128_DATA_2 0x263D
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_VALUE_128_DATA_3 0x4559
#define RSI_BLE_CUSTOM_CHARACTERISTIC_TX_VALUE_128_DATA_4 0x9F, 0x95, 0x9C, 0x4F, 0x12, 0x9D, 0x9F, 0x42
#define RSI_BLE_CHARACTERISTIC_TX_ATTRIBUTE_HANDLE_LOCATION (3)
#define RSI_BLE_CHARACTERISTIC_TX_MEASUREMENT_HANDLE_LOCATION (4)
#define RSI_BLE_CHARACTERISTIC_TX_GATT_SERVER_CLIENT_HANDLE_LOCATION (5)
namespace chip {
namespace DeviceLayer {
namespace Internal {
class SilabsBleWrapper
{
public:
enum class BleEventType : uint8_t
{
RSI_BLE_CONN_EVENT,
RSI_BLE_DISCONN_EVENT,
RSI_BLE_GATT_WRITE_EVENT,
RSI_BLE_MTU_EVENT,
RSI_BLE_GATT_INDICATION_CONFIRMATION,
RSI_BLE_RESP_ATT_VALUE,
RSI_BLE_EVENT_GATT_RD
};
struct sl_wfx_msg_t
{
uint8_t connectionHandle;
uint8_t bondingHandle;
uint16_t reason;
uint16_t event_id;
uint16_t resp_status;
rsi_ble_event_mtu_t rsi_ble_mtu;
rsi_ble_event_write_t rsi_ble_write;
rsi_ble_event_enhance_conn_status_t resp_enh_conn;
rsi_ble_event_disconnect_t * resp_disconnect;
rsi_ble_read_req_t * rsi_ble_read_req;
rsi_ble_set_att_resp_t rsi_ble_event_set_att_rsp;
uint16_t rsi_ble_measurement_hndl;
uint16_t rsi_ble_gatt_server_client_config_hndl;
uint16_t subscribed;
};
struct BleEvent_t
{
BleEventType eventType;
sl_wfx_msg_t * eventData;
};
// ALL Ble functions
static void rsi_ble_on_connect_event(rsi_ble_event_conn_status_t * resp_conn);
static void rsi_ble_on_disconnect_event(rsi_ble_event_disconnect_t * resp_disconnect, uint16_t reason);
static void rsi_ble_on_enhance_conn_status_event(rsi_ble_event_enhance_conn_status_t * resp_enh_conn);
static void rsi_ble_on_gatt_write_event(uint16_t event_id, rsi_ble_event_write_t * rsi_ble_write);
static void rsi_ble_on_mtu_event(rsi_ble_event_mtu_t * rsi_ble_mtu);
static void rsi_ble_on_event_indication_confirmation(uint16_t resp_status, rsi_ble_set_att_resp_t * rsi_ble_event_set_att_rsp);
static void rsi_ble_on_read_req_event(uint16_t event_id, rsi_ble_read_req_t * rsi_ble_read_req);
static void rsi_gatt_add_attribute_to_list(rsi_ble_t * p_val, uint16_t handle, uint16_t data_len, uint8_t * data, uuid_t uuid,
uint8_t char_prop);
static void rsi_ble_add_char_serv_att(void * serv_handler, uint16_t handle, uint8_t val_prop, uint16_t att_val_handle,
uuid_t att_val_uuid);
static void rsi_ble_add_char_val_att(void * serv_handler, uint16_t handle, uuid_t att_type_uuid, uint8_t val_prop,
uint8_t * data, uint8_t data_len, uint8_t auth_read);
static uint32_t rsi_ble_add_matter_service(void);
};
} // namespace Internal
} // namespace DeviceLayer
} // namespace chip