123
Fork of LG by
DeviceErrorModel.h@174:0f86eedd511c, 2016-06-26 (annotated)
- Committer:
- Diletant
- Date:
- Sun Jun 26 10:16:39 2016 +0000
- Revision:
- 174:0f86eedd511c
Device&... update. Not final!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Diletant | 174:0f86eedd511c | 1 | #ifndef __DEVICE_EM_H__ |
Diletant | 174:0f86eedd511c | 2 | #define __DEVICE_EM_H__ |
Diletant | 174:0f86eedd511c | 3 | |
Diletant | 174:0f86eedd511c | 4 | //Bias model #1 typedefs |
Diletant | 174:0f86eedd511c | 5 | // Error = m[0] + m[1] * T + m[2] * dT |
Diletant | 174:0f86eedd511c | 6 | typedef struct _DeviceEMBias1Settings { |
Diletant | 174:0f86eedd511c | 7 | int32_t enabled; |
Diletant | 174:0f86eedd511c | 8 | int32_t m[3]; |
Diletant | 174:0f86eedd511c | 9 | } DeviceEMBias1Settings; |
Diletant | 174:0f86eedd511c | 10 | |
Diletant | 174:0f86eedd511c | 11 | typedef struct _DeviceEMBias1State { |
Diletant | 174:0f86eedd511c | 12 | int32_t enabled; |
Diletant | 174:0f86eedd511c | 13 | int32_t ppm; //Accumulated angle error - millionth part in signed 16.16 format |
Diletant | 174:0f86eedd511c | 14 | int32_t error; //Accumulated angle error - pulses in signed 16.16 format |
Diletant | 174:0f86eedd511c | 15 | } DeviceEMBias1State; |
Diletant | 174:0f86eedd511c | 16 | |
Diletant | 174:0f86eedd511c | 17 | typedef struct _DeviceEMBias1 { |
Diletant | 174:0f86eedd511c | 18 | DeviceEMBias1Settings settings; |
Diletant | 174:0f86eedd511c | 19 | DeviceEMBias1State state; |
Diletant | 174:0f86eedd511c | 20 | } DeviceEMBias1; |
Diletant | 174:0f86eedd511c | 21 | |
Diletant | 174:0f86eedd511c | 22 | //Bias model #2 typedefs |
Diletant | 174:0f86eedd511c | 23 | // Error = f(T), f(T) - piecewise linear interpolation |
Diletant | 174:0f86eedd511c | 24 | typedef struct _DeviceEMBias2Function { |
Diletant | 174:0f86eedd511c | 25 | int32_t points; |
Diletant | 174:0f86eedd511c | 26 | int32_t celsius[16]; //Temperature - celsius in signed 16.16 format |
Diletant | 174:0f86eedd511c | 27 | int32_t ppm[16]; //Accumulated angle correction per dither cycle interval - ppm in signed 16.16 format |
Diletant | 174:0f86eedd511c | 28 | } DeviceEMBias2Function; |
Diletant | 174:0f86eedd511c | 29 | |
Diletant | 174:0f86eedd511c | 30 | typedef struct _DeviceEMBias2Settings { |
Diletant | 174:0f86eedd511c | 31 | int32_t enabled; |
Diletant | 174:0f86eedd511c | 32 | DeviceEMBias2Function tc; |
Diletant | 174:0f86eedd511c | 33 | } DeviceEMBias2Settings; |
Diletant | 174:0f86eedd511c | 34 | |
Diletant | 174:0f86eedd511c | 35 | typedef struct _DeviceEMBias2State { |
Diletant | 174:0f86eedd511c | 36 | int32_t enabled; |
Diletant | 174:0f86eedd511c | 37 | int32_t ppm; //Accumulated angle error - millionth part in signed 16.16 format |
Diletant | 174:0f86eedd511c | 38 | int32_t error; //Accumulated angle error - pulses in signed 16.16 format |
Diletant | 174:0f86eedd511c | 39 | } DeviceEMBias2State; |
Diletant | 174:0f86eedd511c | 40 | |
Diletant | 174:0f86eedd511c | 41 | typedef struct _DeviceEMBias2 { |
Diletant | 174:0f86eedd511c | 42 | DeviceEMBias2Settings settings; |
Diletant | 174:0f86eedd511c | 43 | DeviceEMBias2State state; |
Diletant | 174:0f86eedd511c | 44 | } DeviceEMBias2; |
Diletant | 174:0f86eedd511c | 45 | |
Diletant | 174:0f86eedd511c | 46 | //Scale error model typedefs |
Diletant | 174:0f86eedd511c | 47 | //typedef struct _DeviceEMScale1 { |
Diletant | 174:0f86eedd511c | 48 | // DeviceEMScale1Settings settings; |
Diletant | 174:0f86eedd511c | 49 | // DeviceEMScale1State state; |
Diletant | 174:0f86eedd511c | 50 | //} DeviceEMScale1; |
Diletant | 174:0f86eedd511c | 51 | |
Diletant | 174:0f86eedd511c | 52 | //Total error model typedefs |
Diletant | 174:0f86eedd511c | 53 | typedef struct _DeviceEMErrorSettings { |
Diletant | 174:0f86eedd511c | 54 | } DeviceEMErrorSettings; |
Diletant | 174:0f86eedd511c | 55 | |
Diletant | 174:0f86eedd511c | 56 | typedef struct _DeviceEMErrorState { |
Diletant | 174:0f86eedd511c | 57 | int32_t ppm; //Accumulated angle error - millionth part in signed 16.16 format |
Diletant | 174:0f86eedd511c | 58 | int32_t correction; //Accumulated angle error - pulses in signed 16.16 format |
Diletant | 174:0f86eedd511c | 59 | } DeviceEMErrorState; |
Diletant | 174:0f86eedd511c | 60 | |
Diletant | 174:0f86eedd511c | 61 | typedef struct _DeviceEMError { |
Diletant | 174:0f86eedd511c | 62 | DeviceEMErrorSettings settings; |
Diletant | 174:0f86eedd511c | 63 | DeviceEMErrorState state; |
Diletant | 174:0f86eedd511c | 64 | } DeviceEMError; |
Diletant | 174:0f86eedd511c | 65 | |
Diletant | 174:0f86eedd511c | 66 | typedef struct _DeviceEM { |
Diletant | 174:0f86eedd511c | 67 | DeviceEMBias1 bias1; //Bias error model #1 |
Diletant | 174:0f86eedd511c | 68 | DeviceEMBias2 bias2; //Bias error model #2 |
Diletant | 174:0f86eedd511c | 69 | //DeviceEMScale1 scale1; //Scale factor error model #1 |
Diletant | 174:0f86eedd511c | 70 | DeviceEMError error; //Total error |
Diletant | 174:0f86eedd511c | 71 | } DeviceEM; |
Diletant | 174:0f86eedd511c | 72 | |
Diletant | 174:0f86eedd511c | 73 | void InitEMDefaultSettings(void); |
Diletant | 174:0f86eedd511c | 74 | void InitEMState(void); |
Diletant | 174:0f86eedd511c | 75 | void DeviceStartEM(void); |
Diletant | 174:0f86eedd511c | 76 | |
Diletant | 174:0f86eedd511c | 77 | void emProcess(void); |
Diletant | 174:0f86eedd511c | 78 | |
Diletant | 174:0f86eedd511c | 79 | #endif /* __DEVICE_EM_H__ */ |