initial checkin of c-implementaion of door_damon
[svn42.git] / door_daemon.py
index fefc6cd..7453238 100755 (executable)
@@ -47,10 +47,12 @@ class ArduinoUSBThread ( threading.Thread ):
     self.running=True
     self.lastline=""
     self.last_status=None
+    self.shortsleep = 0
     self.cv_updatestatus = threading.Condition(); #lock ist automatically created withing condition
     self.file_dev_ttyusb=file_dev_ttyusb
     #self.fh = open(self.file_dev_ttyusb,"w+")
-    self.fh = os.fdopen(os.open(self.file_dev_ttyusb, os.O_RDWR | os.O_NONBLOCK),"r+")
+    self.fh = os.fdopen(os.open(self.file_dev_ttyusb, os.O_RDWR | os.O_NONBLOCK),"r+") 
+    #pythons sucks just like perl: we need nonblock or we can't write to FileHandle while we block reading on same filehandle
     self.statusdisplay = StatusDisplay()
     threading.Thread.__init__(self)
     
@@ -93,15 +95,17 @@ class ArduinoUSBThread ( threading.Thread ):
       self.cv_updatestatus.release()
       
   def send_reset(self):
-    logging.info("Resetting Door")
-    print("\nSending r..")
+    self.shortsleep = 20
+    logging.info("Resetting Door")    
+    #print("\nSending r..")
     self.fh.write("r");
-    print("done\n")
+    #print("done\n")
 
   def send_statusrequest(self):
-    print("\nSending s..")
+    self.shortsleep = 20
+    #print("\nSending s..")
     self.fh.write("s");
-    print("done\n")
+    #print("done\n")
     self.cv_updatestatus.acquire()
     self.cv_updatestatus.wait(5.0)
     self.cv_updatestatus.release()        
@@ -111,7 +115,11 @@ class ArduinoUSBThread ( threading.Thread ):
       try:
         line = self.fh.readline();
       except IOError, e:
-        time.sleep(0.5)
+        if self.shortsleep > 0:
+          time.sleep(0.05)
+         self.shortsleep -= 1
+        else:
+          time.sleep(0.5)
         continue
       self.cv_updatestatus.acquire()
       self.lastline=line.strip()
@@ -206,6 +214,8 @@ arduino.start()
 ctrlfifo = ControlFIFOThread(fifofile,arduino)
 ctrlfifo.start()
 
+arduino.send_statusrequest()
+
 def exit_handler(signum, frame):
   global arduino, ctrlfifo
   logging.info("Door Daemon stopping")
@@ -221,4 +231,4 @@ signal.signal(signal.SIGQUIT, exit_handler)
 
 logging.info("Door Daemon started")
 arduino.join()
-ctrlfifo.join()
\ No newline at end of file
+ctrlfifo.join()