ExpressLRS / ExpressLRS-Configurator

Cross platform configuration & build tool for the ExpressLRS radio link
GNU General Public License v3.0
565 stars 118 forks source link

Configurator in Manual Mode ignores user defines. #602

Closed sokil closed 2 months ago

sokil commented 4 months ago

Expected Behavior

Configurator in Manual Mode accepts user defines.

Current Behavior

If Manual Mode selected, passed to textarea user defines ignored, and options from Standard mode used instead

Steps to Reproduce

  1. Select Standard mode
  2. Define frequency REGULATORY_DOMAIN_AU_915
  3. Select Manual mode
  4. Define "-DRegulatory_Domain_FCC_915"
  5. Flash receiver
  6. Reveiver works on AU915 domain

Possible Solution

src/api/src/services/BinaryFlashingStrategy/index.ts

async buildFlashFirmware() {
    ...
    flasherArgs = this.binaryConfigurator.buildBinaryConfigFlags()

src/api/src/services/BinaryFlashingStrategy/BinaryConfigurator/index.ts

  buildBinaryConfigFlags(
    outputDirectory: string,
    firmwareBinaryPath: string,
    hardwareDefinitionsPath: string | null,
    firmwareArtifactsDirPath: string,
    params: BuildFlashFirmwareParams
  ): string[][] {
      ...
      flags.push(...this.userDefinesToFlags(params.userDefines));

As i understand, params.userDefinesTxt ignored, and params.userDefines contains options from Standart mode. So next parameters passed to configurator:

{
  context: {
    flags: [
      [
        '--dir',
        '/home/user/.config/ExpressLRS Configurator/firmwares/binary-targets'
      ],
      [ '--fdir', '/src/ELRS/src' ],
      [ '--target', 'happymodel.rx_900.es900' ],
      [ '--phrase', '***' ],
      [ '--domain', 'au_915' ],
      [ '--auto-wifi', '20' ],
      [ '--flash', 'bf' ],
      [ '/tmp/happymodel.rx_900.es900.betaflight_q3taLO/firmware.bin' ]
    ],
    flasherPath: '/src/ELRS/src/python/binary_configurator.py'
  },
  level: 'info',
  message: 'flags',
  timestamp: '2024-05-01T12:31:46.061Z'
}

Context

Manual mode usefull due to simplifying configuration by passing user defines from file.

Your Environment