Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added new DSHOT debug modes #4144

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -6786,8 +6786,12 @@
"message": "Bidirectional DShot (requires supported ESC firmware)",
"description": "Feature for the ESC/Motor"
},
"configurationDshotEdt": {
"message": "Built-in sensors",
"description": "ESC/Motor feature"
},
"configurationDshotBidirHelp": {
"message": "Sends ESC data to the FC via DShot telemetry. Required by RPM Filtering and dynamic idle. <br> <br>Note: Requires a compatible ESC with appropriate firmware, eg JESC, Jazzmac, BLHeli-32.",
"message": "Sends ESC data to the FC via DShot telemetry. Required by RPM Filtering and dynamic idle. <br> <br>Note: Requires a compatible ESC with appropriate firmware, eg Bluejay, AM32, JESC, Jazzmac, BLHeli-32.",
"description": "Description of the Bidirectional DShot feature of the ESC/Motor"
},
"configurationGyroSyncDenom": {
Expand Down
1 change: 1 addition & 0 deletions src/js/VirtualFC.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const VirtualFC = {
motor_count: 4,
motor_poles: 14,
use_dshot_telemetry: true,
use_dshot_edt: true,
use_esc_sensor: false,
};

Expand Down
1 change: 1 addition & 0 deletions src/js/data_storage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const API_VERSION_1_39 = '1.39.0';
export const API_VERSION_1_42 = '1.42.0';
export const API_VERSION_1_44 = '1.44.0';
export const API_VERSION_1_45 = '1.45.0';
export const API_VERSION_1_46 = '1.46.0';
Expand Down
7 changes: 7 additions & 0 deletions src/js/debug.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@ const DEBUG = {
{text: "S_TERM"},
{text: "SPA"},
{text: "TASK"},
{text: "DSHOT_STATUS_N_TEMPERATURE"},
{text: "DSHOT_STATUS_N_VOLTAGE"},
{text: "DSHOT_STATUS_N_CURRENT"},
{text: "DSHOT_STATUS_N_DEBUG1"},
{text: "DSHOT_STATUS_N_DEBUG2"},
{text: "DSHOT_STATUS_N_STRESS_LVL"},
{text: "DSHOT_STATUS_N_ERPM_FRACTION_18"},
],

fieldNames: {
Expand Down
1 change: 1 addition & 0 deletions src/js/fc.js
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ const FC = {
motor_count: 0,
motor_poles: 0,
use_dshot_telemetry: false,
use_dshot_edt: false,
use_esc_sensor: false,
};

Expand Down
28 changes: 20 additions & 8 deletions src/js/msp/MSPHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import semver from 'semver';
import vtxDeviceStatusFactory from "../utils/VtxDeviceStatus/VtxDeviceStatusFactory";
import MSP from "../msp";
import MSPCodes from "./MSPCodes";
import { API_VERSION_1_45, API_VERSION_1_46, API_VERSION_1_47 } from '../data_storage';
import { API_VERSION_1_42, API_VERSION_1_45, API_VERSION_1_46, API_VERSION_1_47 } from '../data_storage';
import EscProtocols from "../utils/EscProtocols";
import huffmanDecodeBuf from "../huffman";
import { defaultHuffmanTree, defaultHuffmanLenIndex } from "../default_huffman_tree";
Expand Down Expand Up @@ -493,10 +493,17 @@ MspHelper.prototype.process_data = function(dataHandler) {
FC.MOTOR_CONFIG.minthrottle = data.readU16(); // 0-2000
FC.MOTOR_CONFIG.maxthrottle = data.readU16(); // 0-2000
FC.MOTOR_CONFIG.mincommand = data.readU16(); // 0-2000
FC.MOTOR_CONFIG.motor_count = data.readU8();
FC.MOTOR_CONFIG.motor_poles = data.readU8();
FC.MOTOR_CONFIG.use_dshot_telemetry = data.readU8() != 0;
FC.MOTOR_CONFIG.use_esc_sensor = data.readU8() != 0;

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@haslinghuis , the need for if semver 1.42 is removed now correct?

FC.MOTOR_CONFIG.motor_count = data.readU8();
FC.MOTOR_CONFIG.motor_poles = data.readU8();
FC.MOTOR_CONFIG.use_dshot_telemetry = data.readU8() != 0;
FC.MOTOR_CONFIG.use_esc_sensor = data.readU8() != 0;
}

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47)) {
FC.MOTOR_CONFIG.use_dshot_edt = data.readU8() != 0;
}
break;
case MSPCodes.MSP_COMPASS_CONFIG:
FC.COMPASS_CONFIG.mag_declination = data.read16() / 10;
Expand Down Expand Up @@ -1816,9 +1823,14 @@ MspHelper.prototype.crunch = function(code, modifierCode = undefined) {
.push16(FC.MOTOR_CONFIG.maxthrottle)
.push16(FC.MOTOR_CONFIG.mincommand);

// Introduced in 1.42
buffer.push8(FC.MOTOR_CONFIG.motor_poles);
buffer.push8(FC.MOTOR_CONFIG.use_dshot_telemetry ? 1 : 0);
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as above (no need semver 1.42)?

buffer.push8(FC.MOTOR_CONFIG.motor_poles);
buffer.push8(FC.MOTOR_CONFIG.use_dshot_telemetry ? 1 : 0);
}

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47)) {
buffer.push8(FC.MOTOR_CONFIG.use_dshot_edt ? 1 : 0);
}
break;
case MSPCodes.MSP_SET_GPS_CONFIG:
buffer.push8(FC.GPS_CONFIG.provider)
Expand Down
42 changes: 41 additions & 1 deletion src/js/tabs/motors.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,17 @@ import FC from "../fc";
import MSP from "../msp";
import { mixerList } from "../model";
import MSPCodes from "../msp/MSPCodes";
import { API_VERSION_1_46, API_VERSION_1_47 } from "../data_storage";
import EscProtocols from "../utils/EscProtocols";
import { updateTabList } from "../utils/updateTabList";
import { isInt, getMixerImageSrc } from "../utils/common";
import * as d3 from 'd3';
import $ from 'jquery';
import semver from 'semver';

const motors = {
previousDshotBidir: null,
previousDshotEdt: null,
previousFilterDynQ: null,
previousFilterDynCount: null,
analyticsChanges: {},
Expand Down Expand Up @@ -275,6 +278,7 @@ motors.initialize = async function (callback) {
feature12: FC.FEATURE_CONFIG.features.isEnabled('3D'),
feature27: FC.FEATURE_CONFIG.features.isEnabled('ESC_SENSOR'),
dshotBidir: FC.MOTOR_CONFIG.use_dshot_telemetry,
dshotEdt: FC.MOTOR_CONFIG.use_dshot_edt,
motorPoles: FC.MOTOR_CONFIG.motor_poles,
digitalIdlePercent: FC.PID_ADVANCED_CONFIG.digitalIdlePercent,
idleMinRpm: FC.ADVANCED_TUNING.idleMinRpm,
Expand Down Expand Up @@ -695,6 +699,7 @@ motors.initialize = async function (callback) {
dshotBidirElement.prop('checked', FC.MOTOR_CONFIG.use_dshot_telemetry).trigger("change");

self.previousDshotBidir = FC.MOTOR_CONFIG.use_dshot_telemetry;
self.previousDshotEdt = FC.MOTOR_CONFIG.use_dshot_edt;
self.previousFilterDynQ = FC.FILTER_CONFIG.dyn_notch_q;
self.previousFilterDynCount = FC.FILTER_CONFIG.dyn_notch_count;

Expand All @@ -704,6 +709,13 @@ motors.initialize = async function (callback) {
self.analyticsChanges['BidirectionalDshot'] = newValue;
FC.MOTOR_CONFIG.use_dshot_telemetry = value;

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47) && !value) {
FC.MOTOR_CONFIG.use_dshot_edt = value;

const dshotEdtElement = $('input[id="dshotEdt"]');
dshotEdtElement.prop('checked', FC.MOTOR_CONFIG.use_dshot_edt).trigger("change");
}

const rpmFilterIsDisabled = FC.FILTER_CONFIG.gyro_rpm_notch_harmonics === 0;
FC.FILTER_CONFIG.dyn_notch_count = self.previousFilterDynCount;
FC.FILTER_CONFIG.dyn_notch_q = self.previousFilterDynQ;
Expand Down Expand Up @@ -733,6 +745,21 @@ motors.initialize = async function (callback) {
FC.FILTER_CONFIG.dyn_notch_count = self.previousFilterDynCount;
FC.FILTER_CONFIG.dyn_notch_q = self.previousFilterDynQ;
}

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_46)) {
const dshotEdtElement = $('input[id="dshotEdt"]');

dshotEdtElement.prop('checked', FC.MOTOR_CONFIG.use_dshot_edt).trigger("change");
dshotEdtElement.on("change", function () {
const value = dshotEdtElement.is(':checked');
const newValue = (value !== FC.MOTOR_CONFIG.use_dshot_edt) ? 'On' : 'Off';

self.analyticsChanges['DshotEdt'] = newValue;
FC.MOTOR_CONFIG.use_dshot_edt = value;
});
}

$('input[name="motorPoles"]').val(FC.MOTOR_CONFIG.motor_poles);
});

$('input[name="motorPoles"]').val(FC.MOTOR_CONFIG.motor_poles);
Expand Down Expand Up @@ -768,14 +795,23 @@ motors.initialize = async function (callback) {
$('div.digitalIdlePercent').hide();
}

$('.escSensor').toggle(protocolConfigured && digitalProtocol);
$('.escSensor').toggle(
protocolConfigured && digitalProtocol && (
semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_46) ||
semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47) && !FC.MOTOR_CONFIG.use_dshot_edt));

$('div.checkboxDshotBidir').toggle(protocolConfigured && digitalProtocol);
$('div.motorPoles').toggle(protocolConfigured && rpmFeaturesVisible);

$('.escMotorStop').toggle(protocolConfigured);

$('#escProtocolDisabled').toggle(!protocolConfigured);
$('.checkboxDshotEdt').toggle(
semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47) &&
protocolConfigured &&
digitalProtocol &&
dshotBidirElement.is(':checked') &&
!$("input[name='ESC_SENSOR']").is(':checked'));

//trigger change unsyncedPWMSwitch to show/hide Motor PWM freq input
unsyncedPWMSwitchElement.trigger("change");
Expand All @@ -797,6 +833,10 @@ motors.initialize = async function (callback) {

//trigger change dshotBidir and ESC_SENSOR to show/hide Motor Poles tab
dshotBidirElement.change(updateVisibility).trigger("change");
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_47)) {
const dshotEdtElement = $('input[id="dshotEdt"]');
dshotEdtElement.change(updateVisibility).trigger("change");
}
$("input[name='ESC_SENSOR']").on("change", updateVisibility).trigger("change");

// fill throttle
Expand Down
8 changes: 7 additions & 1 deletion src/tabs/motors.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,14 @@
<div class="number checkboxDshotBidir">
<div style="float: left; height: 20px; margin-right: 14px; margin-left: 3px;">
<input type="checkbox" id="dshotBidir" class="toggle" />
<span class="freelabel" i18n="configurationDshotBidir"></span>
</div>
</div>
<div class="number checkboxDshotEdt">
<div style="float: left; height: 20px; margin-right: 14px; margin-left: 3px;">
<input type="checkbox" id="dshotEdt" class="toggle" />
<span class="freelabel" id="dshotEdtLabel" i18n="configurationDshotEdt"></span>
</div>
<span class="freelabel" i18n="configurationDshotBidir"></span>
<div class="helpicon cf_tip" i18n_title="configurationDshotBidirHelp"></div>
</div>
<div class="number motorPoles">
Expand Down