Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
nlsantos
Date:
Tue May 17 21:23:48 2016 +0000
Revision:
23:36a76a98c438
Parent:
21:849e5636076e
Parent:
22:23d5bb18d6a0
gbhnm

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
nlsantos 23:36a76a98c438 13 <<<<<<< local
Jacinta 21:849e5636076e 14 void ExpansionBoard::sampleData()
Jacinta 21:849e5636076e 15 {
Jacinta 21:849e5636076e 16 if(flag) {
Jacinta 21:849e5636076e 17 printf("\nAbout to alloc\n");
Jacinta 21:849e5636076e 18 }
nlsantos 23:36a76a98c438 19 =======
Jacinta 2:0b8065489409 20 void ExpansionBoard::sampleData() {
nlsantos 22:23d5bb18d6a0 21
Jacinta 20:014a808b3ea2 22 printf("\nAbout to alloc\n");
nlsantos 23:36a76a98c438 23 >>>>>>> other
Jacinta 2:0b8065489409 24 log_data* log_d = (log_data*)mail_box.alloc();
nlsantos 23:36a76a98c438 25 <<<<<<< local
Jacinta 21:849e5636076e 26
nlsantos 23:36a76a98c438 27 =======
nlsantos 22:23d5bb18d6a0 28 printf("Pressure: %f",log_d->pressure);
nlsantos 23:36a76a98c438 29 >>>>>>> other
Jacinta 2:0b8065489409 30 if (log_d == NULL) {
Jacinta 2:0b8065489409 31 mail_box.get();
Jacinta 21:849e5636076e 32 if(flag) {
Jacinta 21:849e5636076e 33 printf("Out of memory, last sample deleted\n");
Jacinta 21:849e5636076e 34 }
Jacinta 2:0b8065489409 35 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 21:849e5636076e 36 if(flag) {
Jacinta 21:849e5636076e 37 printf("Allocated after out of memory\n");
Jacinta 21:849e5636076e 38 }
Jacinta 2:0b8065489409 39 }
Jacinta 21:849e5636076e 40
Jacinta 21:849e5636076e 41 if(flag) {
Jacinta 21:849e5636076e 42 printf("Not null, reading values\n");
Jacinta 21:849e5636076e 43 }
Jacinta 2:0b8065489409 44 //Store read data in a sample
Jacinta 2:0b8065489409 45 float value;
Jacinta 2:0b8065489409 46 log_d->date = time(NULL);
Jacinta 2:0b8065489409 47 temp_sensor->GetTemperature(&value);
Jacinta 2:0b8065489409 48 log_d->tempCelsius = value;
Jacinta 2:0b8065489409 49 humidity_sensor->GetHumidity(&value);
Jacinta 2:0b8065489409 50 log_d->humidity = value;
Jacinta 2:0b8065489409 51 pressure_sensor->GetPressure(&value);
Jacinta 2:0b8065489409 52 log_d->pressure = value;
Jacinta 21:849e5636076e 53 if(flag) {
Jacinta 21:849e5636076e 54 printf("All values STORED\n");
Jacinta 21:849e5636076e 55 }
Jacinta 2:0b8065489409 56 //Send pointer to sample to the queue
Jacinta 2:0b8065489409 57 osStatus stat = mail_box.put(log_d);
nlsantos 23:36a76a98c438 58 <<<<<<< local
Jacinta 21:849e5636076e 59
Jacinta 21:849e5636076e 60 if(flag) {
Jacinta 21:849e5636076e 61 printf("MAIL_BOX.PUT run\n");
Jacinta 21:849e5636076e 62 }
nlsantos 23:36a76a98c438 63 =======
nlsantos 22:23d5bb18d6a0 64 osEvent ev = mail_box.get();
nlsantos 22:23d5bb18d6a0 65 log_data *ld = (log_data*)ev.value.p;
nlsantos 22:23d5bb18d6a0 66 printf("Pressure: %f",ld->pressure);
Jacinta 2:0b8065489409 67 printf("MAIL_BOX.PUT run\n");
nlsantos 23:36a76a98c438 68 >>>>>>> other
Jacinta 2:0b8065489409 69 // Check for resource error
Jacinta 2:0b8065489409 70 if (stat == osErrorResource) {
Jacinta 21:849e5636076e 71 if(flag) {
Jacinta 21:849e5636076e 72 printf("mail_box->put() Error %4Xh\n", stat);
Jacinta 21:849e5636076e 73 }
Jacinta 2:0b8065489409 74 //Error, free up memory block taken
Jacinta 2:0b8065489409 75 mail_box.free(log_d);
nlsantos 22:23d5bb18d6a0 76
Jacinta 2:0b8065489409 77 }
Jacinta 2:0b8065489409 78 }
Jacinta 2:0b8065489409 79
Jacinta 21:849e5636076e 80 void ExpansionBoard::getData(const void*)
Jacinta 21:849e5636076e 81 {
Jacinta 7:ed4a10ebe720 82
Jacinta 21:849e5636076e 83 while(true) {
Jacinta 2:0b8065489409 84 //Block on queue if no data is available
Jacinta 2:0b8065489409 85 osEvent event = mail_box.get();
Jacinta 21:849e5636076e 86 if(flag) {
Jacinta 21:849e5636076e 87 printf("MAIL_BOX.GET\n");
Jacinta 21:849e5636076e 88 }
Jacinta 21:849e5636076e 89
Jacinta 2:0b8065489409 90 if (event.status == osEventMail) {
Jacinta 2:0b8065489409 91 // Successful, store log_data
Jacinta 2:0b8065489409 92 log_data* temp = (log_data*) event.value.p;
Jacinta 7:ed4a10ebe720 93 v->push_back(*temp);
nlsantos 23:36a76a98c438 94 <<<<<<< local
Jacinta 2:0b8065489409 95 mail_box.free(temp);
Jacinta 21:849e5636076e 96 if(flag) {
Jacinta 21:849e5636076e 97 printf("GET value stored and freed up mail_box\n");
Jacinta 21:849e5636076e 98 }
nlsantos 23:36a76a98c438 99 =======
nlsantos 22:23d5bb18d6a0 100 //mail_box.free(temp);
nlsantos 22:23d5bb18d6a0 101 printf("gotcha: %f",temp->pressure);
Jacinta 2:0b8065489409 102 printf("GET value stored and freed up mail_box\n");
nlsantos 23:36a76a98c438 103 >>>>>>> other
Jacinta 2:0b8065489409 104 }
Jacinta 2:0b8065489409 105 }
Jacinta 2:0b8065489409 106 }
Jacinta 2:0b8065489409 107
Jacinta 2:0b8065489409 108 // Helper function for printing floats & doubles
Jacinta 21:849e5636076e 109 char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits)
Jacinta 21:849e5636076e 110 {
Jacinta 2:0b8065489409 111 int intPart, fractPart, len, i=1;
Jacinta 0:1eaebb55408a 112 char *ptr;
Jacinta 0:1eaebb55408a 113 for (; decimalDigits!=0; i*=10, decimalDigits--);
Jacinta 0:1eaebb55408a 114 intPart = (int)v;
Jacinta 0:1eaebb55408a 115 fractPart = (int)((v-(double)(int)v)*i);
Jacinta 0:1eaebb55408a 116 sprintf(str, "%i.", intPart);
Jacinta 0:1eaebb55408a 117 len = strlen(str);
Jacinta 0:1eaebb55408a 118 ptr = &str[len];
Jacinta 0:1eaebb55408a 119 for (i/=10; i>1; i/=10, ptr++) {
Jacinta 0:1eaebb55408a 120 if(fractPart >= i) break;
Jacinta 0:1eaebb55408a 121 *ptr = '0';
Jacinta 0:1eaebb55408a 122 }
Jacinta 0:1eaebb55408a 123 sprintf(ptr, "%i", fractPart);
Jacinta 0:1eaebb55408a 124 return str;
Jacinta 0:1eaebb55408a 125 }
Jacinta 0:1eaebb55408a 126
Jacinta 21:849e5636076e 127 ExpansionBoard::ExpansionBoard(vector<log_data> vector, int num, bool lFlag): T(15.0f)
Jacinta 21:849e5636076e 128 {
Jacinta 7:ed4a10ebe720 129 v = &vector;
Jacinta 7:ed4a10ebe720 130 n = &num;
Jacinta 20:014a808b3ea2 131 flag = &lFlag;
Jacinta 21:849e5636076e 132
Jacinta 21:849e5636076e 133 /* Retrieve the composing elements of the expansion board */
Jacinta 20:014a808b3ea2 134 printf("Initialising expansion board...\n\r");
Jacinta 2:0b8065489409 135 }