blob: 1b2f4de1944774b63836caf67f6834d8a7483209 [file] [log] [blame]
/******************************************************************************
* @file smp_storage.h
*
* @brief for TLSR chips
*
* @author public@telink-semi.com;
* @date Sep. 30, 2010
*
* @attention
*
* Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd.
*
* 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.
*
*****************************************************************************/
/*
* smp_storage.h
*
* Created on: 2018-12-4
* Author: Administrator
*/
#ifndef SMP_STORAGE_H_
#define SMP_STORAGE_H_
#if (SIMPLE_MULTI_MAC_EN)
#include "smp.h"
extern u8 device_mac_index;
#endif
#define SMP_PARAM_NV_UNIT 64
#define SMP_PARAM_INIT_CLEAR_MAGIN_ADDR 3072 //64 * 48
#define SMP_PARAM_LOOP_CLEAR_MAGIN_ADDR 3520 //64 * 55 (56 device most)
#define SMP_PARAM_NV_MAX_LEN 4096
extern int SMP_PARAM_NV_ADDR_START;
#define SMP_PARAM_NV_SEC_ADDR_START (SMP_PARAM_NV_ADDR_START + SMP_PARAM_NV_MAX_LEN)
#define SMP_PARAM_NV_SEC_ADDR_END (SMP_PARAM_NV_SEC_ADDR_START + SMP_PARAM_NV_MAX_LEN - 1)
#define NEW_FLASH_STORAGE_KEY_ENABLE 0 //be compatible with old flash storage methods
#define FLAG_SMP_PARAM_SAVE_OLD 0x5A // 0101 1010 old storage
#if (SIMPLE_MULTI_MAC_EN)
#define FLAG_SMP_PARAM_SAVE_BASE (0x88+(device_mac_index&0x07))//0x8A // 1000 1010
#else
// 10xx 1010 new storage, xx: see "paring_sts_t" definition
#define FLAG_SMP_PARAM_SAVE_BASE 0x8A // 1000 1010
#endif
#define FLAG_SMP_PARAM_SAVE_UNANTHEN 0x9A // 1001 1010 new storage Unauthenticated_LTK
#define FLAG_SMP_PARAM_SAVE_AUTHEN 0xAA // 1010 1010 new storage Authenticated_LTK_Legacy_Paring
#define FLAG_SMP_PARAM_SAVE_AUTHEN_SC 0xBA // 1011 1010 new storage Authenticated_LTK_Secure_Connection
#define FLAG_SMP_PARAM_SAVE_PENDING 0xBF // 1011 1111
#define FLAG_SMP_PARAM_SAVE_ERASE 0x00 //
#if (SIMPLE_MULTI_MAC_EN)
#define FLAG_SMP_PARAM_MASK 0xC8
#define FLAG_SMP_PARAM_VALID 0x88
#else
#define FLAG_SMP_PARAM_MASK 0x0F // 0000 1111
#define FLAG_SMP_PARAM_VALID 0x0A // 0000 1010
#endif
#define FLAG_SMP_PARING_STATUS_MASK 0x30 // 0011 1000
#define FLAG_SMP_SECTOR_USE 0x3C
#define FLAG_SMP_SECTOR_CLEAR 0x00
#define FLASH_SECTOR_OFFSET 4080 //0xFF0
extern int bond_device_flash_cfg_idx;
typedef enum {
Index_Update_by_Pairing_Order = 0, //default value
Index_Update_by_Connect_Order = 1,
} index_updateMethod_t;
/*
* smp parameter need save to flash.
*/
typedef struct { //82
u8 flag;
u8 peer_addr_type; //address used in link layer connection
u8 peer_addr[6];
u8 peer_key_size;
u8 peer_id_adrType; //peer identity address information in key distribution, used to identify
u8 peer_id_addr[6];
u8 own_ltk[16]; //own_ltk[16]
u8 peer_irk[16];
u8 peer_csrk[16];
}smp_param_save_t;
/******************************* User Interface *****************************************/
u8 blc_smp_param_getCurrentBondingDeviceNumber(void);
void bls_smp_configParingSecurityInfoStorageAddr (int addr);
u32 bls_smp_param_loadByIndex(u8 index, smp_param_save_t* smp_param_load);
u32 bls_smp_param_loadByAddr(u8 addr_type, u8* addr, smp_param_save_t* smp_param_load);
void bls_smp_setIndexUpdateMethod(index_updateMethod_t method);
void bls_smp_eraseAllParingInformation(void);
/************************* Stack Interface, user can not use!!! ***************************/
int bls_smp_param_saveBondingInfo (smp_param_save_t*);
void bls_smp_param_initFromFlash(void);
void bls_smp_param_Cleanflash (void);
u32 bls_smp_loadParamVsRand (u16 ediv, u8* random);
int bls_smp_loadParamVsAddr (u16 addr_type, u8* addr);
u8 bls_smp_param_getIndexByFLashAddr(u32 flash_addr);
int bls_smp_param_deleteByIndex(u8 index);
u8 bls_smp_param_getBondFlag_by_flashAddress(u32 flash_addr);
u32 bls_smp_searchBondingDevice_in_Flash_by_Address(u8 addr_type, u8* addr );
u32 blc_smp_param_updateToNearestByIndex(u8 index);
#endif /* SMP_STORAGE_H_ */