248 lines
7.5 KiB
C
248 lines
7.5 KiB
C
|
|
/**
|
||
|
|
************************************************************************************************************
|
||
|
|
* Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved.
|
||
|
|
************************************************************************************************************
|
||
|
|
* @file rtl876x_lib_platform.h
|
||
|
|
* @brief
|
||
|
|
* @details
|
||
|
|
* @author
|
||
|
|
* @date
|
||
|
|
* @version
|
||
|
|
*************************************************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef _RTL876X_LIB_PLATFORM_H_
|
||
|
|
#define _RTL876X_LIB_PLATFORM_H_
|
||
|
|
|
||
|
|
#include <stddef.h>
|
||
|
|
#include <stdint.h>
|
||
|
|
#include <stdbool.h>
|
||
|
|
#include "mem_types.h"
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
READ_SUCCESS = 0,
|
||
|
|
READ_NOT_FIND_CONFIG = 1,
|
||
|
|
READ_NOT_FIND_BDADDR = 2,
|
||
|
|
READ_NOT_FIND_XTAL_OFFSET = 3,
|
||
|
|
READ_FAIL = 4,
|
||
|
|
} T_READ_BDADDR_RESULT;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
EFUSE_UPDATE_SUCCESS = 0,
|
||
|
|
EFUSE_UPDATE_READ_PROTECTED,
|
||
|
|
EFUSE_UPDATE_WRITE_MAC_FAIL,
|
||
|
|
EFUSE_UPDATE_SPACE_EXHAUSTED,
|
||
|
|
EFUSE_UPDATE_READ_FAIL,
|
||
|
|
} T_EFUSE_UPDATE_RESULT;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
DSN = 0,
|
||
|
|
HWREV,
|
||
|
|
PSN,
|
||
|
|
SKUID,
|
||
|
|
IRID,
|
||
|
|
PRO_PID
|
||
|
|
} T_FLASH_READ_PROVISION;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
BT_MAC = 0, //BD address
|
||
|
|
BT_MAX_LE_LINK_NUM,
|
||
|
|
BT_LE_MASTER_LINK_NUM,
|
||
|
|
BT_LE_SLAVE_LINK_NUM,
|
||
|
|
} T_READ_PARAMETER;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief another log buffer API, the fmt string will occupy flash space
|
||
|
|
*/
|
||
|
|
void log_buffer_retarget(uint32_t info, const char *fmt, ...);
|
||
|
|
|
||
|
|
#define DBG_BUFFER_RETARGET(...) do {\
|
||
|
|
log_buffer_retarget(COMBINE_TRACE_INFO(TYPE_BEE2, SUBTYPE_DIRECT, 0, 0), __VA_ARGS__);\
|
||
|
|
} while (0)
|
||
|
|
|
||
|
|
/*============================================================================*
|
||
|
|
* Log Retarget Sample Usage
|
||
|
|
*============================================================================*/
|
||
|
|
/**
|
||
|
|
* @brief retarget other library code log to bee2 buffer log print.
|
||
|
|
* @note If enable, increase code size because more log will occupy flash space
|
||
|
|
*
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
|
||
|
|
//enable retarget other library code log to bee2 buffer log print or not
|
||
|
|
#define ENABLE_RETARGET_LOG 1
|
||
|
|
|
||
|
|
#if ENABLE_RETARGET_LOG
|
||
|
|
#define LogDebug(...) DBG_BUFFER_RETARGET(__VA_ARGS__)
|
||
|
|
#else
|
||
|
|
#define LogDebug(...)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
void test_log_retarget(void)
|
||
|
|
{
|
||
|
|
char str[] = {'a','b','c', '\0'};
|
||
|
|
float data1 = 3.14125;
|
||
|
|
uint32_t data2 = 1024;
|
||
|
|
LogDebug("test");
|
||
|
|
LogDebug("string:%s", str);
|
||
|
|
LogDebug("float:%f", data1);
|
||
|
|
LogDebug("uint:%d", data2);
|
||
|
|
}
|
||
|
|
* \endcode
|
||
|
|
*/
|
||
|
|
/*============================================================================*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief peek max free block size of specified ram type heap
|
||
|
|
*/
|
||
|
|
size_t os_mem_max_free_block_peek(RAM_TYPE ram_type);
|
||
|
|
|
||
|
|
|
||
|
|
void show_sdk_lib_version(void);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief read bd addr set in config file
|
||
|
|
* @param p_bdaddr: buffer to save bd addr
|
||
|
|
* @retval read result
|
||
|
|
* @arg 0: read success
|
||
|
|
* @arg 1: no config file in flash
|
||
|
|
* @arg 2: no bd setting found
|
||
|
|
*/
|
||
|
|
T_READ_BDADDR_RESULT read_config_bdaddr(uint8_t *p_bdaddr);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief read mp config parameter
|
||
|
|
* @param type: the item of config file
|
||
|
|
* @param p_data: the return data
|
||
|
|
* @arg true: read success
|
||
|
|
* @arg false: read fail
|
||
|
|
*/
|
||
|
|
T_READ_BDADDR_RESULT read_config_item(T_READ_PARAMETER type, uint8_t *p_data);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief read xtal offset set in config file
|
||
|
|
* @param p_xtal_offset: buffer to save xtal offset
|
||
|
|
* @retval read result
|
||
|
|
* @arg 0: read success
|
||
|
|
* @arg 1: no config file in flash
|
||
|
|
* @arg 3: no xtal offset found
|
||
|
|
*/
|
||
|
|
T_READ_BDADDR_RESULT read_config_xtal_offset(uint8_t *p_xtal_offset);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief update bd address set in config file
|
||
|
|
* @param p_cfg_read_addr: the address of read config file
|
||
|
|
* @param p_cfg_write_addr: the address of write config file
|
||
|
|
* @param p_bdaddr: buffer to the updated bd address
|
||
|
|
* @retval update result
|
||
|
|
* @arg true: update success
|
||
|
|
* @arg false: update fail
|
||
|
|
*/
|
||
|
|
bool update_bdaddr(uint8_t *p_cfg_read_addr, uint8_t *p_cfg_write_addr, uint8_t *p_bdaddr);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief update xtal offset set in config file
|
||
|
|
* @param p_cfg_read_addr: the address of read config file
|
||
|
|
* @param p_cfg_write_addr: the address of write config file
|
||
|
|
* @param xtal: the updated xtal offset
|
||
|
|
* @retval update result
|
||
|
|
* @arg true: update success
|
||
|
|
* @arg false: update fail
|
||
|
|
*/
|
||
|
|
bool update_xtal_offset(uint8_t *p_cfg_read_addr, uint8_t *p_cfg_write_addr, uint8_t xtal);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Write MAC address to config, this is mainly used on production line.
|
||
|
|
* @param[in] p_mac_addr The buffer hold MAC address (48 bits).
|
||
|
|
* @return Write MAC to config fail or success.
|
||
|
|
* @retval true Write MAC to config success.
|
||
|
|
* @retval false Write MAC to config fails or not write existed MAC.
|
||
|
|
*/
|
||
|
|
bool UpdateMAC(uint8_t *p_mac_addr);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief update tx power in config file
|
||
|
|
* @param[in] tx_power index for power. tx_power = power*2
|
||
|
|
tx_power Power
|
||
|
|
0x10 8 dBm
|
||
|
|
0x8 4 dBm
|
||
|
|
0x6 3 dBm
|
||
|
|
0x0 0 dBm
|
||
|
|
0xD8 -20 dBm
|
||
|
|
* @return update tx power to config fail or success.
|
||
|
|
* @retval true update tx power to config success.
|
||
|
|
* @retval false update tx power to config fails or not write existed tx power.
|
||
|
|
*/
|
||
|
|
bool UpdateTxPower(uint8_t tx_power);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Write MAC address to eFuse, this is mainly used on production line.
|
||
|
|
* Because eFuse space limitation, only write MAC to eFuse once supported.
|
||
|
|
* @param[in] p_mac_addr The buffer hold MAC address (48 bits).
|
||
|
|
* @return Write MAC to config fail or success.
|
||
|
|
* @retval EFUSE_UPDATE_SUCCESS Write MAC to eFuse success.
|
||
|
|
* @retval EFUSE_UPDATE_READ_PROTECTED Can not update eFuse while it is read protected.
|
||
|
|
* @retval EFUSE_UPDATE_WRITE_MAC_FAIL Write MAC to eFuse fails.
|
||
|
|
* @retval EFUSE_UPDATE_SPACE_EXHAUSTED eFuse space is exhausted.
|
||
|
|
*/
|
||
|
|
T_EFUSE_UPDATE_RESULT update_mac_to_efuse(uint8_t *p_mac_addr);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Write 40M XTAL calibration data to config, this is mainly used on production line.
|
||
|
|
* @param[in] xtal The value of 40M XTAL calibration data
|
||
|
|
* @return Write calibration data to config fail or success.
|
||
|
|
* @retval true Success.
|
||
|
|
* @retval false Fail.
|
||
|
|
*/
|
||
|
|
bool WriteXtalToConfig(uint8_t xtal);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Write 40M XTAL calibration data to Efuse, this is mainly used on production line.
|
||
|
|
* @param[in] xtal The value of 40M XTAL calibration data
|
||
|
|
* @return Write calibration data to Efuse fail or success.
|
||
|
|
* @retval true Success.
|
||
|
|
* @retval false Fail.
|
||
|
|
* @note The Efuse space is limited, please don't call this function more than 5 five times.
|
||
|
|
*/
|
||
|
|
bool WriteXtalToEfuse(uint8_t xtal);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief allow customers to write provision data to specific flash region
|
||
|
|
* @param data input data
|
||
|
|
* @param region input region
|
||
|
|
* @ret true if success
|
||
|
|
*/
|
||
|
|
bool flash_provision_write(uint8_t *data, T_FLASH_READ_PROVISION region);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief allow customers to read provision data from specific flash region
|
||
|
|
* @param data output data
|
||
|
|
* @param region output region
|
||
|
|
* @ret true if success
|
||
|
|
*/
|
||
|
|
bool flash_provision_read(uint8_t *data, T_FLASH_READ_PROVISION region);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief get 14 bytes EUID
|
||
|
|
* @param none
|
||
|
|
* @return uint8_t *, the pointer to a copy of EUID.
|
||
|
|
*/
|
||
|
|
uint8_t *get_ic_euid(void);
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* _RTL876X_LIB_PLATFORM_H_ */
|