From 76fb80915bac3b7008dfd79456c834788cb73712 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 3 Jun 2019 16:41:59 -0700 Subject: [PATCH] add new firmware settings --- ...nsitivity_params_xyz_to_firmware_config.rb | 11 +++++++ db/structure.sql | 27 ++++++++++------- frontend/constants.ts | 6 ++++ frontend/devices/__tests__/devices_test.tsx | 11 ++++++- .../__tests__/hardware_settings_test.tsx | 1 + .../devices/components/hardware_settings.tsx | 6 ++-- .../__tests__/encoder_type_test.tsx | 29 ++++++++++++------- .../__tests__/motors_test.tsx | 9 ++++++ .../components/hardware_settings/motors.tsx | 24 +++++++++++++-- frontend/devices/components/interfaces.ts | 3 +- frontend/devices/devices.tsx | 4 +++ frontend/devices/interfaces.ts | 2 ++ 12 files changed, 105 insertions(+), 28 deletions(-) create mode 100644 db/migrate/20190603233157_add_current_and_sensitivity_params_xyz_to_firmware_config.rb diff --git a/db/migrate/20190603233157_add_current_and_sensitivity_params_xyz_to_firmware_config.rb b/db/migrate/20190603233157_add_current_and_sensitivity_params_xyz_to_firmware_config.rb new file mode 100644 index 000000000..6836f23be --- /dev/null +++ b/db/migrate/20190603233157_add_current_and_sensitivity_params_xyz_to_firmware_config.rb @@ -0,0 +1,11 @@ +class AddCurrentAndSensitivityParamsXyzToFirmwareConfig < ActiveRecord::Migration[5.2] + safety_assured + def change + add_column :firmware_configs, :movement_motor_current_x, :integer, default: 600 + add_column :firmware_configs, :movement_motor_current_y, :integer, default: 600 + add_column :firmware_configs, :movement_motor_current_z, :integer, default: 600 + add_column :firmware_configs, :movement_stall_sensitivity_x, :integer, default: 30 + add_column :firmware_configs, :movement_stall_sensitivity_y, :integer, default: 30 + add_column :firmware_configs, :movement_stall_sensitivity_z, :integer, default: 30 + end +end diff --git a/db/structure.sql b/db/structure.sql index 0473427f9..403233fff 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -563,7 +563,13 @@ CREATE TABLE public.firmware_configs ( movement_invert_2_endpoints_z integer DEFAULT 0, movement_microsteps_x integer DEFAULT 1, movement_microsteps_y integer DEFAULT 1, - movement_microsteps_z integer DEFAULT 1 + movement_microsteps_z integer DEFAULT 1, + movement_motor_current_x integer DEFAULT 600, + movement_motor_current_y integer DEFAULT 600, + movement_motor_current_z integer DEFAULT 600, + movement_stall_sensitivity_x integer DEFAULT 30, + movement_stall_sensitivity_y integer DEFAULT 30, + movement_stall_sensitivity_z integer DEFAULT 30 ); @@ -2751,14 +2757,6 @@ ALTER TABLE ONLY public.points ADD CONSTRAINT fk_rails_a62cbb8aca FOREIGN KEY (tool_id) REFERENCES public.tools(id); --- --- Name: farmware_envs fk_rails_ab55c3a1d1; Type: FK CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.farmware_envs - ADD CONSTRAINT fk_rails_ab55c3a1d1 FOREIGN KEY (device_id) REFERENCES public.devices(id); - - -- -- Name: primary_nodes fk_rails_bca7fee3b9; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -2767,6 +2765,14 @@ ALTER TABLE ONLY public.primary_nodes ADD CONSTRAINT fk_rails_bca7fee3b9 FOREIGN KEY (sequence_id) REFERENCES public.sequences(id); +-- +-- Name: farmware_envs fk_rails_bdadc396eb; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.farmware_envs + ADD CONSTRAINT fk_rails_bdadc396eb FOREIGN KEY (device_id) REFERENCES public.devices(id); + + -- -- Name: alerts fk_rails_c0132c78be; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -2968,6 +2974,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20190512015442'), ('20190513221836'), ('20190515185612'), -('20190515205442'); +('20190515205442'), +('20190603233157'); diff --git a/frontend/constants.ts b/frontend/constants.ts index c4637e610..b95083898 100644 --- a/frontend/constants.ts +++ b/frontend/constants.ts @@ -124,6 +124,12 @@ export namespace ToolTips { export const INVERT_MOTORS = trim(`Invert direction of motor during calibration. (default: disabled)`); + export const MOTOR_CURRENT = + trim(`Motor current in milliamps. (default: 600)`); + + export const STALL_SENSITIVITY = + trim(`Motor stall sensitivity. (default: 30)`); + export const ENABLE_X2_MOTOR = trim(`Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: enabled)`); diff --git a/frontend/devices/__tests__/devices_test.tsx b/frontend/devices/__tests__/devices_test.tsx index ef056df3a..0597fbf94 100644 --- a/frontend/devices/__tests__/devices_test.tsx +++ b/frontend/devices/__tests__/devices_test.tsx @@ -11,6 +11,7 @@ import { } from "../../__test_support__/resource_index_builder"; import { FarmbotOsSettings } from "../components/farmbot_os_settings"; import { fakeTimeSettings } from "../../__test_support__/fake_time_settings"; +import { HardwareSettings } from "../components/hardware_settings"; describe("", () => { const fakeProps = (): Props => ({ @@ -23,7 +24,7 @@ describe("", () => { images: [], dispatch: jest.fn(), resources: buildResourceIndex(FAKE_RESOURCES).index, - sourceFbosConfig: jest.fn(), + sourceFbosConfig: () => ({ value: undefined, consistent: true }), sourceFwConfig: jest.fn(), shouldDisplay: jest.fn(), firmwareConfig: undefined, @@ -51,4 +52,12 @@ describe("", () => { expect(wrapper.find(FarmbotOsSettings).props().botToMqttLastSeen) .toEqual("123"); }); + + it("provides correct firmwareHardware value", () => { + const p = fakeProps(); + p.sourceFbosConfig = () => ({ value: "arduino", consistent: true }); + const wrapper = shallow(); + expect(wrapper.find(HardwareSettings).props().firmwareHardware) + .toEqual("arduino"); + }); }); diff --git a/frontend/devices/components/__tests__/hardware_settings_test.tsx b/frontend/devices/components/__tests__/hardware_settings_test.tsx index bd41f9da3..0823c54bf 100644 --- a/frontend/devices/components/__tests__/hardware_settings_test.tsx +++ b/frontend/devices/components/__tests__/hardware_settings_test.tsx @@ -20,6 +20,7 @@ describe("", () => { }, firmwareConfig: undefined, shouldDisplay: jest.fn(), + firmwareHardware: undefined, }; }; diff --git a/frontend/devices/components/hardware_settings.tsx b/frontend/devices/components/hardware_settings.tsx index 62bf2bdb7..d70f3e178 100644 --- a/frontend/devices/components/hardware_settings.tsx +++ b/frontend/devices/components/hardware_settings.tsx @@ -1,5 +1,4 @@ import * as React from "react"; - import { MCUFactoryReset, bulkToggleControlPanel } from "../actions"; import { Widget, WidgetHeader, WidgetBody, SaveBtn } from "../../ui/index"; import { HardwareSettingsProps } from "../interfaces"; @@ -24,7 +23,7 @@ export class HardwareSettings extends render() { const { bot, dispatch, sourceFwConfig, controlPanelState, firmwareConfig, - botToMqttStatus + botToMqttStatus, firmwareHardware } = this.props; const { informational_settings } = this.props.bot.hardware; const firmwareVersion = informational_settings.firmware_version; @@ -79,7 +78,8 @@ export class HardwareSettings extends firmwareVersion={firmwareVersion} controlPanelState={controlPanelState} sourceFwConfig={sourceFwConfig} - isValidFwConfig={!!firmwareConfig} /> + isValidFwConfig={!!firmwareConfig} + firmwareHardware={firmwareHardware} /> ", () => { + const fakeProps = (): EncoderTypeProps => ({ + hardware: { + encoder_type_x: 1, + encoder_type_y: 1, + encoder_type_z: 1 + }, + onChange: jest.fn(), + }); + it("renders default content", () => { - const props: EncoderTypeProps = { - hardware: { - encoder_type_x: 1, - encoder_type_y: 1, - encoder_type_z: 1 - }, - onChange: jest.fn() - }; - const el = shallow(); - expect(el.find(FBSelect).length).toEqual(3); - // EncoderType + const wrapper = shallow(); + expect(wrapper.find(FBSelect).length).toEqual(3); + }); + + it("changes encoder type", () => { + const p = fakeProps(); + const wrapper = shallow(); + wrapper.find(FBSelect).first().simulate("change", { label: "", value: 1 }); + expect(p.onChange).toHaveBeenCalledWith("encoder_type_x", 1); }); }); diff --git a/frontend/devices/components/hardware_settings/__tests__/motors_test.tsx b/frontend/devices/components/hardware_settings/__tests__/motors_test.tsx index 9e92a1884..771eca78f 100644 --- a/frontend/devices/components/hardware_settings/__tests__/motors_test.tsx +++ b/frontend/devices/components/hardware_settings/__tests__/motors_test.tsx @@ -32,6 +32,7 @@ describe("", () => { controlPanelState, sourceFwConfig: () => ({ value: 0, consistent: true }), isValidFwConfig: true, + firmwareHardware: undefined, }; }; @@ -83,4 +84,12 @@ describe("", () => { testParamToggle("toggles retries e-stop parameter", "param_e_stop_on_mov_err", 0); testParamToggle("toggles enable X2", "movement_secondary_motor_x", 7); testParamToggle("toggles invert X2", "movement_secondary_motor_invert_x", 8); + + it("renders TMC params", () => { + const p = fakeProps(); + p.firmwareHardware = "express_k10"; + const wrapper = render(); + expect(wrapper.text()).toContain("Motor Current"); + expect(wrapper.text()).toContain("Stall Sensitivity"); + }); }); diff --git a/frontend/devices/components/hardware_settings/motors.tsx b/frontend/devices/components/hardware_settings/motors.tsx index 842bd895e..fef59d59d 100644 --- a/frontend/devices/components/hardware_settings/motors.tsx +++ b/frontend/devices/components/hardware_settings/motors.tsx @@ -15,6 +15,7 @@ import { t } from "../../../i18next_wrapper"; import { Xyz, McuParamName } from "farmbot"; import { SourceFwConfig } from "../../interfaces"; import { calcMicrostepsPerMm } from "../../../controls/move/direction_axes_props"; +import { NumberConfigKey } from "farmbot/dist/resources/configs/firmware"; const SingleSettingRow = ({ label, tooltip, settingType, children }: { @@ -49,13 +50,14 @@ export const calculateScale = export function Motors(props: MotorsProps) { const { dispatch, firmwareVersion, controlPanelState, - sourceFwConfig, isValidFwConfig + sourceFwConfig, isValidFwConfig, firmwareHardware } = props; const enable2ndXMotor = sourceFwConfig("movement_secondary_motor_x"); const invert2ndXMotor = sourceFwConfig("movement_secondary_motor_invert_x"); const eStopOnMoveError = sourceFwConfig("param_e_stop_on_mov_err"); const scale = calculateScale(sourceFwConfig); - + const isFarmduinoExpress = firmwareHardware && + firmwareHardware.includes("express"); return
+ {isFarmduinoExpress && + } + {isFarmduinoExpress && + } diff --git a/frontend/devices/components/interfaces.ts b/frontend/devices/components/interfaces.ts index f79020cfa..e29944559 100644 --- a/frontend/devices/components/interfaces.ts +++ b/frontend/devices/components/interfaces.ts @@ -2,7 +2,7 @@ import { BotState, Xyz, SourceFwConfig, ControlPanelState, ShouldDisplay } from "../interfaces"; -import { McuParamName, McuParams } from "farmbot/dist"; +import { McuParamName, McuParams, FirmwareHardware } from "farmbot/dist"; import { IntegerSize } from "../../util"; import { FirmwareConfig } from "farmbot/dist/resources/configs/firmware"; @@ -79,6 +79,7 @@ export interface MotorsProps { controlPanelState: ControlPanelState; sourceFwConfig: SourceFwConfig; isValidFwConfig: boolean; + firmwareHardware: FirmwareHardware | undefined; } export interface EncodersProps { diff --git a/frontend/devices/devices.tsx b/frontend/devices/devices.tsx index 1dcee5059..9265be8e6 100644 --- a/frontend/devices/devices.tsx +++ b/frontend/devices/devices.tsx @@ -8,6 +8,7 @@ import { Props } from "./interfaces"; import { PinBindings } from "./pin_bindings/pin_bindings"; import { selectAllDiagnosticDumps } from "../resources/selectors"; import { getStatus } from "../connectivity/reducer_support"; +import { isFwHardwareValue } from "./components/fbos_settings/board_type"; @connect(mapStateToProps) export class Devices extends React.Component { @@ -18,6 +19,8 @@ export class Devices extends React.Component { const botToMqttLastSeen = (botToMqtt && botToMqttStatus === "up") ? botToMqtt.at : ""; + const { value } = this.props.sourceFbosConfig("firmware_hardware"); + const firmwareHardware = isFwHardwareValue(value) ? value : undefined; return @@ -42,6 +45,7 @@ export class Devices extends React.Component { bot={this.props.bot} botToMqttStatus={botToMqttStatus} shouldDisplay={this.props.shouldDisplay} + firmwareHardware={firmwareHardware} sourceFwConfig={this.props.sourceFwConfig} firmwareConfig={this.props.firmwareConfig} />