blob: 6896f3834c73fe74d618b067308e7147219495f9 [file] [log] [blame]
/*-----------------------------------------------------------------------------------------------*/
/**
@file ql_absys.h
@brief
This file declare absys interface
*/
/*-----------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
Copyright (c) 2018 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
Quectel Wireless Solution Proprietary and Confidential.
-------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
EDIT HISTORY
This section contains comments describing changes made to the file.
Notice that changes are listed in reverse chronological order.
$Header: $
when who what, where, why
-------- --- ----------------------------------------------------------
2021.12.20 jessie.lei Created .
-------------------------------------------------------------------------------------------------*/
#ifndef QL_ABSYS_H_
#define QL_ABSYS_H_
#include <stdbool.h>
#include <stdint.h>
#include <errno.h>
#include "fota_info.h"
#ifdef __cplusplus
extern "C" {
#endif
#define PARTITION_NAME_SIZE 16
//--------------------------------------------------------------------------------------------------
/**
* System ID: The dual system platforms have 2 systems: A and B.
*
*/
//--------------------------------------------------------------------------------------------------
typedef enum absystem
{
SYSTEM_A = 0,
SYSTEM_B = 1
} absystem_t;
//--------------------------------------------------------------------------------------------------
/**
* system status
*/
//--------------------------------------------------------------------------------------------------
typedef struct
{
fota_state_t ota_state; ///< the device ota upgrade status
bool is_damaged; ///< whether the device have damaged partition
uint8_t damaged_partname[PARTITION_NAME_SIZE]; ///< which partition damaged, and tiggered the device A/B system switch
} sysstatus_t;
//--------------------------------------------------------------------------------------------------
/**
* @brief
* get current system status, fota status & A/B partition status.
* @Parameter
[OUT] sys_state, store the status to this struct for the caller could read current system status.
* @return
* - On success 0
* - On failure -1
*/
//--------------------------------------------------------------------------------------------------
int ql_absys_getstatus(sysstatus_t *sys_state);
//--------------------------------------------------------------------------------------------------
/**
* @brief
* get current active system is A or B.
* @Parameter
[InOut] cur_system, store the current active system info to this enmu.
* @return
* - On success 0, success to get current active system
* - On failure -1, failed to get current active system
*/
//--------------------------------------------------------------------------------------------------
int ql_absys_get_cur_active_part(absystem_t *cur_system);
//--------------------------------------------------------------------------------------------------
/**
* @brief
* Set flags in fota state file, need the caller do reboot system action atfer this api return 0, then A/B system will be switch atfer reboot.
* If fota state is SUCCEED or NEEDSYNC (A/B system is sync), it is okay to switch A/B system, API will be return 0.
* If fota state is WRITEDONE (A/B system is not sync), it is okay to switch A/B system and will be set fota state to NEEDSYNC, API will be return 0.
* If fota state is UPDATE or BACKUP (A/B system is not sync), indicate the inactive partition is being updated and can not switch A/B, API will be return -2
* If fota state is FAILED (A/B system is not sync), indicate the inactive partition was damaged and can not switch A/B, API will be return -3
* @Parameter
* No parameter
* @return
* - On success 0 indicate the switch flag was set succeed
* - On failure -1 get or set fota state and absys info failed;
* -2 indicate the inactive partition was damaged by ota upgrade, could not switch;
* -3 indicate the inactive partition is being upgraded or backup is in progress.
*/
//--------------------------------------------------------------------------------------------------
int ql_absys_switch(void);
//--------------------------------------------------------------------------------------------------
/**
* @brief
* Program a synchronization active slot partition data to non-active partition
* @Parameter
* No parameter
* @return
* - On success 0
* - On failure -1
*/
//--------------------------------------------------------------------------------------------------
int ql_absys_sync(void);
//--------------------------------------------------------------------------------------------------
/**
* @brief
* Program a synchronization active slot partition data to non-inactive partition
* @Parameter
* [IN] cpu_loading_level 0 ql_otad cpuloading 98%
* 1 ql_otad cpuloading 55%
* 2 ql_otad cpuloading 38%
* 3 ql_otad cpuloading 30%
* 4 ql_otad cpuloading 25%
* 5 ql_otad cpuloading 20%
* @return
* - On success 0
* - On failure -1
*/
//--------------------------------------------------------------------------------------------------
int ql_absys_sync_control(int cpu_loading_level);
#ifdef __cplusplus
}
#endif
#endif //QL_ABSYS_H_