summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cleopatre/application/managerd/inc/vs_mme.h5
-rw-r--r--cleopatre/application/managerd/src/vs_mme.c47
2 files changed, 34 insertions, 18 deletions
diff --git a/cleopatre/application/managerd/inc/vs_mme.h b/cleopatre/application/managerd/inc/vs_mme.h
index 2e0b8a9bdd..52159c63f4 100644
--- a/cleopatre/application/managerd/inc/vs_mme.h
+++ b/cleopatre/application/managerd/inc/vs_mme.h
@@ -36,10 +36,9 @@ typedef struct {
uint8_t result;
uint16_t device_id;
uint8_t current_image_index;
- uint8_t applicative_version[64];
+ uint8_t applicative_version[16];
uint8_t av_stack_version[64];
- uint8_t applicative_alternate[64];
- uint8_t av_stack_alternate[64];
+ uint8_t applicative_alternate[16];
} __attribute__ ((__packed__)) vs_get_version_cnf_t;
typedef enum {
diff --git a/cleopatre/application/managerd/src/vs_mme.c b/cleopatre/application/managerd/src/vs_mme.c
index fbc310e675..71ded24256 100644
--- a/cleopatre/application/managerd/src/vs_mme.c
+++ b/cleopatre/application/managerd/src/vs_mme.c
@@ -61,13 +61,14 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert (len >= sizeof(vs_get_version_cnf_t) + sizeof(MME_t));
+ assert (len >= sizeof (vs_get_version_cnf_t) + sizeof (MME_t));
/* check for request content */
- if(memcmp ((char *)request + sizeof(MME_t), OUI_SPIDCOM, 3))
+ if (memcmp ((char *) request + sizeof (MME_t), OUI_SPIDCOM, 3))
return TO_DROP;
- get_version_cnf = (vs_get_version_cnf_t *)((unsigned char*)confirm + sizeof(MME_t));
+ get_version_cnf = (vs_get_version_cnf_t *) ((unsigned char*) confirm + \
+ sizeof (MME_t));
/* prepare confirm packet */
_prepare_confirm (ctx, request, confirm, len);
@@ -79,23 +80,27 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
// TODO: find the right index value
get_version_cnf->current_image_index = 0;
- /* get image description */
- memset (&desc, '\0', sizeof(desc));
- if(LIBSPID_SUCCESS == libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT, &desc, mtd_name))
+ /* get current image version */
+ memset (&desc, '\0', sizeof (desc));
+
+ if (LIBSPID_SUCCESS == libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_CURRENT,
+ &desc, mtd_name))
{
- memcpy (get_version_cnf->applicative_version, desc.version, sizeof(desc.version));
+ memcpy (get_version_cnf->applicative_version, desc.version,
+ sizeof (desc.version));
}
- if((fp = fopen (PLC_VERSION_PATH, "r")) != NULL)
+ if ((fp = fopen (PLC_VERSION_PATH, "r")) != NULL)
{
- while(fgets (tmp_buffer, 256, fp))
+ while (fgets (tmp_buffer, 256, fp))
{
- memset (version, '\0', sizeof(version));
- if(sscanf (tmp_buffer, "%[^:] %*s %s", label, version) == 2)
+ memset (version, '\0', sizeof (version));
+ if (sscanf (tmp_buffer, "%[^:] %*s %s", label, version) == 2)
{
- if(strstr (label, FIRMWARE_LABEL))
+ if (strstr (label, FIRMWARE_LABEL))
{
- strncpy ((char *)get_version_cnf->av_stack_version, version, sizeof(get_version_cnf->av_stack_version));
+ strncpy ((char *) get_version_cnf->av_stack_version, version,
+ sizeof (get_version_cnf->av_stack_version));
break;
}
}
@@ -103,10 +108,22 @@ enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request,
fclose (fp);
}
- // TODO: fill alternate image info with firmware !!!
+ /* get alternative image version */
+ memset (&desc, '\0', sizeof (desc));
+ if (LIBSPID_SUCCESS == libspid_image_get_desc (LIBSPID_IMAGE_DESC_TYPE_ALTERNATE,
+ &desc, mtd_name))
+ {
+ memcpy (get_version_cnf->applicative_alternate, desc.version,
+ sizeof (desc.version));
+ }
+ if (strlen (get_version_cnf->applicative_alternate) == 0)
+ {
+ strcpy (get_version_cnf->applicative_alternate, "none");
+ }
/* send confirm MME */
- bridge_send (ctx, (uint8_t *)confirm, sizeof(MME_t) + sizeof(vs_get_version_cnf_t));
+ bridge_send (ctx, (uint8_t *) confirm, sizeof (MME_t) + \
+ sizeof (vs_get_version_cnf_t));
return TO_DROP;
}