浏览代码

Speed up file list by more then two seconds realtime.

Lourens Rozema 9 年之前
父节点
当前提交
5d2b949ab3
共有 1 个文件被更改,包括 27 次插入5 次删除
  1. 27 5
      nodemcu-uploader.py

+ 27 - 5
nodemcu-uploader.py

@@ -59,6 +59,28 @@ class Uploader:
     PORT = '/dev/ttyUSB0'
     TIMEOUT = 1
 
+    def expect(self, exp='> ', timeout=TIMEOUT):
+        t = self._port.timeout
+
+        # Checking for new data every 100us is fast enough
+        lt = 0.0001
+        if self._port.timeout != lt:
+            self._port.timeout = lt
+
+        end = time.time() + timeout
+
+        # Finish as soon as either exp matches or we run out of time (work like dump, but faster on success)
+        data = ''
+        while not data.endswith(exp) and time.time() <= end:
+            data += self._port.read()
+
+        self._port.timeout = t
+        return data
+
+    def exchange(self, output):
+        self._port.write(output + '\r\n')
+        return self.expect()
+
     def __init__(self, port = 0, baud = BAUD):
         self._port = serial.Serial(port, Uploader.BAUD, timeout=Uploader.TIMEOUT)
 
@@ -67,14 +89,15 @@ class Uploader:
         ## DTR = GPIO0
         self._port.setRTS(False)
         self._port.setDTR(False)
-        time.sleep(0.5)
-        self.dump()
+
+        # Get in sync with LUA
+        self.exchange('')
 
         if baud != Uploader.BAUD:
             log.info('Changing communication to %s baud', baud)
             self._port.write('uart.setup(0,%s,8,0,1,1)\r\n' % baud)
             log.info(self.dump())
-            self._port.baudrate = 115200
+            self._port.baudrate = baud
 
         self.line_number = 0
 
@@ -204,8 +227,7 @@ class Uploader:
 
     def file_list(self):
         log.info('Listing files')
-        self._port.write('for key,value in pairs(file.list()) do print(key,value) end' + '\r\n')
-        r = self.dump()
+        r = self.exchange('for key,value in pairs(file.list()) do print(key,value) end')
         log.info(r)
         return r