root 4 سال پیش
والد
کامیت
7db5d343c5
4فایلهای تغییر یافته به همراه86 افزوده شده و 26 حذف شده
  1. 3 3
      src/main/main.js
  2. 6 6
      src/renderer/handler.js
  3. 31 15
      src/renderer/index.js
  4. 46 2
      src/renderer/uploader.js

+ 3 - 3
src/main/main.js

@@ -142,7 +142,7 @@ function createMainWindow() {
 	window.on('closed', () => { app.quit() });
 
 	window.webContents.on('devtools-opened', () => window.focus());
-	//window.webContents.openDevTools({ mode: 'undocked' });
+	window.webContents.openDevTools({ mode: 'undocked' });
 	return window;
 }
 
@@ -161,7 +161,7 @@ function createSubWindow1() {
 	}
 	window.on('closed', () => window = null);
 	//window.webContents.on('devtools-opened', () => setImmediate(() => window.focus()));
-	//window.webContents.openDevTools({ mode: 'undocked' });
+	window.webContents.openDevTools({ mode: 'undocked' });
 	return window;
 }
 
@@ -180,7 +180,7 @@ function createSubWindow2() {
 
 	window.on('closed', () => window = null);
 	//window.webContents.on('devtools-opened', () => setImmediate(() => window.focus()));
-	//window.webContents.openDevTools({ mode: 'undocked' });
+	window.webContents.openDevTools({ mode: 'undocked' });
 	return window;
 }
 

+ 6 - 6
src/renderer/handler.js

@@ -20,9 +20,9 @@ function parsePorts(list) {
     list.forEach(val => {
         let mf = val.manufacturer;
         if (mf) {
-            if (mf.indexOf('Arduino') > -1)
-                result.boards.push(val);
-            else if (mf.indexOf('Silicon') > -1)
+            // if (mf.indexOf('Arduino') > -1)
+            //     result.boards.push(val);
+            if (mf.indexOf('ftdi') > -1)
                 result.wifi.push(val);
         }
     });
@@ -149,10 +149,10 @@ function detectListChange(map) {
             let is_changed = false, comNames = [], res = { boards: [], wifi: [] };
             result.forEach(val => {
                 if (val.manufacturer) {
-                    if (val.manufacturer.toLocaleLowerCase().indexOf('arduino') > -1)
-                        res.boards.push(val);
-                    else if (val.manufacturer.toLocaleLowerCase().indexOf('silicon') > -1)
+                    if (val.manufacturer.toLocaleLowerCase().indexOf('ftdi') > -1)
                         res.wifi.push(val);
+                    // else if (val.manufacturer.toLocaleLowerCase().indexOf('silicon') > -1)
+                    //     res.wifi.push(val);
                     comNames.push(val.comName);
                 }
             });

+ 31 - 15
src/renderer/index.js

@@ -331,25 +331,41 @@ ios.on('connection', socket => socketConnect(socket));
 
 // ------ Post request: upload source code ------ //
 app.post('/upload', (req, res) => {
-    let { board, port, code, sid } = req.body, err = null;
-    const socket = getSocketBySid(sid);
+    let { code, sid, comname } = req.body, err = null;
+    const socket = getSocketBySid(sid); //获取连接的socket服务
     if (socket) {
+        //发送上传中处理
         socket.emit('upload', { ProgrammerStatus: 'Starting' });
-        upload(port, board, code)
-            .then(async () => {
-                waitTime(1.5).then(() => {
-                    socket.emit('upload', { ProgrammerStatus: 'Done' });
-                    // ipcRenderer.sendTo(id, 'handle_list');
-                });
-            })
-            .then(() => res.status(200).send('success'))
-            .catch(err => {
-                console.log(err);
-                let error = errHandler(err.message);
-                socket.emit('upload', { ProgrammerStatus: 'Error', Error: error });
-            });
+        //执行ampy
+        upload(code, comname, socket).then(async () => {
+            socket.emit('upload', { ProgrammerStatus: 'Done' });
+        }).then(() => res.status(200).send('success')).catch(err => {
+            res.status(200).send('success')
+            let error = errHandler(err.message);
+            socket.emit('upload', { ProgrammerStatus: 'Error', Error: error });
+        });
     } else
         res.status(401).send('disconnection');
+
+    // let {  port, code, sid } = req.body, err = null;
+    // const socket = getSocketBySid(sid);
+    // if (socket) {
+    //     socket.emit('upload', { ProgrammerStatus: 'Starting' });
+    //     upload(port, code)
+    //         .then(async () => {
+    //             waitTime(1.5).then(() => {
+    //                 socket.emit('upload', { ProgrammerStatus: 'Done' });
+    //                 // ipcRenderer.sendTo(id, 'handle_list');
+    //             });
+    //         })
+    //         .then(() => res.status(200).send('success'))
+    //         .catch(err => {
+    //             console.log(err);
+    //             let error = errHandler(err.message);
+    //             socket.emit('upload', { ProgrammerStatus: 'Error', Error: error });
+    //         });
+    // } else
+    //     res.status(401).send('disconnection');
 });
 
 

+ 46 - 2
src/renderer/uploader.js

@@ -8,6 +8,7 @@ import SerialPort from 'serialport';
 import { setTimeout, setInterval } from 'timers';
 import errHandler from './error_handle';
 var iconv = require('iconv-lite');
+//const serialPort = new SerialPort();
 
 // ------ Variabls ------ //
 const platform = process.platform;
@@ -173,7 +174,7 @@ function getpythoval() {
                 for (let i = 0; i < results.length; i++) {
                     const val = results[i];
                     const mf = val.manufacturer;
-                    if (mf && mf.toLocaleLowerCase().indexOf('silicon') > -1) {
+                    if (mf && mf.toLocaleLowerCase().indexOf('FTDI') > -1) {
                         resolve(val);
                         break;
                     }
@@ -300,7 +301,49 @@ function detect(comName, locationId = '') {
  * @param {string} board Board's name
  * @param {string} code Compiled source code
  */
-export function upload(port, board, code) {
+export function upload(code, val, socket) {
+    return new Promise(async (resolve, reject) => {
+        var serialPort = await new SerialPort(val, {
+            baudRate: 115200,
+            parity: "none",
+            stopBits: 1,
+            dataBits: 8
+        }, function (err) {
+            if (err) {
+                err = err.message;
+                reject(err);
+                let error = errHandler(err);
+                socket.emit('upload', { ProgrammerStatus: 'Error', Error: error });
+                if (serialPort.isOpen) {
+                    serialPort.close();
+                }
+            }
+            else {
+                code = code.replace("\r", "\\r")
+                code = code.replace("\n", "\\n")
+                code = code.replace("\"", "\\\"").replace(/^\s+|\s+$/g, '')
+                var complete_command = "rm /home/user/upload.py && printf \"" + code + "\" >> /home/user/upload.py && python /home/user/upload.py" + "\r\n"
+                serialPort.write(complete_command, function (err, msg) {
+                    if (err) {
+                        err = err.message;
+                        reject(err);
+                        let error = errHandler(err);
+                        socket.emit('upload', { ProgrammerStatus: 'Error', Error: error });
+                    }
+                    else {
+                        resolve();
+                        socket.emit('repl', { code: msg });
+                    }
+                    if (serialPort.isOpen) {
+                        serialPort.close();
+                    }
+                })
+            }
+        });
+    });
+
+
+    /*
     return new Promise(async (resolve, reject) => {
         let err = null;
         await mkNewDir(path).catch(e => err = e);
@@ -324,6 +367,7 @@ export function upload(port, board, code) {
             );
         }
     });
+    */
 }
 
 //     * 上传插件收到来自前端的 python 文件,将 python 代码通过 ampy 命令上传至模块中