blob: 37d1a9d0f77a7e9f196af9513b5d00cf1ad3a879 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/* Table datastructure for storing calibrations in the EEPROM.
*
* A table has a fixed number of rows that define a key/value mapping.
* Keys and values are each U32.
* T: U32->U32
* Numbers are stored little-endian.
*
* Keys must be monotonically increasing.
*
* Device: PIC16F1459
* Compiler: XC8 v3.00
*
* Usage:
*
* #include <stdbool.h>
* #include <stdint.h>
* #include "types.h"
* #include "can.h"
* #include "eeprom.h"
* #include "table.h"
*/
enum {
TAB_KEY_SIZE = 4, // U32
TAB_VAL_SIZE = 4, // U32
TAB_ROWS = 32,
TAB_ROW_SIZE = TAB_KEY_SIZE + TAB_VAL_SIZE,
};
typedef struct {
EepromAddr offset; // starting address
} Table;
// Set the key and value of row k.
Status tabWrite(const Table *tab, U8 k, U16 key, U16 val);
// Read row k.
Status tabRead(const Table *tab, U8 k, U16 *key, U16 *val);
// Lookup the value associated with given key.
// If key falls between two rows, the value is interpolated
// from the two adjacent.
Status tabLookup(const Table *tab, U16 key, U16 *val);
|