PyXR

c:\projects\bitpim\src \ phones \ com_motov3mm.py



0001 ### BITPIM
0002 ###
0003 ### Copyright (C) 2007 Joe Pham <djpham@bitpim.org>
0004 ###
0005 ### This program is free software; you can redistribute it and/or modify
0006 ### it under the terms of the BitPim license as detailed in the LICENSE file.
0007 ###
0008 ### $Id: com_motov3mm.py 4541 2008-01-04 03:41:51Z djpham $
0009 
0010 """Communicate with Motorola phones using AT commands"""
0011 import time
0012 
0013 import common
0014 import com_motov710m as v710m
0015 import com_motov3m as v3m
0016 import prototypes
0017 import p_motov3m
0018 import helpids
0019 
0020 parentphone=v710m.Phone
0021 class Phone(parentphone):
0022     """ Talk to a Motorola V3mM phone"""
0023     desc='Moto-V3mM'
0024     helpid=helpids.ID_PHONE_MOTOV3MM
0025     protocolclass=p_motov3m
0026     serialsname='motov3mm'
0027     MODEOBEX='modeobex'
0028 
0029     builtinringtones=(
0030         (0, ('Silent',)),
0031         (5, ('Vibe Dot', 'Vibe Dash', 'Vibe Dot Dot', 'Vibe Dot Dash',
0032              'Vibe Pulse')),
0033         )
0034 
0035     def __init__(self, logtarget, commport):
0036         parentphone.__init__(self, logtarget, commport)
0037         self.obex=None
0038 
0039     def _get_wallpaper_index(self):
0040         res={}
0041         _files=self.listfiles(self.protocolclass.WP_PATH).keys()
0042         _files.sort()
0043         for _index,_filename in enumerate(_files):
0044             _name=common.basename(_filename)
0045             if self.protocolclass.valid_wp_filename(_name):
0046                 res[_index]={ 'name': _name,
0047                               'filename': _filename,
0048                               'origin': 'images' }
0049         return res
0050 
0051     def _get_ringtone_index(self):
0052         res={}
0053         # first the builtin ones
0054         for _l in self.builtinringtones:
0055             _idx=_l[0]
0056             for _e in _l[1]:
0057                 res[_idx]={ 'name': _e, 'origin': 'builtin' }
0058                 _idx+=1
0059         # now the custome one
0060         _buf=prototypes.buffer(self.getfilecontents(
0061             self.protocolclass.RT_INDEX_FILE))
0062         _idx_file=self.protocolclass.ringtone_index_file()
0063         _idx_file.readfrombuffer(_buf, logtitle='Read ringtone index file')
0064         for _entry in _idx_file.items:
0065             _filename=self.decode_utf16(_entry.name)
0066             _name=common.basename(_filename)
0067             if self.protocolclass.valid_rt_filename(_name):
0068                 res[_entry.index]={ 'name': _name,
0069                                     'filename': _filename,
0070                                     'type': _entry.ringtone_type,
0071                                     'origin': 'ringers' }
0072         return res
0073 
0074     def getringtones(self, fundamentals):
0075         """Retrieve ringtones data"""
0076         self.log('Reading ringtones')
0077         self.setmode(self.MODEOBEX)
0078         _res={}
0079         _rt_index=fundamentals.get('ringtone-index', {})
0080         for _entry in _rt_index.values():
0081             if _entry.has_key('filename'):
0082                 try:
0083                     _res[_entry['name']]=self.obex.getfilecontents(
0084                         self.protocolclass.OBEXName(_entry['filename']))
0085                 except:
0086                     self.log('Failed to read media file %s'%_entry['filename'])
0087         fundamentals['ringtone']=_res
0088         self.setmode(self.MODEMODEM)
0089         return fundamentals
0090 
0091     def saveringtones(self, fundamentals, merge):
0092         """Save ringtones to the phone"""
0093         self.log('Writing ringtones to the phone')
0094         try:
0095             _del_list, _new_list=self._get_del_new_list('ringtone-index',
0096                                                         'ringtone',
0097                                                         merge,
0098                                                         fundamentals,
0099                                                         frozenset(['ringers']))
0100             # delete files, need to be in OBEX mode
0101             self.setmode(self.MODEOBEX)
0102             self._del_files('ringtone-index', 'audio',
0103                             _del_list, fundamentals)
0104             # and add new files, need to be in OBEX mode
0105             self._add_files('ringtone-index', 'ringtone', 'audio',
0106                             _new_list, fundamentals)
0107         except:
0108             if __debug__:
0109                 self.setmode(self.MODEMODEM)
0110                 raise
0111         self.setmode(self.MODEMODEM)
0112         return fundamentals
0113 
0114     def savewallpapers(self, fundamentals, merge):
0115         """Save wallpapers to the phone"""
0116         self.log('Writing wallpapers to the phone')
0117         try:
0118             _del_list, _new_list=self._get_del_new_list('wallpaper-index',
0119                                                         'wallpapers',
0120                                                         merge,
0121                                                         fundamentals,
0122                                                         frozenset(['images']))
0123             # delete files, need to be in OBEX mode
0124             self.setmode(self.MODEOBEX)
0125             self._del_files('wallpaper-index', 'picture',
0126                             _del_list, fundamentals)
0127             # and add new files, need to be in OBEX mode
0128             self._add_files('wallpaper-index', 'wallpapers', 'picture',
0129                                     _new_list, fundamentals)
0130         except:
0131             if __debug__:
0132                 self.setmode(self.MODEMODEM)
0133                 raise
0134         self.setmode(self.MODEMODEM)
0135         return fundamentals
0136 
0137 #-------------------------------------------------------------------------------
0138 parentprofile=v3m.Profile
0139 class Profile(parentprofile):
0140     serialsname=Phone.serialsname
0141     phone_model='V3mM'
0142 
0143     _supportedsyncs=(
0144         ('phonebook', 'read', None),  # all phonebook reading
0145         ('phonebook', 'write', 'OVERWRITE'),  # only overwriting phonebook
0146         ('calendar', 'read', None),   # all calendar reading
0147         ('calendar', 'write', 'OVERWRITE'),   # only overwriting calendar
0148         ('ringtone', 'read', None),   # all ringtone reading
0149         ('ringtone', 'write', None),
0150         ('ringtone', 'write', 'OVERWRITE'),
0151         ('wallpaper', 'read', None),  # all wallpaper reading
0152         ('wallpaper', 'write', None),
0153         ('wallpaper', 'write', 'OVERWRITE'),
0154         ('sms', 'read', None),
0155         )
0156 

Generated by PyXR 0.9.4