bldc/confgenerator.c

873 lines
50 KiB
C
Raw Normal View History

// This file is autogenerated by VESC Tool
#include "buffer.h"
#include "conf_general.h"
#include "confgenerator.h"
int32_t confgenerator_serialize_mcconf(uint8_t *buffer, const mc_configuration *conf) {
int32_t ind = 0;
buffer_append_uint32(buffer, MCCONF_SIGNATURE, &ind);
buffer[ind++] = conf->pwm_mode;
buffer[ind++] = conf->comm_mode;
buffer[ind++] = conf->motor_type;
buffer[ind++] = conf->sensor_mode;
buffer_append_float32_auto(buffer, conf->l_current_max, &ind);
buffer_append_float32_auto(buffer, conf->l_current_min, &ind);
buffer_append_float32_auto(buffer, conf->l_in_current_max, &ind);
buffer_append_float32_auto(buffer, conf->l_in_current_min, &ind);
buffer_append_float32_auto(buffer, conf->l_abs_current_max, &ind);
buffer_append_float32_auto(buffer, conf->l_min_erpm, &ind);
buffer_append_float32_auto(buffer, conf->l_max_erpm, &ind);
buffer_append_float32_auto(buffer, conf->l_erpm_start, &ind);
buffer_append_float32_auto(buffer, conf->l_max_erpm_fbrake, &ind);
buffer_append_float32_auto(buffer, conf->l_max_erpm_fbrake_cc, &ind);
buffer_append_float32_auto(buffer, conf->l_min_vin, &ind);
buffer_append_float32_auto(buffer, conf->l_max_vin, &ind);
buffer_append_float32_auto(buffer, conf->l_battery_cut_start, &ind);
buffer_append_float32_auto(buffer, conf->l_battery_cut_end, &ind);
buffer[ind++] = conf->l_slow_abs_current;
buffer_append_float32_auto(buffer, conf->l_temp_fet_start, &ind);
buffer_append_float32_auto(buffer, conf->l_temp_fet_end, &ind);
buffer_append_float32_auto(buffer, conf->l_temp_motor_start, &ind);
buffer_append_float32_auto(buffer, conf->l_temp_motor_end, &ind);
buffer_append_float32_auto(buffer, conf->l_temp_accel_dec, &ind);
buffer_append_float32_auto(buffer, conf->l_min_duty, &ind);
buffer_append_float32_auto(buffer, conf->l_max_duty, &ind);
buffer_append_float32_auto(buffer, conf->l_watt_max, &ind);
buffer_append_float32_auto(buffer, conf->l_watt_min, &ind);
buffer_append_float32_auto(buffer, conf->l_current_max_scale, &ind);
buffer_append_float32_auto(buffer, conf->l_current_min_scale, &ind);
buffer_append_float32_auto(buffer, conf->l_duty_start, &ind);
buffer_append_float32_auto(buffer, conf->sl_min_erpm, &ind);
buffer_append_float32_auto(buffer, conf->sl_min_erpm_cycle_int_limit, &ind);
buffer_append_float32_auto(buffer, conf->sl_max_fullbreak_current_dir_change, &ind);
buffer_append_float32_auto(buffer, conf->sl_cycle_int_limit, &ind);
buffer_append_float32_auto(buffer, conf->sl_phase_advance_at_br, &ind);
buffer_append_float32_auto(buffer, conf->sl_cycle_int_rpm_br, &ind);
buffer_append_float32_auto(buffer, conf->sl_bemf_coupling_k, &ind);
buffer[ind++] = (uint8_t)conf->hall_table[0];
buffer[ind++] = (uint8_t)conf->hall_table[1];
buffer[ind++] = (uint8_t)conf->hall_table[2];
buffer[ind++] = (uint8_t)conf->hall_table[3];
buffer[ind++] = (uint8_t)conf->hall_table[4];
buffer[ind++] = (uint8_t)conf->hall_table[5];
buffer[ind++] = (uint8_t)conf->hall_table[6];
buffer[ind++] = (uint8_t)conf->hall_table[7];
buffer_append_float32_auto(buffer, conf->hall_sl_erpm, &ind);
buffer_append_float32_auto(buffer, conf->foc_current_kp, &ind);
buffer_append_float32_auto(buffer, conf->foc_current_ki, &ind);
buffer_append_float32_auto(buffer, conf->foc_f_sw, &ind);
buffer_append_float32_auto(buffer, conf->foc_dt_us, &ind);
buffer[ind++] = conf->foc_encoder_inverted;
buffer_append_float32_auto(buffer, conf->foc_encoder_offset, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_ratio, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_sin_gain, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_cos_gain, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_sin_offset, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_cos_offset, &ind);
buffer_append_float32_auto(buffer, conf->foc_encoder_sincos_filter_constant, &ind);
buffer[ind++] = conf->foc_sensor_mode;
buffer_append_float32_auto(buffer, conf->foc_pll_kp, &ind);
buffer_append_float32_auto(buffer, conf->foc_pll_ki, &ind);
buffer_append_float32_auto(buffer, conf->foc_motor_l, &ind);
buffer_append_float32_auto(buffer, conf->foc_motor_ld_lq_diff, &ind);
buffer_append_float32_auto(buffer, conf->foc_motor_r, &ind);
buffer_append_float32_auto(buffer, conf->foc_motor_flux_linkage, &ind);
buffer_append_float32_auto(buffer, conf->foc_observer_gain, &ind);
buffer_append_float32_auto(buffer, conf->foc_observer_gain_slow, &ind);
buffer_append_float32_auto(buffer, conf->foc_duty_dowmramp_kp, &ind);
buffer_append_float32_auto(buffer, conf->foc_duty_dowmramp_ki, &ind);
buffer_append_float32_auto(buffer, conf->foc_openloop_rpm, &ind);
buffer_append_float32_auto(buffer, conf->foc_sl_openloop_hyst, &ind);
buffer_append_float32_auto(buffer, conf->foc_sl_openloop_time, &ind);
buffer_append_float32_auto(buffer, conf->foc_sl_d_current_duty, &ind);
buffer_append_float32_auto(buffer, conf->foc_sl_d_current_factor, &ind);
buffer[ind++] = (uint8_t)conf->foc_hall_table[0];
buffer[ind++] = (uint8_t)conf->foc_hall_table[1];
buffer[ind++] = (uint8_t)conf->foc_hall_table[2];
buffer[ind++] = (uint8_t)conf->foc_hall_table[3];
buffer[ind++] = (uint8_t)conf->foc_hall_table[4];
buffer[ind++] = (uint8_t)conf->foc_hall_table[5];
buffer[ind++] = (uint8_t)conf->foc_hall_table[6];
buffer[ind++] = (uint8_t)conf->foc_hall_table[7];
buffer_append_float32_auto(buffer, conf->foc_sl_erpm, &ind);
buffer[ind++] = conf->foc_sample_v0_v7;
buffer[ind++] = conf->foc_sample_high_current;
buffer_append_float32_auto(buffer, conf->foc_sat_comp, &ind);
buffer[ind++] = conf->foc_temp_comp;
buffer_append_float32_auto(buffer, conf->foc_temp_comp_base_temp, &ind);
buffer_append_float32_auto(buffer, conf->foc_current_filter_const, &ind);
2020-01-12 12:25:21 -08:00
buffer[ind++] = conf->foc_cc_decoupling;
buffer[ind++] = conf->foc_observer_type;
2020-01-20 00:39:33 -08:00
buffer_append_float32_auto(buffer, conf->foc_hfi_voltage_start, &ind);
buffer_append_float32_auto(buffer, conf->foc_hfi_voltage_run, &ind);
buffer_append_float32_auto(buffer, conf->foc_hfi_voltage_max, &ind);
2020-01-20 00:39:33 -08:00
buffer_append_float32_auto(buffer, conf->foc_sl_erpm_hfi, &ind);
buffer_append_uint16(buffer, conf->foc_hfi_start_samples, &ind);
buffer_append_float32_auto(buffer, conf->foc_hfi_obs_ovr_sec, &ind);
buffer[ind++] = conf->foc_hfi_samples;
buffer_append_int16(buffer, conf->gpd_buffer_notify_left, &ind);
buffer_append_int16(buffer, conf->gpd_buffer_interpol, &ind);
buffer_append_float32_auto(buffer, conf->gpd_current_filter_const, &ind);
buffer_append_float32_auto(buffer, conf->gpd_current_kp, &ind);
buffer_append_float32_auto(buffer, conf->gpd_current_ki, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_kp, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_ki, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_kd, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_kd_filter, &ind);
buffer_append_float32_auto(buffer, conf->s_pid_min_erpm, &ind);
buffer[ind++] = conf->s_pid_allow_braking;
2020-05-12 06:53:32 -07:00
buffer_append_float32_auto(buffer, conf->s_pid_ramp_erpms_s, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_kp, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_ki, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_kd, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_kd_filter, &ind);
buffer_append_float32_auto(buffer, conf->p_pid_ang_div, &ind);
buffer_append_float32_auto(buffer, conf->cc_startup_boost_duty, &ind);
buffer_append_float32_auto(buffer, conf->cc_min_current, &ind);
buffer_append_float32_auto(buffer, conf->cc_gain, &ind);
buffer_append_float32_auto(buffer, conf->cc_ramp_step_max, &ind);
buffer_append_int32(buffer, conf->m_fault_stop_time_ms, &ind);
buffer_append_float32_auto(buffer, conf->m_duty_ramp_step, &ind);
buffer_append_float32_auto(buffer, conf->m_current_backoff_gain, &ind);
buffer_append_uint32(buffer, conf->m_encoder_counts, &ind);
buffer[ind++] = conf->m_sensor_port_mode;
buffer[ind++] = conf->m_invert_direction;
buffer[ind++] = conf->m_drv8301_oc_mode;
buffer[ind++] = (uint8_t)conf->m_drv8301_oc_adj;
buffer_append_float32_auto(buffer, conf->m_bldc_f_sw_min, &ind);
buffer_append_float32_auto(buffer, conf->m_bldc_f_sw_max, &ind);
buffer_append_float32_auto(buffer, conf->m_dc_f_sw, &ind);
buffer_append_float32_auto(buffer, conf->m_ntc_motor_beta, &ind);
buffer[ind++] = conf->m_out_aux_mode;
buffer[ind++] = conf->m_motor_temp_sens_type;
buffer_append_float32_auto(buffer, conf->m_ptc_motor_coeff, &ind);
buffer[ind++] = (uint8_t)conf->si_motor_poles;
buffer_append_float32_auto(buffer, conf->si_gear_ratio, &ind);
buffer_append_float32_auto(buffer, conf->si_wheel_diameter, &ind);
buffer[ind++] = conf->si_battery_type;
buffer[ind++] = (uint8_t)conf->si_battery_cells;
buffer_append_float32_auto(buffer, conf->si_battery_ah, &ind);
return ind;
}
int32_t confgenerator_serialize_appconf(uint8_t *buffer, const app_configuration *conf) {
int32_t ind = 0;
buffer_append_uint32(buffer, APPCONF_SIGNATURE, &ind);
2019-09-10 01:38:03 -07:00
buffer[ind++] = (uint8_t)conf->controller_id;
buffer_append_uint32(buffer, conf->timeout_msec, &ind);
buffer_append_float32_auto(buffer, conf->timeout_brake_current, &ind);
buffer[ind++] = conf->send_can_status;
buffer_append_uint16(buffer, conf->send_can_status_rate_hz, &ind);
buffer[ind++] = conf->can_baud_rate;
buffer[ind++] = conf->pairing_done;
buffer[ind++] = conf->permanent_uart_enabled;
buffer[ind++] = conf->shutdown_mode;
buffer[ind++] = conf->can_mode;
2019-09-10 01:38:03 -07:00
buffer[ind++] = (uint8_t)conf->uavcan_esc_index;
buffer[ind++] = conf->app_to_use;
buffer[ind++] = conf->app_ppm_conf.ctrl_type;
buffer_append_float32_auto(buffer, conf->app_ppm_conf.pid_max_erpm, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.hyst, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.pulse_start, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.pulse_end, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.pulse_center, &ind);
buffer[ind++] = conf->app_ppm_conf.median_filter;
buffer[ind++] = conf->app_ppm_conf.safe_start;
buffer_append_float32_auto(buffer, conf->app_ppm_conf.throttle_exp, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.throttle_exp_brake, &ind);
buffer[ind++] = conf->app_ppm_conf.throttle_exp_mode;
buffer_append_float32_auto(buffer, conf->app_ppm_conf.ramp_time_pos, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.ramp_time_neg, &ind);
buffer[ind++] = conf->app_ppm_conf.multi_esc;
buffer[ind++] = conf->app_ppm_conf.tc;
buffer_append_float32_auto(buffer, conf->app_ppm_conf.tc_max_diff, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.max_erpm_for_dir, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_max_duty, &ind);
buffer_append_float32_auto(buffer, conf->app_ppm_conf.smart_rev_ramp_time, &ind);
2019-09-10 01:38:03 -07:00
buffer[ind++] = conf->app_adc_conf.ctrl_type;
buffer_append_float32_auto(buffer, conf->app_adc_conf.hyst, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.voltage_start, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.voltage_end, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.voltage_center, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.voltage2_start, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.voltage2_end, &ind);
buffer[ind++] = conf->app_adc_conf.use_filter;
buffer[ind++] = conf->app_adc_conf.safe_start;
buffer[ind++] = conf->app_adc_conf.cc_button_inverted;
buffer[ind++] = conf->app_adc_conf.rev_button_inverted;
buffer[ind++] = conf->app_adc_conf.voltage_inverted;
buffer[ind++] = conf->app_adc_conf.voltage2_inverted;
buffer_append_float32_auto(buffer, conf->app_adc_conf.throttle_exp, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.throttle_exp_brake, &ind);
buffer[ind++] = conf->app_adc_conf.throttle_exp_mode;
buffer_append_float32_auto(buffer, conf->app_adc_conf.ramp_time_pos, &ind);
buffer_append_float32_auto(buffer, conf->app_adc_conf.ramp_time_neg, &ind);
buffer[ind++] = conf->app_adc_conf.multi_esc;
buffer[ind++] = conf->app_adc_conf.tc;
buffer_append_float32_auto(buffer, conf->app_adc_conf.tc_max_diff, &ind);
buffer_append_uint16(buffer, conf->app_adc_conf.update_rate_hz, &ind);
buffer_append_uint32(buffer, conf->app_uart_baudrate, &ind);
buffer[ind++] = conf->app_chuk_conf.ctrl_type;
buffer_append_float32_auto(buffer, conf->app_chuk_conf.hyst, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.ramp_time_pos, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.ramp_time_neg, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.stick_erpm_per_s_in_cc, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.throttle_exp, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.throttle_exp_brake, &ind);
buffer[ind++] = conf->app_chuk_conf.throttle_exp_mode;
buffer[ind++] = conf->app_chuk_conf.multi_esc;
buffer[ind++] = conf->app_chuk_conf.tc;
buffer_append_float32_auto(buffer, conf->app_chuk_conf.tc_max_diff, &ind);
buffer[ind++] = conf->app_chuk_conf.use_smart_rev;
buffer_append_float32_auto(buffer, conf->app_chuk_conf.smart_rev_max_duty, &ind);
buffer_append_float32_auto(buffer, conf->app_chuk_conf.smart_rev_ramp_time, &ind);
buffer[ind++] = conf->app_nrf_conf.speed;
buffer[ind++] = conf->app_nrf_conf.power;
buffer[ind++] = conf->app_nrf_conf.crc_type;
buffer[ind++] = conf->app_nrf_conf.retry_delay;
buffer[ind++] = (uint8_t)conf->app_nrf_conf.retries;
buffer[ind++] = (uint8_t)conf->app_nrf_conf.channel;
buffer[ind++] = (uint8_t)conf->app_nrf_conf.address[0];
buffer[ind++] = (uint8_t)conf->app_nrf_conf.address[1];
buffer[ind++] = (uint8_t)conf->app_nrf_conf.address[2];
buffer[ind++] = conf->app_nrf_conf.send_crc_ack;
buffer_append_float32_auto(buffer, conf->app_balance_conf.kp, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.ki, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.kd, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.hertz, &ind);
2019-09-21 01:07:31 -07:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.pitch_fault, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.roll_fault, &ind);
2020-02-23 13:34:51 -08:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.adc1, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.adc2, &ind);
2019-09-10 01:38:03 -07:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.overspeed_duty, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_duty, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_angle, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_speed, &ind);
2019-09-12 00:07:26 -07:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_high_voltage, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_low_voltage, &ind);
2019-09-21 01:07:31 -07:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.startup_pitch_tolerance, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.startup_roll_tolerance, &ind);
2019-09-10 01:38:03 -07:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.startup_speed, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.deadzone, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.current_boost, &ind);
buffer[ind++] = conf->app_balance_conf.multi_esc;
buffer_append_float32_auto(buffer, conf->app_balance_conf.yaw_kp, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.yaw_ki, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.yaw_kd, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.roll_steer_kp, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.brake_current, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.overspeed_delay, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.fault_delay, &ind);
2020-02-23 10:23:19 -08:00
buffer_append_float32_auto(buffer, conf->app_balance_conf.tiltback_constant, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.roll_steer_erpm_kp, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.yaw_current_clamp, &ind);
buffer_append_uint16(buffer, conf->app_balance_conf.adc_half_fault_erpm, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.setpoint_pitch_filter, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.setpoint_target_filter, &ind);
buffer_append_float32_auto(buffer, conf->app_balance_conf.setpoint_clamp, &ind);
2019-09-10 01:38:03 -07:00
buffer[ind++] = conf->imu_conf.type;
buffer[ind++] = conf->imu_conf.mode;
buffer_append_uint16(buffer, conf->imu_conf.sample_rate_hz, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.accel_confidence_decay, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.mahony_kp, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.mahony_ki, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.madgwick_beta, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.rot_roll, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.rot_pitch, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.rot_yaw, &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.accel_offsets[0], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.accel_offsets[1], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.accel_offsets[2], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offsets[0], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offsets[1], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offsets[2], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offset_comp_fact[0], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offset_comp_fact[1], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offset_comp_fact[2], &ind);
buffer_append_float32_auto(buffer, conf->imu_conf.gyro_offset_comp_clamp, &ind);
return ind;
}
bool confgenerator_deserialize_mcconf(const uint8_t *buffer, mc_configuration *conf) {
int32_t ind = 0;
uint32_t signature = buffer_get_uint32(buffer, &ind);
if (signature != MCCONF_SIGNATURE) {
return false;
}
conf->pwm_mode = buffer[ind++];
conf->comm_mode = buffer[ind++];
conf->motor_type = buffer[ind++];
conf->sensor_mode = buffer[ind++];
conf->l_current_max = buffer_get_float32_auto(buffer, &ind);
conf->l_current_min = buffer_get_float32_auto(buffer, &ind);
conf->l_in_current_max = buffer_get_float32_auto(buffer, &ind);
conf->l_in_current_min = buffer_get_float32_auto(buffer, &ind);
conf->l_abs_current_max = buffer_get_float32_auto(buffer, &ind);
conf->l_min_erpm = buffer_get_float32_auto(buffer, &ind);
conf->l_max_erpm = buffer_get_float32_auto(buffer, &ind);
conf->l_erpm_start = buffer_get_float32_auto(buffer, &ind);
conf->l_max_erpm_fbrake = buffer_get_float32_auto(buffer, &ind);
conf->l_max_erpm_fbrake_cc = buffer_get_float32_auto(buffer, &ind);
conf->l_min_vin = buffer_get_float32_auto(buffer, &ind);
conf->l_max_vin = buffer_get_float32_auto(buffer, &ind);
conf->l_battery_cut_start = buffer_get_float32_auto(buffer, &ind);
conf->l_battery_cut_end = buffer_get_float32_auto(buffer, &ind);
conf->l_slow_abs_current = buffer[ind++];
conf->l_temp_fet_start = buffer_get_float32_auto(buffer, &ind);
conf->l_temp_fet_end = buffer_get_float32_auto(buffer, &ind);
conf->l_temp_motor_start = buffer_get_float32_auto(buffer, &ind);
conf->l_temp_motor_end = buffer_get_float32_auto(buffer, &ind);
conf->l_temp_accel_dec = buffer_get_float32_auto(buffer, &ind);
conf->l_min_duty = buffer_get_float32_auto(buffer, &ind);
conf->l_max_duty = buffer_get_float32_auto(buffer, &ind);
conf->l_watt_max = buffer_get_float32_auto(buffer, &ind);
conf->l_watt_min = buffer_get_float32_auto(buffer, &ind);
conf->l_current_max_scale = buffer_get_float32_auto(buffer, &ind);
conf->l_current_min_scale = buffer_get_float32_auto(buffer, &ind);
conf->l_duty_start = buffer_get_float32_auto(buffer, &ind);
conf->sl_min_erpm = buffer_get_float32_auto(buffer, &ind);
conf->sl_min_erpm_cycle_int_limit = buffer_get_float32_auto(buffer, &ind);
conf->sl_max_fullbreak_current_dir_change = buffer_get_float32_auto(buffer, &ind);
conf->sl_cycle_int_limit = buffer_get_float32_auto(buffer, &ind);
conf->sl_phase_advance_at_br = buffer_get_float32_auto(buffer, &ind);
conf->sl_cycle_int_rpm_br = buffer_get_float32_auto(buffer, &ind);
conf->sl_bemf_coupling_k = buffer_get_float32_auto(buffer, &ind);
conf->hall_table[0] = (int8_t)buffer[ind++];
conf->hall_table[1] = (int8_t)buffer[ind++];
conf->hall_table[2] = (int8_t)buffer[ind++];
conf->hall_table[3] = (int8_t)buffer[ind++];
conf->hall_table[4] = (int8_t)buffer[ind++];
conf->hall_table[5] = (int8_t)buffer[ind++];
conf->hall_table[6] = (int8_t)buffer[ind++];
conf->hall_table[7] = (int8_t)buffer[ind++];
conf->hall_sl_erpm = buffer_get_float32_auto(buffer, &ind);
conf->foc_current_kp = buffer_get_float32_auto(buffer, &ind);
conf->foc_current_ki = buffer_get_float32_auto(buffer, &ind);
conf->foc_f_sw = buffer_get_float32_auto(buffer, &ind);
conf->foc_dt_us = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_inverted = buffer[ind++];
conf->foc_encoder_offset = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_ratio = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_sin_gain = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_cos_gain = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_sin_offset = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_cos_offset = buffer_get_float32_auto(buffer, &ind);
conf->foc_encoder_sincos_filter_constant = buffer_get_float32_auto(buffer, &ind);
conf->foc_sensor_mode = buffer[ind++];
conf->foc_pll_kp = buffer_get_float32_auto(buffer, &ind);
conf->foc_pll_ki = buffer_get_float32_auto(buffer, &ind);
conf->foc_motor_l = buffer_get_float32_auto(buffer, &ind);
conf->foc_motor_ld_lq_diff = buffer_get_float32_auto(buffer, &ind);
conf->foc_motor_r = buffer_get_float32_auto(buffer, &ind);
conf->foc_motor_flux_linkage = buffer_get_float32_auto(buffer, &ind);
conf->foc_observer_gain = buffer_get_float32_auto(buffer, &ind);
conf->foc_observer_gain_slow = buffer_get_float32_auto(buffer, &ind);
conf->foc_duty_dowmramp_kp = buffer_get_float32_auto(buffer, &ind);
conf->foc_duty_dowmramp_ki = buffer_get_float32_auto(buffer, &ind);
conf->foc_openloop_rpm = buffer_get_float32_auto(buffer, &ind);
conf->foc_sl_openloop_hyst = buffer_get_float32_auto(buffer, &ind);
conf->foc_sl_openloop_time = buffer_get_float32_auto(buffer, &ind);
conf->foc_sl_d_current_duty = buffer_get_float32_auto(buffer, &ind);
conf->foc_sl_d_current_factor = buffer_get_float32_auto(buffer, &ind);
conf->foc_hall_table[0] = buffer[ind++];
conf->foc_hall_table[1] = buffer[ind++];
conf->foc_hall_table[2] = buffer[ind++];
conf->foc_hall_table[3] = buffer[ind++];
conf->foc_hall_table[4] = buffer[ind++];
conf->foc_hall_table[5] = buffer[ind++];
conf->foc_hall_table[6] = buffer[ind++];
conf->foc_hall_table[7] = buffer[ind++];
conf->foc_sl_erpm = buffer_get_float32_auto(buffer, &ind);
conf->foc_sample_v0_v7 = buffer[ind++];
conf->foc_sample_high_current = buffer[ind++];
conf->foc_sat_comp = buffer_get_float32_auto(buffer, &ind);
conf->foc_temp_comp = buffer[ind++];
conf->foc_temp_comp_base_temp = buffer_get_float32_auto(buffer, &ind);
conf->foc_current_filter_const = buffer_get_float32_auto(buffer, &ind);
2020-01-12 12:25:21 -08:00
conf->foc_cc_decoupling = buffer[ind++];
conf->foc_observer_type = buffer[ind++];
2020-01-20 00:39:33 -08:00
conf->foc_hfi_voltage_start = buffer_get_float32_auto(buffer, &ind);
conf->foc_hfi_voltage_run = buffer_get_float32_auto(buffer, &ind);
conf->foc_hfi_voltage_max = buffer_get_float32_auto(buffer, &ind);
2020-01-20 00:39:33 -08:00
conf->foc_sl_erpm_hfi = buffer_get_float32_auto(buffer, &ind);
conf->foc_hfi_start_samples = buffer_get_uint16(buffer, &ind);
conf->foc_hfi_obs_ovr_sec = buffer_get_float32_auto(buffer, &ind);
conf->foc_hfi_samples = buffer[ind++];
conf->gpd_buffer_notify_left = buffer_get_int16(buffer, &ind);
conf->gpd_buffer_interpol = buffer_get_int16(buffer, &ind);
conf->gpd_current_filter_const = buffer_get_float32_auto(buffer, &ind);
conf->gpd_current_kp = buffer_get_float32_auto(buffer, &ind);
conf->gpd_current_ki = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_kp = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_ki = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_kd = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_kd_filter = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_min_erpm = buffer_get_float32_auto(buffer, &ind);
conf->s_pid_allow_braking = buffer[ind++];
2020-05-12 06:53:32 -07:00
conf->s_pid_ramp_erpms_s = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_kp = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_ki = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_kd = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_kd_filter = buffer_get_float32_auto(buffer, &ind);
conf->p_pid_ang_div = buffer_get_float32_auto(buffer, &ind);
conf->cc_startup_boost_duty = buffer_get_float32_auto(buffer, &ind);
conf->cc_min_current = buffer_get_float32_auto(buffer, &ind);
conf->cc_gain = buffer_get_float32_auto(buffer, &ind);
conf->cc_ramp_step_max = buffer_get_float32_auto(buffer, &ind);
conf->m_fault_stop_time_ms = buffer_get_int32(buffer, &ind);
conf->m_duty_ramp_step = buffer_get_float32_auto(buffer, &ind);
conf->m_current_backoff_gain = buffer_get_float32_auto(buffer, &ind);
conf->m_encoder_counts = buffer_get_uint32(buffer, &ind);
conf->m_sensor_port_mode = buffer[ind++];
conf->m_invert_direction = buffer[ind++];
conf->m_drv8301_oc_mode = buffer[ind++];
conf->m_drv8301_oc_adj = buffer[ind++];
conf->m_bldc_f_sw_min = buffer_get_float32_auto(buffer, &ind);
conf->m_bldc_f_sw_max = buffer_get_float32_auto(buffer, &ind);
conf->m_dc_f_sw = buffer_get_float32_auto(buffer, &ind);
conf->m_ntc_motor_beta = buffer_get_float32_auto(buffer, &ind);
conf->m_out_aux_mode = buffer[ind++];
conf->m_motor_temp_sens_type = buffer[ind++];
conf->m_ptc_motor_coeff = buffer_get_float32_auto(buffer, &ind);
conf->si_motor_poles = buffer[ind++];
conf->si_gear_ratio = buffer_get_float32_auto(buffer, &ind);
conf->si_wheel_diameter = buffer_get_float32_auto(buffer, &ind);
conf->si_battery_type = buffer[ind++];
conf->si_battery_cells = buffer[ind++];
conf->si_battery_ah = buffer_get_float32_auto(buffer, &ind);
return true;
}
bool confgenerator_deserialize_appconf(const uint8_t *buffer, app_configuration *conf) {
int32_t ind = 0;
uint32_t signature = buffer_get_uint32(buffer, &ind);
if (signature != APPCONF_SIGNATURE) {
return false;
}
2019-09-10 01:38:03 -07:00
conf->controller_id = buffer[ind++];
conf->timeout_msec = buffer_get_uint32(buffer, &ind);
conf->timeout_brake_current = buffer_get_float32_auto(buffer, &ind);
conf->send_can_status = buffer[ind++];
conf->send_can_status_rate_hz = buffer_get_uint16(buffer, &ind);
conf->can_baud_rate = buffer[ind++];
conf->pairing_done = buffer[ind++];
conf->permanent_uart_enabled = buffer[ind++];
conf->shutdown_mode = buffer[ind++];
conf->can_mode = buffer[ind++];
2019-09-10 01:38:03 -07:00
conf->uavcan_esc_index = buffer[ind++];
conf->app_to_use = buffer[ind++];
conf->app_ppm_conf.ctrl_type = buffer[ind++];
conf->app_ppm_conf.pid_max_erpm = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.hyst = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.pulse_start = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.pulse_end = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.pulse_center = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.median_filter = buffer[ind++];
conf->app_ppm_conf.safe_start = buffer[ind++];
conf->app_ppm_conf.throttle_exp = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.throttle_exp_brake = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.throttle_exp_mode = buffer[ind++];
conf->app_ppm_conf.ramp_time_pos = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.ramp_time_neg = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.multi_esc = buffer[ind++];
conf->app_ppm_conf.tc = buffer[ind++];
conf->app_ppm_conf.tc_max_diff = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.max_erpm_for_dir = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.smart_rev_max_duty = buffer_get_float32_auto(buffer, &ind);
conf->app_ppm_conf.smart_rev_ramp_time = buffer_get_float32_auto(buffer, &ind);
2019-09-10 01:38:03 -07:00
conf->app_adc_conf.ctrl_type = buffer[ind++];
conf->app_adc_conf.hyst = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.voltage_start = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.voltage_end = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.voltage_center = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.voltage2_start = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.voltage2_end = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.use_filter = buffer[ind++];
conf->app_adc_conf.safe_start = buffer[ind++];
conf->app_adc_conf.cc_button_inverted = buffer[ind++];
conf->app_adc_conf.rev_button_inverted = buffer[ind++];
conf->app_adc_conf.voltage_inverted = buffer[ind++];
conf->app_adc_conf.voltage2_inverted = buffer[ind++];
conf->app_adc_conf.throttle_exp = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.throttle_exp_brake = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.throttle_exp_mode = buffer[ind++];
conf->app_adc_conf.ramp_time_pos = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.ramp_time_neg = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.multi_esc = buffer[ind++];
conf->app_adc_conf.tc = buffer[ind++];
conf->app_adc_conf.tc_max_diff = buffer_get_float32_auto(buffer, &ind);
conf->app_adc_conf.update_rate_hz = buffer_get_uint16(buffer, &ind);
conf->app_uart_baudrate = buffer_get_uint32(buffer, &ind);
conf->app_chuk_conf.ctrl_type = buffer[ind++];
conf->app_chuk_conf.hyst = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.ramp_time_pos = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.ramp_time_neg = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.stick_erpm_per_s_in_cc = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.throttle_exp = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.throttle_exp_brake = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.throttle_exp_mode = buffer[ind++];
conf->app_chuk_conf.multi_esc = buffer[ind++];
conf->app_chuk_conf.tc = buffer[ind++];
conf->app_chuk_conf.tc_max_diff = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.use_smart_rev = buffer[ind++];
conf->app_chuk_conf.smart_rev_max_duty = buffer_get_float32_auto(buffer, &ind);
conf->app_chuk_conf.smart_rev_ramp_time = buffer_get_float32_auto(buffer, &ind);
conf->app_nrf_conf.speed = buffer[ind++];
conf->app_nrf_conf.power = buffer[ind++];
conf->app_nrf_conf.crc_type = buffer[ind++];
conf->app_nrf_conf.retry_delay = buffer[ind++];
conf->app_nrf_conf.retries = (int8_t)buffer[ind++];
conf->app_nrf_conf.channel = (int8_t)buffer[ind++];
conf->app_nrf_conf.address[0] = buffer[ind++];
conf->app_nrf_conf.address[1] = buffer[ind++];
conf->app_nrf_conf.address[2] = buffer[ind++];
conf->app_nrf_conf.send_crc_ack = buffer[ind++];
conf->app_balance_conf.kp = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.ki = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.kd = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.hertz = buffer_get_uint16(buffer, &ind);
2019-09-21 01:07:31 -07:00
conf->app_balance_conf.pitch_fault = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.roll_fault = buffer_get_float32_auto(buffer, &ind);
2020-02-23 13:34:51 -08:00
conf->app_balance_conf.adc1 = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.adc2 = buffer_get_float32_auto(buffer, &ind);
2019-09-10 01:38:03 -07:00
conf->app_balance_conf.overspeed_duty = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.tiltback_duty = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.tiltback_angle = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.tiltback_speed = buffer_get_float32_auto(buffer, &ind);
2019-09-12 00:07:26 -07:00
conf->app_balance_conf.tiltback_high_voltage = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.tiltback_low_voltage = buffer_get_float32_auto(buffer, &ind);
2019-09-21 01:07:31 -07:00
conf->app_balance_conf.startup_pitch_tolerance = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.startup_roll_tolerance = buffer_get_float32_auto(buffer, &ind);
2019-09-10 01:38:03 -07:00
conf->app_balance_conf.startup_speed = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.deadzone = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.current_boost = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.multi_esc = buffer[ind++];
conf->app_balance_conf.yaw_kp = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.yaw_ki = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.yaw_kd = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.roll_steer_kp = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.brake_current = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.overspeed_delay = buffer_get_uint16(buffer, &ind);
conf->app_balance_conf.fault_delay = buffer_get_uint16(buffer, &ind);
2020-02-23 10:23:19 -08:00
conf->app_balance_conf.tiltback_constant = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.roll_steer_erpm_kp = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.yaw_current_clamp = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.adc_half_fault_erpm = buffer_get_uint16(buffer, &ind);
conf->app_balance_conf.setpoint_pitch_filter = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.setpoint_target_filter = buffer_get_float32_auto(buffer, &ind);
conf->app_balance_conf.setpoint_clamp = buffer_get_float32_auto(buffer, &ind);
2019-09-10 01:38:03 -07:00
conf->imu_conf.type = buffer[ind++];
conf->imu_conf.mode = buffer[ind++];
conf->imu_conf.sample_rate_hz = buffer_get_uint16(buffer, &ind);
conf->imu_conf.accel_confidence_decay = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.mahony_kp = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.mahony_ki = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.madgwick_beta = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.rot_roll = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.rot_pitch = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.rot_yaw = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.accel_offsets[0] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.accel_offsets[1] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.accel_offsets[2] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offsets[0] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offsets[1] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offsets[2] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offset_comp_fact[0] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offset_comp_fact[1] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offset_comp_fact[2] = buffer_get_float32_auto(buffer, &ind);
conf->imu_conf.gyro_offset_comp_clamp = buffer_get_float32_auto(buffer, &ind);
return true;
}
void confgenerator_set_defaults_mcconf(mc_configuration *conf) {
conf->pwm_mode = MCCONF_PWM_MODE;
conf->comm_mode = MCCONF_COMM_MODE;
conf->motor_type = MCCONF_DEFAULT_MOTOR_TYPE;
conf->sensor_mode = MCCONF_SENSOR_MODE;
conf->l_current_max = MCCONF_L_CURRENT_MAX;
conf->l_current_min = MCCONF_L_CURRENT_MIN;
conf->l_in_current_max = MCCONF_L_IN_CURRENT_MAX;
conf->l_in_current_min = MCCONF_L_IN_CURRENT_MIN;
conf->l_abs_current_max = MCCONF_L_MAX_ABS_CURRENT;
conf->l_min_erpm = MCCONF_L_RPM_MIN;
conf->l_max_erpm = MCCONF_L_RPM_MAX;
conf->l_erpm_start = MCCONF_L_RPM_START;
conf->l_max_erpm_fbrake = MCCONF_L_CURR_MAX_RPM_FBRAKE;
conf->l_max_erpm_fbrake_cc = MCCONF_L_CURR_MAX_RPM_FBRAKE_CC;
conf->l_min_vin = MCCONF_L_MIN_VOLTAGE;
conf->l_max_vin = MCCONF_L_MAX_VOLTAGE;
conf->l_battery_cut_start = MCCONF_L_BATTERY_CUT_START;
conf->l_battery_cut_end = MCCONF_L_BATTERY_CUT_END;
conf->l_slow_abs_current = MCCONF_L_SLOW_ABS_OVERCURRENT;
conf->l_temp_fet_start = MCCONF_L_LIM_TEMP_FET_START;
conf->l_temp_fet_end = MCCONF_L_LIM_TEMP_FET_END;
conf->l_temp_motor_start = MCCONF_L_LIM_TEMP_MOTOR_START;
conf->l_temp_motor_end = MCCONF_L_LIM_TEMP_MOTOR_END;
conf->l_temp_accel_dec = MCCONF_L_LIM_TEMP_ACCEL_DEC;
conf->l_min_duty = MCCONF_L_MIN_DUTY;
conf->l_max_duty = MCCONF_L_MAX_DUTY;
conf->l_watt_max = MCCONF_L_WATT_MAX;
conf->l_watt_min = MCCONF_L_WATT_MIN;
conf->l_current_max_scale = MCCONF_L_CURRENT_MAX_SCALE;
conf->l_current_min_scale = MCCONF_L_CURRENT_MIN_SCALE;
conf->l_duty_start = MCCONF_L_DUTY_START;
conf->sl_min_erpm = MCCONF_SL_MIN_RPM;
conf->sl_min_erpm_cycle_int_limit = MCCONF_SL_MIN_ERPM_CYCLE_INT_LIMIT;
conf->sl_max_fullbreak_current_dir_change = MCCONF_SL_MAX_FB_CURR_DIR_CHANGE;
conf->sl_cycle_int_limit = MCCONF_SL_CYCLE_INT_LIMIT;
conf->sl_phase_advance_at_br = MCCONF_SL_PHASE_ADVANCE_AT_BR;
conf->sl_cycle_int_rpm_br = MCCONF_SL_CYCLE_INT_BR;
conf->sl_bemf_coupling_k = MCCONF_SL_BEMF_COUPLING_K;
conf->hall_table[0] = MCCONF_HALL_TAB_0;
conf->hall_table[1] = MCCONF_HALL_TAB_1;
conf->hall_table[2] = MCCONF_HALL_TAB_2;
conf->hall_table[3] = MCCONF_HALL_TAB_3;
conf->hall_table[4] = MCCONF_HALL_TAB_4;
conf->hall_table[5] = MCCONF_HALL_TAB_5;
conf->hall_table[6] = MCCONF_HALL_TAB_6;
conf->hall_table[7] = MCCONF_HALL_TAB_7;
conf->hall_sl_erpm = MCCONF_HALL_ERPM;
conf->foc_current_kp = MCCONF_FOC_CURRENT_KP;
conf->foc_current_ki = MCCONF_FOC_CURRENT_KI;
conf->foc_f_sw = MCCONF_FOC_F_SW;
conf->foc_dt_us = MCCONF_FOC_DT_US;
conf->foc_encoder_inverted = MCCONF_FOC_ENCODER_INVERTED;
conf->foc_encoder_offset = MCCONF_FOC_ENCODER_OFFSET;
conf->foc_encoder_ratio = MCCONF_FOC_ENCODER_RATIO;
conf->foc_encoder_sin_gain = MCCONF_FOC_ENCODER_SIN_GAIN;
conf->foc_encoder_cos_gain = MCCONF_FOC_ENCODER_COS_GAIN;
conf->foc_encoder_sin_offset = MCCONF_FOC_ENCODER_SIN_OFFSET;
conf->foc_encoder_cos_offset = MCCONF_FOC_ENCODER_COS_OFFSET;
conf->foc_encoder_sincos_filter_constant = MCCONF_FOC_ENCODER_SINCOS_FILTER;
conf->foc_sensor_mode = MCCONF_FOC_SENSOR_MODE;
conf->foc_pll_kp = MCCONF_FOC_PLL_KP;
conf->foc_pll_ki = MCCONF_FOC_PLL_KI;
conf->foc_motor_l = MCCONF_FOC_MOTOR_L;
conf->foc_motor_ld_lq_diff = MCCONF_FOC_MOTOR_LD_LQ_DIFF;
conf->foc_motor_r = MCCONF_FOC_MOTOR_R;
conf->foc_motor_flux_linkage = MCCONF_FOC_MOTOR_FLUX_LINKAGE;
conf->foc_observer_gain = MCCONF_FOC_OBSERVER_GAIN;
conf->foc_observer_gain_slow = MCCONF_FOC_OBSERVER_GAIN_SLOW;
conf->foc_duty_dowmramp_kp = MCCONF_FOC_DUTY_DOWNRAMP_KP;
conf->foc_duty_dowmramp_ki = MCCONF_FOC_DUTY_DOWNRAMP_KI;
conf->foc_openloop_rpm = MCCONF_FOC_OPENLOOP_RPM;
conf->foc_sl_openloop_hyst = MCCONF_FOC_SL_OPENLOOP_HYST;
conf->foc_sl_openloop_time = MCCONF_FOC_SL_OPENLOOP_TIME;
conf->foc_sl_d_current_duty = MCCONF_FOC_SL_D_CURRENT_DUTY;
conf->foc_sl_d_current_factor = MCCONF_FOC_SL_D_CURRENT_FACTOR;
conf->foc_hall_table[0] = MCCONF_FOC_HALL_TAB_0;
conf->foc_hall_table[1] = MCCONF_FOC_HALL_TAB_1;
conf->foc_hall_table[2] = MCCONF_FOC_HALL_TAB_2;
conf->foc_hall_table[3] = MCCONF_FOC_HALL_TAB_3;
conf->foc_hall_table[4] = MCCONF_FOC_HALL_TAB_4;
conf->foc_hall_table[5] = MCCONF_FOC_HALL_TAB_5;
conf->foc_hall_table[6] = MCCONF_FOC_HALL_TAB_6;
conf->foc_hall_table[7] = MCCONF_FOC_HALL_TAB_7;
conf->foc_sl_erpm = MCCONF_FOC_SL_ERPM;
conf->foc_sample_v0_v7 = MCCONF_FOC_SAMPLE_V0_V7;
conf->foc_sample_high_current = MCCONF_FOC_SAMPLE_HIGH_CURRENT;
conf->foc_sat_comp = MCCONF_FOC_SAT_COMP;
conf->foc_temp_comp = MCCONF_FOC_TEMP_COMP;
conf->foc_temp_comp_base_temp = MCCONF_FOC_TEMP_COMP_BASE_TEMP;
conf->foc_current_filter_const = MCCONF_FOC_CURRENT_FILTER_CONST;
2020-01-12 12:25:21 -08:00
conf->foc_cc_decoupling = MCCONF_FOC_CC_DECOUPLING;
conf->foc_observer_type = MCCONF_FOC_OBSERVER_TYPE;
2020-01-20 00:39:33 -08:00
conf->foc_hfi_voltage_start = MCCONF_FOC_HFI_VOLTAGE_START;
conf->foc_hfi_voltage_run = MCCONF_FOC_HFI_VOLTAGE_RUN;
conf->foc_hfi_voltage_max = MCCONF_FOC_HFI_VOLTAGE_MAX;
2020-01-20 00:39:33 -08:00
conf->foc_sl_erpm_hfi = MCCONF_FOC_SL_ERPM_HFI;
conf->foc_hfi_start_samples = MCCONF_FOC_HFI_START_SAMPLES;
conf->foc_hfi_obs_ovr_sec = MCCONF_FOC_HFI_OBS_OVR_SEC;
conf->foc_hfi_samples = MCCONF_FOC_HFI_SAMPLES;
conf->gpd_buffer_notify_left = MCCONF_GPD_BUFFER_NOTIFY_LEFT;
conf->gpd_buffer_interpol = MCCONF_GPD_BUFFER_INTERPOL;
conf->gpd_current_filter_const = MCCONF_GPD_CURRENT_FILTER_CONST;
conf->gpd_current_kp = MCCONF_GPD_CURRENT_KP;
conf->gpd_current_ki = MCCONF_GPD_CURRENT_KI;
conf->s_pid_kp = MCCONF_S_PID_KP;
conf->s_pid_ki = MCCONF_S_PID_KI;
conf->s_pid_kd = MCCONF_S_PID_KD;
conf->s_pid_kd_filter = MCCONF_S_PID_KD_FILTER;
conf->s_pid_min_erpm = MCCONF_S_PID_MIN_RPM;
conf->s_pid_allow_braking = MCCONF_S_PID_ALLOW_BRAKING;
2020-05-12 06:53:32 -07:00
conf->s_pid_ramp_erpms_s = MCCONF_S_PID_RAMP_ERPMS_S;
conf->p_pid_kp = MCCONF_P_PID_KP;
conf->p_pid_ki = MCCONF_P_PID_KI;
conf->p_pid_kd = MCCONF_P_PID_KD;
conf->p_pid_kd_filter = MCCONF_P_PID_KD_FILTER;
conf->p_pid_ang_div = MCCONF_P_PID_ANG_DIV;
conf->cc_startup_boost_duty = MCCONF_CC_STARTUP_BOOST_DUTY;
conf->cc_min_current = MCCONF_CC_MIN_CURRENT;
conf->cc_gain = MCCONF_CC_GAIN;
conf->cc_ramp_step_max = MCCONF_CC_RAMP_STEP;
conf->m_fault_stop_time_ms = MCCONF_M_FAULT_STOP_TIME;
conf->m_duty_ramp_step = MCCONF_M_RAMP_STEP;
conf->m_current_backoff_gain = MCCONF_M_CURRENT_BACKOFF_GAIN;
conf->m_encoder_counts = MCCONF_M_ENCODER_COUNTS;
conf->m_sensor_port_mode = MCCONF_M_SENSOR_PORT_MODE;
conf->m_invert_direction = MCCONF_M_INVERT_DIRECTION;
conf->m_drv8301_oc_mode = MCCONF_M_DRV8301_OC_MODE;
conf->m_drv8301_oc_adj = MCCONF_M_DRV8301_OC_ADJ;
conf->m_bldc_f_sw_min = MCCONF_M_BLDC_F_SW_MIN;
conf->m_bldc_f_sw_max = MCCONF_M_BLDC_F_SW_MAX;
conf->m_dc_f_sw = MCCONF_M_DC_F_SW;
conf->m_ntc_motor_beta = MCCONF_M_NTC_MOTOR_BETA;
conf->m_out_aux_mode = MCCONF_M_OUT_AUX_MODE;
conf->m_motor_temp_sens_type = MCCONF_M_MOTOR_TEMP_SENS_TYPE;
conf->m_ptc_motor_coeff = MCCONF_M_PTC_MOTOR_COEFF;
conf->si_motor_poles = MCCONF_SI_MOTOR_POLES;
conf->si_gear_ratio = MCCONF_SI_GEAR_RATIO;
conf->si_wheel_diameter = MCCONF_SI_WHEEL_DIAMETER;
conf->si_battery_type = MCCONF_SI_BATTERY_TYPE;
conf->si_battery_cells = MCCONF_SI_BATTERY_CELLS;
conf->si_battery_ah = MCCONF_SI_BATTERY_AH;
}
void confgenerator_set_defaults_appconf(app_configuration *conf) {
2019-09-10 01:38:03 -07:00
conf->controller_id = HW_DEFAULT_ID;
conf->timeout_msec = APPCONF_TIMEOUT_MSEC;
conf->timeout_brake_current = APPCONF_TIMEOUT_BRAKE_CURRENT;
conf->send_can_status = APPCONF_SEND_CAN_STATUS;
conf->send_can_status_rate_hz = APPCONF_SEND_CAN_STATUS_RATE_HZ;
conf->can_baud_rate = APPCONF_CAN_BAUD_RATE;
conf->pairing_done = APPCONF_PAIRING_DONE;
conf->permanent_uart_enabled = APPCONF_PERMANENT_UART_ENABLED;
conf->shutdown_mode = APPCONF_SHUTDOWN_MODE;
conf->can_mode = APPCONF_CAN_MODE;
2019-09-10 01:38:03 -07:00
conf->uavcan_esc_index = APPCONF_UAVCAN_ESC_INDEX;
conf->app_to_use = APPCONF_APP_TO_USE;
conf->app_ppm_conf.ctrl_type = APPCONF_PPM_CTRL_TYPE;
conf->app_ppm_conf.pid_max_erpm = APPCONF_PPM_PID_MAX_ERPM;
conf->app_ppm_conf.hyst = APPCONF_PPM_HYST;
conf->app_ppm_conf.pulse_start = APPCONF_PPM_PULSE_START;
conf->app_ppm_conf.pulse_end = APPCONF_PPM_PULSE_END;
conf->app_ppm_conf.pulse_center = APPCONF_PPM_PULSE_CENTER;
conf->app_ppm_conf.median_filter = APPCONF_PPM_MEDIAN_FILTER;
conf->app_ppm_conf.safe_start = APPCONF_PPM_SAFE_START;
conf->app_ppm_conf.throttle_exp = APPCONF_PPM_THROTTLE_EXP;
conf->app_ppm_conf.throttle_exp_brake = APPCONF_PPM_THROTTLE_EXP_BRAKE;
conf->app_ppm_conf.throttle_exp_mode = APPCONF_PPM_THROTTLE_EXP_MODE;
conf->app_ppm_conf.ramp_time_pos = APPCONF_PPM_RAMP_TIME_POS;
conf->app_ppm_conf.ramp_time_neg = APPCONF_PPM_RAMP_TIME_NEG;
conf->app_ppm_conf.multi_esc = APPCONF_PPM_MULTI_ESC;
conf->app_ppm_conf.tc = APPCONF_PPM_TC;
conf->app_ppm_conf.tc_max_diff = APPCONF_PPM_TC_MAX_DIFF;
conf->app_ppm_conf.max_erpm_for_dir = APPCONF_PPM_MAX_ERPM_FOR_DIR;
conf->app_ppm_conf.smart_rev_max_duty = APPCONF_PPM_SMART_REV_MAX_DUTY;
conf->app_ppm_conf.smart_rev_ramp_time = APPCONF_PPM_SMART_REV_RAMP_TIME;
2019-09-10 01:38:03 -07:00
conf->app_adc_conf.ctrl_type = APPCONF_ADC_CTRL_TYPE;
conf->app_adc_conf.hyst = APPCONF_ADC_HYST;
conf->app_adc_conf.voltage_start = APPCONF_ADC_VOLTAGE_START;
conf->app_adc_conf.voltage_end = APPCONF_ADC_VOLTAGE_END;
conf->app_adc_conf.voltage_center = APPCONF_ADC_VOLTAGE_CENTER;
conf->app_adc_conf.voltage2_start = APPCONF_ADC_VOLTAGE2_START;
conf->app_adc_conf.voltage2_end = APPCONF_ADC_VOLTAGE2_END;
conf->app_adc_conf.use_filter = APPCONF_ADC_USE_FILTER;
conf->app_adc_conf.safe_start = APPCONF_ADC_SAFE_START;
conf->app_adc_conf.cc_button_inverted = APPCONF_ADC_CC_BUTTON_INVERTED;
conf->app_adc_conf.rev_button_inverted = APPCONF_ADC_REV_BUTTON_INVERTED;
conf->app_adc_conf.voltage_inverted = APPCONF_ADC_VOLTAGE_INVERTED;
conf->app_adc_conf.voltage2_inverted = APPCONF_ADC_VOLTAGE2_INVERTED;
conf->app_adc_conf.throttle_exp = APPCONF_ADC_THROTTLE_EXP;
conf->app_adc_conf.throttle_exp_brake = APPCONF_ADC_THROTTLE_EXP_BRAKE;
conf->app_adc_conf.throttle_exp_mode = APPCONF_ADC_THROTTLE_EXP_MODE;
conf->app_adc_conf.ramp_time_pos = APPCONF_ADC_RAMP_TIME_POS;
conf->app_adc_conf.ramp_time_neg = APPCONF_ADC_RAMP_TIME_NEG;
conf->app_adc_conf.multi_esc = APPCONF_ADC_MULTI_ESC;
conf->app_adc_conf.tc = APPCONF_ADC_TC;
conf->app_adc_conf.tc_max_diff = APPCONF_ADC_TC_MAX_DIFF;
conf->app_adc_conf.update_rate_hz = APPCONF_ADC_UPDATE_RATE_HZ;
conf->app_uart_baudrate = APPCONF_UART_BAUDRATE;
conf->app_chuk_conf.ctrl_type = APPCONF_CHUK_CTRL_TYPE;
conf->app_chuk_conf.hyst = APPCONF_CHUK_HYST;
conf->app_chuk_conf.ramp_time_pos = APPCONF_CHUK_RAMP_TIME_POS;
conf->app_chuk_conf.ramp_time_neg = APPCONF_CHUK_RAMP_TIME_NEG;
conf->app_chuk_conf.stick_erpm_per_s_in_cc = APPCONF_STICK_ERPM_PER_S_IN_CC;
conf->app_chuk_conf.throttle_exp = APPCONF_CHUK_THROTTLE_EXP;
conf->app_chuk_conf.throttle_exp_brake = APPCONF_CHUK_THROTTLE_EXP_BRAKE;
conf->app_chuk_conf.throttle_exp_mode = APPCONF_CHUK_THROTTLE_EXP_MODE;
conf->app_chuk_conf.multi_esc = APPCONF_CHUK_MULTI_ESC;
conf->app_chuk_conf.tc = APPCONF_CHUK_TC;
conf->app_chuk_conf.tc_max_diff = APPCONF_CHUK_TC_MAX_DIFF;
conf->app_chuk_conf.use_smart_rev = APPCONF_CHUK_USE_SMART_REV;
conf->app_chuk_conf.smart_rev_max_duty = APPCONF_CHUK_SMART_REV_MAX_DUTY;
conf->app_chuk_conf.smart_rev_ramp_time = APPCONF_CHUK_SMART_REV_RAMP_TIME;
conf->app_nrf_conf.speed = APPCONF_NRF_SPEED;
conf->app_nrf_conf.power = APPCONF_NRF_POWER;
conf->app_nrf_conf.crc_type = APPCONF_NRF_CRC;
conf->app_nrf_conf.retry_delay = APPCONF_NRF_RETR_DELAY;
conf->app_nrf_conf.retries = APPCONF_NRF_RETRIES;
conf->app_nrf_conf.channel = APPCONF_NRF_CHANNEL;
conf->app_nrf_conf.address[0] = APPCONF_NRF_ADDR_B0;
conf->app_nrf_conf.address[1] = APPCONF_NRF_ADDR_B1;
conf->app_nrf_conf.address[2] = APPCONF_NRF_ADDR_B2;
conf->app_nrf_conf.send_crc_ack = APPCONF_NRF_SEND_CRC_ACK;
conf->app_balance_conf.kp = APPCONF_BALANCE_KP;
conf->app_balance_conf.ki = APPCONF_BALANCE_KI;
conf->app_balance_conf.kd = APPCONF_BALANCE_KD;
conf->app_balance_conf.hertz = APPCONF_BALANCE_HERTZ;
2019-09-21 01:07:31 -07:00
conf->app_balance_conf.pitch_fault = APPCONF_BALANCE_PITCH_FAULT;
conf->app_balance_conf.roll_fault = APPCONF_BALANCE_ROLL_FAULT;
2020-02-23 13:34:51 -08:00
conf->app_balance_conf.adc1 = APPCONF_BALANCE_ADC1;
conf->app_balance_conf.adc2 = APPCONF_BALANCE_ADC2;
2019-09-10 01:38:03 -07:00
conf->app_balance_conf.overspeed_duty = APPCONF_BALANCE_OVERSPEED_DUTY;
conf->app_balance_conf.tiltback_duty = APPCONF_BALANCE_TILTBACK_DUTY;
conf->app_balance_conf.tiltback_angle = APPCONF_BALANCE_TILTBACK_ANGLE;
conf->app_balance_conf.tiltback_speed = APPCONF_BALANCE_TILTBACK_SPEED;
2019-09-12 00:07:26 -07:00
conf->app_balance_conf.tiltback_high_voltage = APPCONF_BALANCE_TILTBACK_HIGH_V;
conf->app_balance_conf.tiltback_low_voltage = APPCONF_BALANCE_TILTBACK_LOW_V;
2019-09-21 01:07:31 -07:00
conf->app_balance_conf.startup_pitch_tolerance = APPCONF_BALANCE_STARTUP_PITCH_TOLERANCE;
conf->app_balance_conf.startup_roll_tolerance = APPCONF_BALANCE_STARTUP_ROLL_TOLERANCE;
2019-09-10 01:38:03 -07:00
conf->app_balance_conf.startup_speed = APPCONF_BALANCE_STARTUP_SPEED;
conf->app_balance_conf.deadzone = APPCONF_BALANCE_DEADZONE;
conf->app_balance_conf.current_boost = APPCONF_BALANCE_CURRENT_BOOST;
conf->app_balance_conf.multi_esc = APPCONF_BALANCE_MULTI_ESC;
conf->app_balance_conf.yaw_kp = APPCONF_BALANCE_YAW_KP;
conf->app_balance_conf.yaw_ki = APPCONF_BALANCE_YAW_KI;
conf->app_balance_conf.yaw_kd = APPCONF_BALANCE_YAW_KD;
conf->app_balance_conf.roll_steer_kp = APPCONF_BALANCE_ROLL_STEER_KP;
conf->app_balance_conf.brake_current = APPCONF_BALANCE_BRAKE_CURRENT;
conf->app_balance_conf.overspeed_delay = APPCONF_BALANCE_OVERSPEED_DELAY;
conf->app_balance_conf.fault_delay = APPCONF_BALANCE_FAULT_DELAY;
2020-02-23 10:23:19 -08:00
conf->app_balance_conf.tiltback_constant = APPCONF_BALANCE_TILTBACK_CONSTANT;
conf->app_balance_conf.roll_steer_erpm_kp = APPCONF_BALANCE_ROLL_STEER_ERPM_KP;
conf->app_balance_conf.yaw_current_clamp = APPCONF_BALANCE_YAW_CURRENT_CLAMP;
conf->app_balance_conf.adc_half_fault_erpm = APPCONF_BALANCE_ADC_HALF_FAULT_ERPM;
conf->app_balance_conf.setpoint_pitch_filter = APPCONF_BALANCE_SETPOINT_PITCH_FILTER;
conf->app_balance_conf.setpoint_target_filter = APPCONF_BALANCE_SETPOINT_TARGET_FILTER;
conf->app_balance_conf.setpoint_clamp = APPCONF_BALANCE_SETPOINT_CLAMP;
2019-09-10 01:38:03 -07:00
conf->imu_conf.type = APPCONF_IMU_TYPE;
conf->imu_conf.mode = APPCONF_IMU_AHRS_MODE;
conf->imu_conf.sample_rate_hz = APPCONF_IMU_SAMPLE_RATE_HZ;
conf->imu_conf.accel_confidence_decay = APPCONF_IMU_ACCEL_CONFIDENCE_DECAY;
conf->imu_conf.mahony_kp = APPCONF_IMU_MAHONY_KP;
conf->imu_conf.mahony_ki = APPCONF_IMU_MAHONY_KI;
conf->imu_conf.madgwick_beta = APPCONF_IMU_MADGWICK_BETA;
conf->imu_conf.rot_roll = APPCONF_IMU_ROT_ROLL;
conf->imu_conf.rot_pitch = APPCONF_IMU_ROT_PITCH;
conf->imu_conf.rot_yaw = APPCONF_IMU_ROT_YAW;
conf->imu_conf.accel_offsets[0] = APPCONF_IMU_A_OFFSET_0;
conf->imu_conf.accel_offsets[1] = APPCONF_IMU_A_OFFSET_1;
conf->imu_conf.accel_offsets[2] = APPCONF_IMU_A_OFFSET_2;
conf->imu_conf.gyro_offsets[0] = APPCONF_IMU_G_OFFSET_0;
conf->imu_conf.gyro_offsets[1] = APPCONF_IMU_G_OFFSET_1;
conf->imu_conf.gyro_offsets[2] = APPCONF_IMU_G_OFFSET_2;
conf->imu_conf.gyro_offset_comp_fact[0] = APPCONF_IMU_G_OFFSET_COMP_FACT_0;
conf->imu_conf.gyro_offset_comp_fact[1] = APPCONF_IMU_G_OFFSET_COMP_FACT_1;
conf->imu_conf.gyro_offset_comp_fact[2] = APPCONF_IMU_G_OFFSET_COMP_FACT_2;
conf->imu_conf.gyro_offset_comp_clamp = APPCONF_IMU_G_OFFSET_COMP_CLAMP;
}