127 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include <stdbool.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| typedef enum {
 | |
|     BleGlueC2ModeUnknown = 0,
 | |
|     BleGlueC2ModeFUS,
 | |
|     BleGlueC2ModeStack,
 | |
| } BleGlueC2Mode;
 | |
| 
 | |
| #define BLE_GLUE_MAX_VERSION_STRING_LEN 20
 | |
| typedef struct {
 | |
|     BleGlueC2Mode mode;
 | |
|     /**
 | |
|      * 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;
 | |
|     char StackTypeString[BLE_GLUE_MAX_VERSION_STRING_LEN];
 | |
|     /**
 | |
|      * 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 */
 | |
| } BleGlueC2Info;
 | |
| 
 | |
| typedef enum {
 | |
|     // Stage 1: core2 startup and FUS
 | |
|     BleGlueStatusStartup,
 | |
|     BleGlueStatusBroken,
 | |
|     BleGlueStatusC2Started,
 | |
|     // Stage 2: radio stack
 | |
|     BleGlueStatusRadioStackRunning,
 | |
|     BleGlueStatusRadioStackMissing
 | |
| } BleGlueStatus;
 | |
| 
 | |
| typedef void (
 | |
|     *BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
 | |
| 
 | |
| /** Initialize start core2 and initialize transport */
 | |
| void ble_glue_init();
 | |
| 
 | |
| /** Start Core2 Radio stack
 | |
|  *
 | |
|  * @return     true on success
 | |
|  */
 | |
| bool ble_glue_start();
 | |
| 
 | |
| /** Is core2 alive and at least FUS is running
 | |
|  * 
 | |
|  * @return     true if core2 is alive
 | |
|  */
 | |
| bool ble_glue_is_alive();
 | |
| 
 | |
| /** Waits for C2 to reports its mode to callback
 | |
|  *
 | |
|  * @return     true if it reported before reaching timeout
 | |
|  */
 | |
| bool ble_glue_wait_for_c2_start(int32_t timeout);
 | |
| 
 | |
| BleGlueStatus ble_glue_get_c2_status();
 | |
| 
 | |
| const BleGlueC2Info* ble_glue_get_c2_info();
 | |
| 
 | |
| /** Is core2 radio stack present and ready
 | |
|  *
 | |
|  * @return     true if present and ready
 | |
|  */
 | |
| bool ble_glue_is_radio_stack_ready();
 | |
| 
 | |
| /** Set callback for NVM in RAM changes
 | |
|  *
 | |
|  * @param[in]  callback  The callback to call on NVM change
 | |
|  * @param      context   The context for callback
 | |
|  */
 | |
| void ble_glue_set_key_storage_changed_callback(
 | |
|     BleGlueKeyStorageChangedCallback callback,
 | |
|     void* context);
 | |
| 
 | |
| /** Stop SHCI thread */
 | |
| void ble_glue_thread_stop();
 | |
| 
 | |
| bool ble_glue_reinit_c2();
 | |
| 
 | |
| typedef enum {
 | |
|     BleGlueCommandResultUnknown,
 | |
|     BleGlueCommandResultOK,
 | |
|     BleGlueCommandResultError,
 | |
|     BleGlueCommandResultRestartPending,
 | |
|     BleGlueCommandResultOperationOngoing,
 | |
| } BleGlueCommandResult;
 | |
| 
 | |
| /** Restart MCU to launch radio stack firmware if necessary
 | |
|  *
 | |
|  * @return      true on radio stack start command
 | |
|  */
 | |
| BleGlueCommandResult ble_glue_force_c2_mode(BleGlueC2Mode mode);
 | |
| 
 | |
| BleGlueCommandResult ble_glue_fus_stack_delete();
 | |
| 
 | |
| BleGlueCommandResult ble_glue_fus_stack_install(uint32_t src_addr, uint32_t dst_addr);
 | |
| 
 | |
| BleGlueCommandResult ble_glue_fus_get_status();
 | |
| 
 | |
| BleGlueCommandResult ble_glue_fus_wait_operation();
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | 
