Oliver Wenzel / Mbed 2 deprecated mbed_amf_controlsystem_iO_copy

Dependencies:   mbed-rtos mbed

Fork of mbed_amf_controlsystem by Matti Borchers

Committer:
mborchers
Date:
Wed Feb 03 17:19:21 2016 +0000
Revision:
0:8a6003b8bb5b
Child:
13:34f7f783ad24
Erster Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mborchers 0:8a6003b8bb5b 1 #ifndef SUPPORTSYSTEM_H_
mborchers 0:8a6003b8bb5b 2 #define SUPPORTSYSTEM_H_
mborchers 0:8a6003b8bb5b 3
mborchers 0:8a6003b8bb5b 4 #include <mbed.h>
mborchers 0:8a6003b8bb5b 5 #include <I2C.h>
mborchers 0:8a6003b8bb5b 6
mborchers 0:8a6003b8bb5b 7 /*
mborchers 0:8a6003b8bb5b 8 * Necessary for strcut sizes
mborchers 0:8a6003b8bb5b 9 */
mborchers 0:8a6003b8bb5b 10 #pragma pack (1)
mborchers 0:8a6003b8bb5b 11
mborchers 0:8a6003b8bb5b 12
mborchers 0:8a6003b8bb5b 13 /*
mborchers 0:8a6003b8bb5b 14 * Data container
mborchers 0:8a6003b8bb5b 15 */
mborchers 0:8a6003b8bb5b 16
mborchers 0:8a6003b8bb5b 17 typedef struct {
mborchers 0:8a6003b8bb5b 18 uint8_t i2cDeviceAddress;
mborchers 0:8a6003b8bb5b 19 uint32_t uptimeMillis;
mborchers 0:8a6003b8bb5b 20 } Main_MaintenanceRegisterDataBuffer_t;
mborchers 0:8a6003b8bb5b 21
mborchers 0:8a6003b8bb5b 22 typedef struct {
mborchers 0:8a6003b8bb5b 23
mborchers 0:8a6003b8bb5b 24 uint8_t commandRegister;
mborchers 0:8a6003b8bb5b 25
mborchers 0:8a6003b8bb5b 26 int32_t sensorRawXRegister;
mborchers 0:8a6003b8bb5b 27 int32_t sensorRawYRegister;
mborchers 0:8a6003b8bb5b 28
mborchers 0:8a6003b8bb5b 29 float velocityXRegister;
mborchers 0:8a6003b8bb5b 30 float velocityXFilteredRegister;
mborchers 0:8a6003b8bb5b 31 float velocityAngularRegister;
mborchers 0:8a6003b8bb5b 32 float velocityAngularFilteredRegister;
mborchers 0:8a6003b8bb5b 33
mborchers 0:8a6003b8bb5b 34 float positionXRegister;
mborchers 0:8a6003b8bb5b 35 float positionYRegister;
mborchers 0:8a6003b8bb5b 36 float positionAngleRegister;
mborchers 0:8a6003b8bb5b 37
mborchers 0:8a6003b8bb5b 38 float conversionFactorRegister;
mborchers 0:8a6003b8bb5b 39
mborchers 0:8a6003b8bb5b 40 float sensorPositionXRegister;
mborchers 0:8a6003b8bb5b 41 float sensorPositionYRegister;
mborchers 0:8a6003b8bb5b 42 float sensorPositionAngleRegister;
mborchers 0:8a6003b8bb5b 43
mborchers 0:8a6003b8bb5b 44 int32_t curveRadiusRegister;
mborchers 0:8a6003b8bb5b 45
mborchers 0:8a6003b8bb5b 46 float distanceXRegister;
mborchers 0:8a6003b8bb5b 47
mborchers 0:8a6003b8bb5b 48 uint16_t squal;
mborchers 0:8a6003b8bb5b 49
mborchers 0:8a6003b8bb5b 50 uint16_t completeChecksum;
mborchers 0:8a6003b8bb5b 51 // uint16_t velocityChecksumRegister;
mborchers 0:8a6003b8bb5b 52 // uint16_t positionChecksumRegister;
mborchers 0:8a6003b8bb5b 53
mborchers 0:8a6003b8bb5b 54 } IMU_RegisterDataBuffer_t;
mborchers 0:8a6003b8bb5b 55
mborchers 0:8a6003b8bb5b 56 typedef struct {
mborchers 0:8a6003b8bb5b 57 uint8_t commands;
mborchers 0:8a6003b8bb5b 58 } LightManager_RegisterDataBuffer_t;
mborchers 0:8a6003b8bb5b 59
mborchers 0:8a6003b8bb5b 60 typedef struct {
mborchers 0:8a6003b8bb5b 61
mborchers 0:8a6003b8bb5b 62 uint8_t channelValid[3];
mborchers 0:8a6003b8bb5b 63 uint16_t channelActiveTime[3];
mborchers 0:8a6003b8bb5b 64 int8_t channelPercent[3];
mborchers 0:8a6003b8bb5b 65 uint16_t checksum;
mborchers 0:8a6003b8bb5b 66
mborchers 0:8a6003b8bb5b 67 } RadioDecoder_RegisterDataBuffer_t;
mborchers 0:8a6003b8bb5b 68
mborchers 0:8a6003b8bb5b 69
mborchers 0:8a6003b8bb5b 70
mborchers 0:8a6003b8bb5b 71
mborchers 0:8a6003b8bb5b 72 /*
mborchers 0:8a6003b8bb5b 73 * Support system - software register
mborchers 0:8a6003b8bb5b 74 */
mborchers 0:8a6003b8bb5b 75
mborchers 0:8a6003b8bb5b 76 // Maintenance
mborchers 0:8a6003b8bb5b 77 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET 0
mborchers 0:8a6003b8bb5b 78 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_ADDRESS (SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET + 0)
mborchers 0:8a6003b8bb5b 79 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_UPTIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET + 1)
mborchers 0:8a6003b8bb5b 80
mborchers 0:8a6003b8bb5b 81 // IMU
mborchers 0:8a6003b8bb5b 82 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET sizeof(Main_MaintenanceRegisterDataBuffer_t)
mborchers 0:8a6003b8bb5b 83 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_COMMAND (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 0)
mborchers 0:8a6003b8bb5b 84
mborchers 0:8a6003b8bb5b 85 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_RAW_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 1)
mborchers 0:8a6003b8bb5b 86 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_RAW_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 5)
mborchers 0:8a6003b8bb5b 87
mborchers 0:8a6003b8bb5b 88 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 9)
mborchers 0:8a6003b8bb5b 89 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_X_FILTERED (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 13)
mborchers 0:8a6003b8bb5b 90 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_ANGULAR (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 17)
mborchers 0:8a6003b8bb5b 91 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_ANGULAR_FILTERED (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 21)
mborchers 0:8a6003b8bb5b 92
mborchers 0:8a6003b8bb5b 93 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 25)
mborchers 0:8a6003b8bb5b 94 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 29)
mborchers 0:8a6003b8bb5b 95 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_ANGLE (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 33)
mborchers 0:8a6003b8bb5b 96
mborchers 0:8a6003b8bb5b 97 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_CONVERSION_FACTOR (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 37)
mborchers 0:8a6003b8bb5b 98 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 41)
mborchers 0:8a6003b8bb5b 99 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 45)
mborchers 0:8a6003b8bb5b 100 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_ANGLE (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 49)
mborchers 0:8a6003b8bb5b 101
mborchers 0:8a6003b8bb5b 102 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_CURVE_RADIUS (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 53)
mborchers 0:8a6003b8bb5b 103
mborchers 0:8a6003b8bb5b 104 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_DISTANCE_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 57)
mborchers 0:8a6003b8bb5b 105
mborchers 0:8a6003b8bb5b 106 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SQUAL (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 61)
mborchers 0:8a6003b8bb5b 107
mborchers 0:8a6003b8bb5b 108 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_COMPLETE_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 63)
mborchers 0:8a6003b8bb5b 109
mborchers 0:8a6003b8bb5b 110 //#define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 63)
mborchers 0:8a6003b8bb5b 111 //#define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 65)
mborchers 0:8a6003b8bb5b 112
mborchers 0:8a6003b8bb5b 113 // Light manager
mborchers 0:8a6003b8bb5b 114 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + sizeof(IMU_RegisterDataBuffer_t))
mborchers 0:8a6003b8bb5b 115 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_COMMAND (SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET + 0)
mborchers 0:8a6003b8bb5b 116
mborchers 0:8a6003b8bb5b 117 // Radio decoder
mborchers 0:8a6003b8bb5b 118 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET (SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET + sizeof(LightManager_RegisterDataBuffer_t))
mborchers 0:8a6003b8bb5b 119 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 0)
mborchers 0:8a6003b8bb5b 120 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 1)
mborchers 0:8a6003b8bb5b 121 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 2)
mborchers 0:8a6003b8bb5b 122
mborchers 0:8a6003b8bb5b 123 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 3)
mborchers 0:8a6003b8bb5b 124 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 5)
mborchers 0:8a6003b8bb5b 125 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 7)
mborchers 0:8a6003b8bb5b 126
mborchers 0:8a6003b8bb5b 127 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 9)
mborchers 0:8a6003b8bb5b 128 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 10)
mborchers 0:8a6003b8bb5b 129 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 11)
mborchers 0:8a6003b8bb5b 130
mborchers 0:8a6003b8bb5b 131 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 12)
mborchers 0:8a6003b8bb5b 132
mborchers 0:8a6003b8bb5b 133
mborchers 0:8a6003b8bb5b 134
mborchers 0:8a6003b8bb5b 135 /*
mborchers 0:8a6003b8bb5b 136 * LightManager
mborchers 0:8a6003b8bb5b 137 */
mborchers 0:8a6003b8bb5b 138 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_REMOTE_LIGHT 0
mborchers 0:8a6003b8bb5b 139 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_LEFT 1
mborchers 0:8a6003b8bb5b 140 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_RIGHT 2
mborchers 0:8a6003b8bb5b 141 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_BOTH 3
mborchers 0:8a6003b8bb5b 142 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_BRAKE_LIGHT 4
mborchers 0:8a6003b8bb5b 143
mborchers 0:8a6003b8bb5b 144
mborchers 0:8a6003b8bb5b 145 class SupportSystem{
mborchers 0:8a6003b8bb5b 146
mborchers 0:8a6003b8bb5b 147
mborchers 0:8a6003b8bb5b 148 private:
mborchers 0:8a6003b8bb5b 149
mborchers 0:8a6003b8bb5b 150 uint8_t i2cAddress;
mborchers 0:8a6003b8bb5b 151 I2C *i2c;
mborchers 0:8a6003b8bb5b 152 uint32_t transmissionErrorCount;
mborchers 0:8a6003b8bb5b 153
mborchers 0:8a6003b8bb5b 154 uint16_t crc16_update(uint16_t crc, uint8_t a);
mborchers 0:8a6003b8bb5b 155 uint16_t generateChecksum(void *data, size_t len);
mborchers 0:8a6003b8bb5b 156
mborchers 0:8a6003b8bb5b 157 /*
mborchers 0:8a6003b8bb5b 158 * IMU
mborchers 0:8a6003b8bb5b 159 */
mborchers 0:8a6003b8bb5b 160 uint8_t imuCommand;
mborchers 0:8a6003b8bb5b 161 IMU_RegisterDataBuffer_t IMU_registerDataBuffer;
mborchers 0:8a6003b8bb5b 162
mborchers 0:8a6003b8bb5b 163 /*
mborchers 0:8a6003b8bb5b 164 * LightManager
mborchers 0:8a6003b8bb5b 165 */
mborchers 0:8a6003b8bb5b 166 uint8_t lightManagerCommand;
mborchers 0:8a6003b8bb5b 167 void setLightManagerCommandBit(bool value, uint8_t bit);
mborchers 0:8a6003b8bb5b 168
mborchers 0:8a6003b8bb5b 169 /*
mborchers 0:8a6003b8bb5b 170 * RadioDecoder
mborchers 0:8a6003b8bb5b 171 */
mborchers 0:8a6003b8bb5b 172 RadioDecoder_RegisterDataBuffer_t RadioDecoder_registerDataBuffer;
mborchers 0:8a6003b8bb5b 173
mborchers 0:8a6003b8bb5b 174 public:
mborchers 0:8a6003b8bb5b 175
mborchers 0:8a6003b8bb5b 176 SupportSystem();
mborchers 0:8a6003b8bb5b 177 SupportSystem(uint8_t i2cAddress, I2C *i2c);
mborchers 0:8a6003b8bb5b 178
mborchers 0:8a6003b8bb5b 179 void init(uint8_t i2cAddress, I2C *i2c);
mborchers 0:8a6003b8bb5b 180
mborchers 0:8a6003b8bb5b 181 void readData(uint8_t registerAddress, void *buffer, size_t length);
mborchers 0:8a6003b8bb5b 182 void writeData(uint8_t registerAddress, void *buffer, size_t length);
mborchers 0:8a6003b8bb5b 183
mborchers 0:8a6003b8bb5b 184 uint32_t getTransmissionErrorCount();
mborchers 0:8a6003b8bb5b 185
mborchers 0:8a6003b8bb5b 186 /*
mborchers 0:8a6003b8bb5b 187 * Maintenance
mborchers 0:8a6003b8bb5b 188 */
mborchers 0:8a6003b8bb5b 189 uint32_t readMaintenanceUptimeMillis();
mborchers 0:8a6003b8bb5b 190
mborchers 0:8a6003b8bb5b 191
mborchers 0:8a6003b8bb5b 192 /*
mborchers 0:8a6003b8bb5b 193 * IMU
mborchers 0:8a6003b8bb5b 194 */
mborchers 0:8a6003b8bb5b 195 IMU_RegisterDataBuffer_t *getImuRegisterDataBuffer();
mborchers 0:8a6003b8bb5b 196
mborchers 0:8a6003b8bb5b 197
mborchers 0:8a6003b8bb5b 198
mborchers 0:8a6003b8bb5b 199 /*
mborchers 0:8a6003b8bb5b 200 * LightManager
mborchers 0:8a6003b8bb5b 201 */
mborchers 0:8a6003b8bb5b 202 void writeLightManagerCommand();
mborchers 0:8a6003b8bb5b 203 void setLightManagerBrakeLight(bool active, bool writeOut=true);
mborchers 0:8a6003b8bb5b 204 void setLightManagerRemoteLight(bool active, bool writeOut=true);
mborchers 0:8a6003b8bb5b 205 void setLightManagerSignalLeft(bool active, bool writeOut=true);
mborchers 0:8a6003b8bb5b 206 void setLightManagerSignalRight(bool active, bool writeOut=true);
mborchers 0:8a6003b8bb5b 207 void setLightManagerSignalBoth(bool active, bool writeOut=true);
mborchers 0:8a6003b8bb5b 208
mborchers 0:8a6003b8bb5b 209 /*
mborchers 0:8a6003b8bb5b 210 * RadioDecoder
mborchers 0:8a6003b8bb5b 211 */
mborchers 0:8a6003b8bb5b 212 RadioDecoder_RegisterDataBuffer_t *getRadioDecoderRegisterDataBuffer();
mborchers 0:8a6003b8bb5b 213
mborchers 0:8a6003b8bb5b 214 };
mborchers 0:8a6003b8bb5b 215
mborchers 0:8a6003b8bb5b 216
mborchers 0:8a6003b8bb5b 217
mborchers 0:8a6003b8bb5b 218 #endif /* SUPPORTSYSTEM_H_ */