@@ -804,12 +804,29 @@ firmware_flasher.initialize = async function (callback) {
804804 // Maybe the board is in DFU mode, but it does not have permissions. Ask for them.
805805 console . log ( `${ self . logHead } No valid port detected, asking for permissions` ) ;
806806 DFU . requestPermission ( ) . then ( ( device ) => {
807- DFU . connect ( device . path , firmware , options ) ;
807+ if ( device ?. path ) {
808+ DFU . connect ( device . path , firmware , options ) ;
809+ } else {
810+ // User cancelled or no device found: reset flashing state and re-enable button
811+ self . isFlashing = false ;
812+ self . enableFlashButton ( true ) ;
813+ self . enableDfuExitButton ( PortHandler . dfuAvailable ) ;
814+ self . enableLoadRemoteFileButton ( true ) ;
815+ self . enableLoadFileButton ( true ) ;
816+ self . flashingMessage ( i18n . getMessage ( "firmwareFlasherFirmwareNotLoaded" ) , self . FLASH_MESSAGE_TYPES . NEUTRAL ) ;
817+ GUI . interval_resume ( "sponsor" ) ;
818+ }
819+ } ) . catch ( ( ) => {
820+ // Error or user cancelled: reset flashing state and re-enable button
821+ self . isFlashing = false ;
822+ self . enableFlashButton ( true ) ;
823+ self . enableDfuExitButton ( PortHandler . dfuAvailable ) ;
824+ self . enableLoadRemoteFileButton ( true ) ;
825+ self . enableLoadFileButton ( true ) ;
826+ self . flashingMessage ( i18n . getMessage ( "firmwareFlasherFirmwareNotLoaded" ) , self . FLASH_MESSAGE_TYPES . NEUTRAL ) ;
827+ GUI . interval_resume ( "sponsor" ) ;
808828 } ) ;
809829 }
810-
811- self . isFlashing = false ;
812- GUI . interval_resume ( "sponsor" ) ;
813830 }
814831
815832 let result = getConfig ( "erase_chip" ) ;
0 commit comments