Package phones :: Module com_motov3mm
[hide private]
[frames] | no frames]

Source Code for Module phones.com_motov3mm

  1  ### BITPIM 
  2  ### 
  3  ### Copyright (C) 2007 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: com_motov3mm.py 4541 2008-01-04 03:41:51Z djpham $ 
  9   
 10  """Communicate with Motorola phones using AT commands""" 
 11  import time 
 12   
 13  import common 
 14  import com_motov710m as v710m 
 15  import com_motov3m as v3m 
 16  import prototypes 
 17  import p_motov3m 
 18  import helpids 
 19   
 20  parentphone=v710m.Phone 
21 -class Phone(parentphone):
22 """ Talk to a Motorola V3mM phone""" 23 desc='Moto-V3mM' 24 helpid=helpids.ID_PHONE_MOTOV3MM 25 protocolclass=p_motov3m 26 serialsname='motov3mm' 27 MODEOBEX='modeobex' 28 29 builtinringtones=( 30 (0, ('Silent',)), 31 (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash', 32 'Vibe Pulse')), 33 ) 34
35 - def __init__(self, logtarget, commport):
36 parentphone.__init__(self, logtarget, commport) 37 self.obex=None
38
39 - def _get_wallpaper_index(self):
40 res={} 41 _files=self.listfiles(self.protocolclass.WP_PATH).keys() 42 _files.sort() 43 for _index,_filename in enumerate(_files): 44 _name=common.basename(_filename) 45 if self.protocolclass.valid_wp_filename(_name): 46 res[_index]={ 'name': _name, 47 'filename': _filename, 48 'origin': 'images' } 49 return res
50
51 - def _get_ringtone_index(self):
52 res={} 53 # first the builtin ones 54 for _l in self.builtinringtones: 55 _idx=_l[0] 56 for _e in _l[1]: 57 res[_idx]={ 'name': _e, 'origin': 'builtin' } 58 _idx+=1 59 # now the custome one 60 _buf=prototypes.buffer(self.getfilecontents( 61 self.protocolclass.RT_INDEX_FILE)) 62 _idx_file=self.protocolclass.ringtone_index_file() 63 _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file') 64 for _entry in _idx_file.items: 65 _filename=self.decode_utf16(_entry.name) 66 _name=common.basename(_filename) 67 if self.protocolclass.valid_rt_filename(_name): 68 res[_entry.index]={ 'name': _name, 69 'filename': _filename, 70 'type': _entry.ringtone_type, 71 'origin': 'ringers' } 72 return res
73
74 - def getringtones(self, fundamentals):
75 """Retrieve ringtones data""" 76 self.log('Reading ringtones') 77 self.setmode(self.MODEOBEX) 78 _res={} 79 _rt_index=fundamentals.get('ringtone-index', {}) 80 for _entry in _rt_index.values(): 81 if _entry.has_key('filename'): 82 try: 83 _res[_entry['name']]=self.obex.getfilecontents( 84 self.protocolclass.OBEXName(_entry['filename'])) 85 except: 86 self.log('Failed to read media file %s'%_entry['filename']) 87 fundamentals['ringtone']=_res 88 self.setmode(self.MODEMODEM) 89 return fundamentals
90
91 - def saveringtones(self, fundamentals, merge):
92 """Save ringtones to the phone""" 93 self.log('Writing ringtones to the phone') 94 try: 95 _del_list, _new_list=self._get_del_new_list('ringtone-index', 96 'ringtone', 97 merge, 98 fundamentals, 99 frozenset(['ringers'])) 100 # delete files, need to be in OBEX mode 101 self.setmode(self.MODEOBEX) 102 self._del_files('ringtone-index', 'audio', 103 _del_list, fundamentals) 104 # and add new files, need to be in OBEX mode 105 self._add_files('ringtone-index', 'ringtone', 'audio', 106 _new_list, fundamentals) 107 except: 108 if __debug__: 109 self.setmode(self.MODEMODEM) 110 raise 111 self.setmode(self.MODEMODEM) 112 return fundamentals
113
114 - def savewallpapers(self, fundamentals, merge):
115 """Save wallpapers to the phone""" 116 self.log('Writing wallpapers to the phone') 117 try: 118 _del_list, _new_list=self._get_del_new_list('wallpaper-index', 119 'wallpapers', 120 merge, 121 fundamentals, 122 frozenset(['images'])) 123 # delete files, need to be in OBEX mode 124 self.setmode(self.MODEOBEX) 125 self._del_files('wallpaper-index', 'picture', 126 _del_list, fundamentals) 127 # and add new files, need to be in OBEX mode 128 self._add_files('wallpaper-index', 'wallpapers', 'picture', 129 _new_list, fundamentals) 130 except: 131 if __debug__: 132 self.setmode(self.MODEMODEM) 133 raise 134 self.setmode(self.MODEMODEM) 135 return fundamentals
136 137 #------------------------------------------------------------------------------- 138 parentprofile=v3m.Profile
139 -class Profile(parentprofile):
140 serialsname=Phone.serialsname 141 phone_model='V3mM' 142 143 _supportedsyncs=( 144 ('phonebook', 'read', None), # all phonebook reading 145 ('phonebook', 'write', 'OVERWRITE'), # only overwriting phonebook 146 ('calendar', 'read', None), # all calendar reading 147 ('calendar', 'write', 'OVERWRITE'), # only overwriting calendar 148 ('ringtone', 'read', None), # all ringtone reading 149 ('ringtone', 'write', None), 150 ('ringtone', 'write', 'OVERWRITE'), 151 ('wallpaper', 'read', None), # all wallpaper reading 152 ('wallpaper', 'write', None), 153 ('wallpaper', 'write', 'OVERWRITE'), 154 ('sms', 'read', None), 155 )
156