summaryrefslogtreecommitdiff
path: root/polux/application
diff options
context:
space:
mode:
authorOlivier Dufour2013-01-22 15:42:21 +0100
committerCyril Jourdan2013-01-25 15:37:41 +0100
commitf8503a0b90419d072bd645e4c5aa48d3cc8f2a3d (patch)
tree3bc94078da97e3cc6b696992e91d6da2f17c4c47 /polux/application
parenta75c9250fd4dda821f9d8539731fa0642aa5d361 (diff)
polux/app/spidlib: get img slot from procfs, closes #3706
Diffstat (limited to 'polux/application')
-rw-r--r--polux/application/spidlib/inc/path.h1
-rw-r--r--polux/application/spidlib/src/system/image_desc.c19
2 files changed, 20 insertions, 0 deletions
diff --git a/polux/application/spidlib/inc/path.h b/polux/application/spidlib/inc/path.h
index 01b260bc21..292533afce 100644
--- a/polux/application/spidlib/inc/path.h
+++ b/polux/application/spidlib/inc/path.h
@@ -30,6 +30,7 @@
#define SPIDLIB_PLC_TEI_PROC_PATH "/proc/sys/net/plc/tei"
#define SPIDLIB_PLC_MODE_PROC_PATH "/proc/sys/net/plc/mode"
#define SPIDLIB_PLC_STATS_PROC_PATH "/proc/net/plc/modEoCRealTimeStatistic"
+#define SPIDLIB_CUR_IMG_PROC_PATH "/proc/spidimg/current_img_slot"
#define SPIDLIB_NDD_DATABASE_PATH "/etc/ndd.lst"
#define SPIDLIB_TEMP_SLAVE_IMAGE_PATH "/tmp/slave_image"
diff --git a/polux/application/spidlib/src/system/image_desc.c b/polux/application/spidlib/src/system/image_desc.c
index 14609909bc..6690b88303 100644
--- a/polux/application/spidlib/src/system/image_desc.c
+++ b/polux/application/spidlib/src/system/image_desc.c
@@ -30,6 +30,8 @@ spidlib_get_image_desc(spidlib_image_desc_type_t type, spidcom_image_desc_t *ima
spidcom_image_desc_t image_desc_temp[2];
char *mtd_name_temp[2] = { SPIDCOM_IMG_DESC_MTD_NAME_0, SPIDCOM_IMG_DESC_MTD_NAME_1 };
int found_index = -1;
+ char buffer[3] = {0};
+ FILE *fp = NULL;
memset (image_desc_temp, 0, sizeof (image_desc_temp));
@@ -87,6 +89,23 @@ spidlib_get_image_desc(spidlib_image_desc_type_t type, spidcom_image_desc_t *ima
case SPIDLIB_IMAGE_DESC_TYPE_CURRENT:
case SPIDLIB_IMAGE_DESC_TYPE_ALTERNATE:
+ if ((fp = fopen (SPIDLIB_CUR_IMG_PROC_PATH, "r")) != NULL)
+ {
+ memset (buffer, 0, 3);
+ if (fgets (buffer, 3, fp) != NULL)
+ {
+ found_index = atoi (buffer);
+ if (found_index >= 0 && found_index <= 1)
+ {
+ /* give alternate index if asked */
+ if (type == SPIDLIB_IMAGE_DESC_TYPE_ALTERNATE)
+ {
+ found_index = (found_index + 1) % 2;
+ }
+ break;
+ }
+ }
+ }
/* check image validity */
if(!SPIDCOM_IMG_DESC_IS_VALID(image_desc_temp))
found_index = 1;