ogsmd: Implement org.freesmartphone.GSM.Device.GetRTC() -> (i)
authorMichael 'Mickey' Lauer <mickey@vanille-media.de>
Tue, 28 Apr 2009 23:01:05 +0000 (01:01 +0200)
committerMichael 'Mickey' Lauer <mickey@vanille-media.de>
Tue, 28 Apr 2009 23:01:05 +0000 (01:01 +0200)
ChangeLog
framework/subsystems/ogsmd/device.py
framework/subsystems/ogsmd/modems/abstract/mediator.py

index 973e4ee..aa5866e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
+2009-04-29     Michael Lauer   <mlauer@vanille-media.de>
+
+       * [ogsmd] Implement org.freesmartphone.GSM.Device.GetRTC() -> (i)
+
 2009-04-25     Michael Lauer   <mlauer@vanille-media.de>
 
-       * [ousaged] Serialize resource requests using an asynchrous queue.
+       * [ousaged] Serialize resource requests using an asynchronous queue.
 
 2009-04-19     Michael Lauer   <mlauer@vanille-media.de>
 
index 18f0027..618b497 100644 (file)
@@ -11,7 +11,7 @@ Module: device
 """
 
 MODULE_NAME = "ogsmd.device"
-__version__ = "0.9.12.0"
+__version__ = "0.9.13.0"
 
 from framework import resource
 from framework.config import config
@@ -188,6 +188,18 @@ class Device( resource.Resource ):
     def GetPowerStatus( self, dbus_ok, dbus_error ):
         mediator.DeviceGetPowerStatus( self, dbus_ok, dbus_error )
 
+    @dbus.service.method( DBUS_INTERFACE_DEVICE, "", "",
+                          async_callbacks=( "dbus_ok", "dbus_error" ) )
+    @resource.checkedmethod
+    def SetRTC( self, dbus_ok, dbus_error ):
+        mediator.DeviceSetRTC( self, dbus_ok, dbus_error )
+
+    @dbus.service.method( DBUS_INTERFACE_DEVICE, "", "i",
+                          async_callbacks=( "dbus_ok", "dbus_error" ) )
+    @resource.checkedmethod
+    def GetRTC( self, dbus_ok, dbus_error ):
+        mediator.DeviceGetRTC( self, dbus_ok, dbus_error )
+
     #
     # dbus org.freesmartphone.GSM.SIM
     #
index 5eed469..9c2fe78 100644 (file)
@@ -22,7 +22,7 @@ TODO:
  * refactor parameter validation
 """
 
-__version__ = "0.9.18.1"
+__version__ = "0.9.19.0"
 MODULE_NAME = "ogsmd.modems.abstract.mediator"
 
 from ogsmd import error as DBusError
@@ -33,7 +33,7 @@ from ogsmd.modems import currentModem
 import ogsmd.gsm.sms
 
 import gobject
-import re, time
+import re, time, calendar
 
 import logging
 logger = logging.getLogger( MODULE_NAME )
@@ -503,7 +503,7 @@ class DeviceGetMicrophoneMuted( DeviceMediator ):
 class DeviceSetMicrophoneMuted( DeviceMediator ):
 #=========================================================================#
     def trigger( self ):
-            self._commchannel.enqueue( "+CMUT=%d" % self.muted, self.responseFromChannel, self.errorFromChannel )
+        self._commchannel.enqueue( "+CMUT=%d" % self.muted, self.responseFromChannel, self.errorFromChannel )
 
 #=========================================================================#
 class DeviceGetPowerStatus( DeviceMediator ):
@@ -527,6 +527,36 @@ class DeviceGetPowerStatus( DeviceMediator ):
 
             self._ok( status, level )
 
+#=========================================================================#
+class DeviceSetRTC( DeviceMediator ):
+#=========================================================================#
+    def trigger( self ):
+        # FIXME: gather timezone offset and supply
+        timezone = "+00"
+        timestring = time.strftime("%y/%m/%d,%H:%M:%S" + timezone)
+        self._commchannel.enqueue( "+CCLK=\"%s\"" % timestring, self.responseFromChannel, self.errorFromChannel )
+
+#=========================================================================#
+class DeviceGetRTC( DeviceMediator ): # i
+#=========================================================================#
+    def trigger( self ):
+        self._commchannel.enqueue( "+CCLK?", self.responseFromChannel, self.errorFromChannel )
+
+    def responseFromChannel( self, request, response ):
+        if response[-1] != "OK":
+            DeviceMediator.responseFromChannel( self, request, response )
+        else:
+            dat, tim = self._rightHandSide( response[0] ).strip( '"' ).split( ',' )
+            # timezone not yet supported
+            if tim[-3] == '+':
+                tim = tim[-3]
+            # some modems strip the leading zero for one-digit chars, hence we need to split and reassemble on our own
+            year, month, day = dat.split( '/' )
+            hour, minute, second = tim.split( ':' )
+
+            timestruct = time.strptime( "%02d/%02d/%02d,%02d:%02d:%02d" % ( int(year), int(month), int(day), int(hour), int(minute), int(second) ), "%y/%m/%d,%H:%M:%S" )
+            self._ok( calendar.timegm( timestruct ) )
+
 #
 # SIM Mediators
 #