456 lines
12 KiB
C
456 lines
12 KiB
C
/***************************************************************************
|
|
*
|
|
*Copyright 2015-2019 BES.
|
|
*All rights reserved. All unpublished rights reserved.
|
|
*
|
|
*No part of this work may be used or reproduced in any form or by any
|
|
*means, or stored in a database or retrieval system, without prior written
|
|
*permission of BES.
|
|
*
|
|
*Use of this work is governed by a license granted by BES.
|
|
*This work contains confidential and proprietary information of
|
|
*BES. which is protected by copyright, trade secret,
|
|
*trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __APP_BLE_MODE_SWITCH_H__
|
|
#define __APP_BLE_MODE_SWITCH_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*****************************header include********************************/
|
|
#include "bluetooth.h"
|
|
#include "co_bt_defines.h"
|
|
|
|
/******************************macro defination*****************************/
|
|
#define BLE_ADV_DATA_STRUCT_HEADER_LEN (2)
|
|
|
|
#ifndef BLE_CONNECTION_MAX
|
|
#define BLE_CONNECTION_MAX (1)
|
|
#endif
|
|
|
|
// the default interval is 160ms, note that for Bisto user case, to
|
|
// let GVA iOS version pop-out notification smoothly, the maximum interval should be this value
|
|
#define BLE_ADVERTISING_INTERVAL (160)
|
|
#define BLE_FAST_ADVERTISING_INTERVAL (48)
|
|
|
|
#define BLE_ADV_SVC_FLAG 0x16
|
|
#define BLE_ADV_MANU_FLAG 0xFF
|
|
|
|
// Maximal length of the Device Name value
|
|
#define APP_DEVICE_NAME_MAX_LEN (24)
|
|
|
|
/******************************type defination******************************/
|
|
/**
|
|
* @brief The state type of the ble
|
|
*
|
|
*/
|
|
enum BLE_STATE_E {
|
|
STATE_IDLE = 0,
|
|
ADVERTISING = 1,
|
|
STARTING_ADV = 2,
|
|
STOPPING_ADV = 3,
|
|
SCANNING = 4,
|
|
STARTING_SCAN = 5,
|
|
STOPPING_SCAN = 6,
|
|
CONNECTING = 7,
|
|
STARTING_CONNECT = 8,
|
|
STOPPING_CONNECT = 9,
|
|
};
|
|
|
|
/**
|
|
* @brief The operation type of the ble
|
|
*
|
|
*/
|
|
enum BLE_OP_E {
|
|
OP_IDLE = 0,
|
|
START_ADV = 1,
|
|
START_SCAN = 2,
|
|
START_CONNECT = 3,
|
|
STOP_ADV = 4,
|
|
STOP_SCAN = 5,
|
|
STOP_CONNECT = 6,
|
|
};
|
|
|
|
enum BLE_ADV_USER_E {
|
|
USER_STUB = 0,
|
|
USER_GFPS = 1,
|
|
USER_GSOUND = 2,
|
|
USER_AI = 3,
|
|
USER_INTERCONNECTION = 4,
|
|
USER_TILE = 5,
|
|
USER_OTA = 6,
|
|
BLE_ADV_USER_NUM,
|
|
};
|
|
|
|
enum BLE_ADV_SWITCH_USER_E {
|
|
BLE_SWITCH_USER_RS = 0, // used for role switch
|
|
BLE_SWITCH_USER_BOX = 1, // used for box open/close
|
|
BLE_SWITCH_USER_AI = 2, // used for ai
|
|
BLE_SWITCH_USER_BT_CONNECT = 3, // used for bt connect
|
|
BLE_SWITCH_USER_SCO = 4, // used for sco
|
|
BLE_SWITCH_USER_IBRT = 5, // used for ibrt
|
|
|
|
BLE_SWITCH_USER_NUM,
|
|
};
|
|
|
|
//Scan filter policy
|
|
enum BLE_SCAN_FILTER_POLICY {
|
|
///Allow advertising packets from anyone
|
|
BLE_SCAN_ALLOW_ADV_ALL = 0x00,
|
|
///Allow advertising packets from White List devices only
|
|
BLE_SCAN_ALLOW_ADV_WLST,
|
|
///Allow advertising packets from anyone and Direct adv using RPA in InitA
|
|
BLE_SCAN_ALLOW_ADV_ALL_AND_INIT_RPA,
|
|
///Allow advertising packets from White List devices only and Direct adv using RPA in InitA
|
|
BLE_SCAN_ALLOW_ADV_WLST_AND_INIT_RPA,
|
|
};
|
|
|
|
typedef struct {
|
|
bool withFlag;
|
|
uint8_t advType;
|
|
uint16_t advInterval;
|
|
uint8_t advDataLen;
|
|
uint8_t advData[BLE_DATA_LEN];
|
|
uint8_t scanRspDataLen;
|
|
uint8_t scanRspData[BLE_DATA_LEN];
|
|
} BLE_ADV_PARAM_T;
|
|
|
|
typedef void (*BLE_DATA_FILL_FUNC_T)(void *advParam);
|
|
|
|
typedef struct {
|
|
uint8_t scanType;
|
|
uint16_t scanWindow;
|
|
uint16_t scanInterval;
|
|
} BLE_SCAN_PARAM_T;
|
|
|
|
typedef struct {
|
|
uint32_t advSwitch;
|
|
uint8_t state;
|
|
uint8_t op;
|
|
uint8_t bleAddrToConnect[BTIF_BD_ADDR_SIZE];
|
|
uint32_t adv_user_register; //one bit represent one user
|
|
uint32_t adv_user_enable; //one bit represent one user
|
|
|
|
BLE_DATA_FILL_FUNC_T bleDataFillFunc[BLE_ADV_USER_NUM];
|
|
|
|
// param used for BLE adv
|
|
BLE_ADV_PARAM_T advInfo;
|
|
|
|
// prarm used for BLE scan
|
|
BLE_SCAN_PARAM_T scanInfo;
|
|
|
|
// pointer of @see app_env
|
|
struct app_env_tag *bleEnv;
|
|
} __attribute__((__packed__)) BLE_MODE_ENV_T;
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_mode_init
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* init the bleModeEnv
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_mode_init(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_register_data_fill_handler
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* register a BLE advertisement and scan response data fill handler for a
|
|
* specific user(see @BLE_ADV_USER_E), so that the adv/scan response data
|
|
* could present in BLE adv/scan response data
|
|
*
|
|
* Parameters:
|
|
* user - see the defination in BLE_ADV_USER_E
|
|
* func - adv/scan response data fill handler for specific user
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_register_data_fill_handle(enum BLE_ADV_USER_E user, BLE_DATA_FILL_FUNC_T func, bool enable);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_data_fill_enable
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* enable/disable specific user to fill the adv/scan response data
|
|
*
|
|
* Parameters:
|
|
* user : user to enable/disable fill data
|
|
* enable : true - enable user
|
|
* false - disable user
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_data_fill_enable(enum BLE_ADV_USER_E user, bool enable);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_get_data_fill_enable
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* get if specific user is enabled to fill adv/scan response data
|
|
*
|
|
* Parameters:
|
|
* user : user
|
|
*
|
|
* Return:
|
|
* true - user is enabled to fill data
|
|
* false - user is disabled to fill data
|
|
*/
|
|
bool app_ble_get_data_fill_enable(enum BLE_ADV_USER_E user);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_start_connectable_adv
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* start connetable BLE advertise
|
|
*
|
|
* Parameters:
|
|
* advertisement interval in ms
|
|
*
|
|
* Return:
|
|
* None
|
|
*/
|
|
void app_ble_start_connectable_adv(uint16_t advInterval);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_refresh_adv_state
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* refresh adv state
|
|
*
|
|
* Parameters:
|
|
* advertisement interval in ms
|
|
*
|
|
* Return:
|
|
* None
|
|
*/
|
|
void app_ble_refresh_adv_state(uint16_t advInterval);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_force_switch_adv
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* enable/disable all BLE adv request for specific UI user
|
|
*
|
|
* Parameters:
|
|
* user : UI user
|
|
* onOff : true - enable BLE adv for specific UI user
|
|
* false - disable BLE adv for specific UI user
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_force_switch_adv(uint8_t user, bool onOff);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_start_scan
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* start BLE scan
|
|
*
|
|
* Parameters:
|
|
* scanFilterPolicy : Scan filter policy
|
|
* scanWindow : BLE scan window size(in ms)
|
|
* scanWnInterval : BLE scan window interval(in ms)
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_start_scan(enum BLE_SCAN_FILTER_POLICY scanFilterPolicy, uint16_t scanWindow, uint16_t scanWnterval);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_start_connect
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* start connect BLE with the given address
|
|
*
|
|
* Parameters:
|
|
* bdAddrToConnect : BLE address to connnect
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_start_connect(uint8_t *bdAddrToConnect);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_is_connection_on
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* is a specific BLE connection exist
|
|
*
|
|
* Parameters:
|
|
* index: Index of the BLE connection to check
|
|
*
|
|
* Return:
|
|
* true - BLE connection exists
|
|
* false - BLE connection doesn't exist
|
|
*/
|
|
bool app_ble_is_connection_on(uint8_t index);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_is_any_connection_exist
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* is there any BLE connection exist
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* true - at least one BLE connection exist
|
|
* false - no BLE connection exists
|
|
*/
|
|
bool app_ble_is_any_connection_exist();
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_start_disconnect
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* disconnect the BLE connection with given connection index
|
|
*
|
|
* Parameters:
|
|
* conIdx: connection index to disconnect
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_start_disconnect(uint8_t conIdx);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_disconnect_all
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* disconnect all BLE connections
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_disconnect_all(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_stop_activities
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* stop all BLE activities
|
|
* NOTE: will not disconnect the existed connections
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_stop_activities(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_is_in_advertising_state
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* is BLE in advertising progress
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* true - BLE adv is in progress
|
|
* false - BLE adv is not in progress
|
|
*/
|
|
bool app_ble_is_in_advertising_state(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_get_user_register
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* to get adv user register
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* uint32_t -- adv user register
|
|
*/
|
|
uint32_t app_ble_get_user_register(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_get_current_state
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* to get current ble state
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* enum BLE_STATE_E -- ble state
|
|
*/
|
|
enum BLE_STATE_E app_ble_get_current_state(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_get_current_operation
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* to get current ble operation
|
|
*
|
|
* Parameters:
|
|
* void
|
|
*
|
|
* Return:
|
|
* enum BLE_OP_E -- ble operation
|
|
*/
|
|
enum BLE_OP_E app_ble_get_current_operation(void);
|
|
|
|
/*---------------------------------------------------------------------------
|
|
* app_ble_get_runtime_adv_param
|
|
*---------------------------------------------------------------------------
|
|
*
|
|
*Synopsis:
|
|
* to get current ble advertising parameters
|
|
*
|
|
* Parameters:
|
|
* pAdvType: Output pointer of adv type
|
|
* pAdvIntervalMs: Output pointer of adv internal in ms
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
void app_ble_get_runtime_adv_param(uint8_t* pAdvType, uint16_t* pAdvIntervalMs);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* #ifndef __APP_BLE_MODE_SWITCH_H__ */
|