8000 Fix line break issue · arduino/micropython.js@567955d · GitHub
[go: up one dir, main page]

Skip to content

Commit 567955d

Browse files
committed
Fix line break issue
1 parent 45c05f9 commit 567955d

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

micropython.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ function sleep(millis) {
1111
})
1212
}
1313

14-
function escape_string(string) {
15-
string = string.replace(/\'/g, `\\'`)
16-
string = string.replace(/\"/g, `\\"`)
17-
string = string.replace(/"""/g, `\\"\\"\\"`)
18-
return string
14+
function fixLineBreak(str) {
15+
// All line breaks must be converted to \n
16+
// https://stackoverflow.com/questions/4025760/python-file-write-creating-extra-carriage-return
17+
return str.replace(/\r\n/g, '\n')
1918
}
2019

2120
class MicroPythonBoard {
@@ -226,7 +225,7 @@ class MicroPythonBoard {
226225
let output = await this.exec_raw({ command: command })
227226
await this.exit_raw_repl()
228227
// Convert text output to js array
229-
output = output.replace(/'/g, '"');
228+
output = output.replace(/'/g, '"')
230229
output = output.split('OK')
231230
let files = output[2] || ''
232231
files = files.slice(0, files.indexOf(']')+1)
@@ -238,7 +237,7 @@ class MicroPythonBoard {
238237
if (filePath) {
239238
await this.enter_raw_repl()
240239
const output = await this.exec_raw({
241-
command: `with open('${filePath}', 'r') as f:\n while 1:\n b=f.read(256)\n if not b:break\n print(b,end='')`
240+
command: `with open('${filePath}','r') as f:\n while 1:\n b=f.read(256)\n if not b:break\n print(b,end='')`
242241
})
243242
await this.exit_raw_repl()
244243
const outputArray = output.split('raw REPL; CTRL-B to exit\r\n>OK')
@@ -256,7 +255,8 @@ class MicroPythonBoard {
256255
command: `f=open('${dest}','w')\nw=f.write`
257256
})
258257
await sleep(100)
259-
const contentString = contentBuffer.toString()
258+
let contentString = contentBuffer.toString()
259+
contentString = fixLineBreak(contentString)
260260
const hexArray = contentString.split('').map(
261261
c => c.charCodeAt(0).toString(16).padStart(2, '0')
262262
)
@@ -275,20 +275,22 @@ class MicroPythonBoard {
275275

276276
async fs_save(content, dest) {
277277
if (content && dest) {
278-
if (typeof content === 'string') {
279-
content = Buffer.from(content)
280-
}
278+
content = fixLineBreak(content)
281279
await this.enter_raw_repl()
282280
let output = await this.exec_raw({
283281
command: `f=open('${dest}','w')\nw=f.write`
284282
})
285-
for (let i = 0; i < content.length; i+=64) {
286-
let slice = content.slice(i, i+64)
287-
slice = slice.toString()
288-
slice = escape_string(slice)
289-
await this.serial.write(`w("""${slice}""")\n`)
290-
await this.serial.write(`\x04`)
291-
await sleep(50)
283+
await sleep(100)
284+
const hexArray = content.split('').map(
285+
c => c.charCodeAt(0).toString(16).padStart(2, '0')
286+
)
287+
const chunkSize = 256
288+
for (let i = 0; i < hexArray.length; i+= chunkSize) {
289+
let slice = hexArray.slice(i, i+chunkSize)
290+
let bytes = slice.map(h => `0x${h}`)
291+
let line = `w(bytes([${bytes.join(',')}]))\x04`
292+
await this.serial.write(line)
293+
await sleep(100)
292294
}
293295
return this.exit_raw_repl()
294296
} else {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "micropython.js",
3-
"version": "1.2.1",
3+
"version": "1.2.2",
44
"description": "Interpretation of pyboard.py in javascript",
55
"main": "micropython.js",
66
"scripts": {

0 commit comments

Comments
 (0)
0