11const MicroPython = require ( 'micropython.js' )
22
3- const board = new MicroPython ( )
4- board . chunk_size = 192
5- board . chunk_sleep = 200
6-
7- const Serial = {
8- loadPorts : async ( ) => {
9- let ports = await board . list_ports ( )
10- return ports . filter ( p => p . vendorId && p . productId )
11- } ,
12- connect : async ( path ) => {
13- return board . open ( path )
14- } ,
15- disconnect : async ( ) => {
16- return board . close ( )
17- } ,
18- run : async ( code ) => {
19- return board . run ( code )
20- } ,
21- execFile : async ( path ) => {
22- return board . execfile ( path )
23- } ,
24- getPrompt : async ( ) => {
25- return board . get_prompt ( )
26- } ,
27- keyboardInterrupt : async ( ) => {
28- await board . stop ( )
29- return Promise . resolve ( )
30- } ,
31- reset : async ( ) => {
32- await board . stop ( )
33- await board . exit_raw_repl ( )
34- await board . reset ( )
35- return Promise . resolve ( )
36- } ,
37- eval : ( d ) => {
38- return board . eval ( d )
39- } ,
40- onData : ( fn ) => {
41- board . serial . on ( 'data' , fn )
42- } ,
43- listFiles : async ( folder ) => {
44- return board . fs_ls ( folder )
45- } ,
46- ilistFiles : async ( folder ) => {
47- return board . fs_ils ( folder )
48- } ,
49- loadFile : async ( file ) => {
50- const output = await board . fs_cat_binary ( file )
51- return output || ''
52- } ,
53- removeFile : async ( file ) => {
54- return board . fs_rm ( file )
55- } ,
56- saveFileContent : async ( filename , content , dataConsumer ) => {
57- return board . fs_save ( content || ' ' , filename , dataConsumer )
58- } ,
59- uploadFile : async ( src , dest , dataConsumer ) => {
60- return board . fs_put ( src , dest . replaceAll ( path . win32 . sep , path . posix . sep ) , dataConsumer )
61- } ,
62- downloadFile : async ( src , dest ) => {
63- let contents = await Serial . loadFile ( src )
64- return ipcRenderer . invoke ( 'save-file' , dest , contents )
65- } ,
66- renameFile : async ( oldName , newName ) => {
67- return board . fs_rename ( oldName , newName )
68- } ,
69- onConnectionClosed : async ( fn ) => {
70- board . serial . on ( 'close' , fn )
71- } ,
72- createFolder : async ( folder ) => {
73- return await board . fs_mkdir ( folder )
74- } ,
75- removeFolder : async ( folder ) => {
76- return await board . fs_rmdir ( folder )
77- } ,
78- getNavigationPath : ( navigation , target ) => {
79- return path . posix . join ( navigation , target )
80- } ,
81- getFullPath : ( root , navigation , file ) => {
82- return path . posix . join ( root , navigation , file )
83- } ,
84- getParentPath : ( navigation ) => {
85- return path . posix . dirname ( navigation )
86- } ,
87- fileExists : async ( filePath ) => {
88- // !!!: Fix this on micropython.js level
89- // ???: Check if file exists is not part of mpremote specs
90- const output = await board . run ( `
3+ class Serial {
4+ constructor ( win ) {
5+ this . win = win
6+ this . board = new MicroPython ( )
7+ this . board . chunk_size = 192
8+ this . board . chunk_sleep = 200
9+ }
10+
11+ async loadPorts ( ) {
12+ let ports = await this . board . list_ports ( )
13+ return ports . filter ( p => p . vendorId && p . productId )
14+ }
15+
16+ async connect ( path ) {
17+ await this . board . open ( path )
18+ this . registerCallbacks ( )
19+ }
20+
21+ async disconnect ( ) {
22+ return await this . board . close ( )
23+ }
24+
25+ async run ( code ) {
26+ return await this . board . run ( code )
27+ }
28+
29+ async execFile ( path ) {
30+ return await this . board . execfile ( path )
31+ }
32+
33+ async getPrompt ( ) {
34+ return await this . board . get_prompt ( )
35+ }
36+
37+ async keyboardInterrupt ( ) {
38+ await this . board . stop ( )
39+ return Promise . resolve ( )
40+ }
41+
42+ async reset ( ) {
43+ await this . board . stop ( )
44+ await this . board . exit_raw_repl ( )
45+ await this . board . reset ( )
46+ return Promise . resolve ( )
47+ }
48+
49+ async eval ( d ) {
50+ return await this . board . eval ( d )
51+ }
52+
53+ registerCallbacks ( ) {
54+ this . board . serial . on ( 'data' , ( data ) => {
55+ this . win . webContents . send ( 'serial-on-data' , data )
56+ } )
57+
58+ this . board . serial . on ( 'close' , ( ) => {
59+ this . win . webContents . send ( 'serial-on-connection-closed' )
60+ } )
61+ }
62+
63+ async listFiles ( folder ) {
64+ return await this . board . fs_ls ( folder )
65+ }
66+
67+ async ilistFiles ( folder ) {
68+ return await this . board . fs_ils ( folder )
69+ }
70+
71+ async loadFile ( file ) {
72+ const output = await this . board . fs_cat_binary ( file )
73+ return output || ''
74+ }
75+
76+ async removeFile ( file ) {
77+ return await this . board . fs_rm ( file )
78+ }
79+
80+ async saveFileContent ( filename , content , dataConsumer ) {
81+ return await this . board . fs_save ( content || ' ' , filename , dataConsumer )
82+ }
83+
84+ async uploadFile ( src , dest , dataConsumer ) {
85+ return await this . board . fs_put ( src , dest . replaceAll ( path . win32 . sep , path . posix . sep ) , dataConsumer )
86+ }
87+
88+ async renameFile ( oldName , newName ) {
89+ return await this . board . fs_rename ( oldName , newName )
90+ }
91+
92+ async createFolder ( folder ) {
93+ return await this . board . fs_mkdir ( folder )
94+ }
95+
96+ async removeFolder ( folder ) {
97+ return await this . board . fs_rmdir ( folder )
98+ }
99+
100+ async fileExists ( filePath ) {
101+ const output = await this . board . run ( `
91102import os
92103try:
93104 os.stat("${ filePath } ")
94105 print(0)
95106except OSError:
96107 print(1)
97108` )
98- return output [ 2 ] === '0'
99- }
109+ return output [ 2 ] === '0'
110+ }
100111}
101112
102113module . exports = Serial
0 commit comments