Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

Committer:
lwehmeier
Date:
Sun Feb 25 16:40:28 2018 +0000
Revision:
2:bf699e054b34
Child:
3:d7ec6dc025b0
changed to modular design; rtos support; BMI160, BMP180, SSD1306, MPU6050, DHT11, SD support implemented; bit stuffing for link layer implemented; priority queue for data transmission; high-priority SPI link layer output thread

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lwehmeier 2:bf699e054b34 1 #include "mbed.h"
lwehmeier 2:bf699e054b34 2 #include "rtos.h"
lwehmeier 2:bf699e054b34 3 #include "global.h"
lwehmeier 2:bf699e054b34 4 #include <stdio.h>
lwehmeier 2:bf699e054b34 5 #include <errno.h>
lwehmeier 2:bf699e054b34 6 #include "SDBlockDevice.h"
lwehmeier 2:bf699e054b34 7 #include "LittleFileSystem.h"
lwehmeier 2:bf699e054b34 8 #include "FATFileSystem.h"
lwehmeier 2:bf699e054b34 9
lwehmeier 2:bf699e054b34 10 static void return_error(int ret_val){
lwehmeier 2:bf699e054b34 11 if (ret_val)
lwehmeier 2:bf699e054b34 12 printf("SD: Failure. %d\r\n", ret_val);
lwehmeier 2:bf699e054b34 13 else
lwehmeier 2:bf699e054b34 14 printf("SD: done.\r\n");
lwehmeier 2:bf699e054b34 15 }
lwehmeier 2:bf699e054b34 16
lwehmeier 2:bf699e054b34 17 static void errno_error(void* ret_val){
lwehmeier 2:bf699e054b34 18 if (ret_val == NULL)
lwehmeier 2:bf699e054b34 19 printf("SD: Failure. %d \r\n", errno);
lwehmeier 2:bf699e054b34 20 else
lwehmeier 2:bf699e054b34 21 printf("SD: done.\r\n");
lwehmeier 2:bf699e054b34 22 }
lwehmeier 2:bf699e054b34 23 class SDLogger
lwehmeier 2:bf699e054b34 24 {
lwehmeier 2:bf699e054b34 25 public:
lwehmeier 2:bf699e054b34 26 static void run()
lwehmeier 2:bf699e054b34 27 {
lwehmeier 2:bf699e054b34 28 for (;;) {
lwehmeier 2:bf699e054b34 29 char buffer[200];
lwehmeier 2:bf699e054b34 30 sprintf(buffer, "Pressure: %4.1f \t Temperature: %3.2f\t Altitude: %4.1f\r\nACC1:%2.1f;%2.1f;%2.1f\r\nACC2:%2.1f;%2.1f;%2.1f\r\n", pressure, temperature, altitude, (acc1[0]), (acc1[1]), (acc1[2]),(acc2[0]), (acc2[1]), (acc2[2]));
lwehmeier 2:bf699e054b34 31 SD_appendData(buffer);
lwehmeier 2:bf699e054b34 32 rtos::Thread::wait(6000);//10 datasets per minute. TODO: log current system time
lwehmeier 2:bf699e054b34 33 }
lwehmeier 2:bf699e054b34 34 }
lwehmeier 2:bf699e054b34 35 SDLogger()
lwehmeier 2:bf699e054b34 36 {
lwehmeier 2:bf699e054b34 37 testSD();
lwehmeier 2:bf699e054b34 38 registerThread(SDLogger::run);
lwehmeier 2:bf699e054b34 39 }
lwehmeier 2:bf699e054b34 40 static void testSD()
lwehmeier 2:bf699e054b34 41 {
lwehmeier 2:bf699e054b34 42 printf("SD: Mounting the filesystem on \"/fs\". ");
lwehmeier 2:bf699e054b34 43 int error = fs.mount(&bd);
lwehmeier 2:bf699e054b34 44 return_error(error);
lwehmeier 2:bf699e054b34 45
lwehmeier 2:bf699e054b34 46 printf("SD: Opening a new file, numbers.txt.");
lwehmeier 2:bf699e054b34 47 FILE* fd = fopen("/fs/numbers.txt", "w");
lwehmeier 2:bf699e054b34 48 errno_error(fd);
lwehmeier 2:bf699e054b34 49
lwehmeier 2:bf699e054b34 50 for (int i = 0; i < 20; i++){
lwehmeier 2:bf699e054b34 51 printf("SD: Writing decimal numbers to a file (%d/20)\r", i);
lwehmeier 2:bf699e054b34 52 fprintf(fd, "%d\r\n", i);
lwehmeier 2:bf699e054b34 53 }
lwehmeier 2:bf699e054b34 54 printf("SD: Writing decimal numbers to a file (20/20) done.\r\n");
lwehmeier 2:bf699e054b34 55
lwehmeier 2:bf699e054b34 56 printf("SD: Closing file.\r\n");
lwehmeier 2:bf699e054b34 57 fclose(fd);
lwehmeier 2:bf699e054b34 58 printf("SD: done.\r\n");
lwehmeier 2:bf699e054b34 59 }
lwehmeier 2:bf699e054b34 60 static void SD_appendData(char* data)
lwehmeier 2:bf699e054b34 61 {
lwehmeier 2:bf699e054b34 62
lwehmeier 2:bf699e054b34 63 printf("SD: Opening file data.txt.\r\n");
lwehmeier 2:bf699e054b34 64 FILE* fd = fopen("/fs/data.txt", "w+");
lwehmeier 2:bf699e054b34 65 errno_error(fd);
lwehmeier 2:bf699e054b34 66
lwehmeier 2:bf699e054b34 67 fprintf(fd, "%s", data);
lwehmeier 2:bf699e054b34 68 printf("SD: Writing done.\r\n");
lwehmeier 2:bf699e054b34 69
lwehmeier 2:bf699e054b34 70 printf("SD: Closing file.\r\n");
lwehmeier 2:bf699e054b34 71 fclose(fd);
lwehmeier 2:bf699e054b34 72 printf("SD: done.\r\n");
lwehmeier 2:bf699e054b34 73 }
lwehmeier 2:bf699e054b34 74 static SDBlockDevice bd;//PinName mosi, PinName miso, PinName sclk, PinName cs
lwehmeier 2:bf699e054b34 75 static FATFileSystem fs;
lwehmeier 2:bf699e054b34 76 };
lwehmeier 2:bf699e054b34 77 SDBlockDevice SDLogger::bd(P0_5, P0_6, P0_4, P0_7);
lwehmeier 2:bf699e054b34 78 FATFileSystem SDLogger::fs("fs");
lwehmeier 2:bf699e054b34 79
lwehmeier 2:bf699e054b34 80 // some witchcraft to register run function without touching anything outside our library
lwehmeier 2:bf699e054b34 81 static SDLogger _dummy;