Re: Support for VX9100 phonebook in svn
"Aaron G. Stemen" <[email protected]>
| Newsgroups | gmane.comp.mobile.bitpim.devel |
|---|---|
| Message-ID | <[email protected]> |
I figured out what was going on. It was in fact saving the data to the phone book table in the database (thank you sqlite command line utility!). Attached is a patch that will keep the ICE contacts in sync with the phone book. I tested it out a little bit successfully. Joe, I'm sure you will anyway, but you may want to look at the changes that I made to see if they should be generalized at all, or if there's a more efficient way of doing a couple of the steps. Unfortunately, my Python background is limited to what I've done since we began working on support for the VX-9100. This patch is for the code with the most recent changes in SVN that Joe committed a couple days ago. -A Aaron G. Stemen wrote: > Okay Joe, I'm starting to draw a blank. > > Essentially, what I started was adding a new column to the phone book > table for an ICE index number. I was trying to treat it much like the > speed dials, except it gets applied to the phone book entry and not > the phone number entry. I'm not sure if it's actually storing the ICE > index in the table or not. It at least gets past the phone book > import without exception. > > When I attempt to write to the phone, the ICE index is not returned in > the phone book data, so I can't attempt to update it. I have most of > the code in place, with some commented out with TODO. Would you be > able to take a look and see what I'm missing? > > Thanks! > > -A > ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ BitPim-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bitpim-devel
VX9100_with_ICE.patch
(text/plain, 27.9 KB)
Index: src/database.py
===================================================================
--- src/database.py (revision 4633)
+++ src/database.py (working copy)
@@ -1020,6 +1020,7 @@
'flags': ['secret'],
'memos': ['memo'],
'numbers': ['number', 'type', 'speeddial'],
+ 'iceindexes': ['iceindex']
# serials is in parent object
})
_knowndictproperties=basedataobject._knowndictproperties.copy()
Index: src/phonebook.py
===================================================================
--- src/phonebook.py (revision 4633)
+++ src/phonebook.py (working copy)
@@ -144,6 +144,7 @@
'memos': ['memo'],
'numbers': ['number', 'type', 'speeddial',
'ringtone', 'wallpaper' ],
+ 'iceindexes': ['iceindex'],
## 'maillist': ['entry', 'speeddial',
## 'ringtone', 'wallpaper' ],
# serials is in parent object
@@ -297,6 +298,7 @@
"Memo4", ("memos", 3, None, "memo", True),
"Memo5", ("memos", 4, None, "memo", True),
+ "ICEindex", ("iceindexes", 0, None, "iceindex", False)
]
ll=[]
@@ -553,7 +555,7 @@
class PhoneWidget(wx.Panel, widgets.BitPimWidget):
"""Main phone editing/displaying widget"""
- CURRENTFILEVERSION=2
+ CURRENTFILEVERSION=3
# Data selector const
_Current_Data=0
_Historic_Data=1
@@ -1145,6 +1147,11 @@
dict['result']['phonebook']={}
dict['result']['categories']=[]
+ if version==2:
+ wx.MessageBox("BitPim can't upgrade your old phone data stored on disk, and has discarded it. Please re-read your phonebook from the phone. If you downgrade, please delete the phonebook directory in the BitPim data directory first", "Phonebook file format not supported", wx.OK|wx.ICON_EXCLAMATION)
+ version=3
+ dict['result']['iceindexes']=[]
+
def clear(self):
self._data={}
self.dt.OnDataUpdated()
Index: src/phones/com_lgvx9100.py
===================================================================
--- src/phones/com_lgvx9100.py (revision 4633)
+++ src/phones/com_lgvx9100.py (working copy)
@@ -149,6 +149,12 @@
# Read speed dials first -- same file format as the VX-8100
_speeds=self._get_speeddials()
+ # Read the emergency contacts list
+ self.log("Reading ICE entries")
+ _ices=self.readobject(self.protocolclass.ice_file_name,
+ self.protocolclass.iceentryfile,
+ logtitle='Reading ICE entries')
+
self.log("Reading phonebook entries")
pb_entries=self.readobject(self.protocolclass.pb_file_name,
self.protocolclass.pbfile,
@@ -177,7 +183,8 @@
pbook[_cnt]=self.extractphonebookentry(pb_entry, pb_numbers,
_speeds, result,
_rt_ids.get(ring_pathf.items[_cnt].pathname, None),
- _wp_ids.get(picid_pathf.items[_cnt].pathname, None))
+ _wp_ids.get(picid_pathf.items[_cnt].pathname, None),
+ _ices)
self.progress(_cnt, self.protocolclass.NUMPHONEBOOKENTRIES, pb_entry.name)
except common.PhoneBookBusyException:
@@ -202,7 +209,7 @@
return pbook
def extractphonebookentry(self, entry, numbers, speeds, fundamentals,
- rt_name, wp_name):
+ rt_name, wp_name, ices):
"""Return a phonebook entry in BitPim format. This is called from getphonebook."""
res={}
# serials
@@ -249,8 +256,21 @@
print "can't find ringtone for index",entry.ringtone
# assume we are like the VX-8100 in this regard -- looks correct
res=self._assignpbtypeandspeeddialsbytype(entry, numbers, speeds, res)
+
+ # assign the ICE entry to the associated number to keep them in sync
+ res=self._assigniceentry(entry, numbers, ices, res)
return res
-
+
+ def _assigniceentry(self, entry, numbers, ices, res):
+ res['iceindexes']=[ { 'iceindex': 0xffff } ]
+ for i in range(self.protocolclass.NUMEMERGENCYCONTACTS):
+ iceentry=ices.items[i]
+ if iceentry.pb_index > 0 and iceentry.pb_index <= self.protocolclass.NUMPHONEBOOKENTRIES:
+ ## this is where we assign the ice index number to the number
+ if entry.entry_number0 == (iceentry.pb_index):
+ res['iceindexes']=[ { 'iceindex': iceentry.entry_number } ]
+ return res
+
def _assignpbtypeandspeeddialsbytype(self, entry, numbers, speeds, res):
# for some phones (e.g. vx8100) the speeddial numberindex is really the numbertype (now why would LG want to change this!)
res['numbers']=[]
@@ -291,7 +311,7 @@
ring_pathf=self.protocolclass.PathIndexFile()
picid_pathf=self.protocolclass.PathIndexFile()
- # the pbentry.dat will will be overwritten so there is no need to delete entries
+ # the pbentry.dat will be overwritten so there is no need to delete entries
pbook = data.get('phonebook', {})
keys = pbook.keys ()
keys.sort ()
@@ -304,13 +324,28 @@
pb_entries = self.protocolclass.pbfile()
pn_entries=self.protocolclass.pnfile()
speeddials={}
+
+ ices=self.protocolclass.iceentryfile()
+ for i in range(self.protocolclass.NUMEMERGENCYCONTACTS):
+ ices.items.append(self.protocolclass.iceentry())
+
for i in keys:
pb_entries.items.append(self.make_entry (pn_entries, speeddials,
entry_num0, entry_num1,
pbook[i], data,
ring_pathf,_rt_index,
picid_pathf, _wp_index))
+
+ iceindex = pbook[i].get('iceindex', 0xFFFF)
+ if iceindex < self.protocolclass.NUMEMERGENCYCONTACTS:
+ ice = self.protocolclass.iceentry()
+ ice.entry_assigned = 1
+ ice.entry_number = iceindex
+ ice.pb_index = entry_num0;
+ ices.items[iceindex] = ice
+
entry_num0 += 1
+
if entry_num0 >= self.protocolclass.NUMPHONEBOOKENTRIES:
self.log ("Maximum number of phonebook entries reached")
break
@@ -336,11 +371,16 @@
ring_pathf, logtitle='Writing ringtone paths',
uselocalfs=DEBUG1)
# write wallpaer index
- self.log('Writing pciture ID')
+ self.log('Writing picture ID')
self.writeobject(self.protocolclass.WPPathIndexFile,
picid_pathf, logtitle='Writing wallpaper paths',
uselocalfs=DEBUG1)
# might need to update the ICE index as well
+ # write the ICE entry file
+ self.log("Writing ICE entries")
+ self.writeobject(self.protocolclass.ice_file_name,
+ ices, logtitle='Writing ICE entries',
+ uselocalfs=DEBUG1)
# update speed dials
req=self.protocolclass.speeddials()
# slot 0 is always unused
@@ -654,6 +694,9 @@
# ringtones, wallpaper
e['ringtone']=helper.getringtone(entry.get('ringtones', []), 'call', None)
e['wallpaper']=helper.getwallpaper(entry.get('wallpapers', []), 'call', None)
+
+ if entry.get('iceindexes', []) != []:
+ e['iceindex']=entry['iceindexes'][0]['iceindex'];
results[pbentry]=e
Index: src/phones/p_lgvx9100.p
===================================================================
--- src/phones/p_lgvx9100.p (revision 4633)
+++ src/phones/p_lgvx9100.p (working copy)
@@ -29,6 +29,8 @@
FIRSTSPEEDDIAL=1
LASTSPEEDDIAL=999
+NUMEMERGENCYCONTACTS=3
+
BREW_FILE_SYSTEM=2
INDEX_RT_TYPE=257
@@ -43,6 +45,7 @@
pb_group_filename='pim/pbgroup.dat'
pb_recordid_filename='pim/record_id.dat'
+ice_file_name = 'pim/pbiceentry.dat'
%}
@@ -185,3 +188,19 @@
# record_id.dat
PACKET RecordIdEntry:
4 UINT idnum
+
+PACKET iceentry:
+ "ICE index entries"
+ 2 UINT { 'default': 0x0000 } +entry_assigned "0 if not assigned, 1 if assigned"
+ 2 UINT { 'default': 0x0000 } +entry_number "0-based ICE entry number when assigned, 0 if unassigned"
+ 2 UINT { 'default': 0xFFFF } +pb_index "0-based phone book entry number"
+ 82 DATA { 'default': '\x00'*82 } +dontcare
+ %{
+ def valid(self):
+ return self.entry_number<NUMEMERGENCYCONTACTS
+ %}
+
+PACKET iceentryfile:
+ * LIST { 'elementclass': iceentry,
+ 'createdefault': True,
+ 'length': NUMEMERGENCYCONTACTS } +items
Index: src/phones/p_lgvx9100.py
===================================================================
--- src/phones/p_lgvx9100.py (revision 4633)
+++ src/phones/p_lgvx9100.py (working copy)
@@ -20,6 +20,8 @@
FIRSTSPEEDDIAL=1
LASTSPEEDDIAL=999
+NUMEMERGENCYCONTACTS=3
+
BREW_FILE_SYSTEM=2
INDEX_RT_TYPE=257
@@ -34,6 +36,7 @@
pb_group_filename='pim/pbgroup.dat'
pb_recordid_filename='pim/record_id.dat'
+ice_file_name = 'pim/pbiceentry.dat'
class indexentry(BaseProtogenClass):
__fields=['filename', 'size', 'date', 'type', 'dunno']
@@ -714,7 +717,7 @@
self.__field_group.writetobuffer(buf)
try: self.__field_emails
except:
- self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_113, 'length': NUMEMAILS})
+ self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_116, 'length': NUMEMAILS})
self.__field_emails.writetobuffer(buf)
try: self.__field_ringtone
except:
@@ -726,11 +729,11 @@
self.__field_wallpaper.writetobuffer(buf)
try: self.__field_numbertypes
except:
- self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_117, 'length': NUMPHONENUMBERS})
+ self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_120, 'length': NUMPHONENUMBERS})
self.__field_numbertypes.writetobuffer(buf)
try: self.__field_numberindices
except:
- self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_119, 'length': NUMPHONENUMBERS})
+ self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_122, 'length': NUMPHONENUMBERS})
self.__field_numberindices.writetobuffer(buf)
try: self.__field_memo
except:
@@ -770,15 +773,15 @@
self.__field_name.readfrombuffer(buf)
self.__field_group=UINT(**{'sizeinbytes': 2, 'default': 0 })
self.__field_group.readfrombuffer(buf)
- self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_113, 'length': NUMEMAILS})
+ self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_116, 'length': NUMEMAILS})
self.__field_emails.readfrombuffer(buf)
self.__field_ringtone=UINT(**{'sizeinbytes': 2, 'default': 0xffff })
self.__field_ringtone.readfrombuffer(buf)
self.__field_wallpaper=UINT(**{'sizeinbytes': 2, 'default': 0 })
self.__field_wallpaper.readfrombuffer(buf)
- self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_117, 'length': NUMPHONENUMBERS})
+ self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_120, 'length': NUMPHONENUMBERS})
self.__field_numbertypes.readfrombuffer(buf)
- self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_119, 'length': NUMPHONENUMBERS})
+ self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_122, 'length': NUMPHONENUMBERS})
self.__field_numberindices.readfrombuffer(buf)
self.__field_memo=USTRING(**{'sizeinbytes': 69, 'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING })
self.__field_memo.readfrombuffer(buf)
@@ -915,14 +918,14 @@
def __getfield_emails(self):
try: self.__field_emails
except:
- self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_113, 'length': NUMEMAILS})
+ self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_116, 'length': NUMEMAILS})
return self.__field_emails.getvalue()
def __setfield_emails(self, value):
if isinstance(value,LIST):
self.__field_emails=value
else:
- self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx9100_113, 'length': NUMEMAILS})
+ self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx9100_116, 'length': NUMEMAILS})
def __delfield_emails(self): del self.__field_emails
@@ -963,14 +966,14 @@
def __getfield_numbertypes(self):
try: self.__field_numbertypes
except:
- self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_117, 'length': NUMPHONENUMBERS})
+ self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_120, 'length': NUMPHONENUMBERS})
return self.__field_numbertypes.getvalue()
def __setfield_numbertypes(self, value):
if isinstance(value,LIST):
self.__field_numbertypes=value
else:
- self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx9100_117, 'length': NUMPHONENUMBERS})
+ self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx9100_120, 'length': NUMPHONENUMBERS})
def __delfield_numbertypes(self): del self.__field_numbertypes
@@ -979,14 +982,14 @@
def __getfield_numberindices(self):
try: self.__field_numberindices
except:
- self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_119, 'length': NUMPHONENUMBERS})
+ self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_122, 'length': NUMPHONENUMBERS})
return self.__field_numberindices.getvalue()
def __setfield_numberindices(self, value):
if isinstance(value,LIST):
self.__field_numberindices=value
else:
- self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx9100_119, 'length': NUMPHONENUMBERS})
+ self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx9100_122, 'length': NUMPHONENUMBERS})
def __delfield_numberindices(self): del self.__field_numberindices
@@ -1070,7 +1073,7 @@
-class _gen_p_lgvx9100_113(BaseProtogenClass):
+class _gen_p_lgvx9100_116(BaseProtogenClass):
'Anonymous inner class'
__fields=['email']
@@ -1079,8 +1082,8 @@
# What was supplied to this function
dict.update(kwargs)
# Parent constructor
- super(_gen_p_lgvx9100_113,self).__init__(**dict)
- if self.__class__ is _gen_p_lgvx9100_113:
+ super(_gen_p_lgvx9100_116,self).__init__(**dict)
+ if self.__class__ is _gen_p_lgvx9100_116:
self._update(args,dict)
@@ -1089,7 +1092,7 @@
def _update(self, args, kwargs):
- super(_gen_p_lgvx9100_113,self)._update(args,kwargs)
+ super(_gen_p_lgvx9100_116,self)._update(args,kwargs)
keys=kwargs.keys()
for key in keys:
if key in self.__fields:
@@ -1097,7 +1100,7 @@
del kwargs[key]
# Were any unrecognized kwargs passed in?
if __debug__:
- self._complainaboutunusedargs(_gen_p_lgvx9100_113,kwargs)
+ self._complainaboutunusedargs(_gen_p_lgvx9100_116,kwargs)
if len(args):
dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}
dict2.update(kwargs)
@@ -1145,7 +1148,7 @@
-class _gen_p_lgvx9100_117(BaseProtogenClass):
+class _gen_p_lgvx9100_120(BaseProtogenClass):
'Anonymous inner class'
__fields=['numbertype']
@@ -1154,8 +1157,8 @@
# What was supplied to this function
dict.update(kwargs)
# Parent constructor
- super(_gen_p_lgvx9100_117,self).__init__(**dict)
- if self.__class__ is _gen_p_lgvx9100_117:
+ super(_gen_p_lgvx9100_120,self).__init__(**dict)
+ if self.__class__ is _gen_p_lgvx9100_120:
self._update(args,dict)
@@ -1164,7 +1167,7 @@
def _update(self, args, kwargs):
- super(_gen_p_lgvx9100_117,self)._update(args,kwargs)
+ super(_gen_p_lgvx9100_120,self)._update(args,kwargs)
keys=kwargs.keys()
for key in keys:
if key in self.__fields:
@@ -1172,7 +1175,7 @@
del kwargs[key]
# Were any unrecognized kwargs passed in?
if __debug__:
- self._complainaboutunusedargs(_gen_p_lgvx9100_117,kwargs)
+ self._complainaboutunusedargs(_gen_p_lgvx9100_120,kwargs)
if len(args):
dict2={'sizeinbytes': 1, 'default': 0 }
dict2.update(kwargs)
@@ -1220,7 +1223,7 @@
-class _gen_p_lgvx9100_119(BaseProtogenClass):
+class _gen_p_lgvx9100_122(BaseProtogenClass):
'Anonymous inner class'
__fields=['numberindex']
@@ -1229,8 +1232,8 @@
# What was supplied to this function
dict.update(kwargs)
# Parent constructor
- super(_gen_p_lgvx9100_119,self).__init__(**dict)
- if self.__class__ is _gen_p_lgvx9100_119:
+ super(_gen_p_lgvx9100_122,self).__init__(**dict)
+ if self.__class__ is _gen_p_lgvx9100_122:
self._update(args,dict)
@@ -1239,7 +1242,7 @@
def _update(self, args, kwargs):
- super(_gen_p_lgvx9100_119,self)._update(args,kwargs)
+ super(_gen_p_lgvx9100_122,self)._update(args,kwargs)
keys=kwargs.keys()
for key in keys:
if key in self.__fields:
@@ -1247,7 +1250,7 @@
del kwargs[key]
# Were any unrecognized kwargs passed in?
if __debug__:
- self._complainaboutunusedargs(_gen_p_lgvx9100_119,kwargs)
+ self._complainaboutunusedargs(_gen_p_lgvx9100_122,kwargs)
if len(args):
dict2={'sizeinbytes': 2, 'default': 0xffff }
dict2.update(kwargs)
@@ -2109,3 +2112,232 @@
+class iceentry(BaseProtogenClass):
+ "ICE index entries"
+ __fields=['entry_assigned', 'entry_number', 'pb_index', 'dontcare']
+
+ def __init__(self, *args, **kwargs):
+ dict={}
+ # What was supplied to this function
+ dict.update(kwargs)
+ # Parent constructor
+ super(iceentry,self).__init__(**dict)
+ if self.__class__ is iceentry:
+ self._update(args,dict)
+
+
+ def getfields(self):
+ return self.__fields
+
+
+ def _update(self, args, kwargs):
+ super(iceentry,self)._update(args,kwargs)
+ keys=kwargs.keys()
+ for key in keys:
+ if key in self.__fields:
+ setattr(self, key, kwargs[key])
+ del kwargs[key]
+ # Were any unrecognized kwargs passed in?
+ if __debug__:
+ self._complainaboutunusedargs(iceentry,kwargs)
+ if len(args): raise TypeError('Unexpected arguments supplied: '+`args`)
+ # Make all P fields that haven't already been constructed
+
+
+ def writetobuffer(self,buf,autolog=True,logtitle="<written data>"):
+ 'Writes this packet to the supplied buffer'
+ self._bufferstartoffset=buf.getcurrentoffset()
+ try: self.__field_entry_assigned
+ except:
+ self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ self.__field_entry_assigned.writetobuffer(buf)
+ try: self.__field_entry_number
+ except:
+ self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ self.__field_entry_number.writetobuffer(buf)
+ try: self.__field_pb_index
+ except:
+ self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF })
+ self.__field_pb_index.writetobuffer(buf)
+ try: self.__field_dontcare
+ except:
+ self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 })
+ self.__field_dontcare.writetobuffer(buf)
+ self._bufferendoffset=buf.getcurrentoffset()
+ if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle)
+
+
+ def readfrombuffer(self,buf,autolog=True,logtitle="<read data>"):
+ 'Reads this packet from the supplied buffer'
+ self._bufferstartoffset=buf.getcurrentoffset()
+ if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle)
+ self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ self.__field_entry_assigned.readfrombuffer(buf)
+ self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ self.__field_entry_number.readfrombuffer(buf)
+ self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF })
+ self.__field_pb_index.readfrombuffer(buf)
+ self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 })
+ self.__field_dontcare.readfrombuffer(buf)
+ self._bufferendoffset=buf.getcurrentoffset()
+
+
+ def __getfield_entry_assigned(self):
+ try: self.__field_entry_assigned
+ except:
+ self.__field_entry_assigned=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ return self.__field_entry_assigned.getvalue()
+
+ def __setfield_entry_assigned(self, value):
+ if isinstance(value,UINT):
+ self.__field_entry_assigned=value
+ else:
+ self.__field_entry_assigned=UINT(value,**{'sizeinbytes': 2, 'default': 0x0000 })
+
+ def __delfield_entry_assigned(self): del self.__field_entry_assigned
+
+ entry_assigned=property(__getfield_entry_assigned, __setfield_entry_assigned, __delfield_entry_assigned, "0 if not assigned, 1 if assigned")
+
+ def __getfield_entry_number(self):
+ try: self.__field_entry_number
+ except:
+ self.__field_entry_number=UINT(**{'sizeinbytes': 2, 'default': 0x0000 })
+ return self.__field_entry_number.getvalue()
+
+ def __setfield_entry_number(self, value):
+ if isinstance(value,UINT):
+ self.__field_entry_number=value
+ else:
+ self.__field_entry_number=UINT(value,**{'sizeinbytes': 2, 'default': 0x0000 })
+
+ def __delfield_entry_number(self): del self.__field_entry_number
+
+ entry_number=property(__getfield_entry_number, __setfield_entry_number, __delfield_entry_number, "0-based ICE entry number when assigned, 0 if unassigned")
+
+ def __getfield_pb_index(self):
+ try: self.__field_pb_index
+ except:
+ self.__field_pb_index=UINT(**{'sizeinbytes': 2, 'default': 0xFFFF })
+ return self.__field_pb_index.getvalue()
+
+ def __setfield_pb_index(self, value):
+ if isinstance(value,UINT):
+ self.__field_pb_index=value
+ else:
+ self.__field_pb_index=UINT(value,**{'sizeinbytes': 2, 'default': 0xFFFF })
+
+ def __delfield_pb_index(self): del self.__field_pb_index
+
+ pb_index=property(__getfield_pb_index, __setfield_pb_index, __delfield_pb_index, "0-based phone book entry number")
+
+ def __getfield_dontcare(self):
+ try: self.__field_dontcare
+ except:
+ self.__field_dontcare=DATA(**{'sizeinbytes': 82, 'default': '\x00'*82 })
+ return self.__field_dontcare.getvalue()
+
+ def __setfield_dontcare(self, value):
+ if isinstance(value,DATA):
+ self.__field_dontcare=value
+ else:
+ self.__field_dontcare=DATA(value,**{'sizeinbytes': 82, 'default': '\x00'*82 })
+
+ def __delfield_dontcare(self): del self.__field_dontcare
+
+ dontcare=property(__getfield_dontcare, __setfield_dontcare, __delfield_dontcare, None)
+
+ def iscontainer(self):
+ return True
+
+ def containerelements(self):
+ yield ('entry_assigned', self.__field_entry_assigned, "0 if not assigned, 1 if assigned")
+ yield ('entry_number', self.__field_entry_number, "0-based ICE entry number when assigned, 0 if unassigned")
+ yield ('pb_index', self.__field_pb_index, "0-based phone book entry number")
+ yield ('dontcare', self.__field_dontcare, None)
+
+ def valid(self):
+ return self.entry_number<NUMEMERGENCYCONTACTS
+
+
+
+
+class iceentryfile(BaseProtogenClass):
+ __fields=['items']
+
+ def __init__(self, *args, **kwargs):
+ dict={}
+ # What was supplied to this function
+ dict.update(kwargs)
+ # Parent constructor
+ super(iceentryfile,self).__init__(**dict)
+ if self.__class__ is iceentryfile:
+ self._update(args,dict)
+
+
+ def getfields(self):
+ return self.__fields
+
+
+ def _update(self, args, kwargs):
+ super(iceentryfile,self)._update(args,kwargs)
+ keys=kwargs.keys()
+ for key in keys:
+ if key in self.__fields:
+ setattr(self, key, kwargs[key])
+ del kwargs[key]
+ # Were any unrecognized kwargs passed in?
+ if __debug__:
+ self._complainaboutunusedargs(iceentryfile,kwargs)
+ if len(args):
+ dict2={ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS }
+ dict2.update(kwargs)
+ kwargs=dict2
+ self.__field_items=LIST(*args,**dict2)
+ # Make all P fields that haven't already been constructed
+
+
+ def writetobuffer(self,buf,autolog=True,logtitle="<written data>"):
+ 'Writes this packet to the supplied buffer'
+ self._bufferstartoffset=buf.getcurrentoffset()
+ try: self.__field_items
+ except:
+ self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS })
+ self.__field_items.writetobuffer(buf)
+ self._bufferendoffset=buf.getcurrentoffset()
+ if autolog and self._bufferstartoffset==0: self.autologwrite(buf, logtitle=logtitle)
+
+
+ def readfrombuffer(self,buf,autolog=True,logtitle="<read data>"):
+ 'Reads this packet from the supplied buffer'
+ self._bufferstartoffset=buf.getcurrentoffset()
+ if autolog and self._bufferstartoffset==0: self.autologread(buf, logtitle=logtitle)
+ self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS })
+ self.__field_items.readfrombuffer(buf)
+ self._bufferendoffset=buf.getcurrentoffset()
+
+
+ def __getfield_items(self):
+ try: self.__field_items
+ except:
+ self.__field_items=LIST(**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS })
+ return self.__field_items.getvalue()
+
+ def __setfield_items(self, value):
+ if isinstance(value,LIST):
+ self.__field_items=value
+ else:
+ self.__field_items=LIST(value,**{ 'elementclass': iceentry, 'createdefault': True, 'length': NUMEMERGENCYCONTACTS })
+
+ def __delfield_items(self): del self.__field_items
+
+ items=property(__getfield_items, __setfield_items, __delfield_items, None)
+
+ def iscontainer(self):
+ return True
+
+ def containerelements(self):
+ yield ('items', self.__field_items, None)
+
+
+
+