Die Ollis / Mbed 2 deprecated parallel_parking

Dependencies:   mbed-rtos mbed

Committer:
becheo
Date:
Sun Feb 07 06:14:32 2016 +0000
Revision:
0:c871d5355b99
Einparken mit verschiedenen Geschwindigkeiten

Who changed what in which revision?

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