@ -50,8 +50,17 @@ TABS.firmware_flasher.initialize = function (callback) {
} ;
}
$ ( 'input.show_development_releases' ) . click ( function ( ) {
$ ( 'input.show_development_releases' ) . click ( function ( ) {
let selectedTarget = String ( $ ( 'select[name="board"]' ) . val ( ) ) ;
GUI . log ( "selected target = " + selectedTarget ) ;
buildBoardOptions ( ) ;
GUI . log ( "toggled RCs" ) ;
if ( selectedTarget === "0" ) {
TABS . firmware _flasher . getTarget ( ) ;
} else {
$ ( 'select[name="board"] option[value=' + selectedTarget + ']' ) . attr ( "selected" , "selected" ) ;
$ ( 'select[name="board"]' ) . change ( ) ;
}
} ) ;
$ ( '.target_search' ) . on ( 'input' , function ( ) {
@ -74,10 +83,10 @@ TABS.firmware_flasher.initialize = function (callback) {
var buildBoardOptions = function ( ) {
var boards _e = $ ( 'select[name="board"]' ) . empty ( ) ;
var versions _e = $ ( 'select[name="firmware_version"]' ) . empty ( ) ;
var showDevReleases = ( $ ( 'input.show_development_releases' ) . is ( ':checked' ) ) ;
boards _e . append ( $ ( "<option value='0'>{0}</option>" . format ( chrome . i18n . getMessage ( 'firmwareFlasherOptionLabelSelectBoard' ) ) ) ) ;
var versions _e = $ ( 'select[name="firmware_version"]' ) . empty ( ) ;
versions _e . append ( $ ( "<option value='0'>{0}</option>" . format ( chrome . i18n . getMessage ( 'firmwareFlasherOptionLabelSelectFirmwareVersion' ) ) ) ) ;
var releases = { } ;
@ -140,6 +149,7 @@ TABS.firmware_flasher.initialize = function (callback) {
releases [ result . target ] . push ( descriptor ) ;
} ) ;
} ) ;
var selectTargets = [ ] ;
Object . keys ( releases )
. sort ( )
@ -158,6 +168,7 @@ TABS.firmware_flasher.initialize = function (callback) {
} ) ;
} ) ;
TABS . firmware _flasher . releases = releases ;
return ;
} ;
$ . get ( 'https://api.github.com/repos/iNavFlight/inav/releases?per_page=10' , function ( releasesData ) {
@ -198,11 +209,15 @@ TABS.firmware_flasher.initialize = function (callback) {
}
} ) ;
$ ( 'a.auto_select_target' ) . removeClass ( 'disabled' ) ;
TABS . firmware _flasher . getTarget ( ) ;
} ) . fail ( function ( data ) {
if ( data [ "responseJSON" ] ) {
GUI . log ( "<b>GITHUB Query Failed: <code>{0}</code></b>" . format ( data [ "responseJSON" ] . message ) ) ;
}
$ ( 'select[name="release"]' ) . empty ( ) . append ( '<option value="0">Offline</option>' ) ;
$ ( 'select[name="board"]' ) . empty ( ) . append ( '<option value="0">Offline</option>' ) ;
$ ( 'select[name="firmware_version"]' ) . empty ( ) . append ( '<option value="0">Offline</option>' ) ;
$ ( 'a.auto_select_target' ) . addClass ( 'disabled' ) ;
} ) ;
$ ( 'a.load_file' ) . on ( 'click' , function ( ) {
@ -561,6 +576,10 @@ TABS.firmware_flasher.initialize = function (callback) {
}
} ) ;
$ ( 'a.auto_select_target' ) . click ( function ( ) {
TABS . firmware _flasher . getTarget ( ) ;
} ) ;
GUI . content _ready ( callback ) ;
} ) ;
} ;
@ -614,3 +633,133 @@ TABS.firmware_flasher.cleanup = function (callback) {
if ( callback ) callback ( ) ;
} ;
TABS . firmware _flasher . getTarget = function ( ) {
GUI . log ( "Attempting automatic target selection" ) ;
var selected _baud = parseInt ( $ ( '#baud' ) . val ( ) ) ;
var selected _port = $ ( '#port' ) . find ( 'option:selected' ) . data ( ) . isManual ? $ ( '#port-override' ) . val ( ) : String ( $ ( '#port' ) . val ( ) ) ;
if ( selected _port !== 'DFU' ) {
if ( selected _port == '0' ) {
GUI . log ( "Cannot prefetch target: No port" ) ;
} else {
console . log ( 'Connecting to: ' + selected _port ) ;
GUI . connecting _to = selected _port ;
if ( selected _port == 'tcp' || selected _port == 'udp' ) {
CONFIGURATOR . connection . connect ( $portOverride . val ( ) , { } , TABS . firmware _flasher . onOpen ) ;
} else {
CONFIGURATOR . connection . connect ( selected _port , { bitrate : selected _baud } , TABS . firmware _flasher . onOpen ) ;
}
}
} else {
GUI . log ( "Cannot prefetch target: Flight Controller in DFU" ) ;
}
} ;
TABS . firmware _flasher . onOpen = function ( openInfo ) {
if ( openInfo ) {
GUI . connected _to = GUI . connecting _to ;
// reset connecting_to
GUI . connecting _to = false ;
// save selected port with chrome.storage if the port differs
chrome . storage . local . get ( 'last_used_port' , function ( result ) {
if ( result . last _used _port ) {
if ( result . last _used _port != GUI . connected _to ) {
// last used port doesn't match the one found in local db, we will store the new one
chrome . storage . local . set ( { 'last_used_port' : GUI . connected _to } ) ;
}
} else {
// variable isn't stored yet, saving
chrome . storage . local . set ( { 'last_used_port' : GUI . connected _to } ) ;
}
} ) ;
chrome . storage . local . set ( { last _used _bps : CONFIGURATOR . connection . bitrate } ) ;
chrome . storage . local . set ( { wireless _mode _enabled : $ ( '#wireless-mode' ) . is ( ":checked" ) } ) ;
CONFIGURATOR . connection . addOnReceiveListener ( read _serial ) ;
// disconnect after 10 seconds with error if we don't get IDENT data
helper . timeout . add ( 'connecting' , function ( ) {
if ( ! CONFIGURATOR . connectionValid ) {
GUI . log ( "Cannot prefetch target: " + chrome . i18n . getMessage ( 'noConfigurationReceived' ) ) ;
TABS . firmware _flasher . closeTempConnection ( ) ;
}
} , 10000 ) ;
FC . resetState ( ) ;
// request configuration data. Start with MSPv1 and
// upgrade to MSPv2 if possible.
MSP . protocolVersion = MSP . constants . PROTOCOL _V2 ;
MSP . send _message ( MSPCodes . MSP _API _VERSION , false , false , function ( ) {
if ( CONFIG . apiVersion === "0.0.0" ) {
GUI _control . prototype . log ( "Cannot prefetch target: <span style='color: red; font-weight: bolder'><strong>" + chrome . i18n . getMessage ( "illegalStateRestartRequired" ) + "</strong></span>" ) ;
FC . restartRequired = true ;
return ;
}
MSP . send _message ( MSPCodes . MSP _FC _VARIANT , false , false , function ( ) {
if ( CONFIG . flightControllerIdentifier == 'INAV' ) {
MSP . send _message ( MSPCodes . MSP _FC _VERSION , false , false , function ( ) {
if ( semver . gte ( CONFIG . flightControllerVersion , CONFIGURATOR . minfirmwareVersionAccepted ) && semver . lt ( CONFIG . flightControllerVersion , CONFIGURATOR . maxFirmwareVersionAccepted ) ) {
if ( CONFIGURATOR . connection . type == ConnectionType . BLE && semver . lt ( CONFIG . flightControllerVersion , "5.0.0" ) ) {
onBleNotSupported ( ) ;
} else {
mspHelper . getCraftName ( function ( name ) {
if ( name ) {
CONFIG . name = name ;
}
TABS . firmware _flasher . onValidFirmware ( ) ;
} ) ;
}
} else {
onInvalidFirmwareVersion ( ) ;
}
} ) ;
} else {
GUI . log ( "Cannot prefetch target: Non-INAV Firmware" ) ;
onInvalidFirmwareVariant ( ) ;
}
} ) ;
} ) ;
} else {
GUI . log ( "Cannot prefetch target: " + chrome . i18n . getMessage ( 'serialPortOpenFail' ) ) ;
return ;
}
} ;
TABS . firmware _flasher . onValidFirmware = function ( ) {
MSP . send _message ( MSPCodes . MSP _BUILD _INFO , false , false , function ( ) {
MSP . send _message ( MSPCodes . MSP _BOARD _INFO , false , false , function ( ) {
$ ( 'select[name="board"] option[value=' + CONFIG . target + ']' ) . attr ( "selected" , "selected" ) ;
GUI . log ( "Target prefetch successful: " + CONFIG . target ) ;
TABS . firmware _flasher . closeTempConnection ( ) ;
$ ( 'select[name="board"]' ) . change ( ) ;
} ) ;
} ) ;
} ;
TABS . firmware _flasher . closeTempConnection = function ( ) {
helper . timeout . killAll ( ) ;
helper . interval . killAll ( [ 'global_data_refresh' , 'msp-load-update' ] ) ;
helper . mspBalancedInterval . flush ( ) ;
helper . mspQueue . flush ( ) ;
helper . mspQueue . freeHardLock ( ) ;
helper . mspQueue . freeSoftLock ( ) ;
CONFIGURATOR . connection . emptyOutputBuffer ( ) ;
CONFIGURATOR . connectionValid = false ;
GUI . connected _to = false ;
CONFIGURATOR . connection . disconnect ( onClosed ) ;
MSP . disconnect _cleanup ( ) ;
} ;