| /** |
| ****************************************************************************** |
| * @file shci.h |
| * @author MCD Application Team |
| * @brief HCI command for the system channel |
| ****************************************************************************** |
| * @attention |
| * |
| * <h2><center>© Copyright (c) 2019 STMicroelectronics. |
| * All rights reserved.</center></h2> |
| * |
| * This software component is licensed by ST under BSD 3-Clause license, |
| * the "License"; You may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at: |
| * opensource.org/licenses/BSD-3-Clause |
| * |
| ****************************************************************************** |
| */ |
| |
| |
| /* Define to prevent recursive inclusion -------------------------------------*/ |
| #ifndef __SHCI_H |
| #define __SHCI_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Includes ------------------------------------------------------------------*/ |
| #include "mbox_def.h" /* Requested to expose the MB_WirelessFwInfoTable_t structure */ |
| |
| /* Exported types ------------------------------------------------------------*/ |
| |
| /* SYSTEM EVENT */ |
| typedef enum |
| { |
| WIRELESS_FW_RUNNING = 0x00, |
| FUS_FW_RUNNING = 0x01, |
| } SHCI_SysEvt_Ready_Rsp_t; |
| |
| /* ERROR CODES |
| * |
| * These error codes are detected on CPU2 side and are send back to the CPU1 via a system |
| * notification message. It is up to the application running on CPU1 to manage these errors |
| * |
| * These errors can be generated by all layers (low level driver, stack, framework infrastructure, etc..) |
| */ |
| typedef enum |
| { |
| ERR_BLE_INIT = 0, /* This event is currently not reported by the CPU2 */ |
| ERR_THREAD_LLD_FATAL_ERROR = 125, /* The LLD driver used on 802_15_4 detected a fatal error */ |
| ERR_THREAD_UNKNOWN_CMD = 126, /* The command send by the CPU1 to control the Thread stack is unknown */ |
| ERR_ZIGBEE_UNKNOWN_CMD = 200, /* The command send by the CPU1 to control the Zigbee stack is unknown */ |
| } SCHI_SystemErrCode_t; |
| |
| #define SHCI_EVTCODE ( 0xFF ) |
| #define SHCI_SUB_EVT_CODE_BASE ( 0x9200 ) |
| |
| /** |
| * THE ORDER SHALL NOT BE CHANGED TO GUARANTEE COMPATIBILITY WITH THE CPU1 DEFINITION |
| */ |
| typedef enum |
| { |
| SHCI_SUB_EVT_CODE_READY = SHCI_SUB_EVT_CODE_BASE, |
| SHCI_SUB_EVT_ERROR_NOTIF, |
| SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE, |
| SHCI_SUB_EVT_THREAD_NVM_RAM_UPDATE, |
| SHCI_SUB_EVT_NVM_START_WRITE, |
| SHCI_SUB_EVT_NVM_END_WRITE, |
| SHCI_SUB_EVT_NVM_START_ERASE, |
| SHCI_SUB_EVT_NVM_END_ERASE, |
| SHCI_SUB_EVT_CODE_CONCURRENT_802154_EVT, |
| } SHCI_SUB_EVT_CODE_t; |
| |
| /** |
| * SHCI_SUB_EVT_CODE_READY |
| * This notifies the CPU1 that the CPU2 is now ready to receive commands |
| * It reports as well which firmware is running on CPU2 : The wireless stack of the FUS (previously named RSS) |
| */ |
| typedef PACKED_STRUCT{ |
| SHCI_SysEvt_Ready_Rsp_t sysevt_ready_rsp; |
| } SHCI_C2_Ready_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_ERROR_NOTIF |
| * This reports to the CPU1 some error form the CPU2 |
| */ |
| typedef PACKED_STRUCT{ |
| SCHI_SystemErrCode_t errorCode; |
| } SHCI_C2_ErrorNotif_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE |
| * This notifies the CPU1 which part of the BLE NVM RAM has been updated so that only the modified |
| * section could be written in Flash/NVM |
| * StartAddress : Start address of the section that has been modified |
| * Size : Size (in bytes) of the section that has been modified |
| */ |
| typedef PACKED_STRUCT{ |
| uint32_t StartAddress; |
| uint32_t Size; |
| } SHCI_C2_BleNvmRamUpdate_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_THREAD_NVM_RAM_UPDATE |
| * This notifies the CPU1 which part of the OT NVM RAM has been updated so that only the modified |
| * section could be written in Flash/NVM |
| * StartAddress : Start address of the section that has been modified |
| * Size : Size (in bytes) of the section that has been modified |
| */ |
| typedef PACKED_STRUCT{ |
| uint32_t StartAddress; |
| uint32_t Size; |
| } SHCI_C2_ThreadNvmRamUpdate_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_NVM_START_WRITE |
| * This notifies the CPU1 that the CPU2 has started a write procedure in Flash |
| * NumberOfWords : The number of 64bits data the CPU2 needs to write in Flash. |
| * For each 64bits data, the algorithm as described in AN5289 is executed. |
| * When this number is reported to 0, it means the Number of 64bits to be written |
| * was unknown when the procedure has started. |
| * When all data are written, the SHCI_SUB_EVT_NVM_END_WRITE event is reported |
| */ |
| typedef PACKED_STRUCT{ |
| uint32_t NumberOfWords; |
| } SHCI_C2_NvmStartWrite_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_NVM_END_WRITE |
| * This notifies the CPU1 that the CPU2 has written all expected data in Flash |
| */ |
| |
| /** |
| * SHCI_SUB_EVT_NVM_START_ERASE |
| * This notifies the CPU1 that the CPU2 has started a erase procedure in Flash |
| * NumberOfSectors : The number of sectors the CPU2 needs to erase in Flash. |
| * For each sector, the algorithm as described in AN5289 is executed. |
| * When this number is reported to 0, it means the Number of sectors to be erased |
| * was unknown when the procedure has started. |
| * When all sectors are erased, the SHCI_SUB_EVT_NVM_END_ERASE event is reported |
| */ |
| typedef PACKED_STRUCT{ |
| uint32_t NumberOfSectors; |
| } SHCI_C2_NvmStartErase_Evt_t; |
| |
| /** |
| * SHCI_SUB_EVT_NVM_END_ERASE |
| * This notifies the CPU1 that the CPU2 has erased all expected flash sectors |
| */ |
| |
| /* SYSTEM COMMAND */ |
| typedef PACKED_STRUCT |
| { |
| uint32_t MetaData[3]; |
| } SHCI_Header_t; |
| |
| typedef enum |
| { |
| SHCI_Success = 0x00, |
| SHCI_UNKNOWN_CMD = 0x01, |
| SHCI_ERR_UNSUPPORTED_FEATURE = 0x11, |
| SHCI_ERR_INVALID_HCI_CMD_PARAMS = 0x12, |
| SHCI_ERR_INVALID_PARAMS = 0x42, |
| SHCI_FUS_CMD_NOT_SUPPORTED = 0xFF, |
| } SHCI_CmdStatus_t; |
| |
| typedef enum |
| { |
| SHCI_8BITS = 0x01, |
| SHCI_16BITS = 0x02, |
| SHCI_32BITS = 0x04, |
| } SHCI_Busw_t; |
| |
| #define SHCI_OGF ( 0x3F ) |
| #define SHCI_OCF_BASE ( 0x50 ) |
| |
| /** |
| * THE ORDER SHALL NOT BE CHANGED TO GUARANTEE COMPATIBILITY WITH THE CPU2 DEFINITION |
| */ |
| typedef enum |
| { |
| SHCI_OCF_C2_RESERVED1 = SHCI_OCF_BASE, |
| SHCI_OCF_C2_RESERVED2, |
| SHCI_OCF_C2_FUS_GET_STATE, |
| SHCI_OCF_C2_FUS_RESERVED1, |
| SHCI_OCF_C2_FUS_FW_UPGRADE, |
| SHCI_OCF_C2_FUS_FW_DELETE, |
| SHCI_OCF_C2_FUS_UPDATE_AUTH_KEY, |
| SHCI_OCF_C2_FUS_LOCK_AUTH_KEY, |
| SHCI_OCF_C2_FUS_STORE_USR_KEY, |
| SHCI_OCF_C2_FUS_LOAD_USR_KEY, |
| SHCI_OCF_C2_FUS_START_WS, |
| SHCI_OCF_C2_FUS_RESERVED2, |
| SHCI_OCF_C2_FUS_RESERVED3, |
| SHCI_OCF_C2_FUS_LOCK_USR_KEY, |
| SHCI_OCF_C2_FUS_RESERVED5, |
| SHCI_OCF_C2_FUS_RESERVED6, |
| SHCI_OCF_C2_FUS_RESERVED7, |
| SHCI_OCF_C2_FUS_RESERVED8, |
| SHCI_OCF_C2_FUS_RESERVED9, |
| SHCI_OCF_C2_FUS_RESERVED10, |
| SHCI_OCF_C2_FUS_RESERVED11, |
| SHCI_OCF_C2_FUS_RESERVED12, |
| SHCI_OCF_C2_BLE_INIT, |
| SHCI_OCF_C2_THREAD_INIT, |
| SHCI_OCF_C2_DEBUG_INIT, |
| SHCI_OCF_C2_FLASH_ERASE_ACTIVITY, |
| SHCI_OCF_C2_CONCURRENT_SET_MODE, |
| SHCI_OCF_C2_FLASH_STORE_DATA, |
| SHCI_OCF_C2_FLASH_ERASE_DATA, |
| SHCI_OCF_C2_RADIO_ALLOW_LOW_POWER, |
| SHCI_OCF_C2_MAC_802_15_4_INIT, |
| SHCI_OCF_C2_REINIT, |
| SHCI_OCF_C2_ZIGBEE_INIT, |
| SHCI_OCF_C2_LLD_TESTS_INIT, |
| SHCI_OCF_C2_EXTPA_CONFIG, |
| SHCI_OCF_C2_SET_FLASH_ACTIVITY_CONTROL, |
| SHCI_OCF_C2_LLD_BLE_INIT, |
| SHCI_OCF_C2_CONFIG, |
| SHCI_OCF_C2_CONCURRENT_GET_NEXT_BLE_EVT_TIME, |
| SHCI_OCF_C2_CONCURRENT_ENABLE_NEXT_802154_EVT_NOTIFICATION, |
| } SHCI_OCF_t; |
| |
| #define SHCI_OPCODE_C2_FUS_GET_STATE (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_GET_STATE) |
| /** No command parameters */ |
| /** Response parameters*/ |
| typedef enum |
| { |
| FUS_STATE_NO_ERROR = 0x00, |
| FUS_STATE_IMG_NOT_FOUND = 0x01, |
| FUS_STATE_IMG_CORRUPT = 0x02, |
| FUS_STATE_IMG_NOT_AUTHENTIC = 0x03, |
| FUS_STATE_IMG_NOT_ENOUGH_SPACE = 0x04, |
| FUS_STATE_ERR_UNKNOWN = 0xFF, |
| } SHCI_FUS_GetState_ErrorCode_t; |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED1 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED1) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_FW_UPGRADE (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_FW_UPGRADE) |
| /** No structure for command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_FW_DELETE (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_FW_DELETE) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_UPDATE_AUTH_KEY (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_UPDATE_AUTH_KEY) |
| typedef PACKED_STRUCT{ |
| uint8_t KeySize; |
| uint8_t KeyData[64]; |
| } SHCI_C2_FUS_UpdateAuthKey_Cmd_Param_t; |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_LOCK_AUTH_KEY (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_LOCK_AUTH_KEY) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_STORE_USR_KEY (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_STORE_USR_KEY) |
| /** Command parameters */ |
| /* List of supported key type */ |
| enum |
| { |
| KEYTYPE_NONE = 0x00, |
| KEYTYPE_SIMPLE = 0x01, |
| KEYTYPE_MASTER = 0x02, |
| KEYTYPE_ENCRYPTED = 0x03, |
| }; |
| |
| /* List of supported key size */ |
| enum |
| { |
| KEYSIZE_16 = 16, |
| KEYSIZE_32 = 32, |
| }; |
| |
| typedef PACKED_STRUCT{ |
| uint8_t KeyType; |
| uint8_t KeySize; |
| uint8_t KeyData[32 + 12]; |
| } SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t; |
| |
| /** Response parameters*/ |
| /** It responds a 1 byte value holding the index given for the stored key */ |
| |
| #define SHCI_OPCODE_C2_FUS_LOAD_USR_KEY (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_LOAD_USR_KEY) |
| /** Command parameters */ |
| /** 1 byte holding the key index value */ |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_START_WS (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_START_WS) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED2 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED2) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED3 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED3) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_LOCK_USR_KEY (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_LOCK_USR_KEY) |
| /** Command parameters */ |
| /** 1 byte holding the key index value */ |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED5 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED5) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED6 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED6) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED7 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED7) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED8 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED8) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED9 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED9) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED10 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED10) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED11 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED11) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FUS_RESERVED12 (( SHCI_OGF << 10) + SHCI_OCF_C2_FUS_RESERVED12) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_BLE_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_BLE_INIT) |
| /** THE ORDER SHALL NOT BE CHANGED */ |
| typedef PACKED_STRUCT{ |
| uint8_t* pBleBufferAddress; /**< NOT USED CURRENTLY */ |
| uint32_t BleBufferSize; /**< Size of the Buffer allocated in pBleBufferAddress */ |
| uint16_t NumAttrRecord; |
| uint16_t NumAttrServ; |
| uint16_t AttrValueArrSize; |
| uint8_t NumOfLinks; |
| uint8_t ExtendedPacketLengthEnable; |
| uint8_t PrWriteListSize; |
| uint8_t MblockCount; |
| uint16_t AttMtu; |
| uint16_t SlaveSca; |
| uint8_t MasterSca; |
| uint8_t LsSource; |
| uint32_t MaxConnEventLength; |
| uint16_t HsStartupTime; |
| uint8_t ViterbiEnable; |
| uint8_t LlOnly; |
| uint8_t HwVersion; |
| } SHCI_C2_Ble_Init_Cmd_Param_t; |
| |
| typedef PACKED_STRUCT{ |
| SHCI_Header_t Header; /** Does not need to be initialized by the user */ |
| SHCI_C2_Ble_Init_Cmd_Param_t Param; |
| } SHCI_C2_Ble_Init_Cmd_Packet_t; |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_THREAD_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_THREAD_INIT) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_DEBUG_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_DEBUG_INIT) |
| /** Command parameters */ |
| typedef PACKED_STRUCT |
| { |
| uint8_t thread_config; |
| uint8_t ble_config; |
| uint8_t mac_802_15_4_config; |
| uint8_t zigbee_config; |
| } SHCI_C2_DEBUG_TracesConfig_t; |
| |
| typedef PACKED_STRUCT |
| { |
| uint8_t ble_dtb_cfg; |
| uint8_t reserved[3]; |
| } SHCI_C2_DEBUG_GeneralConfig_t; |
| |
| typedef PACKED_STRUCT{ |
| uint8_t *pGpioConfig; |
| uint8_t *pTracesConfig; |
| uint8_t *pGeneralConfig; |
| uint8_t GpioConfigSize; |
| uint8_t TracesConfigSize; |
| uint8_t GeneralConfigSize; |
| } SHCI_C2_DEBUG_init_Cmd_Param_t; |
| |
| typedef PACKED_STRUCT{ |
| SHCI_Header_t Header; /** Does not need to be initialized by the user */ |
| SHCI_C2_DEBUG_init_Cmd_Param_t Param; |
| } SHCI_C2_DEBUG_Init_Cmd_Packet_t; |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FLASH_ERASE_ACTIVITY (( SHCI_OGF << 10) + SHCI_OCF_C2_FLASH_ERASE_ACTIVITY) |
| /** Command parameters */ |
| typedef enum |
| { |
| ERASE_ACTIVITY_OFF = 0x00, |
| ERASE_ACTIVITY_ON = 0x01, |
| } SHCI_EraseActivity_t; |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_CONCURRENT_SET_MODE (( SHCI_OGF << 10) + SHCI_OCF_C2_CONCURRENT_SET_MODE) |
| /** command parameters */ |
| typedef enum |
| { |
| BLE_ENABLE, |
| THREAD_ENABLE, |
| ZIGBEE_ENABLE, |
| } SHCI_C2_CONCURRENT_Mode_Param_t; |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_CONCURRENT_GET_NEXT_BLE_EVT_TIME (( SHCI_OGF << 10) + SHCI_OCF_C2_CONCURRENT_GET_NEXT_BLE_EVT_TIME) |
| /** command parameters */ |
| typedef PACKED_STRUCT |
| { |
| uint32_t relative_time; |
| } SHCI_C2_CONCURRENT_GetNextBleEvtTime_Param_t; |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_CONCURRENT_ENABLE_NEXT_802154_EVT_NOTIFICATION (( SHCI_OGF << 10) + SHCI_OCF_C2_CONCURRENT_ENABLE_NEXT_802154_EVT_NOTIFICATION) |
| /** No command parameters */ |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_FLASH_STORE_DATA (( SHCI_OGF << 10) + SHCI_OCF_C2_FLASH_STORE_DATA) |
| #define SHCI_OPCODE_C2_FLASH_ERASE_DATA (( SHCI_OGF << 10) + SHCI_OCF_C2_FLASH_ERASE_DATA) |
| /** command parameters */ |
| typedef enum |
| { |
| BLE_IP, |
| THREAD_IP, |
| ZIGBEE_IP, |
| } SHCI_C2_FLASH_Ip_t; |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_RADIO_ALLOW_LOW_POWER (( SHCI_OGF << 10) + SHCI_OCF_C2_RADIO_ALLOW_LOW_POWER) |
| |
| #define SHCI_OPCODE_C2_MAC_802_15_4_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_MAC_802_15_4_INIT) |
| |
| #define SHCI_OPCODE_C2_REINIT (( SHCI_OGF << 10) + SHCI_OCF_C2_REINIT) |
| |
| #define SHCI_OPCODE_C2_ZIGBEE_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_ZIGBEE_INIT) |
| |
| #define SHCI_OPCODE_C2_LLD_TESTS_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_LLD_TESTS_INIT) |
| |
| #define SHCI_OPCODE_C2_LLD_BLE_INIT (( SHCI_OGF << 10) + SHCI_OCF_C2_LLD_BLE_INIT) |
| |
| #define SHCI_OPCODE_C2_EXTPA_CONFIG (( SHCI_OGF << 10) + SHCI_OCF_C2_EXTPA_CONFIG) |
| /** Command parameters */ |
| enum |
| { |
| EXT_PA_ENABLED_LOW, |
| EXT_PA_ENABLED_HIGH, |
| }/* gpio_polarity */; |
| |
| enum |
| { |
| EXT_PA_DISABLED, |
| EXT_PA_ENABLED, |
| }/* gpio_status */; |
| |
| typedef PACKED_STRUCT{ |
| uint32_t gpio_port; |
| uint16_t gpio_pin_number; |
| uint8_t gpio_polarity; |
| uint8_t gpio_status; |
| } SHCI_C2_EXTPA_CONFIG_Cmd_Param_t; |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_SET_FLASH_ACTIVITY_CONTROL (( SHCI_OGF << 10) + SHCI_OCF_C2_SET_FLASH_ACTIVITY_CONTROL) |
| /** Command parameters */ |
| typedef enum |
| { |
| FLASH_ACTIVITY_CONTROL_PES, |
| FLASH_ACTIVITY_CONTROL_SEM7, |
| }SHCI_C2_SET_FLASH_ACTIVITY_CONTROL_Source_t; |
| |
| /** No response parameters*/ |
| |
| #define SHCI_OPCODE_C2_CONFIG (( SHCI_OGF << 10) + SHCI_OCF_C2_CONFIG) |
| /** Command parameters */ |
| typedef PACKED_STRUCT{ |
| uint8_t PayloadCmdSize; |
| uint8_t Config1; |
| uint8_t EvtMask1; |
| uint8_t Spare1; |
| uint32_t BleNvmRamAddress; |
| uint32_t ThreadNvmRamAddress; |
| } SHCI_C2_CONFIG_Cmd_Param_t; |
| |
| /** |
| * PayloadCmdSize |
| * Value that shall be used |
| */ |
| #define SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE (sizeof(SHCI_C2_CONFIG_Cmd_Param_t) - 1) |
| |
| /** |
| * Config1 |
| * Each definition below may be added together to build the Config1 value |
| * WARNING : Only one definition per bit shall be added to build the Config1 value |
| */ |
| #define SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_INTERNAL_FLASH (0<<0) |
| #define SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_SRAM (1<<0) |
| #define SHCI_C2_CONFIG_CONFIG1_BIT1_THREAD_NVM_DATA_TO_INTERNAL_FLASH (0<<1) |
| #define SHCI_C2_CONFIG_CONFIG1_BIT1_THREAD_NVM_DATA_TO_SRAM (1<<1) |
| |
| /** |
| * EvtMask1 |
| * Each definition below may be added together to build the EvtMask1 value |
| */ |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT0_ERROR_NOTIF_ENABLE (1<<0) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE (1<<1) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT2_THREAD_NVM_RAM_UPDATE_ENABLE (1<<2) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT3_NVM_START_WRITE_ENABLE (1<<3) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT4_NVM_END_WRITE_ENABLE (1<<4) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT5_NVM_START_ERASE_ENABLE (1<<5) |
| #define SHCI_C2_CONFIG_EVTMASK1_BIT6_NVM_END_ERASE_ENABLE (1<<6) |
| |
| /** |
| * BleNvmRamAddress |
| * The buffer shall have a size of BLE_NVM_SRAM_SIZE number of 32bits |
| * The buffer shall be allocated in SRAM2 |
| */ |
| #define BLE_NVM_SRAM_SIZE (507) |
| |
| /** |
| * ThreadNvmRamAddress |
| * The buffer shall have a size of THREAD_NVM_SRAM_SIZE number of 32bits |
| * The buffer shall be allocated in SRAM2 |
| */ |
| #define THREAD_NVM_SRAM_SIZE (1016) |
| |
| |
| /** No response parameters*/ |
| |
| /* Exported type --------------------------------------------------------*/ |
| #define FUS_DEVICE_INFO_TABLE_VALIDITY_KEYWORD (0xA94656B9) |
| |
| /* |
| * At startup, the informations relative to the wireless binary are stored in RAM trough a structure defined by |
| * MB_WirelessFwInfoTable_t.This structure contains 4 fields (Version,MemorySize, Stack_info and a reserved part) |
| * each of those coded on 32 bits as shown on the table below: |
| * |
| * |
| * |7 |6 |5 |4 |3 |2 |1 |0 |7 |6 |5 |4 |3 |2 |1 |0 |7 |6 |5 |4 |3 |2 |1 |0 |7 |6 |5 |4 |3 |2 |1 |0 | |
| * ------------------------------------------------------------------------------------------------- |
| * Version | Major version | Minor version | Sub version | Branch |ReleaseType| |
| * ------------------------------------------------------------------------------------------------- |
| * MemorySize | SRAM2B (kB) | SRAM2A (kB) | SRAM1 (kB) | FLASH (4kb) | |
| * ------------------------------------------------------------------------------------------------- |
| * Info stack | Reserved | Reserved | Reserved | Type (MAC,Thread,BLE) | |
| * ------------------------------------------------------------------------------------------------- |
| * Reserved | Reserved | Reserved | Reserved | Reserved | |
| * ------------------------------------------------------------------------------------------------- |
| * |
| */ |
| |
| /* Field Version */ |
| #define INFO_VERSION_MAJOR_OFFSET 24 |
| #define INFO_VERSION_MAJOR_MASK 0xff000000 |
| #define INFO_VERSION_MINOR_OFFSET 16 |
| #define INFO_VERSION_MINOR_MASK 0x00ff0000 |
| #define INFO_VERSION_SUB_OFFSET 8 |
| #define INFO_VERSION_SUB_MASK 0x0000ff00 |
| #define INFO_VERSION_BRANCH_OFFSET 4 |
| #define INFO_VERSION_BRANCH_MASK 0x0000000f0 |
| #define INFO_VERSION_TYPE_OFFSET 0 |
| #define INFO_VERSION_TYPE_MASK 0x00000000f |
| |
| #define INFO_VERSION_TYPE_RELEASE 1 |
| |
| /* Field Memory */ |
| #define INFO_SIZE_SRAM2B_OFFSET 24 |
| #define INFO_SIZE_SRAM2B_MASK 0xff000000 |
| #define INFO_SIZE_SRAM2A_OFFSET 16 |
| #define INFO_SIZE_SRAM2A_MASK 0x00ff0000 |
| #define INFO_SIZE_SRAM1_OFFSET 8 |
| #define INFO_SIZE_SRAM1_MASK 0x0000ff00 |
| #define INFO_SIZE_FLASH_OFFSET 0 |
| #define INFO_SIZE_FLASH_MASK 0x000000ff |
| |
| /* Field stack information */ |
| #define INFO_STACK_TYPE_OFFSET 0 |
| #define INFO_STACK_TYPE_MASK 0x000000ff |
| #define INFO_STACK_TYPE_NONE 0 |
| |
| #define INFO_STACK_TYPE_BLE_STANDARD 0x01 |
| #define INFO_STACK_TYPE_BLE_HCI 0x02 |
| #define INFO_STACK_TYPE_BLE_LIGHT 0x03 |
| #define INFO_STACK_TYPE_BLE_BEACON 0x04 |
| #define INFO_STACK_TYPE_THREAD_FTD 0x10 |
| #define INFO_STACK_TYPE_THREAD_MTD 0x11 |
| #define INFO_STACK_TYPE_ZIGBEE_FFD 0x30 |
| #define INFO_STACK_TYPE_ZIGBEE_RFD 0x31 |
| #define INFO_STACK_TYPE_MAC 0x40 |
| #define INFO_STACK_TYPE_BLE_THREAD_FTD_STATIC 0x50 |
| #define INFO_STACK_TYPE_BLE_THREAD_FTD_DYAMIC 0x51 |
| #define INFO_STACK_TYPE_802154_LLD_TESTS 0x60 |
| #define INFO_STACK_TYPE_802154_PHY_VALID 0x61 |
| #define INFO_STACK_TYPE_BLE_PHY_VALID 0x62 |
| #define INFO_STACK_TYPE_BLE_LLD_TESTS 0x63 |
| #define INFO_STACK_TYPE_BLE_RLV 0x64 |
| #define INFO_STACK_TYPE_802154_RLV 0x65 |
| #define INFO_STACK_TYPE_BLE_ZIGBEE_FFD_STATIC 0x70 |
| #define INFO_STACK_TYPE_BLE_ZIGBEE_RFD_STATIC 0x71 |
| #define INFO_STACK_TYPE_BLE_ZIGBEE_FFD_DYNAMIC 0x78 |
| #define INFO_STACK_TYPE_BLE_ZIGBEE_RFD_DYNAMIC 0x79 |
| #define INFO_STACK_TYPE_RLV 0x80 |
| |
| typedef struct { |
| /** |
| * Wireless Info |
| */ |
| uint8_t VersionMajor; |
| uint8_t VersionMinor; |
| uint8_t VersionSub; |
| uint8_t VersionBranch; |
| uint8_t VersionReleaseType; |
| uint8_t MemorySizeSram2B; /*< Multiple of 1K */ |
| uint8_t MemorySizeSram2A; /*< Multiple of 1K */ |
| uint8_t MemorySizeSram1; /*< Multiple of 1K */ |
| uint8_t MemorySizeFlash; /*< Multiple of 4K */ |
| uint8_t StackType; |
| /** |
| * Fus Info |
| */ |
| uint8_t FusVersionMajor; |
| uint8_t FusVersionMinor; |
| uint8_t FusVersionSub; |
| uint8_t FusMemorySizeSram2B; /*< Multiple of 1K */ |
| uint8_t FusMemorySizeSram2A; /*< Multiple of 1K */ |
| uint8_t FusMemorySizeFlash; /*< Multiple of 4K */ |
| }WirelessFwInfo_t; |
| |
| |
| /* Exported functions ------------------------------------------------------- */ |
| |
| /** |
| * For all SHCI_C2_FUS_xxx() command: |
| * When the wireless FW is running on the CPU2, the command returns SHCI_FUS_CMD_NOT_SUPPORTED |
| * When any FUS command is sent after the SHCI_FUS_CMD_NOT_SUPPORTED has been received, |
| * the CPU2 switches on the RSS ( This reboots automatically the device ) |
| */ |
| /** |
| * SHCI_C2_FUS_GetState |
| * @brief Read the FUS State |
| * If the user is not interested by the Error code response, a null value may |
| * be passed as parameter |
| * |
| * @param p_rsp : return the error code when the FUS State Value = 0xFF |
| * @retval FUS State Values |
| */ |
| uint8_t SHCI_C2_FUS_GetState( SHCI_FUS_GetState_ErrorCode_t *p_rsp ); |
| |
| /** |
| * SHCI_C2_FUS_FwUpgrade |
| * @brief Request the FUS to install the CPU2 firmware update |
| * |
| * @param fw_src_add: Address of the firmware image location |
| * @param fw_dest_add: Address of the firmware destination |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_FwUpgrade( uint32_t fw_src_add, uint32_t fw_dest_add ); |
| |
| /** |
| * SHCI_C2_FUS_FwDelete |
| * @brief Delete the wireless stack on CPU2 |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_FwDelete( void ); |
| |
| /** |
| * SHCI_C2_FUS_UpdateAuthKey |
| * @brief Request the FUS to update the authentication key |
| * |
| * @param pCmdPacket |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_UpdateAuthKey( SHCI_C2_FUS_UpdateAuthKey_Cmd_Param_t *pParam ); |
| |
| /** |
| * SHCI_C2_FUS_LockAuthKey |
| * @brief Request the FUS to prevent any future update of the authentication key |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_LockAuthKey( void ); |
| |
| /** |
| * SHCI_C2_FUS_StoreUsrKey |
| * @brief Request the FUS to store the user key |
| * |
| * @param pParam : command parameter |
| * @param p_key_index : Index allocated by the FUS to the stored key |
| * |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_StoreUsrKey( SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t *pParam, uint8_t *p_key_index ); |
| |
| /** |
| * SHCI_C2_FUS_LoadUsrKey |
| * @brief Request the FUS to load the user key into the AES |
| * |
| * @param key_index : index of the user key to load in AES1 |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_LoadUsrKey( uint8_t key_index ); |
| |
| /** |
| * SHCI_C2_FUS_StartWs |
| * @brief Request the FUS to reboot on the wireless stack |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_StartWs( void ); |
| |
| /** |
| * SHCI_C2_FUS_LockUsrKey |
| * @brief Request the FUS to lock the user key so that it cannot be updated later on |
| * |
| * @param key_index : index of the user key to lock |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FUS_LockUsrKey( uint8_t key_index ); |
| |
| /** |
| * SHCI_C2_BLE_Init |
| * @brief Provides parameters and starts the BLE Stack |
| * |
| * @param pCmdPacket : Parameters to be provided to the BLE Stack |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_BLE_Init( SHCI_C2_Ble_Init_Cmd_Packet_t *pCmdPacket ); |
| |
| /** |
| * SHCI_C2_THREAD_Init |
| * @brief Starts the THREAD Stack |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_THREAD_Init( void ); |
| |
| /** |
| * SHCI_C2_LLDTESTS_Init |
| * @brief Starts the LLD tests CLI |
| * |
| * @param param_size : Nb of bytes |
| * @param p_param : pointeur with data to give from M4 to M0 |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_LLDTESTS_Init( uint8_t param_size, uint8_t * p_param ); |
| |
| /** |
| * SHCI_C2_LLD_BLE_Init |
| * @brief Starts the LLD tests CLI |
| * |
| * @param param_size : Nb of bytes |
| * @param p_param : pointeur with data to give from M4 to M0 |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_LLD_BLE_Init( uint8_t param_size, uint8_t * p_param ); |
| |
| /** |
| * SHCI_C2_ZIGBEE_Init |
| * @brief Starts the Zigbee Stack |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_ZIGBEE_Init( void ); |
| |
| /** |
| * SHCI_C2_DEBUG_Init |
| * @brief Starts the Traces |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_DEBUG_Init( SHCI_C2_DEBUG_Init_Cmd_Packet_t *pCmdPacket ); |
| |
| /** |
| * SHCI_C2_FLASH_EraseActivity |
| * @brief Provides the information of the start and the end of a flash erase window on the CPU1 |
| * |
| * @param erase_activity: Start/End of erase activity |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FLASH_EraseActivity( SHCI_EraseActivity_t erase_activity ); |
| |
| /** |
| * SHCI_C2_CONCURRENT_SetMode |
| * @brief Enable/Disable Thread on CPU2 (M0+) |
| * |
| * @param Mode: BLE or Thread enable flag |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_CONCURRENT_SetMode( SHCI_C2_CONCURRENT_Mode_Param_t Mode ); |
| |
| /** |
| * SHCI_C2_CONCURRENT_GetNextBleEvtTime |
| * @brief Get the next BLE event date (relative time) |
| * |
| * @param Command Packet |
| * @retval None |
| */ |
| SHCI_CmdStatus_t SHCI_C2_CONCURRENT_GetNextBleEvtTime( SHCI_C2_CONCURRENT_GetNextBleEvtTime_Param_t *pParam ); |
| |
| /** |
| * SHCI_C2_CONCURRENT_EnableNext_802154_EvtNotification |
| * @brief Activate the next 802.15.4 event notification (one shot) |
| * |
| * @param None |
| * @retval None |
| */ |
| SHCI_CmdStatus_t SHCI_C2_CONCURRENT_EnableNext_802154_EvtNotification( void ); |
| |
| /** |
| * SHCI_C2_FLASH_StoreData |
| * @brief Store Data in Flash |
| * |
| * @param Ip: BLE or THREAD |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FLASH_StoreData( SHCI_C2_FLASH_Ip_t Ip ); |
| |
| /** |
| * SHCI_C2_FLASH_EraseData |
| * @brief Erase Data in Flash |
| * |
| * @param Ip: BLE or THREAD |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_FLASH_EraseData( SHCI_C2_FLASH_Ip_t Ip ); |
| |
| /** |
| * SHCI_C2_RADIO_AllowLowPower |
| * @brief Allow or forbid IP_radio (802_15_4 or BLE) to enter in low power mode. |
| * |
| * @param Ip: BLE or 802_15_5 |
| * @param FlagRadioLowPowerOn: True or false |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_RADIO_AllowLowPower( SHCI_C2_FLASH_Ip_t Ip,uint8_t FlagRadioLowPowerOn); |
| |
| |
| /** |
| * SHCI_C2_MAC_802_15_4_Init |
| * @brief Starts the MAC 802.15.4 on M0 |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_MAC_802_15_4_Init( void ); |
| |
| /** |
| * SHCI_GetWirelessFwInfo |
| * @brief This function read back the informations relative to the wireless binary loaded. |
| * Refer yourself to MB_WirelessFwInfoTable_t structure to get the significance |
| * of the different parameters returned. |
| * @param pWirelessInfo : Pointer to WirelessFwInfo_t. |
| * |
| * @retval SHCI_Success |
| */ |
| SHCI_CmdStatus_t SHCI_GetWirelessFwInfo( WirelessFwInfo_t* pWirelessInfo ); |
| |
| /** |
| * SHCI_C2_Reinit |
| * @brief This is required to allow the CPU1 to fake a set C2BOOT when it has already been set. |
| * In order to fake a C2BOOT, the CPU1 shall : |
| * - Send SHCI_C2_Reinit() |
| * - call SEV instruction |
| * WARNING: |
| * This function is intended to be used by the SBSFU |
| * |
| * @param None |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_Reinit( void ); |
| |
| /** |
| * SHCI_C2_ExtpaConfig |
| * @brief Send the Ext PA configuration |
| * When the CPU2 receives the command, it controls the Ext PA as requested by the configuration |
| * This configures only which IO is used to enable/disable the ExtPA and the associated polarity |
| * This command has no effect on the other IO that is used to control the mode of the Ext PA (Rx/Tx) |
| * |
| * @param gpio_port: GPIOx where x can be (A..F) to select the GPIO peripheral for STM32WBxx family |
| * @param gpio_pin_number: This parameter can be one of GPIO_PIN_x (= LL_GPIO_PIN_x) where x can be (0..15). |
| * @param gpio_polarity: This parameter can be either |
| * - EXT_PA_ENABLED_LOW: ExtPA is enabled when GPIO is low |
| * - EXT_PA_ENABLED_HIGH: ExtPA is enabled when GPIO is high |
| * @param gpio_status: This parameter can be either |
| * - EXT_PA_DISABLED: Stop driving the ExtPA |
| * - EXT_PA_ENABLED: Drive the ExtPA according to radio activity |
| * (ON before the Event and OFF at the end of the event) |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_ExtpaConfig(uint32_t gpio_port, uint16_t gpio_pin_number, uint8_t gpio_polarity, uint8_t gpio_status); |
| |
| /** |
| * SHCI_C2_SetFlashActivityControl |
| * @brief Set the mechanism to be used on CPU2 to prevent the CPU1 to either write or erase in flash |
| * |
| * @param Source: It can be one of the following list |
| * - FLASH_ACTIVITY_CONTROL_PES : The CPU2 set the PES bit to prevent the CPU1 to either read or write in flash |
| * - FLASH_ACTIVITY_CONTROL_SEM7 : The CPU2 gets the semaphore 7 to prevent the CPU1 to either read or write in flash. |
| * This requires the CPU1 to first get semaphore 7 before erasing or writing the flash. |
| * |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_SetFlashActivityControl(SHCI_C2_SET_FLASH_ACTIVITY_CONTROL_Source_t Source); |
| |
| /** |
| * SHCI_C2_Config |
| * @brief Send the system configuration to the CPU2 |
| * |
| * @param pCmdPacket: address of the buffer holding following parameters |
| * uint8_t PayloadCmdSize : Size of the payload - shall be SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE |
| * uint8_t Config1 : |
| * - bit0 : 0 - BLE NVM Data data are flushed in internal secure flash |
| * 1 - BLE NVM Data are written in SRAM cache pointed by BleNvmRamAddress |
| * - bit1 : 0 - THREAD NVM Data data are flushed in internal secure flash |
| * 1 - THREAD NVM Data are written in SRAM cache pointed by ThreadNvmRamAddress |
| * - bit2 to bit7 : Unused, shall be set to 0 |
| * uint8_t EvtMask1 : |
| * When a bit is set to 0, the event is not reported |
| * bit0 : Asynchronous Event with Sub Evt Code 0x9201 (= SHCI_SUB_EVT_ERROR_NOTIF) |
| * ... |
| * bit31 : Asynchronous Event with Sub Evt Code 0x9220 |
| * uint8_t Spare1 : Unused, shall be set to 0 |
| * uint32_t BleNvmRamAddress : |
| * Only considered when Config1.bit0 = 1 |
| * When set to 0, data are kept in internal SRAM on CPU2 |
| * Otherwise, data are copied in the cache pointed by BleNvmRamAddress |
| * The size of the buffer shall be BLE_NVM_SRAM_SIZE (number of 32bits) |
| * The buffer shall be allocated in SRAM2 |
| * uint32_t ThreadNvmRamAddress : |
| * Only considered when Config1.bit1 = 1 |
| * When set to 0, data are kept in internal SRAM on CPU2 |
| * Otherwise, data are copied in the cache pointed by ThreadNvmRamAddress |
| * The size of the buffer shall be THREAD_NVM_SRAM_SIZE (number of 32bits) |
| * The buffer shall be allocated in SRAM2 |
| * |
| * Please check macro definition to be used for this function |
| * They are defined in this file next to the definition of SHCI_OPCODE_C2_CONFIG |
| * |
| * @retval Status |
| */ |
| SHCI_CmdStatus_t SHCI_C2_Config(SHCI_C2_CONFIG_Cmd_Param_t *pCmdPacket); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /*__SHCI_H */ |
| |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |