SET(PREFIX ${CMAKE_INSTALL_PREFIX})
INCLUDE(FindPkgConfig)
-pkg_check_modules(hal-backend-device-board_pkgs REQUIRED hal-backend-device-common)
+pkg_check_modules(hal-backend-device-board_pkgs REQUIRED
+ hal-backend-device-common
+ libsyscommon
+ )
FOREACH(flag ${hal-backend-device-board_pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
#include <string.h>
#include </hal/include/device/hal-backend-common.h>
+#include <libsyscommon/file.h>
-#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
-#define LINE_LEN 64
+#define PARTITION_PARAM_PATH "/mnt/inform/partition-param.bin"
+#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
+#define LINE_LEN 64
static int get_device_serial_number(char *buffer, int len)
{
return 0;
}
+static int get_current_partition(char *partition_ab)
+{
+ int ret_parse = libsys_parse_cmdline_scanf("partition_ab=%c", partition_ab);
+
+ if (ret_parse <= 0) {
+ return -ENOENT;
+ }
+
+ return 0;
+
+}
+
+static int switch_partition(char partition_ab)
+{
+ char cur_partition_ab;
+ char next_partition_ab[2];
+
+ next_partition_ab[0] = partition_ab;
+ next_partition_ab[1] = '\0';
+
+ if (partition_ab == '\0') {
+ /* Toggle partition a/b */
+ int ret_cur_part = get_current_partition(&cur_partition_ab);
+
+ if (ret_cur_part < 0) {
+ return ret_cur_part;
+ }
+
+ if (cur_partition_ab == 'a') {
+ next_partition_ab[0] = 'b';
+ } else if(cur_partition_ab == 'b') {
+ next_partition_ab[0] = 'a';
+ } else {
+ return -ENOENT;
+ }
+ } else if(partition_ab != 'a' && partition_ab != 'b') {
+ return -EINVAL;
+ }
+
+ return sys_write_buf(PARTITION_PARAM_PATH, next_partition_ab);
+}
+
static int board_init(void **data)
{
hal_backend_board_funcs *board_funcs;
return -ENOMEM;
board_funcs->get_device_serial_number = get_device_serial_number;
+ board_funcs->get_current_partition = get_current_partition;
+ board_funcs->switch_partition = switch_partition;
*data = (void *)board_funcs;