@@ -7,6 +7,7 @@ const utils = require('./utils');
77var Boards = require ( './boards.js' ) ;
88var app = null ;
99var T = null ;
10+ var checkUSB , errorStatus ;
1011const boardFirmwareMap = {
1112 'arduino_uno' : 'uno.hex' ,
1213 'arduino_leonardo' : 'leonardo.hex' ,
@@ -21,7 +22,8 @@ const boardFirmwareMap = {
2122} ;
2223
2324const boardDefaultProgramMap = {
24- 'me/mbot_uno' : 'mbot_reset.hex' ,
25+ 'me/mbot_uno' : 'mbot_reset.hex' ,
26+ 'me/orion_uno' : 'starter_factory_firmware.hex'
2527} ;
2628
2729var FirmwareUploader = {
@@ -82,10 +84,10 @@ var FirmwareUploader = {
8284 }
8385 return path . join ( __root_path , 'tools/arduino' ) ;
8486 } ,
85-
87+ // 是否允许恢复出厂程序,true:允许,false:不允许
8688 allowResetDefaultProgram : function ( ) {
8789 var boardName = app . getBoards ( ) . currentBoardName ( ) ;
88- if ( boardName == 'me/mbot_uno' ) {
90+ if ( boardName == 'me/mbot_uno' || boardName == 'me/orion_uno' ) {
8991 return true ;
9092 }
9193 return false ;
@@ -97,15 +99,29 @@ var FirmwareUploader = {
9799 } ,
98100
99101 resetDefaultProgram : function ( ) {
100- var boardName = app . getBoards ( ) . currentBoardName ( ) ;
102+ var boardName = app . getBoards ( ) . currentBoardName ( ) ; console . log ( '版:' ) ; console . log ( boardName ) ;
101103 this . uploadWithAvrdude ( boardDefaultProgramMap [ boardName ] ) ;
102104 } ,
103105
106+ /**
107+ * 通过小内存机多次测试刷新固件经验得出超时时间,range最多2分钟,mbot最多20秒
108+ * @param on
109+ * @param callback
110+ */
111+ uploadingWatchDog : function ( on , callback ) {
112+ if ( ! on ) return ;
113+ // mbot : me/mbot_uno , ranger : me/auriga_mega2560
114+ var boardName = app . getBoards ( ) . currentBoardName ( ) ;
115+ var timeout = ( 'me/mbot_uno' === boardName ) ? 20000 : 120000 ;
116+ checkUSB = setInterval ( function ( ) {
117+ callback ( ) ;
118+ } , timeout ) ;
119+ } ,
120+
104121 uploadWithAvrdude : function ( hexFileName ) {
105122 var serialPort = app . getSerial ( ) . currentSerialPort ( ) ;
106123 var boardName = app . getBoards ( ) . currentBoardName ( ) ;
107124
108-
109125 if ( ! hexFileName ) {
110126 app . alert ( T ( 'No firmware available for this type of board' ) ) ;
111127 return ;
@@ -117,30 +133,46 @@ var FirmwareUploader = {
117133
118134 var self = this ;
119135 console . log ( 'upgrade firmware' ) ;
120- app . alert ( { 'message' :T ( 'Uploading...' ) , 'hasCancel' :false } ) ;
136+ app . alert ( { 'message' :T ( 'Uploading' ) + ' ...', 'hasCancel' :false } ) ;
121137 var command = self . getArduinoPath ( ) + '/hardware/tools/avr/bin/avrdude' ;
122138 var args = self . getAvrdudeParameter ( serialPort , hexFileName ) ;
123139 app . getSerial ( ) . close ( ) ;
140+ var uploading = false , uploaderSuccess = false ;
124141 var avrdude = spawn ( command , args , { cwd : __root_path } ) ;
125142 avrdude . stdout . on ( 'data' , function ( data ) {
126143 } ) ;
127144 avrdude . stderr . on ( 'data' , function ( data ) {
128- app . logToArduinoConsole ( data . toString ( ) ) ;
145+ app . logToArduinoConsole ( data ) ;
129146 if ( data . toString ( ) . indexOf ( 'programmer is not responding' ) >= 0 ) {
130147 avrdude . kill ( 'SIGKILL' ) ;
131148 }
132149 app . alert ( { 'message' :T ( 'Uploading' ) + '...' + utils . getProgressCharacter ( ) , 'hasCancel' :false } ) ;
150+ // 第一次进入上传状态,看门狗启动,超时未完成上传即kill进程
151+ self . uploadingWatchDog ( ! uploading , function ( ) {
152+ avrdude . kill ( 'SIGKILL' ) ;
153+ errorStatus = 'TIMEOUT' ;
154+ app . alert ( { 'message' :T ( 'Hardware communication timeout, please confirm whether the serial connection' ) , 'hasCancel' :true } ) ;
155+ clearInterval ( checkUSB ) ;
156+ } ) ;
157+
158+ uploading = true ;
133159 } ) ;
134160 avrdude . on ( 'close' , function ( code ) {
161+ clearInterval ( checkUSB ) ;
162+ if ( 'TIMEOUT' === errorStatus ) {
163+ errorStatus = '' ;
164+ return ;
165+ }
135166 if ( code == 0 ) {
136- app . alert ( { 'message' :T ( 'Upload Succeeded ' ) , 'hasCancel' :true } ) ;
167+ app . alert ( { 'message' :T ( 'Upload Finish ' ) , 'hasCancel' :true } ) ;
137168 } else {
138169 app . alert ( { 'message' :T ( 'Upload Failed' ) , 'hasCancel' :true } ) ;
139170 }
140171 avrdude . kill ( 'SIGKILL' ) ;
141172 app . getSerial ( ) . connect ( serialPort ) ;
142173 } ) ;
143-
174+ avrdude . on ( 'exit' , function ( code ) {
175+ } ) ;
144176 } ,
145177
146178}
0 commit comments