Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_IKS01A1 MLX90614 d7a_1x wizzi-utils
Fork of D7A_1x_demo_sensors_OS5 by
files.cpp@8:01f0225408cf, 2017-02-03 (annotated)
- Committer:
- yordan
- Date:
- Fri Feb 03 14:36:58 2017 +0000
- Revision:
- 8:01f0225408cf
- Parent:
- 0:7e1fdc4d6e1c
- Child:
- 10:3d3dfc12f674
added light sensor
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Jeej | 0:7e1fdc4d6e1c | 1 | #include "files.h" |
| Jeej | 0:7e1fdc4d6e1c | 2 | #include "dbg.h" |
| Jeej | 0:7e1fdc4d6e1c | 3 | #include "sensors.h" |
| Jeej | 0:7e1fdc4d6e1c | 4 | |
| Jeej | 0:7e1fdc4d6e1c | 5 | GENERIC_FILE_INIT(dev_rev, |
| Jeej | 0:7e1fdc4d6e1c | 6 | .rev.manufacturer_id = 0x01BC50C7, |
| Jeej | 0:7e1fdc4d6e1c | 7 | /// Device ID: Arbitrary number, at user/customer choice |
| Jeej | 0:7e1fdc4d6e1c | 8 | .rev.device_id = 0x00000010, |
| Jeej | 0:7e1fdc4d6e1c | 9 | /// Hardware Board ID: |
| Jeej | 0:7e1fdc4d6e1c | 10 | .rev.hw_version = 0x00000152, |
| Jeej | 0:7e1fdc4d6e1c | 11 | /// Firmware Version: made of |
| Jeej | 0:7e1fdc4d6e1c | 12 | /// - major,minor and patch indexes |
| Jeej | 0:7e1fdc4d6e1c | 13 | /// - fw_id : "build-flavour" |
| Jeej | 0:7e1fdc4d6e1c | 14 | /// FW_ID | MAJOR | MINOR | PATCH | HASH | |
| Jeej | 0:7e1fdc4d6e1c | 15 | // 1B | 1B | 1B | 2B | 4B | |
| yordan | 8:01f0225408cf | 16 | #if defined(TARGET_STM32L152RE) |
| yordan | 8:01f0225408cf | 17 | #ifdef TARGET_HAS_IKS01A1 |
| yordan | 8:01f0225408cf | 18 | .rev.fw_version.id = 0, |
| yordan | 8:01f0225408cf | 19 | #else // simulated sensors |
| Jeej | 0:7e1fdc4d6e1c | 20 | .rev.fw_version.id = 1, |
| yordan | 8:01f0225408cf | 21 | #endif // TARGET_HAS_IKS01A1 |
| yordan | 8:01f0225408cf | 22 | #elif defined(TARGET_STM32L432KC) |
| yordan | 8:01f0225408cf | 23 | .rev.fw_version.id = 2, |
| Jeej | 0:7e1fdc4d6e1c | 24 | #else |
| yordan | 8:01f0225408cf | 25 | #error "Please choose or add the right platform." |
| Jeej | 0:7e1fdc4d6e1c | 26 | #endif |
| Jeej | 0:7e1fdc4d6e1c | 27 | .rev.fw_version.major = 1, |
| Jeej | 0:7e1fdc4d6e1c | 28 | .rev.fw_version.minor = 0, |
| Jeej | 0:7e1fdc4d6e1c | 29 | .rev.fw_version.patch = 0, |
| Jeej | 0:7e1fdc4d6e1c | 30 | .rev.fw_version.hash = 0x00000000, |
| Jeej | 0:7e1fdc4d6e1c | 31 | /// "file-system" signature |
| Jeej | 0:7e1fdc4d6e1c | 32 | .rev.fs_crc = 0x00000000, |
| Jeej | 0:7e1fdc4d6e1c | 33 | ); |
| Jeej | 0:7e1fdc4d6e1c | 34 | |
| Jeej | 0:7e1fdc4d6e1c | 35 | GENERIC_FILE_INIT(simul, |
| Jeej | 0:7e1fdc4d6e1c | 36 | .divider = 500, // Boot value |
| Jeej | 0:7e1fdc4d6e1c | 37 | ); |
| Jeej | 0:7e1fdc4d6e1c | 38 | |
| Jeej | 0:7e1fdc4d6e1c | 39 | GENERIC_FILE_INIT(mag_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 40 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 41 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 42 | .cfg.max_period = 300, |
| Jeej | 0:7e1fdc4d6e1c | 43 | .cfg.max_diff = 500, |
| Jeej | 0:7e1fdc4d6e1c | 44 | .cfg.threshold_high = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 45 | .cfg.threshold_low = -1000, |
| Jeej | 0:7e1fdc4d6e1c | 46 | ); |
| Jeej | 0:7e1fdc4d6e1c | 47 | |
| Jeej | 0:7e1fdc4d6e1c | 48 | GENERIC_FILE_INIT(acc_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 49 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 50 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 51 | .cfg.max_period = 300, |
| Jeej | 0:7e1fdc4d6e1c | 52 | .cfg.max_diff = 100, |
| Jeej | 0:7e1fdc4d6e1c | 53 | .cfg.threshold_high = 500, |
| Jeej | 0:7e1fdc4d6e1c | 54 | .cfg.threshold_low = -500, |
| Jeej | 0:7e1fdc4d6e1c | 55 | ); |
| Jeej | 0:7e1fdc4d6e1c | 56 | |
| Jeej | 0:7e1fdc4d6e1c | 57 | GENERIC_FILE_INIT(gyr_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 58 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 59 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 60 | .cfg.max_period = 300, |
| Jeej | 0:7e1fdc4d6e1c | 61 | .cfg.max_diff = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 62 | .cfg.threshold_high = 10000, |
| Jeej | 0:7e1fdc4d6e1c | 63 | .cfg.threshold_low = -10000, |
| Jeej | 0:7e1fdc4d6e1c | 64 | ); |
| Jeej | 0:7e1fdc4d6e1c | 65 | |
| Jeej | 0:7e1fdc4d6e1c | 66 | GENERIC_FILE_INIT(pre_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 67 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 68 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 69 | .cfg.max_period = 60, |
| Jeej | 0:7e1fdc4d6e1c | 70 | .cfg.max_diff = 100, |
| Jeej | 0:7e1fdc4d6e1c | 71 | .cfg.threshold_high = 120000, |
| Jeej | 0:7e1fdc4d6e1c | 72 | .cfg.threshold_low = 90000, |
| Jeej | 0:7e1fdc4d6e1c | 73 | ); |
| Jeej | 0:7e1fdc4d6e1c | 74 | |
| Jeej | 0:7e1fdc4d6e1c | 75 | GENERIC_FILE_INIT(hum_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 76 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 77 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 78 | .cfg.max_period = 60, |
| Jeej | 0:7e1fdc4d6e1c | 79 | .cfg.max_diff = 100, |
| Jeej | 0:7e1fdc4d6e1c | 80 | .cfg.threshold_high = 7000, |
| Jeej | 0:7e1fdc4d6e1c | 81 | .cfg.threshold_low = 3000, |
| Jeej | 0:7e1fdc4d6e1c | 82 | ); |
| Jeej | 0:7e1fdc4d6e1c | 83 | |
| Jeej | 0:7e1fdc4d6e1c | 84 | GENERIC_FILE_INIT(tem1_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 85 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 86 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 87 | .cfg.max_period = 60, |
| Jeej | 0:7e1fdc4d6e1c | 88 | .cfg.max_diff = 100, |
| Jeej | 0:7e1fdc4d6e1c | 89 | .cfg.threshold_high = 3500, |
| Jeej | 0:7e1fdc4d6e1c | 90 | .cfg.threshold_low = 2000, |
| Jeej | 0:7e1fdc4d6e1c | 91 | ); |
| Jeej | 0:7e1fdc4d6e1c | 92 | |
| Jeej | 0:7e1fdc4d6e1c | 93 | GENERIC_FILE_INIT(tem2_cfg, |
| Jeej | 0:7e1fdc4d6e1c | 94 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| Jeej | 0:7e1fdc4d6e1c | 95 | .cfg.period = 1000, |
| Jeej | 0:7e1fdc4d6e1c | 96 | .cfg.max_period = 60, |
| Jeej | 0:7e1fdc4d6e1c | 97 | .cfg.max_diff = 100, |
| Jeej | 0:7e1fdc4d6e1c | 98 | .cfg.threshold_high = 9000, |
| Jeej | 0:7e1fdc4d6e1c | 99 | .cfg.threshold_low = 7000, |
| Jeej | 0:7e1fdc4d6e1c | 100 | ); |
| Jeej | 0:7e1fdc4d6e1c | 101 | |
| yordan | 8:01f0225408cf | 102 | GENERIC_FILE_INIT(light_cfg, |
| yordan | 8:01f0225408cf | 103 | .cfg.report_type = REPORT_ON_DIFFERENCE, |
| yordan | 8:01f0225408cf | 104 | .cfg.period = 1000, // ms |
| yordan | 8:01f0225408cf | 105 | .cfg.max_period = 60, // sec |
| yordan | 8:01f0225408cf | 106 | .cfg.max_diff = 10, // percent |
| yordan | 8:01f0225408cf | 107 | .cfg.threshold_high = 0, // disabled |
| yordan | 8:01f0225408cf | 108 | .cfg.threshold_low = 100, // disabled |
| yordan | 8:01f0225408cf | 109 | ); |
| yordan | 8:01f0225408cf | 110 | |
| yordan | 8:01f0225408cf | 111 | #define FILE_QTY 9 |
| Jeej | 0:7e1fdc4d6e1c | 112 | |
| Jeej | 0:7e1fdc4d6e1c | 113 | static const void* file_map[FILE_QTY][2] = { |
| Jeej | 0:7e1fdc4d6e1c | 114 | GENERIC_FILE_MAP(MAG_CFG_FILE_ID, mag_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 115 | GENERIC_FILE_MAP(ACC_CFG_FILE_ID, acc_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 116 | GENERIC_FILE_MAP(GYR_CFG_FILE_ID, gyr_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 117 | GENERIC_FILE_MAP(PRE_CFG_FILE_ID, pre_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 118 | GENERIC_FILE_MAP(HUM_CFG_FILE_ID, hum_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 119 | GENERIC_FILE_MAP(TEM1_CFG_FILE_ID, tem1_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 120 | GENERIC_FILE_MAP(TEM2_CFG_FILE_ID, tem2_cfg), |
| yordan | 8:01f0225408cf | 121 | GENERIC_FILE_MAP(LIGHT_CFG_FILE_ID, light_cfg), |
| Jeej | 0:7e1fdc4d6e1c | 122 | GENERIC_FILE_MAP(SIMUL_FILE_ID, simul), |
| Jeej | 0:7e1fdc4d6e1c | 123 | }; |
| Jeej | 0:7e1fdc4d6e1c | 124 | |
| Jeej | 0:7e1fdc4d6e1c | 125 | void* file_get( uint8_t file_id ) |
| Jeej | 0:7e1fdc4d6e1c | 126 | { |
| Jeej | 0:7e1fdc4d6e1c | 127 | for (uint8_t i=0 ; i<FILE_QTY ; i++) |
| Jeej | 0:7e1fdc4d6e1c | 128 | { |
| Jeej | 0:7e1fdc4d6e1c | 129 | if ((uint8_t)file_map[i][0] == file_id) |
| Jeej | 0:7e1fdc4d6e1c | 130 | { |
| Jeej | 0:7e1fdc4d6e1c | 131 | return (void*)file_map[i][1]; |
| Jeej | 0:7e1fdc4d6e1c | 132 | } |
| Jeej | 0:7e1fdc4d6e1c | 133 | } |
| Jeej | 0:7e1fdc4d6e1c | 134 | |
| Jeej | 0:7e1fdc4d6e1c | 135 | ASSERT(false, "File %d does not exist\r\n"); |
| Jeej | 0:7e1fdc4d6e1c | 136 | |
| Jeej | 0:7e1fdc4d6e1c | 137 | return NULL; |
| Jeej | 0:7e1fdc4d6e1c | 138 | } |
| Jeej | 0:7e1fdc4d6e1c | 139 | |
| Jeej | 0:7e1fdc4d6e1c | 140 | uint32_t fs_write_file(const uint8_t file_id, |
| Jeej | 0:7e1fdc4d6e1c | 141 | const uint16_t offset, |
| Jeej | 0:7e1fdc4d6e1c | 142 | const uint16_t size, |
| Jeej | 0:7e1fdc4d6e1c | 143 | const uint8_t* const content) |
| Jeej | 0:7e1fdc4d6e1c | 144 | { |
| Jeej | 0:7e1fdc4d6e1c | 145 | uint32_t file = 0; |
| Jeej | 0:7e1fdc4d6e1c | 146 | |
| Jeej | 0:7e1fdc4d6e1c | 147 | DPRINT("WF %d\r\n", file_id); |
| Jeej | 0:7e1fdc4d6e1c | 148 | |
| Jeej | 0:7e1fdc4d6e1c | 149 | // Retrieve pointer to file |
| Jeej | 0:7e1fdc4d6e1c | 150 | file = (uint32_t)file_get(file_id); |
| Jeej | 0:7e1fdc4d6e1c | 151 | |
| Jeej | 0:7e1fdc4d6e1c | 152 | if (!file) |
| Jeej | 0:7e1fdc4d6e1c | 153 | { |
| Jeej | 0:7e1fdc4d6e1c | 154 | return 0; |
| Jeej | 0:7e1fdc4d6e1c | 155 | } |
| Jeej | 0:7e1fdc4d6e1c | 156 | |
| Jeej | 0:7e1fdc4d6e1c | 157 | // Write the new data |
| Jeej | 0:7e1fdc4d6e1c | 158 | memcpy((void*)(file+offset), (void*)content, size); |
| Jeej | 0:7e1fdc4d6e1c | 159 | |
| Jeej | 0:7e1fdc4d6e1c | 160 | return size; |
| Jeej | 0:7e1fdc4d6e1c | 161 | } |
| Jeej | 0:7e1fdc4d6e1c | 162 | |
| Jeej | 0:7e1fdc4d6e1c | 163 | uint32_t fs_read_file( const uint8_t file_id, |
| Jeej | 0:7e1fdc4d6e1c | 164 | const uint16_t offset, |
| Jeej | 0:7e1fdc4d6e1c | 165 | const uint16_t size, |
| Jeej | 0:7e1fdc4d6e1c | 166 | uint8_t* buf) |
| Jeej | 0:7e1fdc4d6e1c | 167 | { |
| Jeej | 0:7e1fdc4d6e1c | 168 | uint32_t file = 0; |
| Jeej | 0:7e1fdc4d6e1c | 169 | |
| Jeej | 0:7e1fdc4d6e1c | 170 | DPRINT("RF %d\r\n", file_id); |
| Jeej | 0:7e1fdc4d6e1c | 171 | |
| Jeej | 0:7e1fdc4d6e1c | 172 | // Retrieve pointer to file |
| Jeej | 0:7e1fdc4d6e1c | 173 | file = (uint32_t)file_get(file_id); |
| Jeej | 0:7e1fdc4d6e1c | 174 | |
| Jeej | 0:7e1fdc4d6e1c | 175 | if (!file) |
| Jeej | 0:7e1fdc4d6e1c | 176 | { |
| Jeej | 0:7e1fdc4d6e1c | 177 | return 0; |
| Jeej | 0:7e1fdc4d6e1c | 178 | } |
| Jeej | 0:7e1fdc4d6e1c | 179 | |
| Jeej | 0:7e1fdc4d6e1c | 180 | // Read data |
| Jeej | 0:7e1fdc4d6e1c | 181 | memcpy((void*)buf, (void*)(file+offset), size); |
| Jeej | 0:7e1fdc4d6e1c | 182 | |
| Jeej | 0:7e1fdc4d6e1c | 183 | return size; |
| Jeej | 0:7e1fdc4d6e1c | 184 | } |
