1+ import { SerialPort } from 'serialport/dist/index.d' ;
2+ import { ProgramConfig } from '../index.d' ;
3+ import ESPLoader , { ESPOptions , UploadFileDef } from './ESPLoader' ;
4+ import asyncTimeout from '../util/asyncTimeout' ;
5+
6+ const isSupported = ( cpu : string ) => [ 'esp8266' , 'esp32' ] . includes ( cpu ) ;
7+
8+ export const upload = async ( serial : SerialPort , config : ProgramConfig ) => {
9+ if ( ! config . files ?. length ) throw new Error ( 'No files to upload' ) ;
10+ // const log = (...args) => config.debug(`${args.join(' ')}\r\n`);
11+ const log = ( ...args : any [ ] ) => console . log ( ...args ) ;
12+ // const term = { log, debug: log, write: config.debug };
13+
14+ // const { port } = serial;
15+ // const transport = new Transport(port, term);
16+ let espLoader ;
17+
18+ try {
19+ log ( '> Connecting...' ) ;
20+ espLoader = new ESPLoader ( serial , {
21+ quiet : ! config . verbose ,
22+ } as ESPOptions ) ;
23+ await espLoader . mainFn ( ) ;
24+ // await espLoader.flash_id();
25+ log ( '> Connected' ) ;
26+ } catch ( err ) {
27+ // eslint-disable-next-line no-console
28+ console . error ( err ) ;
29+ // log('Failed to connect:', typeof err === 'string' ? err : err.message);
30+ try {
31+ await serial . close ( ) ;
32+ } catch ( err2 ) {
33+ // eslint-disable-next-line no-console
34+ console . error ( err2 ) ;
35+ }
36+ return ;
37+ }
38+
39+ try {
40+ // if (board.config?.wipe && board.config.wipe !== 'none') {
41+ // log('> Erasing device flash...');
42+ // await espLoader.erase_flash();
43+ // log('> Successfully erased device flash');
44+ // }
45+ log ( '> Writing main data partition, this may take a while...' ) ;
46+ await espLoader . writeFlash ( {
47+ fileArray : config . files . map ( ( file ) => ( { ...file , data : Buffer . from ( file . data , 'base64' ) } ) ) ,
48+ flashSize : 'keep' ,
49+ // flash_freq,
50+ // flash_mode,
51+ // compress: board.props?.build?.mcu !== 'esp8266',
52+ } ) ;
53+ await espLoader . flashDeflFinish ( { reboot : true } ) ;
54+ await asyncTimeout ( 100 ) ;
55+ log ( '> Successfully written data partition' ) ;
56+ log ( '> Flashing succeeded! Have a nice day! :)' ) ;
57+ } catch ( err ) {
58+ // eslint-disable-next-line no-console
59+ console . error ( err ) ;
60+ log ( 'Failed to upload:' , err instanceof Error ? err . message : err ) ;
61+ }
62+
63+ // try {
64+ // await serial.close();
65+ // } catch (err) {
66+ // // eslint-disable-next-line no-console
67+ // console.error(err);
68+ // }
69+ } ;
70+
71+ export default { upload, isSupported } ;
0 commit comments