working version of song control with initialization from sd card

Dependencies:   MFRC522 NRF2401P SDFileSystem SPI_TFT_ILI9341 TFT_fonts mbed

Fork of Song_Control by Malcolm McCulloch

Committer:
dxyang
Date:
Mon Feb 29 14:53:35 2016 +0000
Revision:
9:72e93d9ddc8c
Parent:
2:d1eae91343a9
added posh logging

Who changed what in which revision?

UserRevisionLine numberNew contents of line
epgmdm 0:c0f34d23943d 1 /**
epgmdm 0:c0f34d23943d 2 * This is a multi-purpose mbed. Duiring initialisation it reads the config file and then configures the mbed appropriately.
epgmdm 0:c0f34d23943d 3 * L Locker
epgmdm 0:c0f34d23943d 4 * H main Hub
epgmdm 0:c0f34d23943d 5 * B Battery
epgmdm 0:c0f34d23943d 6 */
epgmdm 0:c0f34d23943d 7 #include "mbed.h"
epgmdm 0:c0f34d23943d 8 #include "SDFileSystem.h"
epgmdm 2:d1eae91343a9 9 #include "NRF2401P.h"
epgmdm 0:c0f34d23943d 10 #include "utils.h"
epgmdm 1:c2232b1eaf31 11 #include "battery.h"
epgmdm 1:c2232b1eaf31 12 #include "hub.h"
epgmdm 0:c0f34d23943d 13 #include "locker.h"
epgmdm 1:c2232b1eaf31 14 #include "test.h"
epgmdm 0:c0f34d23943d 15 #define debug
epgmdm 0:c0f34d23943d 16
epgmdm 1:c2232b1eaf31 17 // Defines the role of mbed
epgmdm 1:c2232b1eaf31 18 char role;
epgmdm 0:c0f34d23943d 19 unsigned int version = 1453505344; // Linux epoch time
epgmdm 0:c0f34d23943d 20 unsigned int sdVersion;
epgmdm 0:c0f34d23943d 21 int id;
epgmdm 1:c2232b1eaf31 22 int channel;
epgmdm 2:d1eae91343a9 23 char txBuff[100];
epgmdm 0:c0f34d23943d 24
epgmdm 0:c0f34d23943d 25 // Sd card
epgmdm 0:c0f34d23943d 26 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
epgmdm 0:c0f34d23943d 27
epgmdm 2:d1eae91343a9 28 // nrf
epgmdm 2:d1eae91343a9 29 NRF2401P nrf1(PTD6,PTD7, PTD5,PTD4, PTC12); //mosi, miso, sclk, csn, ce)
epgmdm 0:c0f34d23943d 30 /**
epgmdm 0:c0f34d23943d 31 * Reads config file and configures the mbed
epgmdm 0:c0f34d23943d 32 */
epgmdm 0:c0f34d23943d 33 void initialise()
epgmdm 0:c0f34d23943d 34 {
epgmdm 0:c0f34d23943d 35 char * name = "/sd/config.ini";
epgmdm 0:c0f34d23943d 36 FILE *fp;
epgmdm 0:c0f34d23943d 37
epgmdm 0:c0f34d23943d 38 // Initialise the SD card
epgmdm 0:c0f34d23943d 39 spiSD();
epgmdm 0:c0f34d23943d 40 sd.large_frames(false);
epgmdm 0:c0f34d23943d 41 sd.mount();
epgmdm 0:c0f34d23943d 42 wait(0.1);
epgmdm 0:c0f34d23943d 43 #ifdef debug
epgmdm 1:c2232b1eaf31 44 printf(" SD MOUNTED Card role: %d Capacity: %.1fMB\n\r", sd.card_type(),(sd.disk_sectors() * 512) / 1048576.0);
epgmdm 0:c0f34d23943d 45 #endif
epgmdm 0:c0f34d23943d 46
epgmdm 0:c0f34d23943d 47
epgmdm 0:c0f34d23943d 48 //Configuration
epgmdm 0:c0f34d23943d 49 #ifdef debug
epgmdm 0:c0f34d23943d 50 printf("Reading config file...\n\r");
epgmdm 0:c0f34d23943d 51 #endif
epgmdm 0:c0f34d23943d 52 fp = fopen(name, "r");
epgmdm 0:c0f34d23943d 53 if (fp == NULL) {
epgmdm 0:c0f34d23943d 54 writeError ("Config file cannot be read");
epgmdm 0:c0f34d23943d 55 }
epgmdm 1:c2232b1eaf31 56 if (fscanf (fp,"%c %*c %*s",&role )!=1) writeError("Config: cannot read role");
epgmdm 0:c0f34d23943d 57 if (fscanf (fp,"%d %*c %*s",&sdVersion )!=1) writeError("Config: cannot read version");
epgmdm 0:c0f34d23943d 58 if (fscanf (fp,"%d %*c %*s",&id )!=1) writeError("Config: cannot read id");
epgmdm 0:c0f34d23943d 59 #ifdef debug
epgmdm 1:c2232b1eaf31 60 printf(" Type:%c, Version %u, ID %d\n\r",role,sdVersion,id);
epgmdm 0:c0f34d23943d 61 #endif
epgmdm 1:c2232b1eaf31 62 switch (role){
epgmdm 0:c0f34d23943d 63 case('B'): { // Battery
epgmdm 1:c2232b1eaf31 64 initialiseBattery(fp);
epgmdm 0:c0f34d23943d 65 break;
epgmdm 0:c0f34d23943d 66 }
epgmdm 0:c0f34d23943d 67 case('H'): { // Hub
epgmdm 2:d1eae91343a9 68 initialiseHub(fp);
epgmdm 0:c0f34d23943d 69 break;
epgmdm 0:c0f34d23943d 70 }
epgmdm 0:c0f34d23943d 71 case('L'): { // Locker
epgmdm 0:c0f34d23943d 72 initialiseLocker(fp);
epgmdm 0:c0f34d23943d 73 break;
epgmdm 0:c0f34d23943d 74 }
epgmdm 1:c2232b1eaf31 75 case('T'): { // Test
epgmdm 1:c2232b1eaf31 76 initialiseTest(fp);
epgmdm 1:c2232b1eaf31 77 break;
epgmdm 1:c2232b1eaf31 78 }
epgmdm 0:c0f34d23943d 79 default:{
epgmdm 2:d1eae91343a9 80 writeError ("Type declared in config not available.");
epgmdm 2:d1eae91343a9 81 }
epgmdm 2:d1eae91343a9 82
epgmdm 0:c0f34d23943d 83 }
epgmdm 0:c0f34d23943d 84 fclose (fp);
epgmdm 0:c0f34d23943d 85 }
epgmdm 0:c0f34d23943d 86
epgmdm 0:c0f34d23943d 87 /**
epgmdm 0:c0f34d23943d 88 * main loop. Set up timers and interupts then wait
epgmdm 0:c0f34d23943d 89 */
epgmdm 0:c0f34d23943d 90 int main()
epgmdm 0:c0f34d23943d 91 {
epgmdm 0:c0f34d23943d 92 struct tm * timeInf = localtime(&version);
epgmdm 0:c0f34d23943d 93 printf("\n\r SOLAR NANO GRID CONTROLLER. Version %04d-%02d-%02d %02d:%02d \n\r", timeInf->tm_year+1900,timeInf->tm_mon+1,timeInf->tm_mday,timeInf->tm_hour, timeInf->tm_sec);
epgmdm 0:c0f34d23943d 94 //
epgmdm 0:c0f34d23943d 95 // Read config and initialise
epgmdm 0:c0f34d23943d 96 //
epgmdm 0:c0f34d23943d 97 #ifdef debug
epgmdm 0:c0f34d23943d 98 printf("\n\rInitialise \n\r");
epgmdm 0:c0f34d23943d 99 #endif
epgmdm 0:c0f34d23943d 100 initialise();
epgmdm 0:c0f34d23943d 101 #ifdef debug
epgmdm 0:c0f34d23943d 102 printf("\n\r> START LOOP\n\r");
epgmdm 0:c0f34d23943d 103 #endif
epgmdm 0:c0f34d23943d 104 while (true) {
epgmdm 0:c0f34d23943d 105 // do slower routines
epgmdm 2:d1eae91343a9 106 switch (role){
epgmdm 2:d1eae91343a9 107 case('B'): { // Battery
epgmdm 2:d1eae91343a9 108 loopBattery();
epgmdm 2:d1eae91343a9 109 break;
epgmdm 2:d1eae91343a9 110 }
epgmdm 2:d1eae91343a9 111 case('H'): { // Hub
epgmdm 2:d1eae91343a9 112 loopHub();
epgmdm 2:d1eae91343a9 113 break;
epgmdm 2:d1eae91343a9 114 }
epgmdm 2:d1eae91343a9 115 case('L'): { // Locker
epgmdm 2:d1eae91343a9 116 loopLocker();
epgmdm 2:d1eae91343a9 117 break;
epgmdm 2:d1eae91343a9 118 }
epgmdm 2:d1eae91343a9 119 case('T'): { // Test
epgmdm 2:d1eae91343a9 120 loopTest();
epgmdm 2:d1eae91343a9 121 break;
epgmdm 2:d1eae91343a9 122 }
epgmdm 2:d1eae91343a9 123 default:{
epgmdm 2:d1eae91343a9 124 writeError ("Type declared in config not available.");
epgmdm 2:d1eae91343a9 125 }
epgmdm 2:d1eae91343a9 126 }
epgmdm 0:c0f34d23943d 127
epgmdm 0:c0f34d23943d 128 }
epgmdm 0:c0f34d23943d 129 }