Module prototypes_samsung
[hide private]
[frames] | no frames]

Source Code for Module prototypes_samsung

  1  ### BITPIM 
  2  ### 
  3  ### Copyright (C) 2006 Joe Pham <djpham@bitpim.org> 
  4  ### 
  5  ### This program is free software; you can redistribute it and/or modify 
  6  ### it under the terms of the BitPim license as detailed in the LICENSE file. 
  7  ### 
  8  ### $Id: prototypes_samsung.py 4777 2010-01-07 03:24:27Z djpham $ 
  9   
 10  """The various types used in protocol descriptions specific to Samsung phones""" 
 11   
 12  import calendar 
 13  import datetime 
 14  import time 
 15   
 16  import prototypes 
17 18 -class DateTime(prototypes.UINTlsb):
19 _daylight=None
20 - def __init__(self, *args, **kwargs):
21 if DateTime._daylight is None: 22 DateTime._daylight=time.localtime()[-1] 23 super(DateTime, self).__init__(*args, **kwargs) 24 kwargs.update({ 'sizeinbytes': 4 }) 25 if self._ismostderived(DateTime): 26 self._update(args, kwargs)
27
28 - def _update(self, args, kwargs):
29 for k in 'constant', 'default', 'value': 30 if kwargs.has_key(k): 31 kwargs[k]=self._converttoint(kwargs[k]) 32 if len(args)==0: 33 pass 34 elif len(args)==1: 35 args=(self._converttoint(args[0]),) 36 else: 37 raise TypeError("expected (year,month,day,hour,minute) as arg") 38 39 super(DateTime, self)._update(args, kwargs) 40 self._complainaboutunusedargs(DateTime, kwargs) 41 assert self._sizeinbytes==4
42 43 _time_delta=315514800.0
44 - def _converttoint(self, date):
45 assert len(date)>4 46 _timetuple=datetime.datetime(*date[:5]).timetuple()[:-1]+(DateTime._daylight,) 47 return int(calendar.timegm(_timetuple)-self._time_delta)
48
49 - def getvalue(self):
50 """Unpack 32 bit value into date/time 51 @rtype: tuple 52 @return: (year, month, day, hour, minute) 53 """ 54 val=super(DateTime, self).getvalue() 55 return time.gmtime(val+self._time_delta)[:5]
56 @classmethod
57 - def now(_):
58 return time.localtime()[:5]
59
60 -class DateTime1(DateTime):
61 # similar to DateTime, except getvalue includes seconds
62 - def __init__(self, *args, **kwargs):
63 super(DateTime1, self).__init__(*args, **kwargs) 64 kwargs.update({ 'sizeinbytes': 4 }) 65 if self._ismostderived(DateTime1): 66 self._update(args, kwargs)
67
68 - def getvalue(self):
69 """Unpack 32 bit value into date/time 70 @rtype: tuple 71 @return: (year, month, day, hour, minute, second) 72 """ 73 val=prototypes.UINTlsb.getvalue(self) 74 return time.gmtime(val+self._time_delta)[:6]
75
76 -class DateTime2(DateTime1):
77 # similar to DateTime, with different time delta 78 _time_delta=315532800.0
79 - def __init__(self, *args, **kwargs):
80 super(DateTime2, self).__init__(*args, **kwargs) 81 kwargs.update({ 'sizeinbytes': 4 }) 82 if self._ismostderived(DateTime2): 83 self._update(args, kwargs)
84
85 86 -class ExpiringTime(prototypes.UINTlsb):
87 # Implement a weird expiring time used by Samsung calendar events
88 - def __init__(self, *args, **kwargs):
89 super(ExpiringTime, self).__init__(*args, **kwargs) 90 dict={ 'sizeinbytes': 4 } 91 dict.update(kwargs) 92 if self._ismostderived(ExpiringTime): 93 self._update(args, dict)
94
95 - def _update(self, args, kwargs):
96 for k in 'constant', 'default', 'value': 97 if kwargs.has_key(k): 98 kwargs[k]=self._converttoint(kwargs[k]) 99 if len(args)==0: 100 pass 101 elif len(args)==1: 102 args=(self._converttoint(args[0]),) 103 else: 104 raise TypeError("expected (hour, minute, duration) as arg") 105 106 super(ExpiringTime, self)._update(args, kwargs) 107 self._complainaboutunusedargs(ExpiringTime, kwargs) 108 assert self._sizeinbytes==4
109 110 _delta=3786843600L
111 - def _converttoint(self, v):
112 assert len(v)==2 113 hour, min=v 114 return hour*3600+min*60+self._delta
115