251 lines
7.4 KiB
C
251 lines
7.4 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 __NVRECORD_H__
|
||
|
#define __NVRECORD_H__
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include "cmsis.h"
|
||
|
#include "nvrec_config.h"
|
||
|
#include "bluetooth.h"
|
||
|
#include "me_api.h"
|
||
|
#include "hal_trace.h"
|
||
|
#if defined(NEW_NV_RECORD_ENABLED)
|
||
|
#include "nvrecord_extension.h"
|
||
|
#include "nvrecord_bt.h"
|
||
|
#include "nvrecord_env.h"
|
||
|
#include "nvrecord_ble.h"
|
||
|
#include "nvrecord_dma_config.h"
|
||
|
#include "nvrecord_fp_account_key.h"
|
||
|
#include "btif_sys_config.h"
|
||
|
|
||
|
#define nvdev_tag "nvdev_tag"
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define DDB_RECORD_NUM 9
|
||
|
#define section_name_ddbrec "ddbrec"
|
||
|
#define nvrecord_mem_pool_size 4096
|
||
|
#define nvrecord_tag "nvrecord"
|
||
|
#define nvdev_tag "nvdev_tag"
|
||
|
#define section_name_other "other"
|
||
|
|
||
|
|
||
|
/*
|
||
|
version|magic 16bit|16bit 0001 cb91
|
||
|
crc 32bit
|
||
|
reserve[0] 32bit
|
||
|
reserve[1] 32bit
|
||
|
config_addr 32bit
|
||
|
heap_contents 32bit
|
||
|
mempool ...
|
||
|
*/
|
||
|
#define nvrecord_struct_version 8
|
||
|
#define nvrecord_magic 0xcb91
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
pos_version_and_magic,// 0
|
||
|
pos_crc, // 1
|
||
|
pos_start_ram_addr, // 2
|
||
|
pos_reserv2, // 3
|
||
|
pos_config_addr, // 4
|
||
|
pos_heap_contents, // 5
|
||
|
|
||
|
}nvrec_mempool_pre_enum;
|
||
|
|
||
|
#define mempool_pre_offset (1+pos_config_addr+((sizeof(heap_handle_t)/sizeof(uint32_t))+1))
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
NV_STATE_IDLE,
|
||
|
NV_STATE_MAIN_ERASING,
|
||
|
NV_STATE_MAIN_ERASED,
|
||
|
NV_STATE_MAIN_WRITTING,
|
||
|
NV_STATE_MAIN_WRITTEN,
|
||
|
NV_STATE_MAIN_DONE,
|
||
|
NV_STATE_BAK_ERASING,
|
||
|
NV_STATE_BAK_ERASED,
|
||
|
NV_STATE_BAK_WRITTING,
|
||
|
NV_STATE_BAK_WRITTEN,
|
||
|
NV_STATE_BAK_DONE,
|
||
|
}NV_STATE;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
bool is_update;
|
||
|
NV_STATE state;
|
||
|
uint32_t written_size;
|
||
|
nvrec_config_t *config;
|
||
|
}nv_record_struct;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
section_usrdata_ddbrecord,
|
||
|
section_none
|
||
|
}SECTIONS_ADP_ENUM;
|
||
|
|
||
|
typedef struct btdevice_volume{
|
||
|
int8_t a2dp_vol;
|
||
|
int8_t hfp_vol;
|
||
|
}btdevice_volume;
|
||
|
|
||
|
typedef struct btdevice_profile{
|
||
|
bool hfp_act;
|
||
|
bool hsp_act;
|
||
|
bool a2dp_act;
|
||
|
uint8_t a2dp_codectype;
|
||
|
}btdevice_profile;
|
||
|
|
||
|
typedef struct _nvrec_btdevicerecord
|
||
|
{
|
||
|
btif_device_record_t record;
|
||
|
btdevice_volume device_vol;
|
||
|
btdevice_profile device_plf;
|
||
|
#ifdef BTIF_DIP_DEVICE
|
||
|
uint16_t vend_id;
|
||
|
uint16_t vend_id_source;
|
||
|
uint16_t reserve;
|
||
|
#endif
|
||
|
} nvrec_btdevicerecord;
|
||
|
|
||
|
extern uint8_t nv_record_dev_rev;
|
||
|
|
||
|
void nv_record_init(void);
|
||
|
bt_status_t nv_record_open(SECTIONS_ADP_ENUM section_id);
|
||
|
bt_status_t nv_record_enum_dev_records(unsigned short index,btif_device_record_t* record);
|
||
|
bt_status_t nv_record_add(SECTIONS_ADP_ENUM type,void *record);
|
||
|
bt_status_t nv_record_ddbrec_find(const bt_bdaddr_t *bd_ddr, btif_device_record_t*record);
|
||
|
bt_status_t nv_record_ddbrec_delete(const bt_bdaddr_t *bdaddr);
|
||
|
int nv_record_btdevicerecord_find(const bt_bdaddr_t *bd_ddr, nvrec_btdevicerecord **record);
|
||
|
int nv_record_touch_cause_flush(void);
|
||
|
|
||
|
int nv_record_get_paired_dev_count(void);
|
||
|
void nv_record_sector_clear(void);
|
||
|
void nv_record_flash_flush(void);
|
||
|
int nv_record_flash_flush_in_sleep(void);
|
||
|
void nv_record_execute_async_flush(void);
|
||
|
|
||
|
int nv_record_enum_latest_two_paired_dev(btif_device_record_t* record1,btif_device_record_t* record2);
|
||
|
void nv_record_all_ddbrec_print(void);
|
||
|
|
||
|
void nv_record_update_runtime_userdata(void);
|
||
|
bt_status_t nv_record_config_rebuild(void);
|
||
|
void nv_record_btdevicerecord_set_a2dp_vol(nvrec_btdevicerecord* pRecord, int8_t vol);
|
||
|
void nv_record_btdevicerecord_set_hfp_vol(nvrec_btdevicerecord* pRecord, int8_t vol);
|
||
|
void nv_record_btdevicevolume_set_a2dp_vol(btdevice_volume* device_vol, int8_t vol);
|
||
|
void nv_record_btdevicevolume_set_hfp_vol(btdevice_volume* device_vol, int8_t vol);
|
||
|
void nv_record_btdevicerecord_set_vend_id_and_source(nvrec_btdevicerecord* pRecord, int16_t vend_id, int16_t vend_id_source);
|
||
|
void nv_record_btdevicerecord_set_a2dp_profile_active_state(btdevice_profile* device_plf, bool isActive);
|
||
|
void nv_record_btdevicerecord_set_hfp_profile_active_state(btdevice_profile* device_plf, bool isActive);
|
||
|
void nv_record_btdevicerecord_set_hsp_profile_active_state(btdevice_profile* device_plf, bool isActive);
|
||
|
void nv_record_btdevicerecord_set_a2dp_profile_codec(btdevice_profile* device_plf, uint8_t a2dpCodec);
|
||
|
|
||
|
#ifdef NVREC_BAIDU_DATA_SECTION
|
||
|
#define BAIDU_DATA_SECTIN ("baidu_data")
|
||
|
#define BAIDU_DATA_FM_KEY ("fmfreq")
|
||
|
#define BAIDU_DATA_RAND_KEY ("rand")
|
||
|
|
||
|
#define BAIDU_DATA_DEF_RAND "abcdefghi"
|
||
|
|
||
|
int nvrec_baidu_data_init(void);
|
||
|
int nvrec_get_fm_freq(void);
|
||
|
int nvrec_set_fm_freq(int fmfreq);
|
||
|
int nvrec_get_rand(char *rand);
|
||
|
int nvrec_set_rand(char *rand);
|
||
|
int nvrec_clear_rand(void);
|
||
|
int nvrec_dev_get_sn(char *sn);
|
||
|
#endif
|
||
|
|
||
|
uint32_t nv_record_pre_write_operation(void);
|
||
|
void nv_record_post_write_operation(uint32_t lock);
|
||
|
|
||
|
#endif // #if !defined(NEW_NV_RECORD_ENABLED)
|
||
|
|
||
|
#define nv_record_debug
|
||
|
#ifdef nv_record_debug
|
||
|
#define nvrec_trace TRACE
|
||
|
#else
|
||
|
#define nvrec_trace(...)
|
||
|
#endif
|
||
|
|
||
|
#define NVREC_DEV_NEWEST_REV 2
|
||
|
#define NVREC_DEV_VERSION_1 1
|
||
|
|
||
|
#define BLE_NAME_LEN_IN_NV 32
|
||
|
|
||
|
/*
|
||
|
this is the nvrec dev zone struct :
|
||
|
version|magic 16bit|16bit
|
||
|
crc 32bit
|
||
|
reserve[0] 32bit
|
||
|
reserv[1] 32bit
|
||
|
dev local name max 249*8bit
|
||
|
dev bt addr 64bit
|
||
|
dev ble addr 64bit
|
||
|
calib data 32bit
|
||
|
*/
|
||
|
#define nvrec_dev_version 1
|
||
|
#define nvrec_dev_magic 0xba80
|
||
|
typedef enum
|
||
|
{
|
||
|
dev_version_and_magic, //0
|
||
|
dev_crc, //1
|
||
|
dev_reserv1, //2
|
||
|
dev_reserv2, //3
|
||
|
dev_name, //[4~66]
|
||
|
dev_bt_addr = 67, //[67~68]
|
||
|
dev_ble_addr = 69, //[69~70]
|
||
|
dev_dongle_addr = 71,
|
||
|
dev_xtal_fcap = 73, //73
|
||
|
dev_data_len,
|
||
|
}nvrec_dev_enum;
|
||
|
|
||
|
// following the former nv rec dev info
|
||
|
typedef enum
|
||
|
{
|
||
|
rev2_dev_data_len = 75, //75, length of the valid content, excluding crc
|
||
|
rev2_dev_crc, //76, crc value of the following data
|
||
|
rev2_dev_section_start_reserved, //77
|
||
|
rev2_dev_reserv2, //78
|
||
|
rev2_dev_name, //[79~141]
|
||
|
rev2_dev_bt_addr = 142, //[142~143]
|
||
|
rev2_dev_ble_addr = 144, //[144~145]
|
||
|
rev2_dev_dongle_addr = 146, //[146~147]
|
||
|
rev2_dev_xtal_fcap = 148, //148
|
||
|
rev2_dev_ble_name = 149, //[149~156]
|
||
|
#ifdef NVREC_BAIDU_DATA_SECTION
|
||
|
rev2_dev_prod_sn = 157, //[157~160]
|
||
|
#endif
|
||
|
// TODO: add the new section in the future if needed
|
||
|
|
||
|
rev2_dev_section_end = 157,
|
||
|
|
||
|
}nvrec_dev_rev_2_enum;
|
||
|
|
||
|
int nvrec_dev_get_dongleaddr(bt_bdaddr_t *dongleaddr);
|
||
|
int nvrec_dev_get_btaddr(char *btaddr);
|
||
|
char* nvrec_dev_get_bt_name(void);
|
||
|
const char* nvrec_dev_get_ble_name(void);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif /* __NVRECORD_H__*/
|