zwischenstand
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "buzz_proto.h"
|
||||
#include "fs_mgmt.h"
|
||||
#include "fw_mgmt.h"
|
||||
|
||||
LOG_MODULE_REGISTER(buzz_proto, CONFIG_BUZZ_PROTO_LOG_LEVEL);
|
||||
K_MEM_SLAB_DEFINE(buzz_proto_slabs, CONFIG_BUZZ_PROTO_SLAB_SIZE, CONFIG_BUZZ_PROTO_SLAB_COUNT, 4);
|
||||
@@ -172,7 +173,7 @@ static void handle_proto_version_request(struct buzz_frame_msg *msg)
|
||||
resp_data->data_type = BUZZ_DATA_PROTO_INFO;
|
||||
resp_data->version = sys_cpu_to_le16(BUZZ_PROTO_VERSION);
|
||||
|
||||
/* Dynamische Chunk-Größe basierend auf der aktuellen Transport-MTU berechnen */
|
||||
/* Dynamische Chunk-Grösse basierend auf der aktuellen Transport-MTU berechnen */
|
||||
uint16_t slab_payload = CONFIG_BUZZ_PROTO_SLAB_SIZE - sizeof(struct buzz_proto_header);
|
||||
uint16_t transport_payload = 0;
|
||||
|
||||
@@ -192,6 +193,34 @@ static void handle_proto_version_request(struct buzz_frame_msg *msg)
|
||||
}
|
||||
}
|
||||
|
||||
void handle_device_info_request(struct buzz_frame_msg *msg) {
|
||||
struct buzz_proto_header *hdr = (struct buzz_proto_header *)msg->data_ptr;
|
||||
hdr->frame_type = BUZZ_FRAME_RESPONSE;
|
||||
struct buzz_resp_device_info *resp_data = (struct buzz_resp_device_info *)(msg->data_ptr + sizeof(*hdr));
|
||||
resp_data->data_type = BUZZ_DATA_DEVICE_INFO;
|
||||
if (fw_mgmt_get_id(resp_data->device_id, sizeof(resp_data->device_id)) < 0) {
|
||||
LOG_ERR("Failed to get device ID");
|
||||
send_error_frame(msg, EIO);
|
||||
return;
|
||||
}
|
||||
const char *board_name = fw_mgmt_get_board_name();
|
||||
const char *board_rev = fw_mgmt_get_board_revision();
|
||||
const char *soc_name = fw_mgmt_get_soc_name();
|
||||
resp_data->board_name_length = MIN(strlen(board_name), 32); // Sicherheitsmassnahme gegen zu lange Namen
|
||||
resp_data->board_revision_length = MIN(strlen(board_rev), 32); // Sicherheitsmassnahme gegen zu lange Namen
|
||||
resp_data->soc_name_length = MIN(strlen(soc_name), 32); // Sicherheitsmassnahme gegen zu lange Namen
|
||||
memcpy(resp_data->data, board_name, resp_data->board_name_length);
|
||||
memcpy(resp_data->data + resp_data->board_name_length, board_rev, resp_data->board_revision_length);
|
||||
memcpy(resp_data->data + resp_data->board_name_length + resp_data->board_revision_length, soc_name, resp_data->soc_name_length);
|
||||
uint16_t payload_length = sizeof(struct buzz_resp_device_info) + resp_data->board_name_length + resp_data->board_revision_length + resp_data->soc_name_length;
|
||||
hdr->payload_length = sys_cpu_to_le16(payload_length);
|
||||
uint16_t total_len = sizeof(struct buzz_proto_header) + payload_length;
|
||||
if (msg->reply_cb)
|
||||
{
|
||||
msg->reply_cb(msg->data_ptr, total_len);
|
||||
}
|
||||
}
|
||||
|
||||
void handle_fs_info_request(struct buzz_frame_msg *msg)
|
||||
{
|
||||
struct buzz_proto_header *hdr = (struct buzz_proto_header *)msg->data_ptr;
|
||||
@@ -234,6 +263,36 @@ void handle_fs_info_request(struct buzz_frame_msg *msg)
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_fw_info_request(struct buzz_frame_msg *msg)
|
||||
{
|
||||
struct buzz_proto_header *hdr = (struct buzz_proto_header *)msg->data_ptr;
|
||||
|
||||
hdr->frame_type = BUZZ_FRAME_RESPONSE;
|
||||
|
||||
struct buzz_resp_fw_info *resp_data = (struct buzz_resp_fw_info *)(msg->data_ptr + sizeof(*hdr));
|
||||
|
||||
resp_data->data_type = BUZZ_DATA_FW_INFO;
|
||||
resp_data->fw_status = fw_mgmt_get_fw_state();
|
||||
resp_data->slot1_size = sys_cpu_to_le32(fw_mgmt_get_slot1_size());
|
||||
|
||||
const char *fw_version = fw_mgmt_get_fw_version_string();
|
||||
const char *kernel_version = fw_mgmt_get_kernel_version_string();
|
||||
resp_data->fw_version_length = MIN(strlen(fw_version), 32); // Sicherheitsmassnahme gegen zu lange Strings
|
||||
resp_data->kernel_version_length = MIN(strlen(kernel_version), 32); // Sicherheitsmassnahme gegen zu lange Strings
|
||||
memcpy(resp_data->data, fw_version, resp_data->fw_version_length);
|
||||
memcpy(resp_data->data + resp_data->fw_version_length, kernel_version, resp_data->kernel_version_length);
|
||||
|
||||
uint16_t payload_length = sizeof(struct buzz_resp_fw_info) + resp_data->fw_version_length + resp_data->kernel_version_length;
|
||||
hdr->payload_length = sys_cpu_to_le16(payload_length);
|
||||
|
||||
uint16_t total_len = sizeof(struct buzz_proto_header) + payload_length;
|
||||
|
||||
if (msg->reply_cb)
|
||||
{
|
||||
msg->reply_cb(msg->data_ptr, total_len);
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_ls_request(struct buzz_frame_msg *msg)
|
||||
{
|
||||
struct buzz_proto_header *hdr = (struct buzz_proto_header *)msg->data_ptr;
|
||||
@@ -619,6 +678,11 @@ static void handle_request(struct buzz_frame_msg *msg)
|
||||
handle_proto_version_request(msg);
|
||||
break;
|
||||
|
||||
case BUZZ_DATA_DEVICE_INFO:
|
||||
LOG_DBG("Received Device Info Request");
|
||||
handle_device_info_request(msg);
|
||||
break;
|
||||
|
||||
case BUZZ_DATA_FS_INFO:
|
||||
LOG_DBG("Received FS Info Request");
|
||||
handle_fs_info_request(msg);
|
||||
@@ -629,6 +693,11 @@ static void handle_request(struct buzz_frame_msg *msg)
|
||||
handle_ls_request(msg);
|
||||
break;
|
||||
|
||||
case BUZZ_DATA_FW_INFO:
|
||||
LOG_DBG("Received FW Info Request");
|
||||
handle_fw_info_request(msg);
|
||||
break;
|
||||
|
||||
case BUZZ_DATA_FILE_GET:
|
||||
LOG_DBG("Received FILE_GET Request");
|
||||
handle_file_get_request(msg, false);
|
||||
|
||||
Reference in New Issue
Block a user