v1.19 Release

Dependencies:   nRF51822

Committer:
fdelahan
Date:
Wed Jun 16 16:33:49 2021 +0000
Revision:
63:c321added5b1
Parent:
60:6327aa30a10e
This is a dead end version of 1.19. The code has been modified to produce an incorrect crc for 1.19 to be used in verification testing of utility software.; A "1" was added to the crc message of the 'm' request in the comm case statement.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgetz7908 23:7ca590427f0e 1 #include "mbed.h"
sgetz7908 23:7ca590427f0e 2 #include "ble/BLE.h"
sgetz7908 23:7ca590427f0e 3 //#include "ble/services/UARTService.h"
sgetz7908 23:7ca590427f0e 4 #include "BLE_Stuff.h"
sgetz7908 23:7ca590427f0e 5 #include "hw.h"
sgetz7908 23:7ca590427f0e 6 #include "log.h"
sgetz7908 23:7ca590427f0e 7 #include "main.h"
sgetz7908 23:7ca590427f0e 8 #include "mem.h"
sgetz7908 23:7ca590427f0e 9 extern "C" {
sgetz7908 23:7ca590427f0e 10 #include <nrf_nvmc.h>
sgetz7908 23:7ca590427f0e 11 }
sgetz7908 23:7ca590427f0e 12
sgetz7908 23:7ca590427f0e 13 #if LOG_SIZE * 8 > 1024 * PSTORAGE_NUM_OF_PAGES
sgetz7908 23:7ca590427f0e 14 error, allocated flash not big enough for storing logs
sgetz7908 23:7ca590427f0e 15 #endif
sgetz7908 23:7ca590427f0e 16
fdelahan 40:adabdb1c5abe 17 extern bool log_enable; // initialized in main.cpp – DEW
fdelahan 40:adabdb1c5abe 18
sgetz7908 23:7ca590427f0e 19 // Counts number of records with non-zero time field
sgetz7908 23:7ca590427f0e 20 uint32_t log_get_num_records(void)
sgetz7908 23:7ca590427f0e 21 {
sgetz7908 23:7ca590427f0e 22 uint32_t cnt = 0;
fdelahan 63:c321added5b1 23 log_struct *rec = (log_struct *)PSTORAGE_DATA_START_ADDR;
sgetz7908 23:7ca590427f0e 24
fdelahan 63:c321added5b1 25 while(rec < (log_struct *)PSTORAGE_DATA_END_ADDR)
sgetz7908 23:7ca590427f0e 26 {
sgetz7908 23:7ca590427f0e 27 if(rec->time == 0xffffffff) return cnt;
sgetz7908 23:7ca590427f0e 28 cnt++;
sgetz7908 23:7ca590427f0e 29 rec++;
sgetz7908 23:7ca590427f0e 30 }
sgetz7908 27:bb7247a1704e 31 return cnt;
sgetz7908 23:7ca590427f0e 32 }
sgetz7908 23:7ca590427f0e 33
sgetz7908 23:7ca590427f0e 34 // returns the number of records with code type
sgetz7908 23:7ca590427f0e 35 uint32_t log_code_count(event_t code)
sgetz7908 23:7ca590427f0e 36 {
sgetz7908 23:7ca590427f0e 37 uint32_t cnt = 0;
fdelahan 63:c321added5b1 38 log_struct *rec = (log_struct *)PSTORAGE_DATA_START_ADDR;
sgetz7908 23:7ca590427f0e 39
fdelahan 63:c321added5b1 40 while(rec < (log_struct *)PSTORAGE_DATA_END_ADDR)
sgetz7908 23:7ca590427f0e 41 {
sgetz7908 23:7ca590427f0e 42 if(rec->time == 0xffffffff) return cnt;
sgetz7908 23:7ca590427f0e 43 if(rec->code == code) cnt++;
sgetz7908 23:7ca590427f0e 44 rec++;
sgetz7908 23:7ca590427f0e 45 }
sgetz7908 27:bb7247a1704e 46 return cnt;
sgetz7908 23:7ca590427f0e 47 }
sgetz7908 23:7ca590427f0e 48
sgetz7908 23:7ca590427f0e 49 // returns address of 1st free record
sgetz7908 23:7ca590427f0e 50 static log_struct * get_free_record(void)
sgetz7908 23:7ca590427f0e 51 {
fdelahan 63:c321added5b1 52 log_struct *rec = (log_struct *)PSTORAGE_DATA_START_ADDR;
sgetz7908 23:7ca590427f0e 53
fdelahan 63:c321added5b1 54 while(rec < (log_struct *)PSTORAGE_DATA_END_ADDR)
sgetz7908 23:7ca590427f0e 55 {
sgetz7908 23:7ca590427f0e 56 if(rec->time == 0xffffffff) return rec;
sgetz7908 23:7ca590427f0e 57 rec++;
sgetz7908 23:7ca590427f0e 58 }
sgetz7908 23:7ca590427f0e 59 return 0;
sgetz7908 23:7ca590427f0e 60 }
sgetz7908 23:7ca590427f0e 61
sgetz7908 23:7ca590427f0e 62 // can not be called while BLE is active
sgetz7908 23:7ca590427f0e 63 void log_erase(void)
sgetz7908 23:7ca590427f0e 64 {
sgetz7908 23:7ca590427f0e 65 uint32_t addr = PSTORAGE_DATA_START_ADDR;
sgetz7908 23:7ca590427f0e 66
sgetz7908 23:7ca590427f0e 67 //stop_radio_and_wait();
sgetz7908 23:7ca590427f0e 68
sgetz7908 23:7ca590427f0e 69 while(addr < PSTORAGE_DATA_END_ADDR)
sgetz7908 23:7ca590427f0e 70 {
fdelahan 63:c321added5b1 71 nrf_nvmc_page_erase(addr);
sgetz7908 23:7ca590427f0e 72 addr += PSTORAGE_FLASH_PAGE_SIZE;
sgetz7908 23:7ca590427f0e 73 }
sgetz7908 23:7ca590427f0e 74 }
sgetz7908 23:7ca590427f0e 75
sgetz7908 23:7ca590427f0e 76 /// Puts the requested log record out on the BLE UART.
sgetz7908 23:7ca590427f0e 77 void log_show(void)
sgetz7908 23:7ca590427f0e 78 {
sgetz7908 23:7ca590427f0e 79 int cnt = log_get_num_records();
fdelahan 63:c321added5b1 80 log_struct * rec = (log_struct *)PSTORAGE_DATA_START_ADDR;
sgetz7908 23:7ca590427f0e 81
sgetz7908 23:7ca590427f0e 82 BLE_UART_xmit("*Num Records=");
sgetz7908 23:7ca590427f0e 83 BLE_UART_xmit(cnt);
sgetz7908 23:7ca590427f0e 84 BLE_UART_xmit("\n");
sgetz7908 23:7ca590427f0e 85
fdelahan 63:c321added5b1 86 while(rec < (log_struct *)PSTORAGE_DATA_END_ADDR) {
sgetz7908 23:7ca590427f0e 87 // show record
sgetz7908 23:7ca590427f0e 88 uint32_t offset = read_time_correction();
sgetz7908 23:7ca590427f0e 89
sgetz7908 23:7ca590427f0e 90 if(rec->time == 0xffffffff) break;
sgetz7908 23:7ca590427f0e 91
sgetz7908 23:7ca590427f0e 92 // hex numbers
sgetz7908 23:7ca590427f0e 93 BLE_UART_xmit("~");
sgetz7908 23:7ca590427f0e 94 BLE_UART_xmit(char2hex(rec->time + offset, 8));
sgetz7908 23:7ca590427f0e 95 BLE_UART_xmit(char2hex(rec->code));
sgetz7908 23:7ca590427f0e 96 BLE_UART_xmit(char2hex(rec->d0));
sgetz7908 23:7ca590427f0e 97 BLE_UART_xmit(char2hex(rec->d1));
sgetz7908 23:7ca590427f0e 98 BLE_UART_xmit(char2hex(rec->d2));
sgetz7908 23:7ca590427f0e 99
sgetz7908 23:7ca590427f0e 100 BLE_UART_xmit("\n");
sgetz7908 23:7ca590427f0e 101 rec++;
sgetz7908 27:bb7247a1704e 102
sgetz7908 27:bb7247a1704e 103 BLE &ble = BLE::Instance();
sgetz7908 27:bb7247a1704e 104 ble.waitForEvent();
sgetz7908 27:bb7247a1704e 105 wait(0.100);
sgetz7908 23:7ca590427f0e 106 }
sgetz7908 23:7ca590427f0e 107
sgetz7908 23:7ca590427f0e 108 //BLE_UART_xmit("Done!\n");
sgetz7908 23:7ca590427f0e 109 }
sgetz7908 23:7ca590427f0e 110
sgetz7908 23:7ca590427f0e 111 // add a new log entry
sgetz7908 23:7ca590427f0e 112 //
sgetz7908 23:7ca590427f0e 113 void log_add(event_t code, char d0, char d1, char d2)
sgetz7908 23:7ca590427f0e 114 {
sgetz7908 23:7ca590427f0e 115 uint32_t addr = (uint32_t)get_free_record();
sgetz7908 23:7ca590427f0e 116 log_struct rec;
sgetz7908 23:7ca590427f0e 117
sgetz7908 23:7ca590427f0e 118 if(addr == 0) return; // error, out of record storage
sgetz7908 23:7ca590427f0e 119
sgetz7908 23:7ca590427f0e 120 rec.time = read_clock();
sgetz7908 23:7ca590427f0e 121 rec.code = code;
sgetz7908 23:7ca590427f0e 122 rec.d0 = d0;
sgetz7908 23:7ca590427f0e 123 rec.d1 = d1;
sgetz7908 23:7ca590427f0e 124 rec.d2 = d2;
sgetz7908 23:7ca590427f0e 125 if(rec.time==0) rec.time++; // can't have a completely zero record.
sgetz7908 23:7ca590427f0e 126
sgetz7908 24:761c30334cf4 127 //#if UART_DEBUGGING==0 // only do write to flash if not debugging w/BLE
fdelahan 40:adabdb1c5abe 128 if(log_enable) // allow disabling of event logging through user command - DEW
fdelahan 40:adabdb1c5abe 129 {
fdelahan 40:adabdb1c5abe 130 set_radio(false);
fdelahan 40:adabdb1c5abe 131 wait(1.0);
fdelahan 63:c321added5b1 132 nrf_nvmc_write_words(addr, (uint32_t *)(&rec), 2);
fdelahan 40:adabdb1c5abe 133 }
sgetz7908 24:761c30334cf4 134 //#endif
sgetz7908 23:7ca590427f0e 135 }
sgetz7908 23:7ca590427f0e 136
sgetz7908 23:7ca590427f0e 137 /// Clear Non-Volatile Flag
sgetz7908 23:7ca590427f0e 138 void nv_clear(uint32_t addr)
sgetz7908 23:7ca590427f0e 139 {
sgetz7908 23:7ca590427f0e 140 uint32_t zero = 0;
sgetz7908 23:7ca590427f0e 141
sgetz7908 24:761c30334cf4 142 //#if UART_DEBUGGING==0 // only do write to flash if not debugging w/BLE
sgetz7908 23:7ca590427f0e 143 set_radio(false);
sgetz7908 23:7ca590427f0e 144 wait(1.0);
sgetz7908 23:7ca590427f0e 145 nrf_nvmc_write_words(addr, (uint32_t *)(&zero), 1);
sgetz7908 24:761c30334cf4 146 //#endif
sgetz7908 23:7ca590427f0e 147 }