Changeset 75

Show
Ignore:
Timestamp:
06/08/08 19:07:55 (6 months ago)
Author:
devja..@anarkystic.com
Message:

added support for a delay between commands sent to the avr to prevent collisions

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • fizzjik/CHANGELOG.txt

    r74 r75  
    11== 0.4.2 == 2008.06.08 
    22* Added a RESTish wrapper for services to make them accessible via the web 
     3* Added support for a delay between requests to the AVR to prevent collisions 
    34 
    45== 0.4.1 == 2008.06.06 
  • fizzjik/fizzjik/io/avr3085.py

    r74 r75  
    44 
    55import re 
     6 
     7from twisted.internet import defer, reactor 
    68 
    79from fizzjik.serial import SerialPortClient, SerialPortProtocol 
     
    5759  implements(IController) 
    5860   
     61  _canSend = True 
     62  _cmdQueue = None  
     63  _cmdLock = None 
     64 
    5965  def __init__(self, *args, **kw): 
    6066    SerialPortClient.__init__(self, Avr3085Protocol, *args, **kw) 
     
    6268    self.source = {'1': None, '2': None, '3': None} 
    6369    self.power = {'1': None, '2': None, '3': None} 
     70 
     71    self._cmdQueue = [] 
     72    self._cmdLock = defer.DeferredLock() 
    6473     
    6574  def registerObservers(self, hub): 
     
    6877    hub.addObserver(AvrPowerEvent, self._onPowerChange) 
    6978   
    70   def sendCommand(self, cmd): 
    71     self._connection.protocol.sendCommand(cmd) 
     79  def sendCommand(self, cmd, hold=0.2): 
     80    d = self._cmdLock.acquire() 
     81 
     82    def _actuallySendCommand(lock): 
     83      self._connection.protocol.sendCommand(cmd) 
     84      reactor.callLater(hold, lock.release) 
     85 
     86    d.addCallback(_actuallySendCommand) 
     87    return d 
    7288   
    7389  # High-level commands 
    7490  def setVolume(self, zone, volume): 
    7591    cmd_prefix = {'1': 'MV', '2': 'Z2', '3': 'Z1'} 
    76      
    7792    cmd = "%s%s" % (cmd_prefix[str(zone)], str(volume).replace('.', '')) 
    7893    self.sendCommand(cmd) 
     
    8196    cmd_prefix = {'1': 'SI', '2': 'Z2', '3': 'Z1'} 
    8297    cmd = "%s%s" % (cmd_prefix[str(zone)], source.upper()) 
    83     self.sendCommand(cmd
     98    self.sendCommand(cmd, hold=2
    8499 
    85100  def setPower(self, zone, status): 
    86101    cmd_prefix = {'1': 'ZM', '2': 'Z2', '3': 'Z1'} 
    87102    cmd = "%s%s" % (cmd_prefix[str(zone)], status.upper()) 
    88     self.sendCommand(cmd
     103    self.sendCommand(cmd, hold=2
    89104 
    90105  def volumeUp(self, zone):