Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop b63403ea0 -> 5fe4de767


slinky, bootloader; make trying out config storage in NFFS vs FCB easier.
If NFFS is included in build, use that. If that's not there, then
expect FCB. Need to figure out a final answer on where and how this
decision is made. Punting for now.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/5fe4de76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/5fe4de76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/5fe4de76

Branch: refs/heads/develop
Commit: 5fe4de767bdeb241281d28e6742cd97e7df3cef0
Parents: b63403e
Author: Marko Kiiskila <[email protected]>
Authored: Wed May 25 17:34:37 2016 -0700
Committer: Marko Kiiskila <[email protected]>
Committed: Wed May 25 17:34:37 2016 -0700

----------------------------------------------------------------------
 apps/boot/pkg.yml      |   6 +++
 apps/boot/src/boot.c   | 103 ++++++++++++++++++++++++++++++------------
 apps/slinky/pkg.yml    |   6 +++
 apps/slinky/src/main.c | 107 ++++++++++++++++++++++++++++++++------------
 4 files changed, 165 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5fe4de76/apps/boot/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/boot/pkg.yml b/apps/boot/pkg.yml
index 3564ace..07d12a0 100644
--- a/apps/boot/pkg.yml
+++ b/apps/boot/pkg.yml
@@ -35,3 +35,9 @@ pkg.deps:
     - libs/os
     - libs/util
 pkg.cflags: -DLOG_LEVEL=255
+
+pkg.cflags.NFFS:
+    - "-DNFFS_PRESENT"
+
+pkg.cflags.FCB:
+    - "-DFCB_PRESENT"

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5fe4de76/apps/boot/src/boot.c
----------------------------------------------------------------------
diff --git a/apps/boot/src/boot.c b/apps/boot/src/boot.c
index d0bdb1c..14408b5 100755
--- a/apps/boot/src/boot.c
+++ b/apps/boot/src/boot.c
@@ -25,11 +25,17 @@
 #include <bsp/bsp.h>
 #include <hal/hal_system.h>
 #include <hal/hal_flash.h>
-#include <log/log.h>
 #include <config/config.h>
 #include <config/config_file.h>
-#include "fs/fs.h"
-#include "nffs/nffs.h"
+#ifdef NFFS_PRESENT
+#include <fs/fs.h>
+#include <nffs/nffs.h>
+#elif FCB_PRESENT
+#include <fcb/fcb.h>
+#include <config/config_fcb.h>
+#else
+#error "Need NFFS or FCB for config storage"
+#endif
 #include "bootutil/image.h"
 #include "bootutil/loader.h"
 #include "bootutil/bootutil_misc.h"
@@ -39,16 +45,75 @@
 #define BOOT_AREA_DESC_MAX  (256)
 #define AREA_DESC_MAX       (BOOT_AREA_DESC_MAX)
 
+#ifdef NFFS_PRESENT
 #define MY_CONFIG_FILE "/cfg/run"
 
 static struct conf_file my_conf = {
     .cf_name = MY_CONFIG_FILE
 };
 
+static void
+setup_for_nffs(void)
+{
+    struct nffs_area_desc nffs_descs[NFFS_AREA_MAX + 1];
+
+    /*
+     * Make sure we have enough left to initialize the NFFS with the
+     * right number of maximum areas otherwise the file-system will not
+     * be readable.
+     */
+    cnt = NFFS_AREA_MAX;
+    rc = flash_area_to_nffs_desc(FLASH_AREA_NFFS, &cnt, nffs_descs);
+    assert(rc == 0);
+
+    /*
+     * Initializes the flash driver and file system for use by the boot loader.
+     */
+    rc = nffs_init();
+    if (rc == 0) {
+        /* Look for an nffs file system in internal flash.  If no file
+         * system gets detected, all subsequent file operations will fail,
+         * but the boot loader should proceed anyway.
+         */
+        nffs_detect(nffs_descs);
+    }
+
+    rc = conf_file_src(&my_conf);
+    assert(rc == 0);
+    rc = conf_file_dst(&my_conf);
+    assert(rc == 0);
+}
+#else
+struct flash_area conf_fcb_area[NFFS_AREA_MAX + 1];
+
+static struct conf_fcb my_conf = {
+    .cf_fcb.f_magic = 0xc09f6e5e,
+    .cf_fcb.f_sectors = conf_fcb_area
+};
+
+static void
+setup_for_fcb(void)
+{
+    int cnt;
+    int rc;
+
+    rc = flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, NULL);
+    assert(rc == 0);
+    assert(cnt <= sizeof(conf_fcb_area) / sizeof(conf_fcb_area[0]));
+    flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, conf_fcb_area);
+
+    my_conf.cf_fcb.f_sector_cnt = cnt;
+
+    rc = conf_fcb_src(&my_conf);
+    assert(rc == 0);
+    rc = conf_fcb_dst(&my_conf);
+    assert(rc == 0);
+}
+#endif
+
 int
 main(void)
 {
-    struct nffs_area_desc nffs_descs[NFFS_AREA_MAX + 1];
     struct flash_area descs[AREA_DESC_MAX];
     /** Areas representing the beginning of image slots. */
     uint8_t img_starts[2];
@@ -87,33 +152,13 @@ main(void)
 
     req.br_num_image_areas = total;
 
-    /*
-     * Make sure we have enough left to initialize the NFFS with the
-     * right number of maximum areas otherwise the file-system will not
-     * be readable.
-     */
-    cnt = NFFS_AREA_MAX;
-    rc = flash_area_to_nffs_desc(FLASH_AREA_NFFS, &cnt, nffs_descs);
-    assert(rc == 0);
-
-    /*
-     * Initializes the flash driver and file system for use by the boot loader.
-     */
-    rc = nffs_init();
-    if (rc == 0) {
-        /* Look for an nffs file system in internal flash.  If no file
-         * system gets detected, all subsequent file operations will fail,
-         * but the boot loader should proceed anyway.
-         */
-        nffs_detect(nffs_descs);
-    }
-
     conf_init();
 
-    rc = conf_file_src(&my_conf);
-    assert(rc == 0);
-    rc = conf_file_dst(&my_conf);
-    assert(rc == 0);
+#ifdef NFFS_PRESENT
+    setup_for_nffs();
+#elif FCB_PRESENT
+    setup_for_fcb();
+#endif
     bootutil_cfg_register();
 
     rc = boot_go(&req, &rsp);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5fe4de76/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/pkg.yml b/apps/slinky/pkg.yml
index 1d3165a..add0c27 100644
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@ -39,3 +39,9 @@ pkg.deps:
 
 pkg.cflags:
     - "-DSTATS_NAME_ENABLE=1"
+
+pkg.cflags.NFFS:
+    - "-DNFFS_PRESENT"
+
+pkg.cflags.FCB:
+    - "-DFCB_PRESENT"

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5fe4de76/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index f505cf2..3c6d8d5 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -25,10 +25,18 @@
 #include <log/log.h>
 #include <stats/stats.h>
 #include <config/config.h>
-#include <config/config_file.h>
 #include <hal/flash_map.h>
+#include <hal/hal_system.h>
+#ifdef NFFS_PRESENT
 #include <fs/fs.h>
 #include <nffs/nffs.h>
+#include <config/config_file.h>
+#elif FCB_PRESENT
+#include <fcb/fcb.h>
+#include <config/config_fcb.h>
+#else
+#error "Need NFFS or FCB for config storage"
+#endif
 #include <newtmgr/newtmgr.h>
 #include <bootutil/image.h>
 #include <bootutil/bootutil_misc.h>
@@ -90,6 +98,7 @@ STATS_NAME_START(gpio_stats)
 STATS_NAME(gpio_stats, toggles)
 STATS_NAME_END(gpio_stats)
 
+#ifdef NFFS_PRESENT
 /* configuration file */
 #define MY_CONFIG_DIR  "/cfg"
 #define MY_CONFIG_FILE "/cfg/run"
@@ -97,6 +106,14 @@ STATS_NAME_END(gpio_stats)
 static struct conf_file my_conf = {
     .cf_name = MY_CONFIG_FILE
 };
+#elif FCB_PRESENT
+struct flash_area conf_fcb_area[NFFS_AREA_MAX + 1];
+
+static struct conf_fcb my_conf = {
+    .cf_fcb.f_magic = 0xc09f6e5e,
+    .cf_fcb.f_sectors = conf_fcb_area
+};
+#endif
 
 #define DEFAULT_MBUF_MPOOL_BUF_LEN (256)
 #define DEFAULT_MBUF_MPOOL_NBUFS (10)
@@ -246,6 +263,62 @@ init_tasks(void)
     return 0;
 }
 
+#ifdef NFFS_PRESENT
+static void
+setup_for_nffs(void)
+{
+    /* NFFS_AREA_MAX is defined in the BSP-specified bsp.h header file. */
+    struct nffs_area_desc descs[NFFS_AREA_MAX + 1];
+    int cnt;
+    int rc;
+
+    /* Initialize nffs's internal state. */
+    rc = nffs_init();
+    assert(rc == 0);
+
+    /* Convert the set of flash blocks we intend to use for nffs into an array
+     * of nffs area descriptors.
+     */
+    cnt = NFFS_AREA_MAX;
+    rc = flash_area_to_nffs_desc(FLASH_AREA_NFFS, &cnt, descs);
+    assert(rc == 0);
+
+    /* Attempt to restore an existing nffs file system from flash. */
+    if (nffs_detect(descs) == FS_ECORRUPT) {
+        /* No valid nffs instance detected; format a new one. */
+        rc = nffs_format(descs);
+        assert(rc == 0);
+    }
+
+    fs_mkdir(MY_CONFIG_DIR);
+    rc = conf_file_src(&my_conf);
+    assert(rc == 0);
+    rc = conf_file_dst(&my_conf);
+    assert(rc == 0);
+}
+
+#elif FCB_PRESENT
+
+static void
+setup_for_fcb(void)
+{
+    int cnt;
+    int rc;
+
+    rc = flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, NULL);
+    assert(rc == 0);
+    assert(cnt <= sizeof(conf_fcb_area) / sizeof(conf_fcb_area[0]));
+    flash_area_to_sectors(FLASH_AREA_NFFS, &cnt, conf_fcb_area);
+
+    my_conf.cf_fcb.f_sector_cnt = cnt;
+
+    rc = conf_fcb_src(&my_conf);
+    assert(rc == 0);
+    rc = conf_fcb_dst(&my_conf);
+    assert(rc == 0);
+}
+
+#endif
 
 /**
  * main
@@ -260,12 +333,8 @@ int
 main(int argc, char **argv)
 {
     int rc;
-    int cnt;
     struct image_version ver;
 
-    /* NFFS_AREA_MAX is defined in the BSP-specified bsp.h header file. */
-    struct nffs_area_desc descs[NFFS_AREA_MAX + 1];
-
 #ifdef ARCH_sim
     mcu_sim_parse_args(argc, argv);
 #endif
@@ -296,29 +365,11 @@ main(int argc, char **argv)
     rc = hal_flash_init();
     assert(rc == 0);
 
-    /* Initialize nffs's internal state. */
-    rc = nffs_init();
-    assert(rc == 0);
-
-    /* Convert the set of flash blocks we intend to use for nffs into an array
-     * of nffs area descriptors.
-     */
-    cnt = NFFS_AREA_MAX;
-    rc = flash_area_to_nffs_desc(FLASH_AREA_NFFS, &cnt, descs);
-    assert(rc == 0);
-
-    /* Attempt to restore an existing nffs file system from flash. */
-    if (nffs_detect(descs) == FS_ECORRUPT) {
-        /* No valid nffs instance detected; format a new one. */
-        rc = nffs_format(descs);
-        assert(rc == 0);
-    }
-
-    fs_mkdir(MY_CONFIG_DIR);
-    rc = conf_file_src(&my_conf);
-    assert(rc == 0);
-    rc = conf_file_dst(&my_conf);
-    assert(rc == 0);
+#ifdef NFFS_PRESENT
+    setup_for_nffs();
+#elif FCB_PRESENT
+    setup_for_fcb();
+#endif
 
     shell_task_init(SHELL_TASK_PRIO, shell_stack, SHELL_TASK_STACK_SIZE,
                     SHELL_MAX_INPUT_LEN);

Reply via email to