1+ const MicroPython = require ( 'micropython.js' )
2+
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+ onConnectionLost : 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 ( `
91+ import os
92+ try:
93+ os.stat("${ filePath } ")
94+ print(0)
95+ except OSError:
96+ print(1)
97+ ` )
98+ return output [ 2 ] === '0'
99+ }
100+ }
101+
102+ module . exports = Serial
0 commit comments