Package phones ::
Module com_samsungschu750
|
|
1
2
3
4
5
6
7
8
9
10 """Communicate with the Samsung SCH-U750 (Alias 2) Phone"""
11
12
13
14
15 import common
16 import commport
17 import com_brew
18 import com_samsungschu470 as schu470
19 import p_samsungschu750 as p_schu750
20 import helpids
21 import prototypes
22
23 parentphone=schu470.Phone
24 -class Phone(com_brew.RealBrewProtocol2, parentphone):
25 desc='SCH-U750'
26 helpid=helpids.ID_PHONE_SAMSUNGSCHU750
27 protocolclass=p_schu750
28 serialsname='schu750'
29
30 my_model='SCH-U750/DM'
31 my_manufacturer='SAMSUNG'
32 detected_model='U750'
33
34 ringtone_noring_range='range_tones_preloaded_el_22'
35 ringtone_default_range='range_tones_preloaded_el_01'
36 builtin_ringtones={
37 'VZW Default Tone': ringtone_default_range,
38 'Animato': 'range_tones_preloaded_el_02',
39 'Belly Dance': 'range_tones_preloaded_el_03',
40 'Chair In The Sky': 'range_tones_preloaded_el_04',
41 'Classic Bell': 'range_tones_preloaded_el_05',
42 "Club In The 80's": 'range_tones_preloaded_el_06',
43 'Club Mix': 'range_tones_preloaded_el_07',
44 'Crossing Tone': 'range_tones_preloaded_el_08',
45 'Fell Groovy': 'range_tones_preloaded_el_09',
46 'Fuss & Feathers': 'range_tones_preloaded_el_10',
47 'Gutta Tone': 'range_tones_preloaded_el_11',
48 'Hip Hop Guy': 'range_tones_preloaded_el_12',
49 'Late Night': 'range_tones_preloaded_el_13',
50 'Mix Master': 'range_tones_preloaded_el_14',
51 'Popple Tone': 'range_tones_preloaded_el_15',
52 'Serene Tone': 'range_tones_preloaded_el_16',
53 'Sonic Boom': 'range_tones_preloaded_el_17',
54 'Spanish Guitar': 'range_tones_preloaded_el_18',
55 'The Floor': 'range_tones_preloaded_el_19',
56 'Trip To Heaven': 'range_tones_preloaded_el_20',
57 'Beep Once': 'range_tones_preloaded_el_21',
58 'No Ring': ringtone_noring_range,
59 }
60
61 builtin_sounds={
62 'Clapping': 'range_sound_preloaded_el_clapping',
63 'Crowd Roar': 'range_sound_preloaded_el_crowed_roar',
64 'Happy Birthday': 'range_sound_preloaded_el_birthday',
65 'Rainforest': 'range_sound_preloaded_el_rainforest',
66 'Train': 'range_sound_preloaded_el_train',
67
68 'Sound Beep Once': 'range_sound_preloaded_el_beep_once',
69 'Sound No Ring': 'range_sound_preloaded_el_no_rings',
70 }
71
72
73 builtin_wallpapers={}
74
75 - def __init__(self, logtarget, commport):
81
82
121
140
142 """Save ringtones to the phone"""
143 self.log('Writing ringtones to the phone')
144 try:
145 _del_list, _new_list=self._get_del_new_list('ringtone-index',
146 'ringtone',
147 merge,
148 fundamentals)
149 if __debug__:
150 self.log('Delete list: '+','.join(_del_list))
151 self.log('New list: '+','.join(_new_list))
152 _added_files_list=self._add_files('ringtone-index', 'ringtone',
153 _new_list, fundamentals)
154 if _added_files_list:
155 self._append_sounds_index_file(_added_files_list)
156 fundamentals['rebootphone']=True
157 except:
158 if __debug__:
159 raise
160 return fundamentals
161
162
167
168
183
184 @classmethod
185 - def detectphone(_, coms, likely_ports, res, _module, _log):
186 if not likely_ports:
187
188 return None
189 for port in likely_ports:
190 if not res.has_key(port):
191 res[port]={ 'mode_modem': None, 'mode_brew': None,
192 'manufacturer': None, 'model': None,
193 'firmware_version': None, 'esn': None,
194 'firmwareresponse': None }
195 try:
196 if res[port]['model']:
197
198 continue
199 p=_module.Phone(_log, commport.CommConnection(_log, port, timeout=1))
200
201 if not res[port]['mode_brew']:
202 res[port]['mode_brew']=p.is_mode_brew()
203 if res[port]['mode_brew']:
204 p.check_my_phone(res[port])
205 p.comm.close()
206 except:
207 if __debug__:
208 raise
209
210
211
212 parentcalendarentry=schu470.CalendarEntry
213 -class CalendarEntry(parentcalendarentry):
214 """Transient class to handle calendar data being sent to, retrieved from
215 the phone.
216 """
217
218 - def _build(self, entry):
219
220 self.cal.titlelen=len(entry.desc_loc)
221 self.cal.title=entry.desc_loc
222 self.cal.start=entry.start
223 self.cal.end=entry.end
224 self.cal.repeat=self._build_repeat(entry)
225 self.cal.alarm=self._build_alarm(entry)
226 self.cal.alert=self._build_alert(entry)
227 self.cal.duration=self._build_duration(entry)
228 self.cal.timezone=self._build_tz()
229 self.cal.creationtime=self.phone._time_now()
230 _ringtone=self.phone.get_ringtone_range(entry.ringtone,
231 self.fundamentals)
232 self.cal.ringtonelen=len(_ringtone)
233 self.cal.ringtone=_ringtone
234
235
237 return self.cal.end[:5]
238
239
240 parentpbentry=schu470.PBEntry
241 -class PBEntry(parentpbentry):
242
243 _IM_Type_String={ 1: 'AIM', 2: 'Yahoo!', 3: 'WL Messenger' }
244 _IM_Type_Index={ 'AIM': 1, 'Yahoo!': 2, 'WL Messenger': 3 }
245
246
247 - def _build_address(self, address):
248 if address:
249 self.pb.address=address
250
251 - def _build_IM(self, im):
252 if im:
253 self.pb.im_type=self._IM_Type_Index.get(im.get('type', ''), 1)
254 self.pb.im_name=im.get('username', '')
255
256 - def _build(self, entry):
257 parentpbentry._build(self, entry)
258 self._build_address(entry.get('addresses', [{}])[0])
259 self._build_IM(entry.get('ims', [{}])[0])
260
261
263 if not self.pb.has_group:
264
265 return
266 _groups=self.fundamentals.get('groups', {})
267 _res=[]
268
269 for _index, _item in _groups.items():
270 if (1<<_index)&self.pb.group:
271 _res.append({ 'category': _item['name'] })
272 if _res:
273 entry['categories']=_res
274
276 if not self.pb.has_cached_wp:
277 return
278
279 _wp=self.pb.cached_wp.split('|')[1]
280
281 if not _wp.startswith('Preloaded'):
282
283 entry['wallpapers']=[{ 'wallpaper': _wp+'.jpg',
284 'use': 'call' }]
285
287 if self.pb.has_im_name:
288 entry['ims']=[{ 'type': self._IM_Type_String.get(self.pb.im_type, ''),
289 'username': self.pb.im_name }]
290
292 if self.pb.has_address:
293 entry['addresses']=[self.pb.address]
294
295 - def getvalue(self):
300
301
302 parentprofile=schu470.Profile
304 serialsname=Phone.serialsname
305 WALLPAPER_WIDTH=240
306 WALLPAPER_HEIGHT=274
307
308 autodetect_delay=3
309 usbids=( ( 0x04e8, 0x6640, 2),)
310 deviceclasses=("serial",)
311 BP_Calendar_Version=3
312
313 phone_manufacturer=Phone.my_manufacturer
314 phone_model=Phone.my_model
315
316 RINGTONE_LIMITS= {
317 'MAXSIZE': 100000
318 }
319 WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:"
320 RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789 ._:"
321
322
323 ringtoneorigins=('sounds',)
324
325 excluded_ringtone_origins=()
326
327 imageorigins={}
328 imageorigins.update(common.getkv(parentprofile.stockimageorigins, "images"))
329 imageorigins.update(common.getkv(parentprofile.stockimageorigins, "video"))
330
331 excluded_wallpaper_origins=('video',)
332
333
334 imagetargets={}
335 imagetargets.update(common.getkv(parentprofile.stockimagetargets, "wallpaper",
336 {'width': 240, 'height': 274, 'format': "JPEG"}))
337 imagetargets.update(common.getkv(parentprofile.stockimagetargets, "pictureid",
338 {'width': 80, 'height': 106, 'format': "JPEG"}))
341
344
345 _supportedsyncs=(
346 ('phonebook', 'read', None),
347 ('phonebook', 'write', 'OVERWRITE'),
348 ('calendar', 'read', None),
349 ('calendar', 'write', 'OVERWRITE'),
350 ('ringtone', 'read', None),
351 ('ringtone', 'write', 'MERGE'),
352 ('wallpaper', 'read', None),
353 ('wallpaper', 'write', 'MERGE'),
354 ('memo', 'read', None),
355 ('memo', 'write', 'OVERWRITE'),
356 ('call_history', 'read', None),
357 ('sms', 'read', None),
358 )
359
360 field_color_data={
361 'phonebook': {
362 'name': {
363 'first': 1, 'middle': 1, 'last': 1, 'full': 1,
364 'nickname': 0, 'details': 1 },
365 'number': {
366 'type': 5, 'speeddial': 5, 'number': 5,
367 'details': 5,
368 'ringtone': False, 'wallpaper': False },
369 'email': 2,
370 'email_details': {
371 'emailspeeddial': False, 'emailringtone': False,
372 'emailwallpaper': False },
373 'address': {
374 'type': 0, 'company': 0, 'street': 1, 'street2': 0,
375 'city': 1, 'state': 1, 'postalcode': 1, 'country': 1,
376 'details': 1 },
377 'url': 0,
378 'memo': 1,
379 'category': 1,
380 'wallpaper': 1,
381 'ringtone': 1,
382 'storage': 0,
383 'im': 1,
384 },
385 'calendar': {
386 'description': True, 'location': True, 'allday': False,
387 'start': True, 'end': True, 'priority': False,
388 'alarm': True, 'vibrate': True,
389 'repeat': True,
390 'memo': False,
391 'category': False,
392 'wallpaper': False,
393 'ringtone': True,
394 },
395 'memo': {
396 'subject': False,
397 'date': False,
398 'secret': False,
399 'category': False,
400 'memo': True,
401 },
402 'todo': {
403 'summary': False,
404 'status': False,
405 'due_date': False,
406 'percent_complete': False,
407 'completion_date': False,
408 'private': False,
409 'priority': False,
410 'category': False,
411 'memo': False,
412 },
413 }
414