mirror of
https://dev.iopsys.eu/system/sysmngr.git
synced 2025-12-10 00:06:19 +01:00
Fix set_bootbank status
This commit is contained in:
parent
8d150fae12
commit
71d433a55f
3 changed files with 49 additions and 85 deletions
|
|
@ -120,9 +120,7 @@ static void fwbank_copy_config(void)
|
|||
|
||||
static bool fwbank_set_bootbank(const char *bank_id)
|
||||
{
|
||||
int res = sysmngr_fwbank_set_bootbank((uint32_t)DM_STRTOUL(bank_id), NULL);
|
||||
|
||||
return !res ? true : false;
|
||||
return sysmngr_fwbank_set_bootbank((uint32_t)DM_STRTOUL(bank_id));
|
||||
}
|
||||
|
||||
static bool fwbank_upgrade(const char *path, bool activate, const char *bank_id, const char *keep_settings)
|
||||
|
|
|
|||
128
src/fwbank.c
128
src/fwbank.c
|
|
@ -485,73 +485,6 @@ struct blob_buf *sysmngr_fwbank_dump(void)
|
|||
return &g_fwbank_dump.output;
|
||||
}
|
||||
|
||||
static void fwbank_set_bootbank_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id)
|
||||
{
|
||||
BBFDM_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
|
||||
close(pipe_fds[1]); // Close unused write end
|
||||
|
||||
char buffer[1024] = {0};
|
||||
ssize_t bytes_read;
|
||||
|
||||
BBFDM_DEBUG("Reading script output...");
|
||||
|
||||
// Read the output from the script
|
||||
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
|
||||
buffer[bytes_read] = '\0'; // Null-terminate the buffer
|
||||
BBFDM_DEBUG("Script output: %s", buffer);
|
||||
}
|
||||
|
||||
close(pipe_fds[0]); // Close read end
|
||||
|
||||
if (bytes_read < 0) {
|
||||
BBFDM_ERR("Failed to read from pipe");
|
||||
return;
|
||||
}
|
||||
|
||||
struct blob_buf setbootbank_bb = {0};
|
||||
|
||||
memset(&setbootbank_bb, 0, sizeof(struct blob_buf));
|
||||
blob_buf_init(&setbootbank_bb, 0);
|
||||
|
||||
if (!blobmsg_add_json_from_string(&setbootbank_bb, buffer)) {
|
||||
BBFDM_ERR("Failed to create blob buf");
|
||||
blob_buf_free(&setbootbank_bb);
|
||||
return;
|
||||
}
|
||||
|
||||
bool is_success = is_set_bootbank_success(&setbootbank_bb);
|
||||
|
||||
if (ctx && req) {
|
||||
BBFDM_DEBUG("Send ubus output");
|
||||
ubus_send_reply(ctx, req, setbootbank_bb.head);
|
||||
}
|
||||
|
||||
blob_buf_free(&setbootbank_bb);
|
||||
|
||||
if (is_success) {
|
||||
// Update fwbank dump output
|
||||
init_global_fwbank_dump();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int sysmngr_fwbank_set_bootbank(uint32_t bank_id, struct ubus_request_data *req)
|
||||
{
|
||||
char cmd[128] = {0};
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "echo '{\"bank\":%u}' | %s 2>/dev/null", bank_id, FWBANK_SET_BOOTBANK_CMD);
|
||||
|
||||
int res = sysmngr_task_fork(fwbank_set_bootbank_finish_callback, cmd, 10, req, 0);
|
||||
if (res) {
|
||||
BBFDM_ERR("Failed to start task for fwbank set bootbank command");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fwbank_upgrade_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id)
|
||||
{
|
||||
BBFDM_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
|
|
@ -629,6 +562,38 @@ static int dump_handler(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
return 0;
|
||||
}
|
||||
|
||||
bool sysmngr_fwbank_set_bootbank(uint32_t bank_id)
|
||||
{
|
||||
char cmd[128] = {0};
|
||||
char output[256] = {0};
|
||||
struct blob_buf bb = {0};
|
||||
bool res = false;
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "echo '{\"bank\":%u}' | %s 2>/dev/null", bank_id, FWBANK_SET_BOOTBANK_CMD);
|
||||
res = run_cmd(cmd, output, sizeof(output));
|
||||
if (res || (DM_STRLEN(output) == 0)) {
|
||||
BBFDM_ERR("Failed to run [%s], ret[%d], output[%s]", cmd, res, output);
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(&bb, 0, sizeof(struct blob_buf));
|
||||
blob_buf_init(&bb, 0);
|
||||
|
||||
if (!blobmsg_add_json_from_string(&bb, output)) {
|
||||
BBFDM_ERR("Failed to create blob, from json str[%s]", output);
|
||||
blob_buf_free(&bb);
|
||||
return false;
|
||||
}
|
||||
|
||||
res = is_set_bootbank_success(&bb);
|
||||
if (res == true) {
|
||||
init_global_fwbank_dump();
|
||||
}
|
||||
|
||||
blob_buf_free(&bb);
|
||||
return res;
|
||||
}
|
||||
|
||||
enum {
|
||||
SET_BOOT_BANK,
|
||||
__SET_BOOT_MAX
|
||||
|
|
@ -643,30 +608,31 @@ static int set_bootbank_handler(struct ubus_context *ctx, struct ubus_object *ob
|
|||
struct blob_attr *msg)
|
||||
{
|
||||
struct blob_attr *tb[__SET_BOOT_MAX];
|
||||
uint32_t band_id = 0;
|
||||
uint32_t bank_id = 0;
|
||||
int res = 0;
|
||||
struct blob_buf bb = {0};
|
||||
|
||||
if (blobmsg_parse(set_bootbank_policy, __SET_BOOT_MAX, tb, blob_data(msg), blob_len(msg))) {
|
||||
BBFDM_ERR("Failed to parse the 'set_bootbank' message");
|
||||
return UBUS_STATUS_UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
if (tb[SET_BOOT_BANK])
|
||||
band_id = blobmsg_get_u32(tb[SET_BOOT_BANK]);
|
||||
memset(&bb, 0, sizeof(struct blob_buf));
|
||||
blob_buf_init(&bb, 0);
|
||||
|
||||
res = sysmngr_fwbank_set_bootbank(band_id, req);
|
||||
|
||||
if (res) {
|
||||
struct blob_buf bb = {0};
|
||||
|
||||
memset(&bb, 0, sizeof(struct blob_buf));
|
||||
blob_buf_init(&bb, 0);
|
||||
blobmsg_add_u8(&bb, "status", false);
|
||||
ubus_send_reply(ctx, req, bb.head);
|
||||
blob_buf_free(&bb);
|
||||
if (tb[SET_BOOT_BANK]) {
|
||||
bank_id = blobmsg_get_u32(tb[SET_BOOT_BANK]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
if (sysmngr_fwbank_set_bootbank(bank_id)) {
|
||||
blobmsg_add_u8(&bb, "status", true);
|
||||
} else {
|
||||
blobmsg_add_u8(&bb, "status", false);
|
||||
}
|
||||
ubus_send_reply(ctx, req, bb.head);
|
||||
blob_buf_free(&bb);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
enum {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ extern struct blobmsg_policy sysmngr_dump_policy[];
|
|||
extern struct blobmsg_policy sysmngr_bank_policy[];
|
||||
|
||||
struct blob_buf *sysmngr_fwbank_dump(void);
|
||||
int sysmngr_fwbank_set_bootbank(uint32_t bank_id, struct ubus_request_data *req);
|
||||
bool sysmngr_fwbank_set_bootbank(uint32_t bank_id);
|
||||
int sysmngr_fwbank_upgrade(const char *path, bool auto_activate, uint32_t bank_id, bool keep_settings, struct ubus_request_data *req);
|
||||
|
||||
void sysmngr_fwbank_refresh_global_dump(void);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue