Updated

Dependents:   PROJECTTEST

Revision:
0:e7fbe82c5f6b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jan 05 15:02:12 2019 +0000
@@ -0,0 +1,104 @@
+#include "mbed.h"
+#include <stm32f4xx.h>
+#include "rtos.h"
+#include "events/mbed_events.h"
+#include "main.h"
+#include "sample_hardware.hpp"
+#include "SDCard.hpp"
+#include "Networking.hpp"
+#include "serial_terminal.hpp"
+#include "LCDdisplay.hpp"
+#include "PLL_Config.h"
+#include "Watchdog.h"
+#include "switches.h"
+
+//Global variables
+unsigned int newestIndex = BUFFERSIZE-1;    //First time it is incremented, it will be 0
+unsigned int oldestIndex = BUFFERSIZE-1;
+FILE* fp;
+int userswState = EDGE_FALLEN;
+InterruptIn   usersw(USER_BUTTON);
+int32_t Nspaces = BUFFERSIZE;
+int32_t Nsamples;
+char threadstates = 0;
+time_t seconds;
+
+//Shared mutable variables
+bool sd_init;
+bool logging = false;
+bool sampling = false;
+float sample_rate = 15;
+struct tm* timeData;
+char cmdBuffer[30];
+//sensorData buffer[BUFFERSIZE];
+RawSerial* pc;
+
+//Thread synchronisation primatives
+Semaphore spaceAvailable(BUFFERSIZE);
+Semaphore samplesInBuffer(0, BUFFERSIZE);
+
+Mutex bufferLock;
+Mutex timeLock;
+
+//Queues
+EventQueue SDqueue(1024*EVENTS_EVENT_SIZE);
+EventQueue printQueue(256*EVENTS_EVENT_SIZE);
+EventQueue LCDqueue(32*EVENTS_EVENT_SIZE);
+EventQueue serialqueue(32*EVENTS_EVENT_SIZE);
+
+//Threads
+Thread producer_thread(osPriorityHigh);
+Thread watchdog_thread(osPriorityHigh);
+Thread serial_thread(osPriorityAboveNormal);
+Thread consumer_thread;
+Thread SDqueue_thread;
+Thread LCDqueue_thread;
+Thread network_thread;
+Thread printf_thread;
+
+//Timers
+Ticker sample;
+
+Timeout userswTimeOut;
+Timeout producer_tout;
+Timeout consumer_tout;
+Timeout serial_tout;
+Timeout SD_tout;
+Timeout LCD_tout;
+Timeout network_tout;
+
+
+int main() {   
+    PLL_Config();
+    timeData = new tm;
+    pc = new RawSerial(USBTX, USBRX, 115200);
+    
+    //Initialisations
+    SDcard();   
+    
+    //Power on self test
+    post();
+       
+    //Start threads
+    SDqueue_thread.start(callback(&SDqueue, &EventQueue::dispatch_forever));
+    LCDqueue_thread.start(callback(&LCDqueue, &EventQueue::dispatch_forever));
+    serial_thread.start(callback(&serialqueue, &EventQueue::dispatch_forever));
+    network_thread.start(network);
+    producer_thread.start(sampleProducer);
+    consumer_thread.start(sampleConsumer);
+    watchdog_thread.start(watchdog);
+		printf_thread.start(callback(&printQueue, &EventQueue::dispatch_forever));	
+
+    LCDqueue.call_every(5000, LCD_display);    
+   
+    //Attach ISRs
+    //sample.attach(&sampleISR, sample_rate);  //Allow sampling to start  
+    pc->attach(serialISR, Serial::RxIrq);
+    
+    usersw.rise(&userswRisingEdge);    
+    
+    while(true) 
+		{
+			/*Main thread actions here*/			
+    }
+}
\ No newline at end of file