Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
nlsantos
Date:
Tue May 17 15:09:03 2016 +0000
Revision:
17:be3710fe8dd7
Parent:
14:80348de07068
Child:
18:40575f8e2245
DIAGNOSTICS ON AND OF;

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 0:1eaebb55408a 10
Jacinta 2:0b8065489409 11 //This is the producer
Jacinta 2:0b8065489409 12 void ExpansionBoard::sampleData() {
nlsantos 17:be3710fe8dd7 13 if (flag= true){
Jacinta 2:0b8065489409 14 printf("about to alloc\n");
nlsantos 17:be3710fe8dd7 15 }
Jacinta 2:0b8065489409 16 log_data* log_d = (log_data*)mail_box.alloc();
Jacinta 2:0b8065489409 17
Jacinta 2:0b8065489409 18 if (log_d == NULL) {
Jacinta 2:0b8065489409 19 mail_box.get();
nlsantos 17:be3710fe8dd7 20 if (flag= true)
Jacinta 2:0b8065489409 21 printf("Out of memory, last sample deleted\n");
nlsantos 17:be3710fe8dd7 22
Jacinta 2:0b8065489409 23 log_data* log_d = (log_data*)mail_box.alloc();
nlsantos 17:be3710fe8dd7 24
nlsantos 17:be3710fe8dd7 25 if (flag = true)
Jacinta 2:0b8065489409 26 printf("allocated after out of memory");
Jacinta 2:0b8065489409 27 }
Jacinta 2:0b8065489409 28
nlsantos 17:be3710fe8dd7 29 if (flag = true)
Jacinta 2:0b8065489409 30 printf("Not null, reading values\n");
Jacinta 2:0b8065489409 31 //Store read data in a sample
Jacinta 2:0b8065489409 32 float value;
Jacinta 2:0b8065489409 33 log_d->date = time(NULL);
Jacinta 2:0b8065489409 34 temp_sensor->GetTemperature(&value);
Jacinta 2:0b8065489409 35 log_d->tempCelsius = value;
Jacinta 2:0b8065489409 36 humidity_sensor->GetHumidity(&value);
Jacinta 2:0b8065489409 37 log_d->humidity = value;
Jacinta 2:0b8065489409 38 pressure_sensor->GetPressure(&value);
Jacinta 2:0b8065489409 39 log_d->pressure = value;
nlsantos 17:be3710fe8dd7 40
nlsantos 17:be3710fe8dd7 41 if (flag= true)
Jacinta 2:0b8065489409 42 printf("All values STORED\n");
Jacinta 2:0b8065489409 43 //Send pointer to sample to the queue
Jacinta 2:0b8065489409 44 osStatus stat = mail_box.put(log_d);
nlsantos 17:be3710fe8dd7 45
nlsantos 17:be3710fe8dd7 46 if (flag= true)
Jacinta 2:0b8065489409 47 printf("MAIL_BOX.PUT run\n");
nlsantos 17:be3710fe8dd7 48
Jacinta 2:0b8065489409 49 // Check for resource error
Jacinta 2:0b8065489409 50 if (stat == osErrorResource) {
nlsantos 17:be3710fe8dd7 51
nlsantos 17:be3710fe8dd7 52 if (flag= true)
Jacinta 2:0b8065489409 53 printf("mail_box->put() Error %4Xh\n", stat);
Jacinta 2:0b8065489409 54 //Error, free up memory block taken
Jacinta 2:0b8065489409 55 mail_box.free(log_d);
Jacinta 2:0b8065489409 56 }
Jacinta 2:0b8065489409 57 }
Jacinta 2:0b8065489409 58
Jacinta 3:1f17245afc88 59 void ExpansionBoard::getData(const void*){
Jacinta 7:ed4a10ebe720 60
Jacinta 2:0b8065489409 61 while(true){
Jacinta 2:0b8065489409 62 //Block on queue if no data is available
Jacinta 2:0b8065489409 63 osEvent event = mail_box.get();
nlsantos 17:be3710fe8dd7 64 if (flag= true)
Jacinta 2:0b8065489409 65 printf("MAIL_BOX.GET\n");
Jacinta 2:0b8065489409 66
Jacinta 2:0b8065489409 67 if (event.status == osEventMail) {
Jacinta 2:0b8065489409 68 // Successful, store log_data
Jacinta 2:0b8065489409 69 log_data* temp = (log_data*) event.value.p;
Jacinta 7:ed4a10ebe720 70 v->push_back(*temp);
Jacinta 2:0b8065489409 71 mail_box.free(temp);
nlsantos 17:be3710fe8dd7 72 if (flag= true)
Jacinta 2:0b8065489409 73 printf("GET value stored and freed up mail_box\n");
Jacinta 2:0b8065489409 74 }
Jacinta 2:0b8065489409 75 }
Jacinta 2:0b8065489409 76 }
Jacinta 2:0b8065489409 77
Jacinta 2:0b8065489409 78 // Helper function for printing floats & doubles
Jacinta 2:0b8065489409 79 char *ExpansionBoard::printDouble(char* str, double v, int decimalDigits) {
Jacinta 2:0b8065489409 80 int intPart, fractPart, len, i=1;
Jacinta 0:1eaebb55408a 81 char *ptr;
Jacinta 0:1eaebb55408a 82 for (; decimalDigits!=0; i*=10, decimalDigits--);
Jacinta 0:1eaebb55408a 83 intPart = (int)v;
Jacinta 0:1eaebb55408a 84 fractPart = (int)((v-(double)(int)v)*i);
Jacinta 0:1eaebb55408a 85 sprintf(str, "%i.", intPart);
Jacinta 0:1eaebb55408a 86 len = strlen(str);
Jacinta 0:1eaebb55408a 87 ptr = &str[len];
Jacinta 0:1eaebb55408a 88 for (i/=10; i>1; i/=10, ptr++) {
Jacinta 0:1eaebb55408a 89 if(fractPart >= i) break;
Jacinta 0:1eaebb55408a 90 *ptr = '0';
Jacinta 0:1eaebb55408a 91 }
Jacinta 0:1eaebb55408a 92 sprintf(ptr, "%i", fractPart);
Jacinta 0:1eaebb55408a 93 return str;
Jacinta 0:1eaebb55408a 94 }
Jacinta 0:1eaebb55408a 95
nlsantos 10:2f9585ff5a7b 96 ExpansionBoard::ExpansionBoard(vector<log_data> vector, int num): T(15.0f), flag(false) {
Jacinta 7:ed4a10ebe720 97 v = &vector;
Jacinta 7:ed4a10ebe720 98 n = &num;
Jacinta 2:0b8065489409 99 /* Retrieve the composing elements of the expansion board */
Jacinta 2:0b8065489409 100 uint8_t id;
nlsantos 17:be3710fe8dd7 101
nlsantos 17:be3710fe8dd7 102 if (flag= true)
Jacinta 2:0b8065489409 103 printf("Initialising expansion board...\n\r");
Jacinta 13:0295a4b66573 104
nlsantos 17:be3710fe8dd7 105 /*
Jacinta 13:0295a4b66573 106 humidity_sensor->ReadID(&id);
Jacinta 13:0295a4b66573 107 printf("No error"); //Debug para ver se o erro e na linha anterior ou no id mesmo
Jacinta 14:80348de07068 108 printf("HTS221 humidity & temperature = %d\r\n", id); //Testa essa usando %d ao em vez de Hex
Jacinta 0:1eaebb55408a 109 pressure_sensor->ReadID(&id);
Jacinta 13:0295a4b66573 110 printf("LPS25H pressure & temperature = %d\r\n", id);
Jacinta 0:1eaebb55408a 111 magnetometer->ReadID(&id);
Jacinta 13:0295a4b66573 112 printf("LIS3MDL magnetometer = %d\r\n", id);
Jacinta 14:80348de07068 113 //printf("LIS3MDL magnetometer = 0x%X\r\n\n", id); Antiga forma
Jacinta 0:1eaebb55408a 114 gyroscope->ReadID(&id);
Jacinta 13:0295a4b66573 115 printf("LSM6DS0 accelerometer & gyroscope = %d\r\n\n", id);
Jacinta 13:0295a4b66573 116 //printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n\n", *id);
nlsantos 17:be3710fe8dd7 117 */
Jacinta 2:0b8065489409 118 }