Re: Support for VX9100 phonebook in svn

"Aaron G. Stemen" <[email protected]>
Newsgroups gmane.comp.mobile.bitpim.devel
Message-ID <[email protected]>
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_start_ICE.patch (text/plain, 32.3 KB)
Index: src/database.py
===================================================================
--- src/database.py	(revision 4632)
+++ 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 4632)
+++ 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 4632)
+++ 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']=[]
@@ -304,13 +324,21 @@
         pb_entries = self.protocolclass.pbfile()
         pn_entries=self.protocolclass.pnfile()
         speeddials={}
+        ## TODO: need to make sure that the entries will default in the ICE entry file
+        ices=self.protocolclass.iceentryfile()
         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))
+            ## if iceindex < self.protocolclass.NUMEMERGENCYCONTACTS:
+            ##     TODO: the call to the constructor is probably written wrong
+            ##     TODO: is there a way to set "entry_assigned" to 1 implicitly when the entry_number or the pb_index is set?
+            ##     ices.items[iceindex]=self.protocolclass.iceentry( { 'entry_assigned': 1, 'entry_number': iceindex, 'pb_index': entry_num0 } )
+
             entry_num0 += 1
+            
             if entry_num0 >= self.protocolclass.NUMPHONEBOOKENTRIES:
                 self.log ("Maximum number of phonebook entries reached")
                 break
@@ -337,11 +365,17 @@
                          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
+## TODO: uncomment the following lines when we're able to retrieve the ICE index fromt eh database
+##         # 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
Index: src/phones/p_lgvx9100.p
===================================================================
--- src/phones/p_lgvx9100.p	(revision 4632)
+++ 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'
 
 %}
 
@@ -172,7 +175,7 @@
         # this is a valid slot
         1 UINT { 'default': 0 } +pad00
         # year, month, day, hour, min, sec
-        * PBDateTime +mod_date:
+        * PBDateTime +mod_date
         6   STRING { 'default': '', 'raiseonunterminatedread': False } +unk0
         2   UINT pn_id # 0 based
         2   UINT pe_id # 0 based
@@ -208,3 +211,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"
+    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 4632)
+++ 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']
@@ -914,7 +917,7 @@
             self.__field_group.writetobuffer(buf)
             try: self.__field_emails
             except:
-                self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMEMAILS})
+                self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_133, 'length': NUMEMAILS})
             self.__field_emails.writetobuffer(buf)
             try: self.__field_ringtone
             except:
@@ -926,11 +929,11 @@
             self.__field_wallpaper.writetobuffer(buf)
             try: self.__field_numbertypes
             except:
-                self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_134, 'length': NUMPHONENUMBERS})
+                self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_137, 'length': NUMPHONENUMBERS})
             self.__field_numbertypes.writetobuffer(buf)
             try: self.__field_numberindices
             except:
-                self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_136, 'length': NUMPHONENUMBERS})
+                self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_139, 'length': NUMPHONENUMBERS})
             self.__field_numberindices.writetobuffer(buf)
             try: self.__field_memo
             except:
@@ -970,15 +973,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_130, 'length': NUMEMAILS})
+            self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_133, '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_134, 'length': NUMPHONENUMBERS})
+            self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_137, 'length': NUMPHONENUMBERS})
             self.__field_numbertypes.readfrombuffer(buf)
-            self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_136, 'length': NUMPHONENUMBERS})
+            self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_139, 'length': NUMPHONENUMBERS})
             self.__field_numberindices.readfrombuffer(buf)
             self.__field_memo=USTRING(**{'sizeinbytes': 69,  'raiseonunterminatedread': False, 'default': '', 'encoding': PHONE_ENCODING })
             self.__field_memo.readfrombuffer(buf)
@@ -1115,14 +1118,14 @@
     def __getfield_emails(self):
         try: self.__field_emails
         except:
-            self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_130, 'length': NUMEMAILS})
+            self.__field_emails=LIST(**{'elementclass': _gen_p_lgvx9100_133, '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_130, 'length': NUMEMAILS})
+            self.__field_emails=LIST(value,**{'elementclass': _gen_p_lgvx9100_133, 'length': NUMEMAILS})
 
     def __delfield_emails(self): del self.__field_emails
 
@@ -1163,14 +1166,14 @@
     def __getfield_numbertypes(self):
         try: self.__field_numbertypes
         except:
-            self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_134, 'length': NUMPHONENUMBERS})
+            self.__field_numbertypes=LIST(**{'elementclass': _gen_p_lgvx9100_137, '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_134, 'length': NUMPHONENUMBERS})
+            self.__field_numbertypes=LIST(value,**{'elementclass': _gen_p_lgvx9100_137, 'length': NUMPHONENUMBERS})
 
     def __delfield_numbertypes(self): del self.__field_numbertypes
 
@@ -1179,14 +1182,14 @@
     def __getfield_numberindices(self):
         try: self.__field_numberindices
         except:
-            self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_136, 'length': NUMPHONENUMBERS})
+            self.__field_numberindices=LIST(**{'elementclass': _gen_p_lgvx9100_139, '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_136, 'length': NUMPHONENUMBERS})
+            self.__field_numberindices=LIST(value,**{'elementclass': _gen_p_lgvx9100_139, 'length': NUMPHONENUMBERS})
 
     def __delfield_numberindices(self): del self.__field_numberindices
 
@@ -1273,7 +1276,7 @@
 
 
 
-class _gen_p_lgvx9100_130(BaseProtogenClass):
+class _gen_p_lgvx9100_133(BaseProtogenClass):
     'Anonymous inner class'
     __fields=['email']
 
@@ -1282,8 +1285,8 @@
         # What was supplied to this function
         dict.update(kwargs)
         # Parent constructor
-        super(_gen_p_lgvx9100_130,self).__init__(**dict)
-        if self.__class__ is _gen_p_lgvx9100_130:
+        super(_gen_p_lgvx9100_133,self).__init__(**dict)
+        if self.__class__ is _gen_p_lgvx9100_133:
             self._update(args,dict)
 
 
@@ -1292,7 +1295,7 @@
 
 
     def _update(self, args, kwargs):
-        super(_gen_p_lgvx9100_130,self)._update(args,kwargs)
+        super(_gen_p_lgvx9100_133,self)._update(args,kwargs)
         keys=kwargs.keys()
         for key in keys:
             if key in self.__fields:
@@ -1300,7 +1303,7 @@
                 del kwargs[key]
         # Were any unrecognized kwargs passed in?
         if __debug__:
-            self._complainaboutunusedargs(_gen_p_lgvx9100_130,kwargs)
+            self._complainaboutunusedargs(_gen_p_lgvx9100_133,kwargs)
         if len(args):
             dict2={'sizeinbytes': 49, 'encoding': PHONE_ENCODING, 'raiseonunterminatedread': False}
             dict2.update(kwargs)
@@ -1348,7 +1351,7 @@
 
 
 
-class _gen_p_lgvx9100_134(BaseProtogenClass):
+class _gen_p_lgvx9100_137(BaseProtogenClass):
     'Anonymous inner class'
     __fields=['numbertype']
 
@@ -1357,8 +1360,8 @@
         # What was supplied to this function
         dict.update(kwargs)
         # Parent constructor
-        super(_gen_p_lgvx9100_134,self).__init__(**dict)
-        if self.__class__ is _gen_p_lgvx9100_134:
+        super(_gen_p_lgvx9100_137,self).__init__(**dict)
+        if self.__class__ is _gen_p_lgvx9100_137:
             self._update(args,dict)
 
 
@@ -1367,7 +1370,7 @@
 
 
     def _update(self, args, kwargs):
-        super(_gen_p_lgvx9100_134,self)._update(args,kwargs)
+        super(_gen_p_lgvx9100_137,self)._update(args,kwargs)
         keys=kwargs.keys()
         for key in keys:
             if key in self.__fields:
@@ -1375,7 +1378,7 @@
                 del kwargs[key]
         # Were any unrecognized kwargs passed in?
         if __debug__:
-            self._complainaboutunusedargs(_gen_p_lgvx9100_134,kwargs)
+            self._complainaboutunusedargs(_gen_p_lgvx9100_137,kwargs)
         if len(args):
             dict2={'sizeinbytes': 1,  'default': 0 }
             dict2.update(kwargs)
@@ -1423,7 +1426,7 @@
 
 
 
-class _gen_p_lgvx9100_136(BaseProtogenClass):
+class _gen_p_lgvx9100_139(BaseProtogenClass):
     'Anonymous inner class'
     __fields=['numberindex']
 
@@ -1432,8 +1435,8 @@
         # What was supplied to this function
         dict.update(kwargs)
         # Parent constructor
-        super(_gen_p_lgvx9100_136,self).__init__(**dict)
-        if self.__class__ is _gen_p_lgvx9100_136:
+        super(_gen_p_lgvx9100_139,self).__init__(**dict)
+        if self.__class__ is _gen_p_lgvx9100_139:
             self._update(args,dict)
 
 
@@ -1442,7 +1445,7 @@
 
 
     def _update(self, args, kwargs):
-        super(_gen_p_lgvx9100_136,self)._update(args,kwargs)
+        super(_gen_p_lgvx9100_139,self)._update(args,kwargs)
         keys=kwargs.keys()
         for key in keys:
             if key in self.__fields:
@@ -1450,7 +1453,7 @@
                 del kwargs[key]
         # Were any unrecognized kwargs passed in?
         if __debug__:
-            self._complainaboutunusedargs(_gen_p_lgvx9100_136,kwargs)
+            self._complainaboutunusedargs(_gen_p_lgvx9100_139,kwargs)
         if len(args):
             dict2={'sizeinbytes': 2,  'default': 0xffff }
             dict2.update(kwargs)
@@ -1734,7 +1737,7 @@
             self.__field_pad00.writetobuffer(buf)
             try: self.__field_mod_date
             except:
-                self.__field_mod_date=LIST(**{'elementclass': _gen_p_lgvx9100_176,  'length': 6 })
+                self.__field_mod_date=PBDateTime()
             self.__field_mod_date.writetobuffer(buf)
             try: self.__field_unk0
             except:
@@ -1771,7 +1774,7 @@
         if self.entry_tag==PB_NUMBER_SOR:
             self.__field_pad00=UINT(**{'sizeinbytes': 1,  'default': 0 })
             self.__field_pad00.readfrombuffer(buf)
-            self.__field_mod_date=LIST(**{'elementclass': _gen_p_lgvx9100_176,  'length': 6 })
+            self.__field_mod_date=PBDateTime()
             self.__field_mod_date.readfrombuffer(buf)
             self.__field_unk0=STRING(**{'sizeinbytes': 6,  'default': '', 'raiseonunterminatedread': False })
             self.__field_unk0.readfrombuffer(buf)
@@ -1830,14 +1833,14 @@
     def __getfield_mod_date(self):
         try: self.__field_mod_date
         except:
-            self.__field_mod_date=LIST(**{'elementclass': _gen_p_lgvx9100_176,  'length': 6 })
+            self.__field_mod_date=PBDateTime()
         return self.__field_mod_date.getvalue()
 
     def __setfield_mod_date(self, value):
-        if isinstance(value,LIST):
+        if isinstance(value,PBDateTime):
             self.__field_mod_date=value
         else:
-            self.__field_mod_date=LIST(value,**{'elementclass': _gen_p_lgvx9100_176,  'length': 6 })
+            self.__field_mod_date=PBDateTime(value,)
 
     def __delfield_mod_date(self): del self.__field_mod_date
 
@@ -1995,95 +1998,12 @@
         global PB_NUMBER_SOR
         return self.entry_tag==PB_NUMBER_SOR
     def set_current_time(self):
-        if not self.valid():
-            return
-        for i in time.localtime()[:6]:
-            self.mod_date.append(i)
+        if self.valid():
+            self.mod_date.set_current_time()
 
 
 
 
-class _gen_p_lgvx9100_176(BaseProtogenClass):
-    'Anonymous inner class'
-    __fields=['date_entry']
-
-    def __init__(self, *args, **kwargs):
-        dict={}
-        # What was supplied to this function
-        dict.update(kwargs)
-        # Parent constructor
-        super(_gen_p_lgvx9100_176,self).__init__(**dict)
-        if self.__class__ is _gen_p_lgvx9100_176:
-            self._update(args,dict)
-
-
-    def getfields(self):
-        return self.__fields
-
-
-    def _update(self, args, kwargs):
-        super(_gen_p_lgvx9100_176,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(_gen_p_lgvx9100_176,kwargs)
-        if len(args):
-            dict2={'sizeinbytes': 2,  'default': 0 }
-            dict2.update(kwargs)
-            kwargs=dict2
-            self.__field_date_entry=UINT(*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_date_entry
-        except:
-            self.__field_date_entry=UINT(**{'sizeinbytes': 2,  'default': 0 })
-        self.__field_date_entry.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_date_entry=UINT(**{'sizeinbytes': 2,  'default': 0 })
-        self.__field_date_entry.readfrombuffer(buf)
-        self._bufferendoffset=buf.getcurrentoffset()
-
-
-    def __getfield_date_entry(self):
-        try: self.__field_date_entry
-        except:
-            self.__field_date_entry=UINT(**{'sizeinbytes': 2,  'default': 0 })
-        return self.__field_date_entry.getvalue()
-
-    def __setfield_date_entry(self, value):
-        if isinstance(value,UINT):
-            self.__field_date_entry=value
-        else:
-            self.__field_date_entry=UINT(value,**{'sizeinbytes': 2,  'default': 0 })
-
-    def __delfield_date_entry(self): del self.__field_date_entry
-
-    date_entry=property(__getfield_date_entry, __setfield_date_entry, __delfield_date_entry, None)
-
-    def iscontainer(self):
-        return True
-
-    def containerelements(self):
-        yield ('date_entry', self.__field_date_entry, None)
-
-
-
-
 class pnfile(BaseProtogenClass):
     __fields=['items']
 
@@ -2398,3 +2318,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")
+
+    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")
+        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)
+
+
+
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.