#include </hal/include/device/hal-backend-common.h>
#include <libsyscommon/file.h>
-#define INFORM_MNT_PATH "/mnt/inform"
-#define PARTITION_AB_PATH INFORM_MNT_PATH"/partition-ab.info"
-#define PARTITION_AB_CLONED_PATH INFORM_MNT_PATH"/partition-ab-cloned.info"
-#define UPGRADE_STATUS_PATH INFORM_MNT_PATH"/upgrade-status.info"
-#define PARTITION_A_STATUS_PATH INFORM_MNT_PATH"/partition-a-status.info"
-#define PARTITION_B_STATUS_PATH INFORM_MNT_PATH"/partition-b-status.info"
-#define REBOOT_PARAM_PATH INFORM_MNT_PATH"/reboot-param.bin"
-#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
+#define INFORM_MNT_PATH "/mnt/inform"
+#define PARTITION_AB_PATH INFORM_MNT_PATH"/partition-ab.info"
+#define PARTITION_AB_CLONED_PATH INFORM_MNT_PATH"/partition-ab-cloned.info"
+#define UPGRADE_PROGRESS_STATUS_PATH INFORM_MNT_PATH"/upgrade-progress-status.info"
+#define PARTITION_A_STATUS_PATH INFORM_MNT_PATH"/partition-a-status.info"
+#define PARTITION_B_STATUS_PATH INFORM_MNT_PATH"/partition-b-status.info"
+#define REBOOT_PARAM_PATH INFORM_MNT_PATH"/reboot-param.bin"
+#define UPGRADE_STATE_PATH INFORM_MNT_PATH"/upgrade-state.info"
+#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
#define PARTITION_STATUS_OK "ok"
#define PARTITION_STATUS_CORRUPTED "corrupted"
return 0;
}
-static int set_upgrade_status(int status)
+static int set_upgrade_progress_status(int status)
{
/* status: -1 if upgrade fail, otherwise 0~100 */
if (status < -1 || status > 100) {
}
/* clear contents of the file first */
- if (truncate(UPGRADE_STATUS_PATH, 0) == -1) {
+ if (truncate(UPGRADE_PROGRESS_STATUS_PATH, 0) == -1) {
int ferror = errno;
errno = 0;
return -ferror;
}
- return sys_set_int(UPGRADE_STATUS_PATH, status);
+ return sys_set_int(UPGRADE_PROGRESS_STATUS_PATH, status);
}
-static int get_upgrade_status(int *status)
+static int get_upgrade_progress_status(int *status)
{
- int ret_get_int = sys_get_int(UPGRADE_STATUS_PATH, status);
+ int ret_get_int = sys_get_int(UPGRADE_PROGRESS_STATUS_PATH, status);
if (ret_get_int < 0) {
return ret_get_int;
return 0;
}
+static int set_upgrade_state(char *state)
+{
+ if (state == NULL)
+ return -EINVAL;
+
+ /* clear contents of the file first */
+ if (truncate(UPGRADE_STATE_PATH, 0) == -1) {
+ int ferror = errno;
+ errno = 0;
+ return -ferror;
+ }
+
+ return sys_set_str(UPGRADE_STATE_PATH, state);
+}
+
+static int get_upgrade_state(char *buffer, const int max_len)
+{
+ int ret = 0;
+
+ if (buffer == NULL)
+ return -EINVAL;
+
+ if (max_len < 1)
+ return -EINVAL;
+
+ ret = sys_get_str(UPGRADE_STATE_PATH, buffer, max_len - 1);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
static int board_init(void **data)
{
hal_backend_device_board_funcs *device_board_funcs;
device_board_funcs->set_partition_status = set_partition_status;
device_board_funcs->get_partition_status = get_partition_status;
- device_board_funcs->set_upgrade_status = set_upgrade_status;
- device_board_funcs->get_upgrade_status = get_upgrade_status;
+ device_board_funcs->set_upgrade_progress_status = set_upgrade_progress_status;
+ device_board_funcs->get_upgrade_progress_status = get_upgrade_progress_status;
+
+ device_board_funcs->set_upgrade_state = set_upgrade_state;
+ device_board_funcs->get_upgrade_state = get_upgrade_state;
return 0;
}