diff --git a/src/main/drivers/dshot_command.c b/src/main/drivers/dshot_command.c index ff997206e3..6f721eb30b 100644 --- a/src/main/drivers/dshot_command.c +++ b/src/main/drivers/dshot_command.c @@ -34,9 +34,10 @@ #include "drivers/dshot.h" #include "drivers/dshot_dpwm.h" -#include "drivers/dshot_command.h" #include "drivers/pwm_output.h" +#include "dshot_command.h" + #define DSHOT_PROTOCOL_DETECTION_DELAY_MS 3000 #define DSHOT_INITIAL_DELAY_US 10000 #define DSHOT_COMMAND_DELAY_US 1000 @@ -141,7 +142,7 @@ static dshotCommandControl_t* addCommand() static bool allMotorsAreIdle(void) { - for (unsigned i = 0; i < dshotPwmDevice.count; i++) { + for (unsigned i = 0; i < motorDeviceCount(); i++) { const motorDmaOutput_t *motor = getMotorDmaOutput(i); if (motor->protocolControl.value) { return false; @@ -216,18 +217,18 @@ void dshotCommandWrite(uint8_t index, uint8_t motorCount, uint8_t command, dshot #ifdef USE_DSHOT_TELEMETRY timeUs_t timeoutUs = micros() + 1000; - while (!pwmStartDshotMotorUpdate() && + while (!motorGetVTable().updateStart() && cmpTimeUs(timeoutUs, micros()) > 0); #endif - for (uint8_t i = 0; i < dshotPwmDevice.count; i++) { + for (uint8_t i = 0; i < motorDeviceCount(); i++) { if ((i == index) || (index == ALL_MOTORS)) { motorDmaOutput_t *const motor = getMotorDmaOutput(i); motor->protocolControl.requestTelemetry = true; - dshotPwmDevice.vTable.writeInt(i, command); + motorGetVTable().writeInt(i, command); } } - dshotPwmDevice.vTable.updateComplete(); + motorGetVTable().updateComplete(); } delayMicroseconds(delayAfterCommandUs); } else if (commandType == DSHOT_CMD_TYPE_INLINE) { diff --git a/src/main/drivers/motor.c b/src/main/drivers/motor.c index 7fb47695c1..f1a3becd9f 100644 --- a/src/main/drivers/motor.c +++ b/src/main/drivers/motor.c @@ -73,11 +73,16 @@ void motorWriteAll(float *values) #endif } -int motorDeviceCount(void) +unsigned motorDeviceCount(void) { return motorDevice->count; } +motorVTable_t motorGetVTable(void) +{ + return motorDevice->vTable; +} + // This is not motor generic anymore; should be moved to analog pwm module static void analogInitEndpoints(const motorConfig_t *motorConfig, float outputLimit, float *outputLow, float *outputHigh, float *disarm, float *deadbandMotor3dHigh, float *deadbandMotor3dLow) { if (featureIsEnabled(FEATURE_3D)) { diff --git a/src/main/drivers/motor.h b/src/main/drivers/motor.h index 694758d6fa..b8dcabaf39 100644 --- a/src/main/drivers/motor.h +++ b/src/main/drivers/motor.h @@ -83,7 +83,8 @@ uint16_t motorConvertToExternal(float motorValue); struct motorDevConfig_s; // XXX Shouldn't be needed once pwm_output* is really cleaned up. void motorDevInit(const struct motorDevConfig_s *motorConfig, uint16_t idlePulse, uint8_t motorCount); -int motorDeviceCount(void); +unsigned motorDeviceCount(void); +motorVTable_t motorGetVTable(void); bool checkMotorProtocolEnabled(const motorDevConfig_t *motorConfig, bool *protocolIsDshot); bool isMotorProtocolDshot(void); bool isMotorProtocolEnabled(void);