Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SoftSerial MAX14690 Buffer
Fork of rtos_threading_with_callback by
sdLogger/sdLogger.cpp@2:bf699e054b34, 2018-02-25 (annotated)
- 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?
User | Revision | Line number | New 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; |