pinebuds/services/ble_app/app_gfps/app_gfps.h

265 lines
8.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***************************************************************************
*
* 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_GFPS_H_
#define APP_GFPS_H_
/**
****************************************************************************************
* @addtogroup APP
*
* @brief Device Information Application Module Entry point.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_config.h" // SW Configuration
#if (BLE_APP_GFPS)
#include <stdint.h>
#ifndef BLE_BD_ADDR_T
///BD Address structure
typedef struct
{
///6-byte array address value
uint8_t addr[6];
} bd_addr_t;
#endif
/*
* DEFINES
****************************************************************************************
*/
// enable IS_USE_CUSTOM_FP_INFO if wanna use custom fastpair tx power, model id and anti-proof key
#define IS_USE_CUSTOM_FP_INFOx
/// Manufacturer Name Value
#define APP_GFPS_MANUFACTURER_NAME ("RivieraWaves SAS")
#define APP_GFPS_MANUFACTURER_NAME_LEN (16)
/// Model Number String Value
#define APP_GFPS_MODEL_NB_STR ("RW-BLE-1.0")
#define APP_GFPS_MODEL_NB_STR_LEN (10)
/// Serial Number
#define APP_GFPS_SERIAL_NB_STR ("1.0.0.0-LE")
#define APP_GFPS_SERIAL_NB_STR_LEN (10)
/// Firmware Revision
#define APP_GFPS_FIRM_REV_STR ("6.1.2")
#define APP_GFPS_FIRM_REV_STR_LEN (5)
/// System ID Value - LSB -> MSB
#define APP_GFPS_SYSTEM_ID ("\x12\x34\x56\xFF\xFE\x9A\xBC\xDE")
#define APP_GFPS_SYSTEM_ID_LEN (8)
/// Hardware Revision String
#define APP_GFPS_HARD_REV_STR ("1.0.0")
#define APP_GFPS_HARD_REV_STR_LEN (5)
/// Software Revision String
#define APP_GFPS_SW_REV_STR ("6.3.0")
#define APP_GFPS_SW_REV_STR_LEN (5)
/// IEEE
#define APP_GFPS_IEEE ("\xFF\xEE\xDD\xCC\xBB\xAA")
#define APP_GFPS_IEEE_LEN (6)
/**
* PNP ID Value - LSB -> MSB
* Vendor ID Source : 0x02 (USB Implementers Forum assigned Vendor ID value)
* Vendor ID : 0x045E (Microsoft Corp)
* Product ID : 0x0040
* Product Version : 0x0300
*/
#define APP_GFPS_PNP_ID ("\x02\x5E\x04\x40\x00\x00\x03")
#define APP_GFPS_PNP_ID_LEN (7)
#define APP_GFPS_ADV_POWER_UUID "\x02\x0a\xf5"
#define APP_GFPS_ADV_POWER_UUID_LEN (3)
#define APP_GFPS_ADV_APPEARANCE_UUID "\x03\x19\xda\x96"
#define APP_GFPS_ADV_APPEARANCE_UUID_LEN (4)
#define APP_GFPS_ADV_MANU_SPE_UUID_TEST "\x07\xFF\xe0\x00\x01\x5B\x32\x01"
#define APP_GFPS_ADV_MANU_SPE_UUID_LEN (8)
#if (BLE_APP_HID)
#define APP_GFPS_FEATURES (GFPSP_MANUFACTURER_NAME_CHAR_SUP |\
GFPSP_MODEL_NB_STR_CHAR_SUP |\
GFPSP_SYSTEM_ID_CHAR_SUP |\
GFPSP_PNP_ID_CHAR_SUP)
#else
#define APP_GFPS_FEATURES (GFPSP_ALL_FEAT_SUP)
#endif //(BLE_APP_HID)
typedef void (*gfps_enter_pairing_mode)(void);
typedef uint8_t (*gfps_bt_io_cap_set)(uint8_t mode);
typedef uint8_t (*gfps_bt_io_authrequirements_set)(uint8_t authrequirements);
typedef void (*gfps_get_battery_info_handler)(uint8_t* batteryValueCount,
uint8_t* batteryValue);
typedef enum
{
HIDE_SUBSEQUENT_INDICATION = 2,
SHOW_UI_INDICATION = 3,
HIDE_UI_INDICATION = 4
} GFPS_BATTERY_DATA_TYPE_E;
typedef enum
{
BATTERY_NOT_CHARGING = 0,
BATTERY_CHARGING = 1,
} GFPS_BATTERY_STATUS_E;
#define GFPS_BATTERY_VALUE_MAX_COUNT 3
struct app_gfps_env_tag
{
uint8_t connectionIndex;
uint8_t isKeyBasedPairingNotificationEnabled;
uint8_t isPassKeyNotificationEnabled;
uint8_t isInitialPairing;
bd_addr_t seeker_bt_addr;
bd_addr_t local_le_addr;
bd_addr_t local_bt_addr;
uint8_t keybase_pair_key[16];
uint8_t aesKeyFromECDH[16];
gfps_enter_pairing_mode enter_pairing_mode;
gfps_bt_io_cap_set bt_set_iocap;
gfps_bt_io_authrequirements_set bt_set_authrequirements;
uint8_t bt_iocap;
uint8_t bt_authrequirements;
uint8_t pendingLastResponse[16];
uint8_t isLastResponsePending;
uint8_t isWaitingForFpToConnect;
uint8_t isPendingForWritingNameReq;
uint8_t isBatteryInfoIncluded;
gfps_get_battery_info_handler get_battery_info_handler;
GFPS_BATTERY_DATA_TYPE_E batteryDataType;
uint8_t advRandSalt;
uint8_t isInFastPairing;
};
typedef struct {
uint32_t model_id;
uint8_t public_anti_spoofing_key[64];
uint8_t private_anti_spoofing_key[32];
} FastPairInfo;
/*
* GLOBAL VARIABLES DECLARATION
****************************************************************************************
*/
/// Table of message handlers
extern const struct ke_state_handler app_gfps_table_handler;
/*
* GLOBAL FUNCTIONS DECLARATION
****************************************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
****************************************************************************************
* @brief Initialize Device Information Service Application
****************************************************************************************
*/
void app_gfps_init(void);
/**
****************************************************************************************
* @brief Add a Device Information Service instance in the DB
****************************************************************************************
*/
void app_gfps_add_gfps(void);
/**
****************************************************************************************
* @brief Enable the Device Information Service
****************************************************************************************
*/
void app_gfps_enable_prf(uint16_t conhdl);
void app_gfps_connected_evt_handler(uint8_t conidx);
void app_gfps_disconnected_evt_handler(uint8_t conidx);
void app_gfps_set_bt_access_mode(gfps_enter_pairing_mode cb);
void app_gfps_set_io_cap(gfps_bt_io_cap_set cb);
void app_gfps_set_authrequirements(gfps_bt_io_authrequirements_set cb);
void app_gfps_generate_accountkey_filter(uint8_t* accountKeyFilter, uint8_t* filterSize);
uint8_t app_gfps_generate_accountkey_data(uint8_t* outputData);
void app_gfps_set_battery_info_acquire_handler(gfps_get_battery_info_handler cb);
void app_gfps_set_battery_datatype(GFPS_BATTERY_DATA_TYPE_E batteryDataType);
GFPS_BATTERY_DATA_TYPE_E app_gfps_get_battery_datatype(void);
void app_enter_fastpairing_mode(void);
void app_exit_fastpairing_mode(void);
bool app_is_in_fastpairing_mode(void);
void app_set_in_fastpairing_mode_flag(bool isEnabled);
uint8_t* app_gfps_get_last_response(void);
void app_gfps_enter_connectable_mode_req_handler(uint8_t* response);
bool app_gfps_is_last_response_pending(void);
void app_gfps_enable_battery_info(bool isEnable);
void app_fast_pair_timeout_handler(void);
bool app_is_mobile_connected_via_fastpair(void);
void app_gfps_get_battery_levels(uint8_t* pCount, uint8_t* pBatteryLevel);
void app_gfps_update_random_salt(void);
void app_gfps_tws_sync_init(void);
void app_bt_set_fast_pair_info(FastPairInfo fast_pair_info);
uint32_t app_bt_get_model_id(void);
const uint8_t* app_bt_get_fast_pair_public_key(void);
const uint8_t* app_bt_get_fast_pair_private_key(void);
void app_bt_get_fast_pair_info(void);
#ifdef __cplusplus
}
#endif
#endif //BLE_APP_GFPS
/// @} APP
#endif //APP_GFPS_H_