Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
Jacinta
Date:
Tue May 17 21:38:21 2016 +0000
Revision:
24:c924342f7c76
Parent:
21:849e5636076e
Child:
25:2197b8bb930c
Child:
26:3aad7d411eb0
...;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jacinta 0:1eaebb55408a 1 #include "mbed.h"
Jacinta 0:1eaebb55408a 2 #include "x_nucleo_iks01a1.h"
Jacinta 2:0b8065489409 3 #include <vector>
Jacinta 0:1eaebb55408a 4 #include "sensor.h"
Jacinta 0:1eaebb55408a 5 #include "userMethods.h"
Jacinta 0:1eaebb55408a 6
Jacinta 2:0b8065489409 7 Mail<log_data, QUEUESIZE> ExpansionBoard::mail_box;
Jacinta 7:ed4a10ebe720 8 vector<log_data> * ExpansionBoard::v;
Jacinta 7:ed4a10ebe720 9 int * ExpansionBoard::n;
Jacinta 21:849e5636076e 10 bool ExpansionBoard::flag;
Jacinta 0:1eaebb55408a 11
Jacinta 2:0b8065489409 12 //This is the producer
Jacinta 21:849e5636076e 13 void ExpansionBoard::sampleData()
Jacinta 21:849e5636076e 14 {
Jacinta 24:c924342f7c76 15 if(flag) printf("\nAbout to alloc\n");
Jacinta 2:0b8065489409 16 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 21:849e5636076e 17
Jacinta 2:0b8065489409 18 if (log_d == NULL) {
Jacinta 2:0b8065489409 19 mail_box.get();
Jacinta 24:c924342f7c76 20 if(flag) printf("Out of memory, last sample deleted\n");
Jacinta 2:0b8065489409 21 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 24:c924342f7c76 22 if(flag) printf("Allocated after out of memory\n");
Jacinta 2:0b8065489409 23 }
Jacinta 21:849e5636076e 24
Jacinta 24:c924342f7c76 25 if(flag) printf("Not null, reading values\n");
Jacinta 2:0b8065489409 26 //Store read data in a sample
Jacinta 2:0b8065489409 27 float value;
Jacinta 2:0b8065489409 28 log_d->date = time(NULL);
Jacinta 2:0b8065489409 29 temp_sensor->GetTemperature(&value);
Jacinta 2:0b8065489409 30 log_d->tempCelsius = value;
Jacinta 2:0b8065489409 31 humidity_sensor->GetHumidity(&value);
Jacinta 2:0b8065489409 32 log_d->humidity = value;
Jacinta 2:0b8065489409 33 pressure_sensor->GetPressure(&value);
Jacinta 2:0b8065489409 34 log_d->pressure = value;
Jacinta 24:c924342f7c76 35 if(flag) printf("All values STORED\n");
Jacinta 2:0b8065489409 36 //Send pointer to sample to the queue
Jacinta 2:0b8065489409 37 osStatus stat = mail_box.put(log_d);
Jacinta 24:c924342f7c76 38 //v->push_back(*log_d);
Jacinta 21:849e5636076e 39
Jacinta 24:c924342f7c76 40 if(flag) printf("MAIL_BOX.PUT run\n");
Jacinta 2:0b8065489409 41 // Check for resource error
Jacinta 2:0b8065489409 42 if (stat == osErrorResource) {
Jacinta 24:c924342f7c76 43 if(flag) printf("mail_box->put() Error %4Xh\n", stat);
Jacinta 2:0b8065489409 44 //Error, free up memory block taken
Jacinta 2:0b8065489409 45 mail_box.free(log_d);
Jacinta 2:0b8065489409 46 }
Jacinta 2:0b8065489409 47 }
Jacinta 2:0b8065489409 48
Jacinta 24:c924342f7c76 49 /*
Jacinta 21:849e5636076e 50 void ExpansionBoard::getData(const void*)
Jacinta 21:849e5636076e 51 {
Jacinta 7:ed4a10ebe720 52
Jacinta 21:849e5636076e 53 while(true) {
Jacinta 2:0b8065489409 54 //Block on queue if no data is available
Jacinta 2:0b8065489409 55 osEvent event = mail_box.get();
Jacinta 21:849e5636076e 56 if(flag) {
Jacinta 21:849e5636076e 57 printf("MAIL_BOX.GET\n");
Jacinta 21:849e5636076e 58 }
Jacinta 21:849e5636076e 59
Jacinta 2:0b8065489409 60 if (event.status == osEventMail) {
Jacinta 2:0b8065489409 61 // Successful, store log_data
Jacinta 2:0b8065489409 62 log_data* temp = (log_data*) event.value.p;
Jacinta 7:ed4a10ebe720 63 v->push_back(*temp);
Jacinta 2:0b8065489409 64 mail_box.free(temp);
Jacinta 21:849e5636076e 65 if(flag) {
Jacinta 21:849e5636076e 66 printf("GET value stored and freed up mail_box\n");
Jacinta 21:849e5636076e 67 }
Jacinta 2:0b8065489409 68 }
Jacinta 2:0b8065489409 69 }
Jacinta 2:0b8065489409 70 }
Jacinta 24:c924342f7c76 71 */
Jacinta 2:0b8065489409 72
Jacinta 2:0b8065489409 73 // Helper function for printing floats & doubles
Jacinta 21:849e5636076e 74 char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits)
Jacinta 21:849e5636076e 75 {
Jacinta 2:0b8065489409 76 int intPart, fractPart, len, i=1;
Jacinta 0:1eaebb55408a 77 char *ptr;
Jacinta 0:1eaebb55408a 78 for (; decimalDigits!=0; i*=10, decimalDigits--);
Jacinta 0:1eaebb55408a 79 intPart = (int)v;
Jacinta 0:1eaebb55408a 80 fractPart = (int)((v-(double)(int)v)*i);
Jacinta 0:1eaebb55408a 81 sprintf(str, "%i.", intPart);
Jacinta 0:1eaebb55408a 82 len = strlen(str);
Jacinta 0:1eaebb55408a 83 ptr = &str[len];
Jacinta 0:1eaebb55408a 84 for (i/=10; i>1; i/=10, ptr++) {
Jacinta 0:1eaebb55408a 85 if(fractPart >= i) break;
Jacinta 0:1eaebb55408a 86 *ptr = '0';
Jacinta 0:1eaebb55408a 87 }
Jacinta 0:1eaebb55408a 88 sprintf(ptr, "%i", fractPart);
Jacinta 0:1eaebb55408a 89 return str;
Jacinta 0:1eaebb55408a 90 }
Jacinta 0:1eaebb55408a 91
Jacinta 21:849e5636076e 92 ExpansionBoard::ExpansionBoard(vector<log_data> vector, int num, bool lFlag): T(15.0f)
Jacinta 21:849e5636076e 93 {
Jacinta 7:ed4a10ebe720 94 v = &vector;
Jacinta 7:ed4a10ebe720 95 n = &num;
Jacinta 20:014a808b3ea2 96 flag = &lFlag;
Jacinta 21:849e5636076e 97
Jacinta 21:849e5636076e 98 /* Retrieve the composing elements of the expansion board */
Jacinta 20:014a808b3ea2 99 printf("Initialising expansion board...\n\r");
Jacinta 2:0b8065489409 100 }