Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
Jacinta
Date:
Wed May 18 01:28:46 2016 +0000
Revision:
32:e4cd87b7064c
Parent:
31:8bbdfea60151
Child:
33:2ee6fbdad7b4
....

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