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.
SupportSystem.h
00001 #ifndef SUPPORTSYSTEM_H_ 00002 #define SUPPORTSYSTEM_H_ 00003 00004 #include <mbed.h> 00005 #include <I2C.h> 00006 00007 /* 00008 * Necessary for strcut sizes 00009 */ 00010 #pragma pack (1) 00011 00012 00013 /* 00014 * Data container 00015 */ 00016 00017 typedef struct { 00018 uint8_t i2cDeviceAddress; 00019 uint32_t uptimeMillis; 00020 } Main_MaintenanceRegisterDataBuffer_t; 00021 00022 typedef struct { 00023 00024 uint8_t commandRegister; 00025 00026 int32_t sensorRawXRegister; 00027 int32_t sensorRawYRegister; 00028 00029 float velocityXRegister; 00030 float velocityXFilteredRegister; 00031 float velocityAngularRegister; 00032 float velocityAngularFilteredRegister; 00033 00034 float positionXRegister; 00035 float positionYRegister; 00036 float positionAngleRegister; 00037 00038 float conversionFactorRegister; 00039 00040 float sensorPositionXRegister; 00041 float sensorPositionYRegister; 00042 float sensorPositionAngleRegister; 00043 00044 int32_t curveRadiusRegister; 00045 00046 float distanceXRegister; 00047 00048 uint16_t squal; 00049 00050 uint16_t completeChecksum; 00051 // uint16_t velocityChecksumRegister; 00052 // uint16_t positionChecksumRegister; 00053 00054 } IMU_RegisterDataBuffer_t; 00055 00056 typedef struct { 00057 uint8_t commands; 00058 } LightManager_RegisterDataBuffer_t; 00059 00060 typedef struct { 00061 00062 uint8_t channelValid[3]; 00063 uint16_t channelActiveTime[3]; 00064 int8_t channelPercent[3]; 00065 uint16_t checksum; 00066 00067 } RadioDecoder_RegisterDataBuffer_t; 00068 00069 00070 00071 00072 /* 00073 * Support system - software register 00074 */ 00075 00076 // Maintenance 00077 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET 0 00078 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_ADDRESS (SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET + 0) 00079 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_UPTIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_MAINTENANCE_OFFSET + 1) 00080 00081 // IMU 00082 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET sizeof(Main_MaintenanceRegisterDataBuffer_t) 00083 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_COMMAND (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 0) 00084 00085 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_RAW_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 1) 00086 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_RAW_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 5) 00087 00088 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 9) 00089 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_X_FILTERED (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 13) 00090 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_ANGULAR (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 17) 00091 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_ANGULAR_FILTERED (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 21) 00092 00093 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 25) 00094 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 29) 00095 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_ANGLE (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 33) 00096 00097 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_CONVERSION_FACTOR (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 37) 00098 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 41) 00099 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_Y (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 45) 00100 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SENSOR_POSITION_ANGLE (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 49) 00101 00102 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_CURVE_RADIUS (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 53) 00103 00104 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_DISTANCE_X (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 57) 00105 00106 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_SQUAL (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 61) 00107 00108 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_COMPLETE_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 63) 00109 00110 //#define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_VELOCITY_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 63) 00111 //#define SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_POSITION_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + 65) 00112 00113 // Light manager 00114 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET (SUPPORT_SYSTEM_REGISTER_ADDRESS_IMU_OFFSET + sizeof(IMU_RegisterDataBuffer_t)) 00115 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_COMMAND (SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET + 0) 00116 00117 // Radio decoder 00118 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET (SUPPORT_SYSTEM_REGISTER_ADDRESS_LIGHTMANAGER_OFFSET + sizeof(LightManager_RegisterDataBuffer_t)) 00119 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 0) 00120 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 1) 00121 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_VALID (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 2) 00122 00123 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 3) 00124 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 5) 00125 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_ACTIVE_TIME (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 7) 00126 00127 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_ONE_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 9) 00128 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_TWO_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 10) 00129 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHANNEL_THREE_PERCENTAGE (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 11) 00130 00131 #define SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_CHECKSUM (SUPPORT_SYSTEM_REGISTER_ADDRESS_RADIODECODER_OFFSET + 12) 00132 00133 00134 00135 /* 00136 * LightManager 00137 */ 00138 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_REMOTE_LIGHT 0 00139 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_LEFT 1 00140 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_RIGHT 2 00141 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_SIGNAL_BOTH 3 00142 #define SUPPORT_SYSTEM_LIGHTMANAGER_BIT_BRAKE_LIGHT 4 00143 00144 00145 class SupportSystem{ 00146 00147 00148 private: 00149 00150 uint8_t i2cAddress; 00151 I2C *i2c; 00152 uint32_t transmissionErrorCount; 00153 00154 uint16_t crc16_update(uint16_t crc, uint8_t a); 00155 uint16_t generateChecksum(void *data, size_t len); 00156 00157 /* 00158 * IMU 00159 */ 00160 uint8_t imuCommand; 00161 IMU_RegisterDataBuffer_t IMU_registerDataBuffer; 00162 00163 /* 00164 * LightManager 00165 */ 00166 uint8_t lightManagerCommand; 00167 void setLightManagerCommandBit(bool value, uint8_t bit); 00168 00169 /* 00170 * RadioDecoder 00171 */ 00172 RadioDecoder_RegisterDataBuffer_t RadioDecoder_registerDataBuffer; 00173 00174 public: 00175 00176 SupportSystem(); 00177 SupportSystem(uint8_t i2cAddress, I2C *i2c); 00178 00179 void init(uint8_t i2cAddress, I2C *i2c); 00180 00181 void readData(uint8_t registerAddress, void *buffer, size_t length); 00182 void writeData(uint8_t registerAddress, void *buffer, size_t length); 00183 00184 uint32_t getTransmissionErrorCount(); 00185 00186 /* 00187 * Maintenance 00188 */ 00189 uint32_t readMaintenanceUptimeMillis(); 00190 00191 00192 /* 00193 * IMU 00194 */ 00195 IMU_RegisterDataBuffer_t *getImuRegisterDataBuffer(); 00196 void writeImuConfig(float *config_register, size_t length=4); 00197 00198 00199 00200 /* 00201 * LightManager 00202 */ 00203 void writeLightManagerCommand(); 00204 void setLightManagerBrakeLight(bool active, bool writeOut=true); 00205 void setLightManagerRemoteLight(bool active, bool writeOut=true); 00206 void setLightManagerSignalLeft(bool active, bool writeOut=true); 00207 void setLightManagerSignalRight(bool active, bool writeOut=true); 00208 void setLightManagerSignalBoth(bool active, bool writeOut=true); 00209 00210 /* 00211 * RadioDecoder 00212 */ 00213 RadioDecoder_RegisterDataBuffer_t *getRadioDecoderRegisterDataBuffer(); 00214 00215 }; 00216 00217 00218 00219 #endif /* SUPPORTSYSTEM_H_ */
Generated on Thu Jul 28 2022 08:08:43 by
1.7.2