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