pinebuds/services/ble_app/app_main/app_ble_mode_switch.h

457 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__ */