|
3 | 3 | #include <stdint.h> |
4 | 4 |
|
5 | 5 | #include "core/failloop.h" |
| 6 | +#include "core/profile.h" |
6 | 7 | #include "core/project.h" |
7 | 8 | #include "core/scheduler.h" |
8 | | -#include "rx/rx.h" |
9 | 9 | #include "io/gps.h" |
| 10 | +#include "rx/rx.h" |
10 | 11 | #include "util/vector.h" |
11 | 12 |
|
12 | 13 | // Throttle must drop below this value if arming feature is enabled for arming to take place. |
@@ -146,71 +147,75 @@ typedef struct { |
146 | 147 | vec3_t pid_d_term; |
147 | 148 | vec3_t pidoutput; // combinded output of the pid controller |
148 | 149 |
|
149 | | - vec4_t motor_mix; |
| 150 | + float mixer_source[OUTPUT_SOURCE_MAX]; |
| 151 | + float output[MOTOR_PIN_MAX]; |
| 152 | + uint8_t output_active[MOTOR_PIN_MAX]; |
150 | 153 |
|
151 | 154 | vec3_t angle_error; |
152 | 155 | vec3_t stick_vector; |
153 | 156 |
|
154 | 157 | uint32_t dshot_rpm[4]; |
155 | 158 | } control_state_t; |
156 | 159 |
|
157 | | -#define STATE_MEMBERS \ |
158 | | - MEMBER(failloop, uint8_t) \ |
159 | | - MEMBER(looptime, float) \ |
160 | | - MEMBER(looptime_us, float) \ |
161 | | - MEMBER(looptime_autodetect, float) \ |
162 | | - MEMBER(looptime_inverse, float) \ |
163 | | - MEMBER(loop_counter, uint32_t) \ |
164 | | - MEMBER(uptime, float) \ |
165 | | - MEMBER(armtime, float) \ |
166 | | - MEMBER(cpu_load, uint32_t) \ |
167 | | - MEMBER(failsafe_time_ms, uint32_t) \ |
168 | | - MEMBER(lipo_cell_count, uint8_t) \ |
169 | | - MEMBER(cpu_temp, float) \ |
170 | | - MEMBER(vbat, float) \ |
171 | | - MEMBER(vbat_filtered, float) \ |
172 | | - MEMBER(vbat_sag_filtered, float) \ |
173 | | - MEMBER(vbat_cell_avg, float) \ |
174 | | - MEMBER(vbat_compensated, float) \ |
175 | | - MEMBER(vbat_compensated_cell_avg, float) \ |
176 | | - MEMBER(ibat, float) \ |
177 | | - MEMBER(ibat_filtered, float) \ |
178 | | - MEMBER(ibat_sag_filtered, float) \ |
179 | | - MEMBER(ibat_drawn, float) \ |
180 | | - MEMBER(rx, vec4_t) \ |
181 | | - MEMBER(rx_filtered, vec4_t) \ |
182 | | - MEMBER(rx_override, vec4_t) \ |
183 | | - ARRAY_MEMBER(rx_channels, RX_CHANNEL_MAX, uint16_t) \ |
184 | | - MEMBER(stick_calibration_wizard, uint8_t) \ |
185 | | - MEMBER(rx_rssi, float) \ |
186 | | - MEMBER(rx_status, uint32_t) \ |
187 | | - MEMBER(throttle, float) \ |
188 | | - MEMBER(thrsum, float) \ |
189 | | - MEMBER(aux_active, uint32_t) \ |
190 | | - MEMBER(accel_raw, vec3_t) \ |
191 | | - MEMBER(accel, vec3_t) \ |
192 | | - MEMBER(gyro_temp, float) \ |
193 | | - MEMBER(gyro_raw, vec3_t) \ |
194 | | - MEMBER(gyro, vec3_t) \ |
195 | | - MEMBER(gyro_delta_angle, vec3_t) \ |
196 | | - MEMBER(GEstG, vec3_t) \ |
197 | | - MEMBER(attitude, vec3_t) \ |
198 | | - MEMBER(gps_lock, bool) \ |
199 | | - MEMBER(gps_sats, uint8_t) \ |
200 | | - MEMBER(gps_speed, float) \ |
201 | | - MEMBER(gps_heading, float) \ |
202 | | - MEMBER(gps_heading_accuracy, float) \ |
203 | | - MEMBER(gps_coord, gps_coord_t) \ |
204 | | - MEMBER(gps_altitude, float) \ |
205 | | - MEMBER(setpoint, vec3_t) \ |
206 | | - MEMBER(error, vec3_t) \ |
207 | | - MEMBER(pid_p_term, vec3_t) \ |
208 | | - MEMBER(pid_i_term, vec3_t) \ |
209 | | - MEMBER(pid_d_term, vec3_t) \ |
210 | | - MEMBER(pidoutput, vec3_t) \ |
211 | | - MEMBER(motor_mix, vec4_t) \ |
212 | | - MEMBER(angle_error, vec3_t) \ |
213 | | - MEMBER(stick_vector, vec3_t) \ |
| 160 | +#define STATE_MEMBERS \ |
| 161 | + MEMBER(failloop, uint8_t) \ |
| 162 | + MEMBER(looptime, float) \ |
| 163 | + MEMBER(looptime_us, float) \ |
| 164 | + MEMBER(looptime_autodetect, float) \ |
| 165 | + MEMBER(looptime_inverse, float) \ |
| 166 | + MEMBER(loop_counter, uint32_t) \ |
| 167 | + MEMBER(uptime, float) \ |
| 168 | + MEMBER(armtime, float) \ |
| 169 | + MEMBER(cpu_load, uint32_t) \ |
| 170 | + MEMBER(failsafe_time_ms, uint32_t) \ |
| 171 | + MEMBER(lipo_cell_count, uint8_t) \ |
| 172 | + MEMBER(cpu_temp, float) \ |
| 173 | + MEMBER(vbat, float) \ |
| 174 | + MEMBER(vbat_filtered, float) \ |
| 175 | + MEMBER(vbat_sag_filtered, float) \ |
| 176 | + MEMBER(vbat_cell_avg, float) \ |
| 177 | + MEMBER(vbat_compensated, float) \ |
| 178 | + MEMBER(vbat_compensated_cell_avg, float) \ |
| 179 | + MEMBER(ibat, float) \ |
| 180 | + MEMBER(ibat_filtered, float) \ |
| 181 | + MEMBER(ibat_sag_filtered, float) \ |
| 182 | + MEMBER(ibat_drawn, float) \ |
| 183 | + MEMBER(rx, vec4_t) \ |
| 184 | + MEMBER(rx_filtered, vec4_t) \ |
| 185 | + MEMBER(rx_override, vec4_t) \ |
| 186 | + ARRAY_MEMBER(rx_channels, RX_CHANNEL_MAX, uint16_t) \ |
| 187 | + MEMBER(stick_calibration_wizard, uint8_t) \ |
| 188 | + MEMBER(rx_rssi, float) \ |
| 189 | + MEMBER(rx_status, uint32_t) \ |
| 190 | + MEMBER(throttle, float) \ |
| 191 | + MEMBER(thrsum, float) \ |
| 192 | + MEMBER(aux_active, uint32_t) \ |
| 193 | + MEMBER(accel_raw, vec3_t) \ |
| 194 | + MEMBER(accel, vec3_t) \ |
| 195 | + MEMBER(gyro_temp, float) \ |
| 196 | + MEMBER(gyro_raw, vec3_t) \ |
| 197 | + MEMBER(gyro, vec3_t) \ |
| 198 | + MEMBER(gyro_delta_angle, vec3_t) \ |
| 199 | + MEMBER(GEstG, vec3_t) \ |
| 200 | + MEMBER(attitude, vec3_t) \ |
| 201 | + MEMBER(gps_lock, bool) \ |
| 202 | + MEMBER(gps_sats, uint8_t) \ |
| 203 | + MEMBER(gps_speed, float) \ |
| 204 | + MEMBER(gps_heading, float) \ |
| 205 | + MEMBER(gps_heading_accuracy, float) \ |
| 206 | + MEMBER(gps_coord, gps_coord_t) \ |
| 207 | + MEMBER(gps_altitude, float) \ |
| 208 | + MEMBER(setpoint, vec3_t) \ |
| 209 | + MEMBER(error, vec3_t) \ |
| 210 | + MEMBER(pid_p_term, vec3_t) \ |
| 211 | + MEMBER(pid_i_term, vec3_t) \ |
| 212 | + MEMBER(pid_d_term, vec3_t) \ |
| 213 | + MEMBER(pidoutput, vec3_t) \ |
| 214 | + ARRAY_MEMBER(mixer_source, OUTPUT_SOURCE_MAX, float) \ |
| 215 | + ARRAY_MEMBER(output, MOTOR_PIN_MAX, float) \ |
| 216 | + ARRAY_MEMBER(output_active, MOTOR_PIN_MAX, uint8_t) \ |
| 217 | + MEMBER(angle_error, vec3_t) \ |
| 218 | + MEMBER(stick_vector, vec3_t) \ |
214 | 219 | ARRAY_MEMBER(dshot_rpm, 4, uint32_t) |
215 | 220 |
|
216 | 221 | typedef struct { |
|
0 commit comments