App for BLE Nano to monitor the power consumption for a specific location, by intercepting the led flashes of a standard power meter. It counts and log the flashes for each second. It works with RedBear App for smart phone (Simple Chat App).

Dependencies:   BLE_API lib_mma8451q mbed nRF51822

Fork of nRF51822_DataLogger_with_Chat by Valentin Tanasa

Committer:
tanasaro10
Date:
Fri May 06 18:14:18 2016 +0000
Revision:
11:baafa4f7a15e
Parent:
9:303d3628986a
Child:
12:27e9c3db28b9
minor updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanasaro10 9:303d3628986a 1 #include "ble_flash.h"
tanasaro10 9:303d3628986a 2 #include "mbed.h"
tanasaro10 9:303d3628986a 3
tanasaro10 9:303d3628986a 4 #define MAXBUFFER 99u //(((BLE_FLASH_PAGE_SIZE - 4 - sizeof(myData_t))/sizeof(myDataL_t))
tanasaro10 9:303d3628986a 5 #define MAX_WORD_PAGE_DATA 254u // to be computed as round_next_int(MAXBUFFER*sizeof(myDataL_t)+sizeof(myData_t))
tanasaro10 9:303d3628986a 6
tanasaro10 9:303d3628986a 7 #define MAX_PAGE_NUM (NRF_FICR->CODESIZE - 1) // 255
tanasaro10 9:303d3628986a 8 #define MIN_PAGE_NUM 155u
tanasaro10 8:f28ad4600b0f 9
tanasaro10 8:f28ad4600b0f 10
tanasaro10 8:f28ad4600b0f 11 typedef struct{
tanasaro10 9:303d3628986a 12 uint8_t year; // 20_XX, 2016 => 16;
tanasaro10 8:f28ad4600b0f 13 uint8_t month; // 1..12
tanasaro10 9:303d3628986a 14 uint8_t day; // 1..31
tanasaro10 11:baafa4f7a15e 15 uint8_t hours;
tanasaro10 11:baafa4f7a15e 16 uint8_t minutes;
tanasaro10 11:baafa4f7a15e 17 uint8_t seconds;
tanasaro10 11:baafa4f7a15e 18 } mdate_time_t;
tanasaro10 8:f28ad4600b0f 19
tanasaro10 8:f28ad4600b0f 20
tanasaro10 8:f28ad4600b0f 21 typedef struct{
tanasaro10 11:baafa4f7a15e 22 mdate_time_t currentDateTime;
tanasaro10 11:baafa4f7a15e 23 mdate_time_t newDateTime;
tanasaro10 11:baafa4f7a15e 24 bool updateDateTime; // true if currentTime needs to be updated with newTime;
tanasaro10 11:baafa4f7a15e 25 } mdatetime_manager_t;
tanasaro10 11:baafa4f7a15e 26
tanasaro10 8:f28ad4600b0f 27
tanasaro10 9:303d3628986a 28 typedef enum {
tanasaro10 9:303d3628986a 29 eStartAdvertising =0,
tanasaro10 9:303d3628986a 30 eStopAdvertising =1,
tanasaro10 9:303d3628986a 31 eDisconnect =2
tanasaro10 9:303d3628986a 32 } connection_update_t;
tanasaro10 8:f28ad4600b0f 33
tanasaro10 8:f28ad4600b0f 34 typedef struct {
tanasaro10 9:303d3628986a 35 uint16_t light;
tanasaro10 9:303d3628986a 36 uint16_t gndV;
tanasaro10 9:303d3628986a 37 uint16_t temp;
tanasaro10 8:f28ad4600b0f 38 bool led_on;
tanasaro10 9:303d3628986a 39 bool led2_on;
tanasaro10 9:303d3628986a 40 } myPayload_t;
tanasaro10 9:303d3628986a 41
tanasaro10 9:303d3628986a 42
tanasaro10 9:303d3628986a 43 typedef struct {
tanasaro10 9:303d3628986a 44 myPayload_t data;
tanasaro10 11:baafa4f7a15e 45 uint8_t seconds;
tanasaro10 11:baafa4f7a15e 46 uint8_t minutes;
tanasaro10 9:303d3628986a 47 } myDataL_t;
tanasaro10 9:303d3628986a 48
tanasaro10 9:303d3628986a 49 typedef struct {
tanasaro10 11:baafa4f7a15e 50 mdate_time_t datetime; // 6 bytes length
tanasaro10 11:baafa4f7a15e 51 myPayload_t data; // 8 bytes lenth
tanasaro10 8:f28ad4600b0f 52 } myData_t;
tanasaro10 8:f28ad4600b0f 53
tanasaro10 9:303d3628986a 54 typedef struct {
tanasaro10 9:303d3628986a 55 myData_t startData;
tanasaro10 9:303d3628986a 56 myDataL_t myData[MAXBUFFER];
tanasaro10 9:303d3628986a 57 } myDataLog_t;
tanasaro10 9:303d3628986a 58
tanasaro10 9:303d3628986a 59 typedef struct {
tanasaro10 9:303d3628986a 60 myData_t startData;
tanasaro10 9:303d3628986a 61 myDataL_t myData;
tanasaro10 9:303d3628986a 62 } myDataLogShort_t;
tanasaro10 9:303d3628986a 63
tanasaro10 9:303d3628986a 64 /* Return current page to be written in Flash */
tanasaro10 9:303d3628986a 65 uint8_t flash_currPage();
tanasaro10 9:303d3628986a 66
tanasaro10 9:303d3628986a 67 /* Return next page to be written in Flash */
tanasaro10 9:303d3628986a 68 uint8_t flash_go_nextPage();
tanasaro10 9:303d3628986a 69
tanasaro10 9:303d3628986a 70 /* Return page-N (thas has been written in Flash) */
tanasaro10 9:303d3628986a 71 uint8_t flash_prev_N_Page(uint8_t nr_of_pages);
tanasaro10 8:f28ad4600b0f 72
tanasaro10 9:303d3628986a 73 /*search the latest page written and extract the page_nr, date, and time*/
tanasaro10 11:baafa4f7a15e 74 void search_latest_in_flash(mdate_time_t * outDateTime);
tanasaro10 9:303d3628986a 75
tanasaro10 9:303d3628986a 76 /* Update current date and time with tseconds and also if there is a new date/time given */
tanasaro10 11:baafa4f7a15e 77 void update_time(mdatetime_manager_t* myDateTimeVar, uint16_t tseconds);
tanasaro10 9:303d3628986a 78
tanasaro10 9:303d3628986a 79 /* Update buzzer with period in ms =0..9 and duty cycle = 0..9*/
tanasaro10 9:303d3628986a 80 int buzz_int(PwmOut* buzzer, uint8_t period, uint8_t duty_cycle);
tanasaro10 9:303d3628986a 81
tanasaro10 9:303d3628986a 82 /* Print on serial some error from main app*/
tanasaro10 9:303d3628986a 83 void assert_error_app(bool condition, Serial *pc, uint16_t error, uint16_t line, const char* file);