...readability adaptions

This commit is contained in:
Wastl Kraus 2025-09-08 09:05:54 +02:00
parent 44e5a5cffe
commit 16ab6a6ef2
3 changed files with 54 additions and 62 deletions

View File

@ -18,36 +18,6 @@ static constexpr dshot_timing_t DSHOT_TIMINGS[] = {
{16, 8, 6, 2, 3, 5} // DSHOT1200
};
// --- HELPERS ---
void printDShotResult(dshot_result_t &result, Stream &output)
{
if (result.success)
{
output.printf("Staus: SUCCESS - %s\n", result.msg);
}
else
{
output.printf("Status: FAILED - %s\n", result.msg);
}
output.println(" ");
}
//
void printDShotTelemetry(dshot_telemetry_result_t &result, Stream &output)
{
if (result.success)
{
output.printf("Telemetry: eRPM=%u, Motor RPM=%u \n", result.erpm, result.motor_rpm);
}
else
{
output.printf("Telemetry: FAILED - %s\n", result.msg);
}
output.println(" ");
}
// Constructor with GPIO number
DShotRMT::DShotRMT(gpio_num_t gpio, dshot_mode_t mode, bool is_bidirectional)
: _gpio(gpio),
@ -70,7 +40,8 @@ DShotRMT::DShotRMT(gpio_num_t gpio, dshot_mode_t mode, bool is_bidirectional)
_tx_channel_config{},
_rx_channel_config{},
_transmit_config{},
_receive_config{}
_receive_config{},
_result{false, UNKNOWN_ERROR}
{
// Calculate frame timing including switch/pause time
_frame_timer_us = _timing_config.frame_length_us + DSHOT_SWITCH_TIME;
@ -123,40 +94,37 @@ DShotRMT::~DShotRMT()
// Init DShotRMT
dshot_result_t DShotRMT::begin()
{
// Result container
dshot_result_t result = {false, INIT_FAILED};
// Init RX channel first
if (_is_bidirectional)
{
if (!_initRXChannel().success)
{
result.msg = RX_INIT_FAILED;
return result;
_result.msg = RX_INIT_FAILED;
return _result;
}
}
// Init TX channel
if (!_initTXChannel().success)
{
result.msg = TX_INIT_FAILED;
return result;
_result.msg = TX_INIT_FAILED;
return _result;
}
// Init DShot encoder
if (!_initDShotEncoder().success)
{
result.msg = ENCODER_INIT_FAILED;
return result;
_result.msg = ENCODER_INIT_FAILED;
return _result;
}
// Bit positions precalculation
_preCalculateBitPositions();
result.success = true;
result.msg = INIT_SUCCESS;
_result.success = true;
_result.msg = INIT_SUCCESS;
return result;
return _result;
}
// Init RMT TX channel
@ -258,30 +226,24 @@ bool IRAM_ATTR DShotRMT::_rmt_rx_done_callback(rmt_channel_handle_t rmt_rx_chann
// Initialize DShot encoder
dshot_result_t DShotRMT::_initDShotEncoder()
{
// Result container
dshot_result_t result = {false, ENCODER_INIT_FAILED};
// Create copy encoder configuration
rmt_copy_encoder_config_t encoder_config = {};
// Create encoder instance
if (rmt_new_copy_encoder(&encoder_config, &_dshot_encoder) != DSHOT_OK)
{
return result;
return _result;
}
result.success = true;
result.msg = ENCODER_INIT_SUCCESS;
_result.success = true;
_result.msg = ENCODER_INIT_SUCCESS;
return result;
return _result;
}
// Send throttle value
dshot_result_t DShotRMT::sendThrottle(uint16_t throttle)
{
// Result container
dshot_result_t result = {false, UNKNOWN_ERROR};
// Special case: if throttle is 0, use sendCommand() instead
if (throttle == 0)
{
@ -291,7 +253,7 @@ dshot_result_t DShotRMT::sendThrottle(uint16_t throttle)
// Log only if throttle is out of range and different from last time
if ((throttle < DSHOT_THROTTLE_MIN || throttle > DSHOT_THROTTLE_MAX) && throttle != _last_throttle)
{
result.msg = THROTTLE_NOT_IN_RANGE;
_result.msg = THROTTLE_NOT_IN_RANGE;
}
// Always store the original throttle value
@ -307,14 +269,11 @@ dshot_result_t DShotRMT::sendThrottle(uint16_t throttle)
// Send DShot command to ESC
dshot_result_t DShotRMT::sendCommand(uint16_t command)
{
// Result container
dshot_result_t result = {false, UNKNOWN_ERROR};
// Validate command is within DShot specification range
if (command < DSHOT_CMD_MOTOR_STOP || command > DSHOT_CMD_MAX)
{
result.msg = COMMAND_NOT_VALID;
return result;
_result.msg = COMMAND_NOT_VALID;
return _result;
}
// Build packet and transmit
@ -622,3 +581,33 @@ void DShotRMT::printCpuInfo(Stream &output) const
output.printf("XTAL Freq = %lu MHz\n", getXtalFrequencyMhz());
output.printf("APB Freq = %lu Hz\n", getApbFrequency());
}
// --- HELPERS ---
void printDShotResult(dshot_result_t &result, Stream &output)
{
if (result.success)
{
output.printf("Staus: SUCCESS - %s\n", result.msg);
}
else
{
output.printf("Status: FAILED - %s\n", result.msg);
}
output.println(" ");
}
//
void printDShotTelemetry(dshot_telemetry_result_t &result, Stream &output)
{
if (result.success)
{
output.printf("Telemetry: eRPM=%u, Motor RPM=%u \n", result.erpm, result.motor_rpm);
}
else
{
output.printf("Telemetry: FAILED - %s\n", result.msg);
}
output.println(" ");
}

View File

@ -203,8 +203,11 @@ private:
volatile bool _telemetry_ready_flag;
static bool IRAM_ATTR _rmt_rx_done_callback(rmt_channel_handle_t rmt_rx_channel, const rmt_rx_done_event_data_t *edata, void *user_data);
// --- DSHOT RESULT HANDLER ---
dshot_result_t _result;
// --- DSHOT DEFAULTS ---
static constexpr auto DSHOT_TELEMETRY_INVALID = (0xffff);
static constexpr auto const DSHOT_TELEMETRY_INVALID = (0xffff);
// --- CONSTANTS & ERROR MESSAGES ---
static constexpr bool DSHOT_OK = 0;

View File

@ -122,7 +122,7 @@ void handleSerialInput(const String &input, uint16_t &throttle, bool &continuous
{
// Stop motor
throttle = 0;
continuous_throttle = true; // kill motor for sure
continuous_throttle = true;
dshot_result_t result = motor01.sendCommand(DSHOT_CMD_MOTOR_STOP);
printDShotResult(result);
}
@ -171,7 +171,7 @@ void handleSerialInput(const String &input, uint16_t &throttle, bool &continuous
}
else
{
USB_SERIAL.printf("Invalid input: '%s'\n", input.c_str());
USB_SERIAL.printf("Invalid input: '%s'\n", input);
USB_SERIAL.printf("Valid throttle range: %d - %d\n", DSHOT_THROTTLE_MIN, DSHOT_THROTTLE_MAX);
}
}