aaa

Dependencies:   BSP_B-L475E-IOT01

Files at this revision

API Documentation at this revision

Comitter:
frunzl
Date:
Thu Dec 06 12:14:53 2018 +0000
Commit message:
aaa

Changed in this revision

BSP_B-L475E-IOT01.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BSP_B-L475E-IOT01.lib	Thu Dec 06 12:14:53 2018 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/ST/code/BSP_B-L475E-IOT01/#9dfa42666f03
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 06 12:14:53 2018 +0000
@@ -0,0 +1,352 @@
+
+#include "mbed.h"
+#include <stdio.h>
+#include <errno.h>
+
+// Block devices
+#if COMPONENT_SPIF
+#include "SPIFBlockDevice.h"
+#endif
+
+#if COMPONENT_DATAFLASH
+#include "DataFlashBlockDevice.h"
+#endif 
+
+#if COMPONENT_SD
+#include "SDBlockDevice.h"
+#endif 
+
+#include "HeapBlockDevice.h"
+
+// File systems
+#include "LittleFileSystem.h"
+#include "FATFileSystem.h"
+#include "stm32l475e_iot01_accelero.h"
+#include "nvstore.h"
+
+// Physical block device, can be any device that supports the BlockDevice API
+/*SPIFBlockDevice bd(
+        MBED_CONF_SPIF_DRIVER_SPI_MOSI,
+        MBED_CONF_SPIF_DRIVER_SPI_MISO,
+        MBED_CONF_SPIF_DRIVER_SPI_CLK,
+        MBED_CONF_SPIF_DRIVER_SPI_CS);*/
+
+DigitalOut led_1(LED1);
+DigitalOut led_2(LED2);
+DigitalOut led_3(LED3);
+Ticker toggle_led_ticker;
+
+
+EventQueue queue(32 * EVENTS_EVENT_SIZE);
+Thread t;
+
+#define BLOCK_SIZE 512
+HeapBlockDevice bd(16384, BLOCK_SIZE);
+
+// File system declaration
+LittleFileSystem fs("fs");
+
+// Set up the button to trigger an erase
+InterruptIn irq(BUTTON1);
+void erase() {
+    printf("Initializing the block device... ");
+    fflush(stdout);
+    int err = bd.init();
+    printf("%s\n", (err ? "Fail :(" : "OK"));
+    if (err) {
+        error("error: %s (%d)\n", strerror(-err), err);
+    }
+
+    printf("Erasing the block device... ");
+    fflush(stdout);
+    err = bd.erase(0, bd.size());
+    printf("%s\n", (err ? "Fail :(" : "OK"));
+    if (err) {
+        error("error: %s (%d)\n", strerror(-err), err);
+    }
+
+    printf("Deinitializing the block device... ");
+    fflush(stdout);
+    err = bd.deinit();
+    printf("%s\n", (err ? "Fail :(" : "OK"));
+    if (err) {
+        error("error: %s (%d)\n", strerror(-err), err);
+    }
+}
+static FILE *f;
+static uint16_t key_x = 1; 
+static uint16_t key_y = 2; 
+static uint16_t key_z = 3;
+static uint32_t value_x;
+static uint32_t value_y;
+static uint32_t value_z;
+volatile int counter = 0;
+
+void get_data_from_sensors() {
+    int16_t pDataXYZ[3] = {0};
+    BSP_ACCELERO_AccGetXYZ(pDataXYZ);
+    if (abs(pDataXYZ[0]) > 900) {
+            fprintf(f, "%d\n", 1);
+        } else if (abs(pDataXYZ[1]) > 900) {
+            fprintf(f, "%d\n", 2);
+        } else if (abs(pDataXYZ[2]) > 900) {
+             fprintf(f, "%d\n", 3);
+        } else {
+             fprintf(f, "%d\n", -1);
+        }
+    fflush(f);
+    fflush(stdout);
+}
+
+void read_data_from_file() {
+      int led1 = 0;
+      int led2 = 0;
+      int led3 = 0;
+      fflush(stdout);
+      fflush(f);
+      
+      fseek(f, 0, SEEK_SET);
+      int number;
+      while (!feof(f)) {
+        fscanf(f, "%d", &number); 
+        if (number == 1) {
+            led3 +=1;
+        } else if(number == 2) {
+            led2 +=1;
+        } else if(number == 3) {
+            led1 +=1;
+        }
+      }
+      
+      NVStore &nvstore = NVStore::get_instance();
+      // Z Horizontal LED1, X short LED3, Y long LED2
+      if (led1 >= led2 && led1 >= led3) {
+            led_1 = 1;
+            led_2 = 0;
+            led_3 = 0;
+            value_x++;
+            nvstore.set(key_x, sizeof(value_x), &value_x);
+        } else if (led2 >= led1 && led2 >= led3 ) {
+            led_1 = 0;
+            led_2 = 1;
+            led_3 = 0;
+            value_y++;
+            nvstore.set(key_y, sizeof(value_y), &value_y);
+        } else if (led3 >= led1 && led3 >= led2) {
+            led_1 = 0;
+            led_2 = 0;
+            led_3 = 1;
+            value_z++;
+            nvstore.set(key_z, sizeof(value_z), &value_z);
+        }
+      
+      fflush(stdout);
+      int err = fclose(f);
+      printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+      if (err < 0) {
+        error("error: %s (%d)\n", strerror(err), -err);
+      }
+      err = fs.unmount();
+      printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+      if (err < 0) {
+          error("error: %s (%d)\n", strerror(-err), err);
+      }
+        
+      printf("Mbed OS filesystem example done!\n");
+    
+}
+
+void toggle_led() {
+    queue.call(get_data_from_sensors);
+    counter++;
+    if (counter == 100*10) {
+      toggle_led_ticker.detach();
+      queue.call(read_data_from_file);
+    }
+      
+}
+ 
+// Entry point for the example
+int main() {
+    t.start(callback(&queue, &EventQueue::dispatch_forever));
+    BSP_ACCELERO_Init();
+    
+    NVStore &nvstore = NVStore::get_instance();
+   
+    uint16_t actual_len_bytes = 0;
+    int rc;
+    
+    rc = nvstore.init();
+    printf("Init NVStore. \n");
+    
+    rc = nvstore.get(key_x, sizeof(value_x), &value_x, actual_len_bytes);
+    if (rc == NVSTORE_NOT_FOUND) {
+        value_x = 0;
+        value_y = 0;
+        value_z = 0;
+        nvstore.set(key_x, sizeof(value_x), &value_x);
+        nvstore.set(key_y, sizeof(value_y), &value_y);
+        nvstore.set(key_z, sizeof(value_z), &value_z);
+    } else {
+        nvstore.get(key_y, sizeof(value_y), &value_y, actual_len_bytes);
+        nvstore.get(key_z, sizeof(value_z), &value_z, actual_len_bytes);    
+    }
+    
+    printf("LED1: %d\n LED2: %d\n  LED3: %d\n", value_x, value_y, value_z);
+    
+    printf("--- Mbed OS AccelleratorReadNV ---\n");
+
+    // Setup the erase event on button press, use the event queue
+    // to avoid running in interrupt context
+    irq.fall(mbed_event_queue()->event(erase));
+
+    // Try to mount the filesystem
+    printf("Mounting the filesystem... ");
+    fflush(stdout);
+    int err = fs.mount(&bd);
+    printf("%s\n", (err ? "Fail :(" : "OK"));
+    if (err) {
+        // Reformat if we can't mount the filesystem
+        // this should only happen on the first boot
+        printf("No filesystem found, formatting... ");
+        fflush(stdout);
+        err = fs.reformat(&bd);
+        printf("%s\n", (err ? "Fail :(" : "OK"));
+        if (err) {
+            error("error: %s (%d)\n", strerror(-err), err);
+        }
+    }
+
+    // Open the numbers file
+    printf("Opening \"/fs/numbers.txt\"... ");
+    fflush(stdout);
+    f = fopen("/fs/numbers.txt", "r +");
+    printf("%s\n", (!f ? "Fail :(" : "OK"));
+    if (!f) {
+        // Create the numbers file if it doesn't exist
+        printf("No file found, creating a new file... ");
+        fflush(stdout);
+        f = fopen("/fs/numbers.txt", "w+");
+        printf("%s\n", (!f ? "Fail :(" : "OK"));
+        if (!f) {
+            error("error: %s (%d)\n", strerror(errno), -errno);
+        }
+
+//        for (int i = 0; i < 10; i++) {
+//            printf("\rWriting numbers (%d/%d)... ", i, 10);
+//            fflush(stdout);
+//            err = fprintf(f, "    %d\n", i);
+//            if (err < 0) {
+//                printf("Fail :(\n");
+//                error("error: %s (%d)\n", strerror(errno), -errno);
+//            }
+//        }
+//        printf("\rWriting numbers (%d/%d)... OK\n", 10, 10);
+
+        printf("Seeking file... ");
+        fflush(stdout);
+        err = fseek(f, 0, SEEK_SET);
+        printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+        if (err < 0) {
+            error("error: %s (%d)\n", strerror(errno), -errno);
+        }
+    }
+    
+    // Go through and record the acc
+    toggle_led_ticker.attach(&toggle_led, 0.01);
+
+    
+//    for (int i = 0; i < 10; i++) {
+//        printf("\rIncrementing numbers (%d/%d)... ", i, 10);
+//        fflush(stdout);
+//
+//        // Get current stream position
+//        long pos = ftell(f);
+//
+//        // Parse out the number and increment
+//        int32_t number;
+//        fscanf(f, "%d", &number);
+//        number += 1;
+//
+//        // Seek to beginning of number
+//        fseek(f, pos, SEEK_SET);
+//    
+//        // Store number
+//        fprintf(f, "    %d\n", number);
+//
+//        // Flush between write and read on same file
+//        fflush(f);
+//    }
+//    printf("\rIncrementing numbers (%d/%d)... OK\n", 10, 10);
+
+    // Close the file which also flushes any cached writes
+    //printf("Closing \"/fs/numbers.txt\"... ");
+//    fflush(stdout);
+//    err = fclose(f);
+//    printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+//    if (err < 0) {
+//        error("error: %s (%d)\n", strerror(errno), -errno);
+//    }
+//    
+//    // Display the root directory
+//    printf("Opening the root directory... ");
+//    fflush(stdout);
+//    DIR *d = opendir("/fs/");
+//    printf("%s\n", (!d ? "Fail :(" : "OK"));
+//    if (!d) {
+//        error("error: %s (%d)\n", strerror(errno), -errno);
+//    }
+//
+//    printf("root directory:\n");
+//    while (true) {
+//        struct dirent *e = readdir(d);
+//        if (!e) {
+//            break;
+//        }
+//
+//        printf("    %s\n", e->d_name);
+//    }
+//
+//    printf("Closing the root directory... ");
+//    fflush(stdout);
+//    err = closedir(d);
+//    printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+//    if (err < 0) {
+//        error("error: %s (%d)\n", strerror(errno), -errno);
+//    }
+//
+//    // Display the numbers file
+//    printf("Opening \"/fs/numbers.txt\"... ");
+//    fflush(stdout);
+//    f = fopen("/fs/numbers.txt", "r");
+//    printf("%s\n", (!f ? "Fail :(" : "OK"));
+//    if (!f) {
+//        error("error: %s (%d)\n", strerror(errno), -errno);
+//    }
+//
+//    printf("numbers:\n");
+//    while (!feof(f)) {
+//        int c = fgetc(f);
+//        printf("%c", c);
+//    }
+//
+//    printf("\rClosing \"/fs/numbers.txt\"... ");
+//    fflush(stdout);
+//    err = fclose(f);
+//    printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+//    if (err < 0) {
+//        error("error: %s (%d)\n", strerror(errno), -errno);
+//    }
+//
+//    // Tidy up
+//    printf("Unmounting... ");
+//    fflush(stdout);
+//    err = fs.unmount();
+//    printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+//    if (err < 0) {
+//        error("error: %s (%d)\n", strerror(-err), err);
+//    }
+//        
+//    printf("Mbed OS filesystem example done!\n");
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Thu Dec 06 12:14:53 2018 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#610e35ddc6d59f153173c1e7b2748cf96d6c9bcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Thu Dec 06 12:14:53 2018 +0000
@@ -0,0 +1,7 @@
+{
+    "target_overrides": {
+        "*": {
+            "platform.stdio-convert-newlines": true
+        }
+    }
+}