Partial support for Samsung SGH-D600

View: New views
1 Messages — Rating Filter:   Alert me  

Partial support for Samsung SGH-D600

by Marvin Schmidt-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

quite some time ago I started implementing support for the Samsung
SGH-D600, unfortunately that phone died and I had to get a new one,
that's why I couldn't finish that project.
I still got all of my work, but I'm afraid I can't comment too precisely
on it, but I figured maybe someone would like to continue my work,
that's why I'm sending what I got here.


The first thing I had to do was changing

        return ': '.join(resp[0].split(': ')[1:])

in the __send_at_and_get function in src/phone_detect.py to

        return resp[0]

in order to get my phone recognized at all. I wish I could tell you more
about why it's necessary, but it's been too long ago and I'm not able to
test it anymore.


The second patch adds two parameters to the sendpbcommand in
src/phones/com_samsung_packet.py. I think to remember doing this because
the phone sends big amounts splitted in multiple packets. If a packet
ends in "#OK#\r\n" one would have to send "##>\r\n" to keep to transfer
going. Doing that in the subclass was awfully slow, that's why i moved
it to the commport class to be able to react faster. Unfortunately I'm
missing the changes i did to commport.py :-/


Besides those 2 things it's just the p_samsungsghd600.p, the
com_samsungsghd600.py and the entry in src/phones/__init__.py


I got some mails from people, who would like to see support for the
Samsung SGH-D600 in BitPim an since i can't really do much about it I
hope some who has the phone takes it from here.
If any information about the phone are needed, I can probably cram out
the references/logs/etc. I used, just ask me, i'll do my best to help.


Best regards,
Marvin Schmidt


[001-phone-detection.patch]

Index: src/phone_detect.py
===================================================================
--- src/phone_detect.py (revision 4748)
+++ src/phone_detect.py (working copy)
@@ -104,7 +104,8 @@
     def __send_at_and_get(self, comm, cmd):
         try:
             resp=comm.sendatcommand(cmd)
-            return ': '.join(resp[0].split(': ')[1:])
+            #return ': '.join(resp[0].split(': ')[1:])
+            return resp[0]
         except:
             return None
     def __get_manufacturer(self, comm):


[002-samsung-packet.patch]

Index: src/phones/com_samsung_packet.py
===================================================================
--- src/phones/com_samsung_packet.py (revision 4748)
+++ src/phones/com_samsung_packet.py (working copy)
@@ -147,7 +147,7 @@
         response=self.comm.sendatcommand("#PMODE=0")
         return True
         
-    def sendpbcommand(self, request, responseclass, ignoreerror=False, fixup=None):
+    def sendpbcommand(self, request, responseclass, ignoreerror=False, fixup=None, getasone=False, autocontinue=True):
         """Similar to the sendpbcommand in com_sanyo and com_lg, except that
         a list of responses is returned, one per line of information returned
         from the phone"""
@@ -158,7 +158,13 @@
         data=buffer.getvalue()
 
         try:
-            response_lines=self.comm.sendatcommand(data, ignoreerror=ignoreerror)
+            response_lines=self.comm.sendatcommand(data, ignoreerror=ignoreerror, autocontinue=autocontinue)
+            if getasone:
+                #self.log('getasone: ' + str(";".join(["%s" % (v) for v in response_lines])))
+                temp="\x0D\x0A".join(response_lines)
+                response_lines[:] = []
+                response_lines.append(temp)
+
         except commport.ATError:
             self.comm.success=False
             self.mode=self.MODENONE


[003-init-entry.patch]

Index: src/phones/__init__.py
===================================================================
--- src/phones/__init__.py (revision 4748)
+++ src/phones/__init__.py (working copy)
@@ -372,6 +372,11 @@
                             'brand': b_samsung,
                             'helpid': None,
                             },
+      'SGH-D600': { 'module': 'com_samsungsghd600',
+          'brand': b_samsung,
+          #'carrier': [c_vzw],
+          'helpid': None,
+         },
               'SPH-A460': { 'module': 'com_samsungspha460',
                             'brand': b_samsung,
                             'helpid': helpids.ID_PHONE_SAMSUNGOTHERS,


[p_samsungsghd600.py]

# THIS FILE IS AUTOMATICALLY GENERATED.  EDIT THE SOURCE FILE NOT THIS ONE

"""Proposed descriptions of data usign AT commands"""

from prototypes import *

# for SMSDATETIME
from prototypeslg import *

from prototypes_moto import *

from p_samsung_packet import *

# We use LSB for all integer like fields in diagnostic mode
UINT=UINTlsb
BOOL=BOOLlsb
#

NUMPHONENUMBERS=6
MAXNUMBERLEN=32
NUMTODOENTRIES=20

NUMGROUPS=4

# SMS Constants
SMS_MEMORY_PHONE='ME'
SMS_MEMORY_SIM='SM'
SMS_MEMORY_SELECT_CMD='+CPMS'
SMS_FORMAT_TEXT=1
SMS_FORMAT_PDU=0
SMS_FORMAT_CMD='+CMGF'
SMS_MSG_REC_UNREAD='REC UNREAD'
SMS_MSG_REC_READ='REC READ'
SMS_MSG_STO_UNSENT='STO UNSENT'
SMS_MSG_STO_SENT='STO SENT'
SMS_MSG_ALL='ALL'
SMS_MSG_LIST_CMD='+CMGL'

LOCAL_TYPE_LOCAL=129
LOCAL_TYPE_INTERNATIONAL=145
LOCAL_TYPE_UNKNOWN=128

FS_ROOT='/'

class inforequest(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(inforequest,self).__init__(**dict)
        if self.__class__ is inforequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(inforequest,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(inforequest,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+INFO'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+INFO'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+INFO'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+INFO'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+INFO'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class inforesponse(BaseProtogenClass):
    __fields=['command', 'dunnno1', 'dunnno2', 'dunnno3', 'dunnno4', 'dunnno5', 'dunnno6', 'dunnno7', 'dunnno8', 'dunnno9', 'bla', 'blub']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(inforesponse,self).__init__(**dict)
        if self.__class__ is inforesponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(inforesponse,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(inforesponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_dunnno1.writetobuffer(buf)
        self.__field_dunnno2.writetobuffer(buf)
        self.__field_dunnno3.writetobuffer(buf)
        self.__field_dunnno4.writetobuffer(buf)
        self.__field_dunnno5.writetobuffer(buf)
        self.__field_dunnno6.writetobuffer(buf)
        self.__field_dunnno7.writetobuffer(buf)
        self.__field_dunnno8.writetobuffer(buf)
        self.__field_dunnno9.writetobuffer(buf)
        self.__field_bla.writetobuffer(buf)
        self.__field_blub.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+INFO:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_dunnno1=CSVINT()
        self.__field_dunnno1.readfrombuffer(buf)
        self.__field_dunnno2=CSVINT()
        self.__field_dunnno2.readfrombuffer(buf)
        self.__field_dunnno3=CSVINT()
        self.__field_dunnno3.readfrombuffer(buf)
        self.__field_dunnno4=CSVINT()
        self.__field_dunnno4.readfrombuffer(buf)
        self.__field_dunnno5=CSVINT()
        self.__field_dunnno5.readfrombuffer(buf)
        self.__field_dunnno6=CSVINT()
        self.__field_dunnno6.readfrombuffer(buf)
        self.__field_dunnno7=CSVINT()
        self.__field_dunnno7.readfrombuffer(buf)
        self.__field_dunnno8=CSVINT()
        self.__field_dunnno8.readfrombuffer(buf)
        self.__field_dunnno9=CSVINT()
        self.__field_dunnno9.readfrombuffer(buf)
        self.__field_bla=CSVSTRING()
        self.__field_bla.readfrombuffer(buf)
        self.__field_blub=CSVSTRING(**{'terminator': None})
        self.__field_blub.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+INFO:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dunnno1(self):
        return self.__field_dunnno1.getvalue()

    def __setfield_dunnno1(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno1=value
        else:
            self.__field_dunnno1=CSVINT(value,)

    def __delfield_dunnno1(self): del self.__field_dunnno1

    dunnno1=property(__getfield_dunnno1, __setfield_dunnno1, __delfield_dunnno1, None)

    def __getfield_dunnno2(self):
        return self.__field_dunnno2.getvalue()

    def __setfield_dunnno2(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno2=value
        else:
            self.__field_dunnno2=CSVINT(value,)

    def __delfield_dunnno2(self): del self.__field_dunnno2

    dunnno2=property(__getfield_dunnno2, __setfield_dunnno2, __delfield_dunnno2, None)

    def __getfield_dunnno3(self):
        return self.__field_dunnno3.getvalue()

    def __setfield_dunnno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno3=value
        else:
            self.__field_dunnno3=CSVINT(value,)

    def __delfield_dunnno3(self): del self.__field_dunnno3

    dunnno3=property(__getfield_dunnno3, __setfield_dunnno3, __delfield_dunnno3, None)

    def __getfield_dunnno4(self):
        return self.__field_dunnno4.getvalue()

    def __setfield_dunnno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno4=value
        else:
            self.__field_dunnno4=CSVINT(value,)

    def __delfield_dunnno4(self): del self.__field_dunnno4

    dunnno4=property(__getfield_dunnno4, __setfield_dunnno4, __delfield_dunnno4, None)

    def __getfield_dunnno5(self):
        return self.__field_dunnno5.getvalue()

    def __setfield_dunnno5(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno5=value
        else:
            self.__field_dunnno5=CSVINT(value,)

    def __delfield_dunnno5(self): del self.__field_dunnno5

    dunnno5=property(__getfield_dunnno5, __setfield_dunnno5, __delfield_dunnno5, None)

    def __getfield_dunnno6(self):
        return self.__field_dunnno6.getvalue()

    def __setfield_dunnno6(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno6=value
        else:
            self.__field_dunnno6=CSVINT(value,)

    def __delfield_dunnno6(self): del self.__field_dunnno6

    dunnno6=property(__getfield_dunnno6, __setfield_dunnno6, __delfield_dunnno6, None)

    def __getfield_dunnno7(self):
        return self.__field_dunnno7.getvalue()

    def __setfield_dunnno7(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno7=value
        else:
            self.__field_dunnno7=CSVINT(value,)

    def __delfield_dunnno7(self): del self.__field_dunnno7

    dunnno7=property(__getfield_dunnno7, __setfield_dunnno7, __delfield_dunnno7, None)

    def __getfield_dunnno8(self):
        return self.__field_dunnno8.getvalue()

    def __setfield_dunnno8(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno8=value
        else:
            self.__field_dunnno8=CSVINT(value,)

    def __delfield_dunnno8(self): del self.__field_dunnno8

    dunnno8=property(__getfield_dunnno8, __setfield_dunnno8, __delfield_dunnno8, None)

    def __getfield_dunnno9(self):
        return self.__field_dunnno9.getvalue()

    def __setfield_dunnno9(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunnno9=value
        else:
            self.__field_dunnno9=CSVINT(value,)

    def __delfield_dunnno9(self): del self.__field_dunnno9

    dunnno9=property(__getfield_dunnno9, __setfield_dunnno9, __delfield_dunnno9, None)

    def __getfield_bla(self):
        return self.__field_bla.getvalue()

    def __setfield_bla(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_bla=value
        else:
            self.__field_bla=CSVSTRING(value,)

    def __delfield_bla(self): del self.__field_bla

    bla=property(__getfield_bla, __setfield_bla, __delfield_bla, None)

    def __getfield_blub(self):
        return self.__field_blub.getvalue()

    def __setfield_blub(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_blub=value
        else:
            self.__field_blub=CSVSTRING(value,**{'terminator': None})

    def __delfield_blub(self): del self.__field_blub

    blub=property(__getfield_blub, __setfield_blub, __delfield_blub, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dunnno1', self.__field_dunnno1, None)
        yield ('dunnno2', self.__field_dunnno2, None)
        yield ('dunnno3', self.__field_dunnno3, None)
        yield ('dunnno4', self.__field_dunnno4, None)
        yield ('dunnno5', self.__field_dunnno5, None)
        yield ('dunnno6', self.__field_dunnno6, None)
        yield ('dunnno7', self.__field_dunnno7, None)
        yield ('dunnno8', self.__field_dunnno8, None)
        yield ('dunnno9', self.__field_dunnno9, None)
        yield ('bla', self.__field_bla, None)
        yield ('blub', self.__field_blub, None)




class NumberEntry(BaseProtogenClass):
    __fields=['number', 'format']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(NumberEntry,self).__init__(**dict)
        if self.__class__ is NumberEntry:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(NumberEntry,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(NumberEntry,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()
        self.__field_number.writetobuffer(buf)
        self.__field_format.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_number=CSVSTRING()
        self.__field_number.readfrombuffer(buf)
        self.__field_format=CSVINT()
        self.__field_format.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_number(self):
        return self.__field_number.getvalue()

    def __setfield_number(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_number=value
        else:
            self.__field_number=CSVSTRING(value,)

    def __delfield_number(self): del self.__field_number

    number=property(__getfield_number, __setfield_number, __delfield_number, None)

    def __getfield_format(self):
        return self.__field_format.getvalue()

    def __setfield_format(self, value):
        if isinstance(value,CSVINT):
            self.__field_format=value
        else:
            self.__field_format=CSVINT(value,)

    def __delfield_format(self): del self.__field_format

    format=property(__getfield_format, __setfield_format, __delfield_format, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('number', self.__field_number, None)
        yield ('format', self.__field_format, None)




class pbentry(BaseProtogenClass):
    __fields=['url', 'birthday', 'slot', 'mobile', 'surname', 'name', 'numbers2', 'email', 'dunno1', 'notice', 'group', 'melodypath1', 'melodypath2', 'picpath1', 'picpath2', 'melody', 'pic']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(pbentry,self).__init__(**dict)
        if self.__class__ is pbentry:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(pbentry,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(pbentry,kwargs)
        if len(args): raise TypeError('Unexpected arguments supplied: '+`args`)
        # Make all P fields that haven't already been constructed
        try: self.__field_url
        except:
            self.__field_url=USTRING(**{'default': ""})
        try: self.__field_birthday
        except:
            self.__field_birthday=CSVDATE(**{'default': ""})


    def writetobuffer(self,buf,autolog=True,logtitle="<written data>"):
        'Writes this packet to the supplied buffer'
        self._bufferstartoffset=buf.getcurrentoffset()
        self.__field_slot.writetobuffer(buf)
        self.__field_mobile.writetobuffer(buf)
        self.__field_surname.writetobuffer(buf)
        self.__field_name.writetobuffer(buf)
        self.__field_numbers2.writetobuffer(buf)
        self.__field_email.writetobuffer(buf)
        self.__field_dunno1.writetobuffer(buf)
        self.__field_notice.writetobuffer(buf)
        self.__field_group.writetobuffer(buf)
        self.__field_melodypath1.writetobuffer(buf)
        self.__field_melodypath2.writetobuffer(buf)
        self.__field_picpath1.writetobuffer(buf)
        self.__field_picpath2.writetobuffer(buf)
        self.__field_melody.writetobuffer(buf)
        self.__field_pic.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_slot=CSVINT()
        self.__field_slot.readfrombuffer(buf)
        self.__field_mobile=NumberEntry()
        self.__field_mobile.readfrombuffer(buf)
        self.__field_surname=CSVSTRING()
        self.__field_surname.readfrombuffer(buf)
        self.__field_name=CSVSTRING()
        self.__field_name.readfrombuffer(buf)
        self.__field_numbers2=LIST(**{'length': 4, 'createdefault': True, 'elementclass': NumberEntry})
        self.__field_numbers2.readfrombuffer(buf)
        self.__field_email=CSVSTRING()
        self.__field_email.readfrombuffer(buf)
        self.__field_dunno1=CSVSTRING()
        self.__field_dunno1.readfrombuffer(buf)
        self.__field_notice=CSVSTRING()
        self.__field_notice.readfrombuffer(buf)
        self.__field_group=CSVINT()
        self.__field_group.readfrombuffer(buf)
        self.__field_melodypath1=CSVINT()
        self.__field_melodypath1.readfrombuffer(buf)
        self.__field_melodypath2=CSVINT()
        self.__field_melodypath2.readfrombuffer(buf)
        self.__field_picpath1=CSVINT()
        self.__field_picpath1.readfrombuffer(buf)
        self.__field_picpath2=CSVINT()
        self.__field_picpath2.readfrombuffer(buf)
        self.__field_melody=CSVSTRING()
        self.__field_melody.readfrombuffer(buf)
        self.__field_pic=STRING(**{ 'terminator': None })
        self.__field_pic.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_url(self):
        try: self.__field_url
        except:
            self.__field_url=USTRING(**{'default': ""})
        return self.__field_url.getvalue()

    def __setfield_url(self, value):
        if isinstance(value,USTRING):
            self.__field_url=value
        else:
            self.__field_url=USTRING(value,**{'default': ""})

    def __delfield_url(self): del self.__field_url

    url=property(__getfield_url, __setfield_url, __delfield_url, None)

    def __getfield_birthday(self):
        try: self.__field_birthday
        except:
            self.__field_birthday=CSVDATE(**{'default': ""})
        return self.__field_birthday.getvalue()

    def __setfield_birthday(self, value):
        if isinstance(value,CSVDATE):
            self.__field_birthday=value
        else:
            self.__field_birthday=CSVDATE(value,**{'default': ""})

    def __delfield_birthday(self): del self.__field_birthday

    birthday=property(__getfield_birthday, __setfield_birthday, __delfield_birthday, None)

    def __getfield_slot(self):
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVINT):
            self.__field_slot=value
        else:
            self.__field_slot=CSVINT(value,)

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot")

    def __getfield_mobile(self):
        return self.__field_mobile.getvalue()

    def __setfield_mobile(self, value):
        if isinstance(value,NumberEntry):
            self.__field_mobile=value
        else:
            self.__field_mobile=NumberEntry(value,)

    def __delfield_mobile(self): del self.__field_mobile

    mobile=property(__getfield_mobile, __setfield_mobile, __delfield_mobile, None)

    def __getfield_surname(self):
        return self.__field_surname.getvalue()

    def __setfield_surname(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_surname=value
        else:
            self.__field_surname=CSVSTRING(value,)

    def __delfield_surname(self): del self.__field_surname

    surname=property(__getfield_surname, __setfield_surname, __delfield_surname, None)

    def __getfield_name(self):
        return self.__field_name.getvalue()

    def __setfield_name(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_name=value
        else:
            self.__field_name=CSVSTRING(value,)

    def __delfield_name(self): del self.__field_name

    name=property(__getfield_name, __setfield_name, __delfield_name, None)

    def __getfield_numbers2(self):
        return self.__field_numbers2.getvalue()

    def __setfield_numbers2(self, value):
        if isinstance(value,LIST):
            self.__field_numbers2=value
        else:
            self.__field_numbers2=LIST(value,**{'length': 4, 'createdefault': True, 'elementclass': NumberEntry})

    def __delfield_numbers2(self): del self.__field_numbers2

    numbers2=property(__getfield_numbers2, __setfield_numbers2, __delfield_numbers2, None)

    def __getfield_email(self):
        return self.__field_email.getvalue()

    def __setfield_email(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_email=value
        else:
            self.__field_email=CSVSTRING(value,)

    def __delfield_email(self): del self.__field_email

    email=property(__getfield_email, __setfield_email, __delfield_email, None)

    def __getfield_dunno1(self):
        return self.__field_dunno1.getvalue()

    def __setfield_dunno1(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno1=value
        else:
            self.__field_dunno1=CSVSTRING(value,)

    def __delfield_dunno1(self): del self.__field_dunno1

    dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None)

    def __getfield_notice(self):
        return self.__field_notice.getvalue()

    def __setfield_notice(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_notice=value
        else:
            self.__field_notice=CSVSTRING(value,)

    def __delfield_notice(self): del self.__field_notice

    notice=property(__getfield_notice, __setfield_notice, __delfield_notice, None)

    def __getfield_group(self):
        return self.__field_group.getvalue()

    def __setfield_group(self, value):
        if isinstance(value,CSVINT):
            self.__field_group=value
        else:
            self.__field_group=CSVINT(value,)

    def __delfield_group(self): del self.__field_group

    group=property(__getfield_group, __setfield_group, __delfield_group, None)

    def __getfield_melodypath1(self):
        return self.__field_melodypath1.getvalue()

    def __setfield_melodypath1(self, value):
        if isinstance(value,CSVINT):
            self.__field_melodypath1=value
        else:
            self.__field_melodypath1=CSVINT(value,)

    def __delfield_melodypath1(self): del self.__field_melodypath1

    melodypath1=property(__getfield_melodypath1, __setfield_melodypath1, __delfield_melodypath1, None)

    def __getfield_melodypath2(self):
        return self.__field_melodypath2.getvalue()

    def __setfield_melodypath2(self, value):
        if isinstance(value,CSVINT):
            self.__field_melodypath2=value
        else:
            self.__field_melodypath2=CSVINT(value,)

    def __delfield_melodypath2(self): del self.__field_melodypath2

    melodypath2=property(__getfield_melodypath2, __setfield_melodypath2, __delfield_melodypath2, None)

    def __getfield_picpath1(self):
        return self.__field_picpath1.getvalue()

    def __setfield_picpath1(self, value):
        if isinstance(value,CSVINT):
            self.__field_picpath1=value
        else:
            self.__field_picpath1=CSVINT(value,)

    def __delfield_picpath1(self): del self.__field_picpath1

    picpath1=property(__getfield_picpath1, __setfield_picpath1, __delfield_picpath1, None)

    def __getfield_picpath2(self):
        return self.__field_picpath2.getvalue()

    def __setfield_picpath2(self, value):
        if isinstance(value,CSVINT):
            self.__field_picpath2=value
        else:
            self.__field_picpath2=CSVINT(value,)

    def __delfield_picpath2(self): del self.__field_picpath2

    picpath2=property(__getfield_picpath2, __setfield_picpath2, __delfield_picpath2, None)

    def __getfield_melody(self):
        return self.__field_melody.getvalue()

    def __setfield_melody(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_melody=value
        else:
            self.__field_melody=CSVSTRING(value,)

    def __delfield_melody(self): del self.__field_melody

    melody=property(__getfield_melody, __setfield_melody, __delfield_melody, None)

    def __getfield_pic(self):
        return self.__field_pic.getvalue()

    def __setfield_pic(self, value):
        if isinstance(value,STRING):
            self.__field_pic=value
        else:
            self.__field_pic=STRING(value,**{ 'terminator': None })

    def __delfield_pic(self): del self.__field_pic

    pic=property(__getfield_pic, __setfield_pic, __delfield_pic, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('url', self.__field_url, None)
        yield ('birthday', self.__field_birthday, None)
        yield ('slot', self.__field_slot, "Internal Slot")
        yield ('mobile', self.__field_mobile, None)
        yield ('surname', self.__field_surname, None)
        yield ('name', self.__field_name, None)
        yield ('numbers2', self.__field_numbers2, None)
        yield ('email', self.__field_email, None)
        yield ('dunno1', self.__field_dunno1, None)
        yield ('notice', self.__field_notice, None)
        yield ('group', self.__field_group, None)
        yield ('melodypath1', self.__field_melodypath1, None)
        yield ('melodypath2', self.__field_melodypath2, None)
        yield ('picpath1', self.__field_picpath1, None)
        yield ('picpath2', self.__field_picpath2, None)
        yield ('melody', self.__field_melody, None)
        yield ('pic', self.__field_pic, None)

    def _numbers(self):
        self.numbers2.append(self.mobile)
        return self.numbers2
    numbers=property(fget=_numbers)




class phonebookinforequest(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonebookinforequest,self).__init__(**dict)
        if self.__class__ is phonebookinforequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonebookinforequest,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(phonebookinforequest,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+CPBS?'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS?'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS?'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS?'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CPBS?'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class phonebookinforesponse(BaseProtogenClass):
    __fields=['command', 'memorytype', 'usedslots', 'totalslots']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonebookinforesponse,self).__init__(**dict)
        if self.__class__ is phonebookinforesponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonebookinforesponse,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(phonebookinforesponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_memorytype.writetobuffer(buf)
        self.__field_usedslots.writetobuffer(buf)
        self.__field_totalslots.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPBS:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_memorytype=CSVSTRING()
        self.__field_memorytype.readfrombuffer(buf)
        self.__field_usedslots=CSVINT()
        self.__field_usedslots.readfrombuffer(buf)
        self.__field_totalslots=CSVINT()
        self.__field_totalslots.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPBS:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_memorytype(self):
        return self.__field_memorytype.getvalue()

    def __setfield_memorytype(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_memorytype=value
        else:
            self.__field_memorytype=CSVSTRING(value,)

    def __delfield_memorytype(self): del self.__field_memorytype

    memorytype=property(__getfield_memorytype, __setfield_memorytype, __delfield_memorytype, None)

    def __getfield_usedslots(self):
        return self.__field_usedslots.getvalue()

    def __setfield_usedslots(self, value):
        if isinstance(value,CSVINT):
            self.__field_usedslots=value
        else:
            self.__field_usedslots=CSVINT(value,)

    def __delfield_usedslots(self): del self.__field_usedslots

    usedslots=property(__getfield_usedslots, __setfield_usedslots, __delfield_usedslots, None)

    def __getfield_totalslots(self):
        return self.__field_totalslots.getvalue()

    def __setfield_totalslots(self, value):
        if isinstance(value,CSVINT):
            self.__field_totalslots=value
        else:
            self.__field_totalslots=CSVINT(value,)

    def __delfield_totalslots(self): del self.__field_totalslots

    totalslots=property(__getfield_totalslots, __setfield_totalslots, __delfield_totalslots, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('memorytype', self.__field_memorytype, None)
        yield ('usedslots', self.__field_usedslots, None)
        yield ('totalslots', self.__field_totalslots, None)




class phonememoryrequest(BaseProtogenClass):
    __fields=['command', 'slot']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonememoryrequest,self).__init__(**dict)
        if self.__class__ is phonememoryrequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonememoryrequest,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(phonememoryrequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_slot
        except:
            self.__field_slot=CSVSTRING(**{'terminator': None})
        self.__field_slot.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS='})
        self.__field_command.readfrombuffer(buf)
        self.__field_slot=CSVSTRING(**{'terminator': None})
        self.__field_slot.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBS='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CPBS='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_slot(self):
        try: self.__field_slot
        except:
            self.__field_slot=CSVSTRING(**{'terminator': None})
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_slot=value
        else:
            self.__field_slot=CSVSTRING(value,**{'terminator': None})

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Memory Slot")

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('slot', self.__field_slot, "Memory Slot")




class phonebookslotrequest(BaseProtogenClass):
    __fields=['command', 'slot']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonebookslotrequest,self).__init__(**dict)
        if self.__class__ is phonebookslotrequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonebookslotrequest,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(phonebookslotrequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBR='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBR='})
        self.__field_command.readfrombuffer(buf)
        self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPBR='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CPBR='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_slot(self):
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVINT):
            self.__field_slot=value
        else:
            self.__field_slot=CSVINT(value,**{'terminator': None})

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, "Internal Slot")

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('slot', self.__field_slot, "Internal Slot")




class phonebookslotresponse(BaseProtogenClass):
    __fields=['command', 'entry']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonebookslotresponse,self).__init__(**dict)
        if self.__class__ is phonebookslotresponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonebookslotresponse,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(phonebookslotresponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPBR:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_entry=pbentry()
        self.__field_entry.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPBR:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_entry(self):
        return self.__field_entry.getvalue()

    def __setfield_entry(self, value):
        if isinstance(value,pbentry):
            self.__field_entry=value
        else:
            self.__field_entry=pbentry(value,)

    def __delfield_entry(self): del self.__field_entry

    entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('entry', self.__field_entry, None)




class phonebookslotupdaterequest(BaseProtogenClass):
    __fields=['command', 'entry']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(phonebookslotupdaterequest,self).__init__(**dict)
        if self.__class__ is phonebookslotupdaterequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(phonebookslotupdaterequest,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(phonebookslotupdaterequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'})
        self.__field_command.writetobuffer(buf)
        self.__field_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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'})
        self.__field_command.readfrombuffer(buf)
        self.__field_entry=pbentry()
        self.__field_entry.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '#PBOKW=0,'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_entry(self):
        return self.__field_entry.getvalue()

    def __setfield_entry(self, value):
        if isinstance(value,pbentry):
            self.__field_entry=value
        else:
            self.__field_entry=pbentry(value,)

    def __delfield_entry(self): del self.__field_entry

    entry=property(__getfield_entry, __setfield_entry, __delfield_entry, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('entry', self.__field_entry, None)




class organizerinforequest(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(organizerinforequest,self).__init__(**dict)
        if self.__class__ is organizerinforequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(organizerinforequest,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(organizerinforequest,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+ORGI?'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGI?'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGI?'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGI?'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+ORGI?'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class organizerinforesponse(BaseProtogenClass):
    __fields=['command', 'entries', 'dunno1', 'dunno2', 'dunno3', 'dunno4']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(organizerinforesponse,self).__init__(**dict)
        if self.__class__ is organizerinforesponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(organizerinforesponse,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(organizerinforesponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_entries.writetobuffer(buf)
        self.__field_dunno1.writetobuffer(buf)
        self.__field_dunno2.writetobuffer(buf)
        self.__field_dunno3.writetobuffer(buf)
        self.__field_dunno4.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+ORGI:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_entries=CSVINT()
        self.__field_entries.readfrombuffer(buf)
        self.__field_dunno1=CSVINT()
        self.__field_dunno1.readfrombuffer(buf)
        self.__field_dunno2=CSVINT()
        self.__field_dunno2.readfrombuffer(buf)
        self.__field_dunno3=CSVINT()
        self.__field_dunno3.readfrombuffer(buf)
        self.__field_dunno4=CSVINT()
        self.__field_dunno4.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+ORGI:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_entries(self):
        return self.__field_entries.getvalue()

    def __setfield_entries(self, value):
        if isinstance(value,CSVINT):
            self.__field_entries=value
        else:
            self.__field_entries=CSVINT(value,)

    def __delfield_entries(self): del self.__field_entries

    entries=property(__getfield_entries, __setfield_entries, __delfield_entries, None)

    def __getfield_dunno1(self):
        return self.__field_dunno1.getvalue()

    def __setfield_dunno1(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno1=value
        else:
            self.__field_dunno1=CSVINT(value,)

    def __delfield_dunno1(self): del self.__field_dunno1

    dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None)

    def __getfield_dunno2(self):
        return self.__field_dunno2.getvalue()

    def __setfield_dunno2(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno2=value
        else:
            self.__field_dunno2=CSVINT(value,)

    def __delfield_dunno2(self): del self.__field_dunno2

    dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None)

    def __getfield_dunno3(self):
        return self.__field_dunno3.getvalue()

    def __setfield_dunno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno3=value
        else:
            self.__field_dunno3=CSVINT(value,)

    def __delfield_dunno3(self): del self.__field_dunno3

    dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None)

    def __getfield_dunno4(self):
        return self.__field_dunno4.getvalue()

    def __setfield_dunno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno4=value
        else:
            self.__field_dunno4=CSVINT(value,)

    def __delfield_dunno4(self): del self.__field_dunno4

    dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('entries', self.__field_entries, None)
        yield ('dunno1', self.__field_dunno1, None)
        yield ('dunno2', self.__field_dunno2, None)
        yield ('dunno3', self.__field_dunno3, None)
        yield ('dunno4', self.__field_dunno4, None)




class eventrequest(BaseProtogenClass):
    __fields=['command', 'slot']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(eventrequest,self).__init__(**dict)
        if self.__class__ is eventrequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(eventrequest,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(eventrequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGR='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGR='})
        self.__field_command.readfrombuffer(buf)
        self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+ORGR='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+ORGR='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_slot(self):
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVINT):
            self.__field_slot=value
        else:
            self.__field_slot=CSVINT(value,**{'terminator': None})

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('slot', self.__field_slot, None)




class eventresponse(BaseProtogenClass):
    __fields=['command', 'slot', 'type', 'eventname', 'eventdesc', 'start_day', 'start_month', 'start_year', 'start_hour', 'start_minute', 'end_day', 'end_month', 'end_year', 'end_hour', 'end_minute']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(eventresponse,self).__init__(**dict)
        if self.__class__ is eventresponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(eventresponse,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(eventresponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_slot.writetobuffer(buf)
        self.__field_type.writetobuffer(buf)
        self.__field_eventname.writetobuffer(buf)
        self.__field_eventdesc.writetobuffer(buf)
        self.__field_start_day.writetobuffer(buf)
        self.__field_start_month.writetobuffer(buf)
        self.__field_start_year.writetobuffer(buf)
        self.__field_start_hour.writetobuffer(buf)
        self.__field_start_minute.writetobuffer(buf)
        self.__field_end_day.writetobuffer(buf)
        self.__field_end_month.writetobuffer(buf)
        self.__field_end_year.writetobuffer(buf)
        self.__field_end_hour.writetobuffer(buf)
        self.__field_end_minute.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+ORGR:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_slot=CSVINT()
        self.__field_slot.readfrombuffer(buf)
        self.__field_type=CSVINT()
        self.__field_type.readfrombuffer(buf)
        self.__field_eventname=CSVSTRING()
        self.__field_eventname.readfrombuffer(buf)
        self.__field_eventdesc=CSVSTRING()
        self.__field_eventdesc.readfrombuffer(buf)
        self.__field_start_day=CSVINT(**{ 'default': 0 })
        self.__field_start_day.readfrombuffer(buf)
        self.__field_start_month=CSVINT(**{ 'default': 0 })
        self.__field_start_month.readfrombuffer(buf)
        self.__field_start_year=CSVINT(**{ 'default': 0 })
        self.__field_start_year.readfrombuffer(buf)
        self.__field_start_hour=CSVINT(**{ 'default': 0 })
        self.__field_start_hour.readfrombuffer(buf)
        self.__field_start_minute=CSVINT(**{ 'default': 0 })
        self.__field_start_minute.readfrombuffer(buf)
        self.__field_end_day=CSVINT(**{ 'default': 0 })
        self.__field_end_day.readfrombuffer(buf)
        self.__field_end_month=CSVINT(**{ 'default': 0 })
        self.__field_end_month.readfrombuffer(buf)
        self.__field_end_year=CSVINT(**{ 'default': 0 })
        self.__field_end_year.readfrombuffer(buf)
        self.__field_end_hour=CSVINT(**{ 'default': 0 })
        self.__field_end_hour.readfrombuffer(buf)
        self.__field_end_minute=CSVINT(**{ 'default': 0 })
        self.__field_end_minute.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+ORGR:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_slot(self):
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVINT):
            self.__field_slot=value
        else:
            self.__field_slot=CSVINT(value,)

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None)

    def __getfield_type(self):
        return self.__field_type.getvalue()

    def __setfield_type(self, value):
        if isinstance(value,CSVINT):
            self.__field_type=value
        else:
            self.__field_type=CSVINT(value,)

    def __delfield_type(self): del self.__field_type

    type=property(__getfield_type, __setfield_type, __delfield_type, "1: appointment, 2: anniversay, 3: task, 4: others")

    def __getfield_eventname(self):
        return self.__field_eventname.getvalue()

    def __setfield_eventname(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_eventname=value
        else:
            self.__field_eventname=CSVSTRING(value,)

    def __delfield_eventname(self): del self.__field_eventname

    eventname=property(__getfield_eventname, __setfield_eventname, __delfield_eventname, None)

    def __getfield_eventdesc(self):
        return self.__field_eventdesc.getvalue()

    def __setfield_eventdesc(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_eventdesc=value
        else:
            self.__field_eventdesc=CSVSTRING(value,)

    def __delfield_eventdesc(self): del self.__field_eventdesc

    eventdesc=property(__getfield_eventdesc, __setfield_eventdesc, __delfield_eventdesc, None)

    def __getfield_start_day(self):
        return self.__field_start_day.getvalue()

    def __setfield_start_day(self, value):
        if isinstance(value,CSVINT):
            self.__field_start_day=value
        else:
            self.__field_start_day=CSVINT(value,**{ 'default': 0 })

    def __delfield_start_day(self): del self.__field_start_day

    start_day=property(__getfield_start_day, __setfield_start_day, __delfield_start_day, None)

    def __getfield_start_month(self):
        return self.__field_start_month.getvalue()

    def __setfield_start_month(self, value):
        if isinstance(value,CSVINT):
            self.__field_start_month=value
        else:
            self.__field_start_month=CSVINT(value,**{ 'default': 0 })

    def __delfield_start_month(self): del self.__field_start_month

    start_month=property(__getfield_start_month, __setfield_start_month, __delfield_start_month, None)

    def __getfield_start_year(self):
        return self.__field_start_year.getvalue()

    def __setfield_start_year(self, value):
        if isinstance(value,CSVINT):
            self.__field_start_year=value
        else:
            self.__field_start_year=CSVINT(value,**{ 'default': 0 })

    def __delfield_start_year(self): del self.__field_start_year

    start_year=property(__getfield_start_year, __setfield_start_year, __delfield_start_year, None)

    def __getfield_start_hour(self):
        return self.__field_start_hour.getvalue()

    def __setfield_start_hour(self, value):
        if isinstance(value,CSVINT):
            self.__field_start_hour=value
        else:
            self.__field_start_hour=CSVINT(value,**{ 'default': 0 })

    def __delfield_start_hour(self): del self.__field_start_hour

    start_hour=property(__getfield_start_hour, __setfield_start_hour, __delfield_start_hour, None)

    def __getfield_start_minute(self):
        return self.__field_start_minute.getvalue()

    def __setfield_start_minute(self, value):
        if isinstance(value,CSVINT):
            self.__field_start_minute=value
        else:
            self.__field_start_minute=CSVINT(value,**{ 'default': 0 })

    def __delfield_start_minute(self): del self.__field_start_minute

    start_minute=property(__getfield_start_minute, __setfield_start_minute, __delfield_start_minute, None)

    def __getfield_end_day(self):
        return self.__field_end_day.getvalue()

    def __setfield_end_day(self, value):
        if isinstance(value,CSVINT):
            self.__field_end_day=value
        else:
            self.__field_end_day=CSVINT(value,**{ 'default': 0 })

    def __delfield_end_day(self): del self.__field_end_day

    end_day=property(__getfield_end_day, __setfield_end_day, __delfield_end_day, None)

    def __getfield_end_month(self):
        return self.__field_end_month.getvalue()

    def __setfield_end_month(self, value):
        if isinstance(value,CSVINT):
            self.__field_end_month=value
        else:
            self.__field_end_month=CSVINT(value,**{ 'default': 0 })

    def __delfield_end_month(self): del self.__field_end_month

    end_month=property(__getfield_end_month, __setfield_end_month, __delfield_end_month, None)

    def __getfield_end_year(self):
        return self.__field_end_year.getvalue()

    def __setfield_end_year(self, value):
        if isinstance(value,CSVINT):
            self.__field_end_year=value
        else:
            self.__field_end_year=CSVINT(value,**{ 'default': 0 })

    def __delfield_end_year(self): del self.__field_end_year

    end_year=property(__getfield_end_year, __setfield_end_year, __delfield_end_year, None)

    def __getfield_end_hour(self):
        return self.__field_end_hour.getvalue()

    def __setfield_end_hour(self, value):
        if isinstance(value,CSVINT):
            self.__field_end_hour=value
        else:
            self.__field_end_hour=CSVINT(value,**{ 'default': 0 })

    def __delfield_end_hour(self): del self.__field_end_hour

    end_hour=property(__getfield_end_hour, __setfield_end_hour, __delfield_end_hour, None)

    def __getfield_end_minute(self):
        return self.__field_end_minute.getvalue()

    def __setfield_end_minute(self, value):
        if isinstance(value,CSVINT):
            self.__field_end_minute=value
        else:
            self.__field_end_minute=CSVINT(value,**{ 'default': 0 })

    def __delfield_end_minute(self): del self.__field_end_minute

    end_minute=property(__getfield_end_minute, __setfield_end_minute, __delfield_end_minute, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('slot', self.__field_slot, None)
        yield ('type', self.__field_type, "1: appointment, 2: anniversay, 3: task, 4: others")
        yield ('eventname', self.__field_eventname, None)
        yield ('eventdesc', self.__field_eventdesc, None)
        yield ('start_day', self.__field_start_day, None)
        yield ('start_month', self.__field_start_month, None)
        yield ('start_year', self.__field_start_year, None)
        yield ('start_hour', self.__field_start_hour, None)
        yield ('start_minute', self.__field_start_minute, None)
        yield ('end_day', self.__field_end_day, None)
        yield ('end_month', self.__field_end_month, None)
        yield ('end_year', self.__field_end_year, None)
        yield ('end_hour', self.__field_end_hour, None)
        yield ('end_minute', self.__field_end_minute, None)




class firmwareinforeq(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(firmwareinforeq,self).__init__(**dict)
        if self.__class__ is firmwareinforeq:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(firmwareinforeq,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(firmwareinforeq,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+GMR'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GMR'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GMR'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+GMR'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+GMR'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class firmwareinforesp(BaseProtogenClass):
    __fields=['firmware']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(firmwareinforesp,self).__init__(**dict)
        if self.__class__ is firmwareinforesp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(firmwareinforesp,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(firmwareinforesp,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_firmware=CSVSTRING(*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()
        self.__field_firmware.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_firmware=CSVSTRING(**{'quotechar': None, 'terminator': None})
        self.__field_firmware.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_firmware(self):
        return self.__field_firmware.getvalue()

    def __setfield_firmware(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_firmware=value
        else:
            self.__field_firmware=CSVSTRING(value,**{'quotechar': None, 'terminator': None})

    def __delfield_firmware(self): del self.__field_firmware

    firmware=property(__getfield_firmware, __setfield_firmware, __delfield_firmware, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('firmware', self.__field_firmware, None)




class manufacturerresp(BaseProtogenClass):
    __fields=['manufacturer']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(manufacturerresp,self).__init__(**dict)
        if self.__class__ is manufacturerresp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(manufacturerresp,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(manufacturerresp,kwargs)
        if len(args):
            dict2={'terminator': None }
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_manufacturer=STRING(*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()
        self.__field_manufacturer.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_manufacturer=STRING(**{'terminator': None })
        self.__field_manufacturer.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_manufacturer(self):
        return self.__field_manufacturer.getvalue()

    def __setfield_manufacturer(self, value):
        if isinstance(value,STRING):
            self.__field_manufacturer=value
        else:
            self.__field_manufacturer=STRING(value,**{'terminator': None })

    def __delfield_manufacturer(self): del self.__field_manufacturer

    manufacturer=property(__getfield_manufacturer, __setfield_manufacturer, __delfield_manufacturer, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('manufacturer', self.__field_manufacturer, None)




class signalreq(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(signalreq,self).__init__(**dict)
        if self.__class__ is signalreq:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(signalreq,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(signalreq,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+CSQ'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CSQ'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CSQ'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CSQ'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CSQ'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class signalresp(BaseProtogenClass):
    __fields=['command', 'signal', 'rxqual']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(signalresp,self).__init__(**dict)
        if self.__class__ is signalresp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(signalresp,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(signalresp,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CSQ:'})
        self.__field_command.writetobuffer(buf)
        self.__field_signal.writetobuffer(buf)
        self.__field_rxqual.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CSQ:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_signal=CSVINT()
        self.__field_signal.readfrombuffer(buf)
        self.__field_rxqual=CSVINT()
        self.__field_rxqual.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CSQ:'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CSQ:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_signal(self):
        return self.__field_signal.getvalue()

    def __setfield_signal(self, value):
        if isinstance(value,CSVINT):
            self.__field_signal=value
        else:
            self.__field_signal=CSVINT(value,)

    def __delfield_signal(self): del self.__field_signal

    signal=property(__getfield_signal, __setfield_signal, __delfield_signal, None)

    def __getfield_rxqual(self):
        return self.__field_rxqual.getvalue()

    def __setfield_rxqual(self, value):
        if isinstance(value,CSVINT):
            self.__field_rxqual=value
        else:
            self.__field_rxqual=CSVINT(value,)

    def __delfield_rxqual(self): del self.__field_rxqual

    rxqual=property(__getfield_rxqual, __setfield_rxqual, __delfield_rxqual, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('signal', self.__field_signal, None)
        yield ('rxqual', self.__field_rxqual, None)




class batterylevelreq(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(batterylevelreq,self).__init__(**dict)
        if self.__class__ is batterylevelreq:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(batterylevelreq,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(batterylevelreq,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+CBC'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CBC'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CBC'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CBC'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CBC'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class batterylevelresp(BaseProtogenClass):
    __fields=['command', 'zero', 'level']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(batterylevelresp,self).__init__(**dict)
        if self.__class__ is batterylevelresp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(batterylevelresp,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(batterylevelresp,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()
        self.__field_command.writetobuffer(buf)
        self.__field_zero.writetobuffer(buf)
        self.__field_level.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CBC:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_zero=CSVINT()
        self.__field_zero.readfrombuffer(buf)
        self.__field_level=CSVINT(**{ 'terminator': None })
        self.__field_level.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CBC:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_zero(self):
        return self.__field_zero.getvalue()

    def __setfield_zero(self, value):
        if isinstance(value,CSVINT):
            self.__field_zero=value
        else:
            self.__field_zero=CSVINT(value,)

    def __delfield_zero(self): del self.__field_zero

    zero=property(__getfield_zero, __setfield_zero, __delfield_zero, None)

    def __getfield_level(self):
        return self.__field_level.getvalue()

    def __setfield_level(self, value):
        if isinstance(value,CSVINT):
            self.__field_level=value
        else:
            self.__field_level=CSVINT(value,**{ 'terminator': None })

    def __delfield_level(self): del self.__field_level

    level=property(__getfield_level, __setfield_level, __delfield_level, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('zero', self.__field_zero, None)
        yield ('level', self.__field_level, None)

    def _levelstr(self):
        return '%d%%' % (self.level * 4/3)
    levelstr=property(fget=_levelstr)




class select_message_storage_req(BaseProtogenClass):
    __fields=['command', 'storage']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(select_message_storage_req,self).__init__(**dict)
        if self.__class__ is select_message_storage_req:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(select_message_storage_req,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(select_message_storage_req,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPMS='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_storage
        except:
            self.__field_storage=CSVSTRING()
        self.__field_storage.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPMS='})
        self.__field_command.readfrombuffer(buf)
        self.__field_storage=CSVSTRING()
        self.__field_storage.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CPMS='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CPMS='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_storage(self):
        try: self.__field_storage
        except:
            self.__field_storage=CSVSTRING()
        return self.__field_storage.getvalue()

    def __setfield_storage(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_storage=value
        else:
            self.__field_storage=CSVSTRING(value,)

    def __delfield_storage(self): del self.__field_storage

    storage=property(__getfield_storage, __setfield_storage, __delfield_storage, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('storage', self.__field_storage, None)




class select_message_storage_resp(BaseProtogenClass):
    __fields=['command', 'used', 'total', 'used2', 'total2', 'used3', 'total3']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(select_message_storage_resp,self).__init__(**dict)
        if self.__class__ is select_message_storage_resp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(select_message_storage_resp,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(select_message_storage_resp,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()
        self.__field_command.writetobuffer(buf)
        self.__field_used.writetobuffer(buf)
        self.__field_total.writetobuffer(buf)
        self.__field_used2.writetobuffer(buf)
        self.__field_total2.writetobuffer(buf)
        self.__field_used3.writetobuffer(buf)
        self.__field_total3.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPMS:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_used=CSVINT()
        self.__field_used.readfrombuffer(buf)
        self.__field_total=CSVINT()
        self.__field_total.readfrombuffer(buf)
        self.__field_used2=CSVINT()
        self.__field_used2.readfrombuffer(buf)
        self.__field_total2=CSVINT()
        self.__field_total2.readfrombuffer(buf)
        self.__field_used3=CSVINT()
        self.__field_used3.readfrombuffer(buf)
        self.__field_total3=CSVINT()
        self.__field_total3.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CPMS:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_used(self):
        return self.__field_used.getvalue()

    def __setfield_used(self, value):
        if isinstance(value,CSVINT):
            self.__field_used=value
        else:
            self.__field_used=CSVINT(value,)

    def __delfield_used(self): del self.__field_used

    used=property(__getfield_used, __setfield_used, __delfield_used, None)

    def __getfield_total(self):
        return self.__field_total.getvalue()

    def __setfield_total(self, value):
        if isinstance(value,CSVINT):
            self.__field_total=value
        else:
            self.__field_total=CSVINT(value,)

    def __delfield_total(self): del self.__field_total

    total=property(__getfield_total, __setfield_total, __delfield_total, None)

    def __getfield_used2(self):
        return self.__field_used2.getvalue()

    def __setfield_used2(self, value):
        if isinstance(value,CSVINT):
            self.__field_used2=value
        else:
            self.__field_used2=CSVINT(value,)

    def __delfield_used2(self): del self.__field_used2

    used2=property(__getfield_used2, __setfield_used2, __delfield_used2, None)

    def __getfield_total2(self):
        return self.__field_total2.getvalue()

    def __setfield_total2(self, value):
        if isinstance(value,CSVINT):
            self.__field_total2=value
        else:
            self.__field_total2=CSVINT(value,)

    def __delfield_total2(self): del self.__field_total2

    total2=property(__getfield_total2, __setfield_total2, __delfield_total2, None)

    def __getfield_used3(self):
        return self.__field_used3.getvalue()

    def __setfield_used3(self, value):
        if isinstance(value,CSVINT):
            self.__field_used3=value
        else:
            self.__field_used3=CSVINT(value,)

    def __delfield_used3(self): del self.__field_used3

    used3=property(__getfield_used3, __setfield_used3, __delfield_used3, None)

    def __getfield_total3(self):
        return self.__field_total3.getvalue()

    def __setfield_total3(self, value):
        if isinstance(value,CSVINT):
            self.__field_total3=value
        else:
            self.__field_total3=CSVINT(value,)

    def __delfield_total3(self): del self.__field_total3

    total3=property(__getfield_total3, __setfield_total3, __delfield_total3, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('used', self.__field_used, None)
        yield ('total', self.__field_total, None)
        yield ('used2', self.__field_used2, None)
        yield ('total2', self.__field_total2, None)
        yield ('used3', self.__field_used3, None)
        yield ('total3', self.__field_total3, None)




class message_read_req(BaseProtogenClass):
    __fields=['command', 'slot']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(message_read_req,self).__init__(**dict)
        if self.__class__ is message_read_req:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(message_read_req,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(message_read_req,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGR='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGR='})
        self.__field_command.readfrombuffer(buf)
        self.__field_slot=CSVINT(**{'terminator': None})
        self.__field_slot.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGR='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CMGR='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_slot(self):
        try: self.__field_slot
        except:
            self.__field_slot=CSVINT(**{'terminator': None})
        return self.__field_slot.getvalue()

    def __setfield_slot(self, value):
        if isinstance(value,CSVINT):
            self.__field_slot=value
        else:
            self.__field_slot=CSVINT(value,**{'terminator': None})

    def __delfield_slot(self): del self.__field_slot

    slot=property(__getfield_slot, __setfield_slot, __delfield_slot, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('slot', self.__field_slot, None)




class message_read_resp(BaseProtogenClass):
    __fields=['command', 'msg_type', 'sender', 'dunno', 'timestamp', 'numberformat', 'kp', 'null', 'auchnull', 'nochnenumber', 'numberformat2', 'textlen', 'rest']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(message_read_resp,self).__init__(**dict)
        if self.__class__ is message_read_resp:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(message_read_resp,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(message_read_resp,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()
        self.__field_command.writetobuffer(buf)
        self.__field_msg_type.writetobuffer(buf)
        self.__field_sender.writetobuffer(buf)
        self.__field_dunno.writetobuffer(buf)
        self.__field_timestamp.writetobuffer(buf)
        self.__field_numberformat.writetobuffer(buf)
        self.__field_kp.writetobuffer(buf)
        self.__field_null.writetobuffer(buf)
        self.__field_auchnull.writetobuffer(buf)
        self.__field_nochnenumber.writetobuffer(buf)
        self.__field_numberformat2.writetobuffer(buf)
        self.__field_textlen.writetobuffer(buf)
        self.__field_rest.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CMGR:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_msg_type=CSVSTRING()
        self.__field_msg_type.readfrombuffer(buf)
        self.__field_sender=CSVSTRING()
        self.__field_sender.readfrombuffer(buf)
        self.__field_dunno=CSVSTRING()
        self.__field_dunno.readfrombuffer(buf)
        self.__field_timestamp=SMSDATETIME()
        self.__field_timestamp.readfrombuffer(buf)
        self.__field_numberformat=CSVINT()
        self.__field_numberformat.readfrombuffer(buf)
        self.__field_kp=CSVINT()
        self.__field_kp.readfrombuffer(buf)
        self.__field_null=CSVINT()
        self.__field_null.readfrombuffer(buf)
        self.__field_auchnull=CSVINT()
        self.__field_auchnull.readfrombuffer(buf)
        self.__field_nochnenumber=CSVSTRING()
        self.__field_nochnenumber.readfrombuffer(buf)
        self.__field_numberformat2=CSVINT()
        self.__field_numberformat2.readfrombuffer(buf)
        self.__field_textlen=CSVINT(**{'terminator': ord('\r')})
        self.__field_textlen.readfrombuffer(buf)
        self.__field_rest=CSVSTRING(**{'quotechar': None, 'terminator': None, 'maxsizeinbytes': self.textlen})
        self.__field_rest.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+CMGR:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_msg_type(self):
        return self.__field_msg_type.getvalue()

    def __setfield_msg_type(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_msg_type=value
        else:
            self.__field_msg_type=CSVSTRING(value,)

    def __delfield_msg_type(self): del self.__field_msg_type

    msg_type=property(__getfield_msg_type, __setfield_msg_type, __delfield_msg_type, None)

    def __getfield_sender(self):
        return self.__field_sender.getvalue()

    def __setfield_sender(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_sender=value
        else:
            self.__field_sender=CSVSTRING(value,)

    def __delfield_sender(self): del self.__field_sender

    sender=property(__getfield_sender, __setfield_sender, __delfield_sender, None)

    def __getfield_dunno(self):
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVSTRING(value,)

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_timestamp(self):
        return self.__field_timestamp.getvalue()

    def __setfield_timestamp(self, value):
        if isinstance(value,SMSDATETIME):
            self.__field_timestamp=value
        else:
            self.__field_timestamp=SMSDATETIME(value,)

    def __delfield_timestamp(self): del self.__field_timestamp

    timestamp=property(__getfield_timestamp, __setfield_timestamp, __delfield_timestamp, "like: 08/04/30,19:51:31+08")

    def __getfield_numberformat(self):
        return self.__field_numberformat.getvalue()

    def __setfield_numberformat(self, value):
        if isinstance(value,CSVINT):
            self.__field_numberformat=value
        else:
            self.__field_numberformat=CSVINT(value,)

    def __delfield_numberformat(self): del self.__field_numberformat

    numberformat=property(__getfield_numberformat, __setfield_numberformat, __delfield_numberformat, None)

    def __getfield_kp(self):
        return self.__field_kp.getvalue()

    def __setfield_kp(self, value):
        if isinstance(value,CSVINT):
            self.__field_kp=value
        else:
            self.__field_kp=CSVINT(value,)

    def __delfield_kp(self): del self.__field_kp

    kp=property(__getfield_kp, __setfield_kp, __delfield_kp, None)

    def __getfield_null(self):
        return self.__field_null.getvalue()

    def __setfield_null(self, value):
        if isinstance(value,CSVINT):
            self.__field_null=value
        else:
            self.__field_null=CSVINT(value,)

    def __delfield_null(self): del self.__field_null

    null=property(__getfield_null, __setfield_null, __delfield_null, None)

    def __getfield_auchnull(self):
        return self.__field_auchnull.getvalue()

    def __setfield_auchnull(self, value):
        if isinstance(value,CSVINT):
            self.__field_auchnull=value
        else:
            self.__field_auchnull=CSVINT(value,)

    def __delfield_auchnull(self): del self.__field_auchnull

    auchnull=property(__getfield_auchnull, __setfield_auchnull, __delfield_auchnull, None)

    def __getfield_nochnenumber(self):
        return self.__field_nochnenumber.getvalue()

    def __setfield_nochnenumber(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_nochnenumber=value
        else:
            self.__field_nochnenumber=CSVSTRING(value,)

    def __delfield_nochnenumber(self): del self.__field_nochnenumber

    nochnenumber=property(__getfield_nochnenumber, __setfield_nochnenumber, __delfield_nochnenumber, None)

    def __getfield_numberformat2(self):
        return self.__field_numberformat2.getvalue()

    def __setfield_numberformat2(self, value):
        if isinstance(value,CSVINT):
            self.__field_numberformat2=value
        else:
            self.__field_numberformat2=CSVINT(value,)

    def __delfield_numberformat2(self): del self.__field_numberformat2

    numberformat2=property(__getfield_numberformat2, __setfield_numberformat2, __delfield_numberformat2, None)

    def __getfield_textlen(self):
        return self.__field_textlen.getvalue()

    def __setfield_textlen(self, value):
        if isinstance(value,CSVINT):
            self.__field_textlen=value
        else:
            self.__field_textlen=CSVINT(value,**{'terminator': ord('\r')})

    def __delfield_textlen(self): del self.__field_textlen

    textlen=property(__getfield_textlen, __setfield_textlen, __delfield_textlen, None)

    def __getfield_rest(self):
        return self.__field_rest.getvalue()

    def __setfield_rest(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_rest=value
        else:
            self.__field_rest=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'maxsizeinbytes': self.textlen})

    def __delfield_rest(self): del self.__field_rest

    rest=property(__getfield_rest, __setfield_rest, __delfield_rest, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('msg_type', self.__field_msg_type, None)
        yield ('sender', self.__field_sender, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('timestamp', self.__field_timestamp, "like: 08/04/30,19:51:31+08")
        yield ('numberformat', self.__field_numberformat, None)
        yield ('kp', self.__field_kp, None)
        yield ('null', self.__field_null, None)
        yield ('auchnull', self.__field_auchnull, None)
        yield ('nochnenumber', self.__field_nochnenumber, None)
        yield ('numberformat2', self.__field_numberformat2, None)
        yield ('textlen', self.__field_textlen, None)
        yield ('rest', self.__field_rest, None)




class message_setformat_req(BaseProtogenClass):
    __fields=['command', 'format']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(message_setformat_req,self).__init__(**dict)
        if self.__class__ is message_setformat_req:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(message_setformat_req,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(message_setformat_req,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGF='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_format
        except:
            self.__field_format=CSVINT()
        self.__field_format.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGF='})
        self.__field_command.readfrombuffer(buf)
        self.__field_format=CSVINT()
        self.__field_format.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+CMGF='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+CMGF='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_format(self):
        try: self.__field_format
        except:
            self.__field_format=CSVINT()
        return self.__field_format.getvalue()

    def __setfield_format(self, value):
        if isinstance(value,CSVINT):
            self.__field_format=value
        else:
            self.__field_format=CSVINT(value,)

    def __delfield_format(self): del self.__field_format

    format=property(__getfield_format, __setfield_format, __delfield_format, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('format', self.__field_format, None)




class fsinforequest(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(fsinforequest,self).__init__(**dict)
        if self.__class__ is fsinforequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(fsinforequest,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(fsinforequest,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '+FSIF'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSIF'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSIF'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSIF'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+FSIF'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class fsinforesponse(BaseProtogenClass):
    __fields=['command', 'dunno1', 'dunno2', 'blocksize', 'dunno3', 'dunno4', 'dunno5', 'dunno6', 'dunno7', 'dunno8', 'dunno9', 'dunno10', 'dunno11', 'dunno12', 'dunno13', 'dunno14', 'dunno15']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(fsinforesponse,self).__init__(**dict)
        if self.__class__ is fsinforesponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(fsinforesponse,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(fsinforesponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_dunno1.writetobuffer(buf)
        self.__field_dunno2.writetobuffer(buf)
        self.__field_blocksize.writetobuffer(buf)
        self.__field_dunno3.writetobuffer(buf)
        self.__field_dunno4.writetobuffer(buf)
        self.__field_dunno5.writetobuffer(buf)
        self.__field_dunno6.writetobuffer(buf)
        self.__field_dunno7.writetobuffer(buf)
        self.__field_dunno8.writetobuffer(buf)
        self.__field_dunno9.writetobuffer(buf)
        self.__field_dunno10.writetobuffer(buf)
        self.__field_dunno11.writetobuffer(buf)
        self.__field_dunno12.writetobuffer(buf)
        self.__field_dunno13.writetobuffer(buf)
        self.__field_dunno14.writetobuffer(buf)
        self.__field_dunno15.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSIF:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_dunno1=CSVINT()
        self.__field_dunno1.readfrombuffer(buf)
        self.__field_dunno2=CSVINT()
        self.__field_dunno2.readfrombuffer(buf)
        self.__field_blocksize=CSVINT()
        self.__field_blocksize.readfrombuffer(buf)
        self.__field_dunno3=CSVINT()
        self.__field_dunno3.readfrombuffer(buf)
        self.__field_dunno4=CSVINT()
        self.__field_dunno4.readfrombuffer(buf)
        self.__field_dunno5=CSVSTRING()
        self.__field_dunno5.readfrombuffer(buf)
        self.__field_dunno6=CSVINT()
        self.__field_dunno6.readfrombuffer(buf)
        self.__field_dunno7=CSVINT()
        self.__field_dunno7.readfrombuffer(buf)
        self.__field_dunno8=CSVINT()
        self.__field_dunno8.readfrombuffer(buf)
        self.__field_dunno9=CSVINT()
        self.__field_dunno9.readfrombuffer(buf)
        self.__field_dunno10=CSVINT()
        self.__field_dunno10.readfrombuffer(buf)
        self.__field_dunno11=CSVINT()
        self.__field_dunno11.readfrombuffer(buf)
        self.__field_dunno12=CSVINT()
        self.__field_dunno12.readfrombuffer(buf)
        self.__field_dunno13=CSVINT()
        self.__field_dunno13.readfrombuffer(buf)
        self.__field_dunno14=CSVSTRING()
        self.__field_dunno14.readfrombuffer(buf)
        self.__field_dunno15=CSVINT(**{'terminator': None})
        self.__field_dunno15.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSIF:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dunno1(self):
        return self.__field_dunno1.getvalue()

    def __setfield_dunno1(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno1=value
        else:
            self.__field_dunno1=CSVINT(value,)

    def __delfield_dunno1(self): del self.__field_dunno1

    dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None)

    def __getfield_dunno2(self):
        return self.__field_dunno2.getvalue()

    def __setfield_dunno2(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno2=value
        else:
            self.__field_dunno2=CSVINT(value,)

    def __delfield_dunno2(self): del self.__field_dunno2

    dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None)

    def __getfield_blocksize(self):
        return self.__field_blocksize.getvalue()

    def __setfield_blocksize(self, value):
        if isinstance(value,CSVINT):
            self.__field_blocksize=value
        else:
            self.__field_blocksize=CSVINT(value,)

    def __delfield_blocksize(self): del self.__field_blocksize

    blocksize=property(__getfield_blocksize, __setfield_blocksize, __delfield_blocksize, None)

    def __getfield_dunno3(self):
        return self.__field_dunno3.getvalue()

    def __setfield_dunno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno3=value
        else:
            self.__field_dunno3=CSVINT(value,)

    def __delfield_dunno3(self): del self.__field_dunno3

    dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None)

    def __getfield_dunno4(self):
        return self.__field_dunno4.getvalue()

    def __setfield_dunno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno4=value
        else:
            self.__field_dunno4=CSVINT(value,)

    def __delfield_dunno4(self): del self.__field_dunno4

    dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None)

    def __getfield_dunno5(self):
        return self.__field_dunno5.getvalue()

    def __setfield_dunno5(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno5=value
        else:
            self.__field_dunno5=CSVSTRING(value,)

    def __delfield_dunno5(self): del self.__field_dunno5

    dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None)

    def __getfield_dunno6(self):
        return self.__field_dunno6.getvalue()

    def __setfield_dunno6(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno6=value
        else:
            self.__field_dunno6=CSVINT(value,)

    def __delfield_dunno6(self): del self.__field_dunno6

    dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None)

    def __getfield_dunno7(self):
        return self.__field_dunno7.getvalue()

    def __setfield_dunno7(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno7=value
        else:
            self.__field_dunno7=CSVINT(value,)

    def __delfield_dunno7(self): del self.__field_dunno7

    dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None)

    def __getfield_dunno8(self):
        return self.__field_dunno8.getvalue()

    def __setfield_dunno8(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno8=value
        else:
            self.__field_dunno8=CSVINT(value,)

    def __delfield_dunno8(self): del self.__field_dunno8

    dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None)

    def __getfield_dunno9(self):
        return self.__field_dunno9.getvalue()

    def __setfield_dunno9(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno9=value
        else:
            self.__field_dunno9=CSVINT(value,)

    def __delfield_dunno9(self): del self.__field_dunno9

    dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None)

    def __getfield_dunno10(self):
        return self.__field_dunno10.getvalue()

    def __setfield_dunno10(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno10=value
        else:
            self.__field_dunno10=CSVINT(value,)

    def __delfield_dunno10(self): del self.__field_dunno10

    dunno10=property(__getfield_dunno10, __setfield_dunno10, __delfield_dunno10, None)

    def __getfield_dunno11(self):
        return self.__field_dunno11.getvalue()

    def __setfield_dunno11(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno11=value
        else:
            self.__field_dunno11=CSVINT(value,)

    def __delfield_dunno11(self): del self.__field_dunno11

    dunno11=property(__getfield_dunno11, __setfield_dunno11, __delfield_dunno11, None)

    def __getfield_dunno12(self):
        return self.__field_dunno12.getvalue()

    def __setfield_dunno12(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno12=value
        else:
            self.__field_dunno12=CSVINT(value,)

    def __delfield_dunno12(self): del self.__field_dunno12

    dunno12=property(__getfield_dunno12, __setfield_dunno12, __delfield_dunno12, None)

    def __getfield_dunno13(self):
        return self.__field_dunno13.getvalue()

    def __setfield_dunno13(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno13=value
        else:
            self.__field_dunno13=CSVINT(value,)

    def __delfield_dunno13(self): del self.__field_dunno13

    dunno13=property(__getfield_dunno13, __setfield_dunno13, __delfield_dunno13, None)

    def __getfield_dunno14(self):
        return self.__field_dunno14.getvalue()

    def __setfield_dunno14(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno14=value
        else:
            self.__field_dunno14=CSVSTRING(value,)

    def __delfield_dunno14(self): del self.__field_dunno14

    dunno14=property(__getfield_dunno14, __setfield_dunno14, __delfield_dunno14, None)

    def __getfield_dunno15(self):
        return self.__field_dunno15.getvalue()

    def __setfield_dunno15(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno15=value
        else:
            self.__field_dunno15=CSVINT(value,**{'terminator': None})

    def __delfield_dunno15(self): del self.__field_dunno15

    dunno15=property(__getfield_dunno15, __setfield_dunno15, __delfield_dunno15, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dunno1', self.__field_dunno1, None)
        yield ('dunno2', self.__field_dunno2, None)
        yield ('blocksize', self.__field_blocksize, None)
        yield ('dunno3', self.__field_dunno3, None)
        yield ('dunno4', self.__field_dunno4, None)
        yield ('dunno5', self.__field_dunno5, None)
        yield ('dunno6', self.__field_dunno6, None)
        yield ('dunno7', self.__field_dunno7, None)
        yield ('dunno8', self.__field_dunno8, None)
        yield ('dunno9', self.__field_dunno9, None)
        yield ('dunno10', self.__field_dunno10, None)
        yield ('dunno11', self.__field_dunno11, None)
        yield ('dunno12', self.__field_dunno12, None)
        yield ('dunno13', self.__field_dunno13, None)
        yield ('dunno14', self.__field_dunno14, None)
        yield ('dunno15', self.__field_dunno15, None)




class dirlistrequest(BaseProtogenClass):
    __fields=['command', 'dir']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(dirlistrequest,self).__init__(**dict)
        if self.__class__ is dirlistrequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(dirlistrequest,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(dirlistrequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDI='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_dir
        except:
            self.__field_dir=CSVSTRING(**{'terminator': None})
        self.__field_dir.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDI='})
        self.__field_command.readfrombuffer(buf)
        self.__field_dir=CSVSTRING(**{'terminator': None})
        self.__field_dir.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDI='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+FSDI='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dir(self):
        try: self.__field_dir
        except:
            self.__field_dir=CSVSTRING(**{'terminator': None})
        return self.__field_dir.getvalue()

    def __setfield_dir(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dir=value
        else:
            self.__field_dir=CSVSTRING(value,**{'terminator': None})

    def __delfield_dir(self): del self.__field_dir

    dir=property(__getfield_dir, __setfield_dir, __delfield_dir, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dir', self.__field_dir, None)




class dirlistresponse(BaseProtogenClass):
    __fields=['command', 'null', 'name', 'dunno', 'dunno2', 'dunno3', 'dunno4', 'dunno5', 'dunno6', 'dunno7', 'dunno8', 'dunno9', 'dunno10', 'dunno11', 'dunno12', 'dunno13', 'dunno14', 'dunno15']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(dirlistresponse,self).__init__(**dict)
        if self.__class__ is dirlistresponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(dirlistresponse,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(dirlistresponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_null.writetobuffer(buf)
        self.__field_name.writetobuffer(buf)
        self.__field_dunno.writetobuffer(buf)
        self.__field_dunno2.writetobuffer(buf)
        self.__field_dunno3.writetobuffer(buf)
        self.__field_dunno4.writetobuffer(buf)
        self.__field_dunno5.writetobuffer(buf)
        self.__field_dunno6.writetobuffer(buf)
        self.__field_dunno7.writetobuffer(buf)
        self.__field_dunno8.writetobuffer(buf)
        self.__field_dunno9.writetobuffer(buf)
        self.__field_dunno10.writetobuffer(buf)
        self.__field_dunno11.writetobuffer(buf)
        self.__field_dunno12.writetobuffer(buf)
        self.__field_dunno13.writetobuffer(buf)
        self.__field_dunno14.writetobuffer(buf)
        self.__field_dunno15.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSDI:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_null=CSVINT()
        self.__field_null.readfrombuffer(buf)
        self.__field_name=CSVSTRING()
        self.__field_name.readfrombuffer(buf)
        self.__field_dunno=CSVINT()
        self.__field_dunno.readfrombuffer(buf)
        self.__field_dunno2=CSVSTRING()
        self.__field_dunno2.readfrombuffer(buf)
        self.__field_dunno3=CSVINT()
        self.__field_dunno3.readfrombuffer(buf)
        self.__field_dunno4=CSVINT()
        self.__field_dunno4.readfrombuffer(buf)
        self.__field_dunno5=CSVINT()
        self.__field_dunno5.readfrombuffer(buf)
        self.__field_dunno6=CSVSTRING()
        self.__field_dunno6.readfrombuffer(buf)
        self.__field_dunno7=CSVINT()
        self.__field_dunno7.readfrombuffer(buf)
        self.__field_dunno8=CSVINT()
        self.__field_dunno8.readfrombuffer(buf)
        self.__field_dunno9=CSVINT()
        self.__field_dunno9.readfrombuffer(buf)
        self.__field_dunno10=CSVSTRING()
        self.__field_dunno10.readfrombuffer(buf)
        self.__field_dunno11=CSVSTRING()
        self.__field_dunno11.readfrombuffer(buf)
        self.__field_dunno12=CSVSTRING()
        self.__field_dunno12.readfrombuffer(buf)
        self.__field_dunno13=CSVINT()
        self.__field_dunno13.readfrombuffer(buf)
        self.__field_dunno14=CSVINT()
        self.__field_dunno14.readfrombuffer(buf)
        self.__field_dunno15=CSVSTRING(**{'terminator': None})
        self.__field_dunno15.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSDI:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_null(self):
        return self.__field_null.getvalue()

    def __setfield_null(self, value):
        if isinstance(value,CSVINT):
            self.__field_null=value
        else:
            self.__field_null=CSVINT(value,)

    def __delfield_null(self): del self.__field_null

    null=property(__getfield_null, __setfield_null, __delfield_null, None)

    def __getfield_name(self):
        return self.__field_name.getvalue()

    def __setfield_name(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_name=value
        else:
            self.__field_name=CSVSTRING(value,)

    def __delfield_name(self): del self.__field_name

    name=property(__getfield_name, __setfield_name, __delfield_name, None)

    def __getfield_dunno(self):
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVINT(value,)

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_dunno2(self):
        return self.__field_dunno2.getvalue()

    def __setfield_dunno2(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno2=value
        else:
            self.__field_dunno2=CSVSTRING(value,)

    def __delfield_dunno2(self): del self.__field_dunno2

    dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None)

    def __getfield_dunno3(self):
        return self.__field_dunno3.getvalue()

    def __setfield_dunno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno3=value
        else:
            self.__field_dunno3=CSVINT(value,)

    def __delfield_dunno3(self): del self.__field_dunno3

    dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None)

    def __getfield_dunno4(self):
        return self.__field_dunno4.getvalue()

    def __setfield_dunno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno4=value
        else:
            self.__field_dunno4=CSVINT(value,)

    def __delfield_dunno4(self): del self.__field_dunno4

    dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None)

    def __getfield_dunno5(self):
        return self.__field_dunno5.getvalue()

    def __setfield_dunno5(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno5=value
        else:
            self.__field_dunno5=CSVINT(value,)

    def __delfield_dunno5(self): del self.__field_dunno5

    dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None)

    def __getfield_dunno6(self):
        return self.__field_dunno6.getvalue()

    def __setfield_dunno6(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno6=value
        else:
            self.__field_dunno6=CSVSTRING(value,)

    def __delfield_dunno6(self): del self.__field_dunno6

    dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None)

    def __getfield_dunno7(self):
        return self.__field_dunno7.getvalue()

    def __setfield_dunno7(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno7=value
        else:
            self.__field_dunno7=CSVINT(value,)

    def __delfield_dunno7(self): del self.__field_dunno7

    dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None)

    def __getfield_dunno8(self):
        return self.__field_dunno8.getvalue()

    def __setfield_dunno8(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno8=value
        else:
            self.__field_dunno8=CSVINT(value,)

    def __delfield_dunno8(self): del self.__field_dunno8

    dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None)

    def __getfield_dunno9(self):
        return self.__field_dunno9.getvalue()

    def __setfield_dunno9(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno9=value
        else:
            self.__field_dunno9=CSVINT(value,)

    def __delfield_dunno9(self): del self.__field_dunno9

    dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None)

    def __getfield_dunno10(self):
        return self.__field_dunno10.getvalue()

    def __setfield_dunno10(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno10=value
        else:
            self.__field_dunno10=CSVSTRING(value,)

    def __delfield_dunno10(self): del self.__field_dunno10

    dunno10=property(__getfield_dunno10, __setfield_dunno10, __delfield_dunno10, None)

    def __getfield_dunno11(self):
        return self.__field_dunno11.getvalue()

    def __setfield_dunno11(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno11=value
        else:
            self.__field_dunno11=CSVSTRING(value,)

    def __delfield_dunno11(self): del self.__field_dunno11

    dunno11=property(__getfield_dunno11, __setfield_dunno11, __delfield_dunno11, None)

    def __getfield_dunno12(self):
        return self.__field_dunno12.getvalue()

    def __setfield_dunno12(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno12=value
        else:
            self.__field_dunno12=CSVSTRING(value,)

    def __delfield_dunno12(self): del self.__field_dunno12

    dunno12=property(__getfield_dunno12, __setfield_dunno12, __delfield_dunno12, None)

    def __getfield_dunno13(self):
        return self.__field_dunno13.getvalue()

    def __setfield_dunno13(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno13=value
        else:
            self.__field_dunno13=CSVINT(value,)

    def __delfield_dunno13(self): del self.__field_dunno13

    dunno13=property(__getfield_dunno13, __setfield_dunno13, __delfield_dunno13, None)

    def __getfield_dunno14(self):
        return self.__field_dunno14.getvalue()

    def __setfield_dunno14(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno14=value
        else:
            self.__field_dunno14=CSVINT(value,)

    def __delfield_dunno14(self): del self.__field_dunno14

    dunno14=property(__getfield_dunno14, __setfield_dunno14, __delfield_dunno14, None)

    def __getfield_dunno15(self):
        return self.__field_dunno15.getvalue()

    def __setfield_dunno15(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno15=value
        else:
            self.__field_dunno15=CSVSTRING(value,**{'terminator': None})

    def __delfield_dunno15(self): del self.__field_dunno15

    dunno15=property(__getfield_dunno15, __setfield_dunno15, __delfield_dunno15, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('null', self.__field_null, None)
        yield ('name', self.__field_name, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('dunno2', self.__field_dunno2, None)
        yield ('dunno3', self.__field_dunno3, None)
        yield ('dunno4', self.__field_dunno4, None)
        yield ('dunno5', self.__field_dunno5, None)
        yield ('dunno6', self.__field_dunno6, None)
        yield ('dunno7', self.__field_dunno7, None)
        yield ('dunno8', self.__field_dunno8, None)
        yield ('dunno9', self.__field_dunno9, None)
        yield ('dunno10', self.__field_dunno10, None)
        yield ('dunno11', self.__field_dunno11, None)
        yield ('dunno12', self.__field_dunno12, None)
        yield ('dunno13', self.__field_dunno13, None)
        yield ('dunno14', self.__field_dunno14, None)
        yield ('dunno15', self.__field_dunno15, None)




class filelistrequest(BaseProtogenClass):
    __fields=['command', 'dir']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(filelistrequest,self).__init__(**dict)
        if self.__class__ is filelistrequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(filelistrequest,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(filelistrequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDL='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_dir
        except:
            self.__field_dir=CSVSTRING(**{'terminator': None})
        self.__field_dir.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDL='})
        self.__field_command.readfrombuffer(buf)
        self.__field_dir=CSVSTRING(**{'terminator': None})
        self.__field_dir.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSDL='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+FSDL='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dir(self):
        try: self.__field_dir
        except:
            self.__field_dir=CSVSTRING(**{'terminator': None})
        return self.__field_dir.getvalue()

    def __setfield_dir(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dir=value
        else:
            self.__field_dir=CSVSTRING(value,**{'terminator': None})

    def __delfield_dir(self): del self.__field_dir

    dir=property(__getfield_dir, __setfield_dir, __delfield_dir, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dir', self.__field_dir, None)




class filelistresponse(BaseProtogenClass):
    __fields=['command', 'null', 'filename', 'dunno', 'dunno2', 'dunno3', 'dunno4', 'size', 'dunno6', 'dunno7', 'dunno8', 'dunno9']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(filelistresponse,self).__init__(**dict)
        if self.__class__ is filelistresponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(filelistresponse,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(filelistresponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_null.writetobuffer(buf)
        self.__field_filename.writetobuffer(buf)
        self.__field_dunno.writetobuffer(buf)
        self.__field_dunno2.writetobuffer(buf)
        self.__field_dunno3.writetobuffer(buf)
        self.__field_dunno4.writetobuffer(buf)
        self.__field_size.writetobuffer(buf)
        self.__field_dunno6.writetobuffer(buf)
        self.__field_dunno7.writetobuffer(buf)
        self.__field_dunno8.writetobuffer(buf)
        self.__field_dunno9.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSDL:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_null=CSVINT()
        self.__field_null.readfrombuffer(buf)
        self.__field_filename=CSVSTRING()
        self.__field_filename.readfrombuffer(buf)
        self.__field_dunno=CSVINT()
        self.__field_dunno.readfrombuffer(buf)
        self.__field_dunno2=CSVSTRING()
        self.__field_dunno2.readfrombuffer(buf)
        self.__field_dunno3=CSVINT()
        self.__field_dunno3.readfrombuffer(buf)
        self.__field_dunno4=CSVINT()
        self.__field_dunno4.readfrombuffer(buf)
        self.__field_size=CSVINT()
        self.__field_size.readfrombuffer(buf)
        self.__field_dunno6=CSVINT()
        self.__field_dunno6.readfrombuffer(buf)
        self.__field_dunno7=CSVSTRING()
        self.__field_dunno7.readfrombuffer(buf)
        self.__field_dunno8=CSVSTRING()
        self.__field_dunno8.readfrombuffer(buf)
        self.__field_dunno9=CSVSTRING(**{'terminator': None})
        self.__field_dunno9.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSDL:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_null(self):
        return self.__field_null.getvalue()

    def __setfield_null(self, value):
        if isinstance(value,CSVINT):
            self.__field_null=value
        else:
            self.__field_null=CSVINT(value,)

    def __delfield_null(self): del self.__field_null

    null=property(__getfield_null, __setfield_null, __delfield_null, None)

    def __getfield_filename(self):
        return self.__field_filename.getvalue()

    def __setfield_filename(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_filename=value
        else:
            self.__field_filename=CSVSTRING(value,)

    def __delfield_filename(self): del self.__field_filename

    filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None)

    def __getfield_dunno(self):
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVINT(value,)

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_dunno2(self):
        return self.__field_dunno2.getvalue()

    def __setfield_dunno2(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno2=value
        else:
            self.__field_dunno2=CSVSTRING(value,)

    def __delfield_dunno2(self): del self.__field_dunno2

    dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None)

    def __getfield_dunno3(self):
        return self.__field_dunno3.getvalue()

    def __setfield_dunno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno3=value
        else:
            self.__field_dunno3=CSVINT(value,)

    def __delfield_dunno3(self): del self.__field_dunno3

    dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None)

    def __getfield_dunno4(self):
        return self.__field_dunno4.getvalue()

    def __setfield_dunno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno4=value
        else:
            self.__field_dunno4=CSVINT(value,)

    def __delfield_dunno4(self): del self.__field_dunno4

    dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None)

    def __getfield_size(self):
        return self.__field_size.getvalue()

    def __setfield_size(self, value):
        if isinstance(value,CSVINT):
            self.__field_size=value
        else:
            self.__field_size=CSVINT(value,)

    def __delfield_size(self): del self.__field_size

    size=property(__getfield_size, __setfield_size, __delfield_size, None)

    def __getfield_dunno6(self):
        return self.__field_dunno6.getvalue()

    def __setfield_dunno6(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno6=value
        else:
            self.__field_dunno6=CSVINT(value,)

    def __delfield_dunno6(self): del self.__field_dunno6

    dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None)

    def __getfield_dunno7(self):
        return self.__field_dunno7.getvalue()

    def __setfield_dunno7(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno7=value
        else:
            self.__field_dunno7=CSVSTRING(value,)

    def __delfield_dunno7(self): del self.__field_dunno7

    dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None)

    def __getfield_dunno8(self):
        return self.__field_dunno8.getvalue()

    def __setfield_dunno8(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno8=value
        else:
            self.__field_dunno8=CSVSTRING(value,)

    def __delfield_dunno8(self): del self.__field_dunno8

    dunno8=property(__getfield_dunno8, __setfield_dunno8, __delfield_dunno8, None)

    def __getfield_dunno9(self):
        return self.__field_dunno9.getvalue()

    def __setfield_dunno9(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno9=value
        else:
            self.__field_dunno9=CSVSTRING(value,**{'terminator': None})

    def __delfield_dunno9(self): del self.__field_dunno9

    dunno9=property(__getfield_dunno9, __setfield_dunno9, __delfield_dunno9, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('null', self.__field_null, None)
        yield ('filename', self.__field_filename, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('dunno2', self.__field_dunno2, None)
        yield ('dunno3', self.__field_dunno3, None)
        yield ('dunno4', self.__field_dunno4, None)
        yield ('size', self.__field_size, None)
        yield ('dunno6', self.__field_dunno6, None)
        yield ('dunno7', self.__field_dunno7, None)
        yield ('dunno8', self.__field_dunno8, None)
        yield ('dunno9', self.__field_dunno9, None)




class filerequest(BaseProtogenClass):
    __fields=['command', 'dunno', 'filename']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(filerequest,self).__init__(**dict)
        if self.__class__ is filerequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(filerequest,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(filerequest,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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSFR='})
        self.__field_command.writetobuffer(buf)
        try: self.__field_dunno
        except:
            self.__field_dunno=CSVINT(**{'default': -1})
        self.__field_dunno.writetobuffer(buf)
        try: self.__field_filename
        except:
            self.__field_filename=CSVSTRING(**{'terminator': None})
        self.__field_filename.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSFR='})
        self.__field_command.readfrombuffer(buf)
        self.__field_dunno=CSVINT(**{'default': -1})
        self.__field_dunno.readfrombuffer(buf)
        self.__field_filename=CSVSTRING(**{'terminator': None})
        self.__field_filename.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '+FSFR='})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '+FSFR='})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dunno(self):
        try: self.__field_dunno
        except:
            self.__field_dunno=CSVINT(**{'default': -1})
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVINT(value,**{'default': -1})

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_filename(self):
        try: self.__field_filename
        except:
            self.__field_filename=CSVSTRING(**{'terminator': None})
        return self.__field_filename.getvalue()

    def __setfield_filename(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_filename=value
        else:
            self.__field_filename=CSVSTRING(value,**{'terminator': None})

    def __delfield_filename(self): del self.__field_filename

    filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('filename', self.__field_filename, None)




class fileresponse(BaseProtogenClass):
    __fields=['command', 'dunno', 'filename', 'dunno1', 'dunno2', 'dunno3', 'size', 'dunno4', 'dunno5', 'dunno6', 'dunno7']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(fileresponse,self).__init__(**dict)
        if self.__class__ is fileresponse:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(fileresponse,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(fileresponse,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()
        self.__field_command.writetobuffer(buf)
        self.__field_dunno.writetobuffer(buf)
        self.__field_filename.writetobuffer(buf)
        self.__field_dunno1.writetobuffer(buf)
        self.__field_dunno2.writetobuffer(buf)
        self.__field_dunno3.writetobuffer(buf)
        self.__field_size.writetobuffer(buf)
        self.__field_dunno4.writetobuffer(buf)
        self.__field_dunno5.writetobuffer(buf)
        self.__field_dunno6.writetobuffer(buf)
        self.__field_dunno7.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSFR:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_dunno=CSVINT()
        self.__field_dunno.readfrombuffer(buf)
        self.__field_filename=CSVSTRING()
        self.__field_filename.readfrombuffer(buf)
        self.__field_dunno1=CSVINT()
        self.__field_dunno1.readfrombuffer(buf)
        self.__field_dunno2=CSVSTRING()
        self.__field_dunno2.readfrombuffer(buf)
        self.__field_dunno3=CSVINT()
        self.__field_dunno3.readfrombuffer(buf)
        self.__field_size=CSVINT()
        self.__field_size.readfrombuffer(buf)
        self.__field_dunno4=CSVINT()
        self.__field_dunno4.readfrombuffer(buf)
        self.__field_dunno5=CSVSTRING()
        self.__field_dunno5.readfrombuffer(buf)
        self.__field_dunno6=CSVSTRING()
        self.__field_dunno6.readfrombuffer(buf)
        self.__field_dunno7=CSVSTRING(**{'terminator': None})
        self.__field_dunno7.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSFR:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_dunno(self):
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVINT(value,)

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_filename(self):
        return self.__field_filename.getvalue()

    def __setfield_filename(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_filename=value
        else:
            self.__field_filename=CSVSTRING(value,)

    def __delfield_filename(self): del self.__field_filename

    filename=property(__getfield_filename, __setfield_filename, __delfield_filename, None)

    def __getfield_dunno1(self):
        return self.__field_dunno1.getvalue()

    def __setfield_dunno1(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno1=value
        else:
            self.__field_dunno1=CSVINT(value,)

    def __delfield_dunno1(self): del self.__field_dunno1

    dunno1=property(__getfield_dunno1, __setfield_dunno1, __delfield_dunno1, None)

    def __getfield_dunno2(self):
        return self.__field_dunno2.getvalue()

    def __setfield_dunno2(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno2=value
        else:
            self.__field_dunno2=CSVSTRING(value,)

    def __delfield_dunno2(self): del self.__field_dunno2

    dunno2=property(__getfield_dunno2, __setfield_dunno2, __delfield_dunno2, None)

    def __getfield_dunno3(self):
        return self.__field_dunno3.getvalue()

    def __setfield_dunno3(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno3=value
        else:
            self.__field_dunno3=CSVINT(value,)

    def __delfield_dunno3(self): del self.__field_dunno3

    dunno3=property(__getfield_dunno3, __setfield_dunno3, __delfield_dunno3, None)

    def __getfield_size(self):
        return self.__field_size.getvalue()

    def __setfield_size(self, value):
        if isinstance(value,CSVINT):
            self.__field_size=value
        else:
            self.__field_size=CSVINT(value,)

    def __delfield_size(self): del self.__field_size

    size=property(__getfield_size, __setfield_size, __delfield_size, None)

    def __getfield_dunno4(self):
        return self.__field_dunno4.getvalue()

    def __setfield_dunno4(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno4=value
        else:
            self.__field_dunno4=CSVINT(value,)

    def __delfield_dunno4(self): del self.__field_dunno4

    dunno4=property(__getfield_dunno4, __setfield_dunno4, __delfield_dunno4, None)

    def __getfield_dunno5(self):
        return self.__field_dunno5.getvalue()

    def __setfield_dunno5(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno5=value
        else:
            self.__field_dunno5=CSVSTRING(value,)

    def __delfield_dunno5(self): del self.__field_dunno5

    dunno5=property(__getfield_dunno5, __setfield_dunno5, __delfield_dunno5, None)

    def __getfield_dunno6(self):
        return self.__field_dunno6.getvalue()

    def __setfield_dunno6(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno6=value
        else:
            self.__field_dunno6=CSVSTRING(value,)

    def __delfield_dunno6(self): del self.__field_dunno6

    dunno6=property(__getfield_dunno6, __setfield_dunno6, __delfield_dunno6, None)

    def __getfield_dunno7(self):
        return self.__field_dunno7.getvalue()

    def __setfield_dunno7(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_dunno7=value
        else:
            self.__field_dunno7=CSVSTRING(value,**{'terminator': None})

    def __delfield_dunno7(self): del self.__field_dunno7

    dunno7=property(__getfield_dunno7, __setfield_dunno7, __delfield_dunno7, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('filename', self.__field_filename, None)
        yield ('dunno1', self.__field_dunno1, None)
        yield ('dunno2', self.__field_dunno2, None)
        yield ('dunno3', self.__field_dunno3, None)
        yield ('size', self.__field_size, None)
        yield ('dunno4', self.__field_dunno4, None)
        yield ('dunno5', self.__field_dunno5, None)
        yield ('dunno6', self.__field_dunno6, None)
        yield ('dunno7', self.__field_dunno7, None)




class continuerequest(BaseProtogenClass):
    __fields=['command']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(continuerequest,self).__init__(**dict)
        if self.__class__ is continuerequest:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(continuerequest,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(continuerequest,kwargs)
        if len(args):
            dict2={'quotechar': None, 'terminator': None, 'default': '##>'}
            dict2.update(kwargs)
            kwargs=dict2
            self.__field_command=CSVSTRING(*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_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '##>'})
        self.__field_command.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_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '##>'})
        self.__field_command.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        try: self.__field_command
        except:
            self.__field_command=CSVSTRING(**{'quotechar': None, 'terminator': None, 'default': '##>'})
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': None, 'default': '##>'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)




class downloadpacket(BaseProtogenClass):
    __fields=['command', 'size', 'index', 'dunno', 'data']

    def __init__(self, *args, **kwargs):
        dict={}
        # What was supplied to this function
        dict.update(kwargs)
        # Parent constructor
        super(downloadpacket,self).__init__(**dict)
        if self.__class__ is downloadpacket:
            self._update(args,dict)


    def getfields(self):
        return self.__fields


    def _update(self, args, kwargs):
        super(downloadpacket,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(downloadpacket,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()
        self.__field_command.writetobuffer(buf)
        self.__field_size.writetobuffer(buf)
        self.__field_index.writetobuffer(buf)
        self.__field_dunno.writetobuffer(buf)
        self.__field_data.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_command=CSVSTRING(**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSFR:'})
        self.__field_command.readfrombuffer(buf)
        self.__field_size=CSVINT()
        self.__field_size.readfrombuffer(buf)
        self.__field_index=CSVINT()
        self.__field_index.readfrombuffer(buf)
        self.__field_dunno=CSVINT()
        self.__field_dunno.readfrombuffer(buf)
        self.__field_data=DATA()
        self.__field_data.readfrombuffer(buf)
        self._bufferendoffset=buf.getcurrentoffset()


    def __getfield_command(self):
        return self.__field_command.getvalue()

    def __setfield_command(self, value):
        if isinstance(value,CSVSTRING):
            self.__field_command=value
        else:
            self.__field_command=CSVSTRING(value,**{'quotechar': None, 'terminator': ord(' '), 'constant': '+FSFR:'})

    def __delfield_command(self): del self.__field_command

    command=property(__getfield_command, __setfield_command, __delfield_command, None)

    def __getfield_size(self):
        return self.__field_size.getvalue()

    def __setfield_size(self, value):
        if isinstance(value,CSVINT):
            self.__field_size=value
        else:
            self.__field_size=CSVINT(value,)

    def __delfield_size(self): del self.__field_size

    size=property(__getfield_size, __setfield_size, __delfield_size, None)

    def __getfield_index(self):
        return self.__field_index.getvalue()

    def __setfield_index(self, value):
        if isinstance(value,CSVINT):
            self.__field_index=value
        else:
            self.__field_index=CSVINT(value,)

    def __delfield_index(self): del self.__field_index

    index=property(__getfield_index, __setfield_index, __delfield_index, None)

    def __getfield_dunno(self):
        return self.__field_dunno.getvalue()

    def __setfield_dunno(self, value):
        if isinstance(value,CSVINT):
            self.__field_dunno=value
        else:
            self.__field_dunno=CSVINT(value,)

    def __delfield_dunno(self): del self.__field_dunno

    dunno=property(__getfield_dunno, __setfield_dunno, __delfield_dunno, None)

    def __getfield_data(self):
        return self.__field_data.getvalue()

    def __setfield_data(self, value):
        if isinstance(value,DATA):
            self.__field_data=value
        else:
            self.__field_data=DATA(value,)

    def __delfield_data(self): del self.__field_data

    data=property(__getfield_data, __setfield_data, __delfield_data, None)

    def iscontainer(self):
        return True

    def containerelements(self):
        yield ('command', self.__field_command, None)
        yield ('size', self.__field_size, None)
        yield ('index', self.__field_index, None)
        yield ('dunno', self.__field_dunno, None)
        yield ('data', self.__field_data, None)






[com_samsungsghd600.py]

### BITPIM
###
### Copyright (C) 2009 Marvin Schmidt <marvin_schmidt@...>
###
### This program is free software; you can redistribute it and/or modify
### it under the terms of the BitPim license as detailed in the LICENSE file.
###

### This file is probably based in parts upon com_samsungscha670.py


"""Communicate with a Samsung SGH-D600"""

# lib modules
import re
import sha
import time

# my modules
import common
import commport
#import com_brew
import com_samsung
import com_samsung_packet
import com_phone
import conversions
import fileinfo
import nameparser
import p_samsungsghd600
import prototypes
import sms
import cStringIO

import bpcalendar

numbertypetab=('cell', 'home','office','fax','other')

#class Phone(com_etsi.Phone):
class Phone(com_samsung_packet.Phone):
    "Talk to the Samsung SGH-D600 Cell Phone"

    desc="SGH-D600"
    serialsname='sghd600'
    protocolclass=p_samsungsghd600
    parent_phone=com_samsung_packet.Phone


    def __init__(self, logtarget, commport):
        "Calls all the constructors and sets initial modes"
        com_samsung_packet.Phone.__init__(self, logtarget, commport)
        self.numbertypetab=numbertypetab
        self.mode=self.MODENONE

    getringtones=None

    def listfiles(self, dir=''):
        results={}

        bla=self.comm.sendatcommand("+FSCD=\"" + dir + "\"");
        self.log("Listing files in dir: '/"+dir+"'")
        dir="/"+dir

        req=self.protocolclass.filelistrequest()
        if len(dir):
               req.dir=dir
        else:
            req.dir="/"
        res=self.sendpbcommand(req, self.protocolclass.filelistresponse)

        for entry in res:
            results[entry.filename]={ 'name': entry.filename, 'type': 'file', 'size': entry.size, 'date': (0, "") }

        return results


    def listsubdirs(self, dir='', recurse=0):
        results={}
        self.log("Listing own subdirs in dir: '"+dir+"'")

        bla=self.comm.sendatcommand("+FSCD=\"" + dir + "\"");

        req=self.protocolclass.dirlistrequest()
        if len(dir):
               req.dir=dir
        else:
            req.dir="/"
        res=self.sendpbcommand(req, self.protocolclass.dirlistresponse)

        for entry in res:
            subdir=entry.name
            if len(dir):
                subdir=dir+"/"+subdir
            else:
                subdir="/"+subdir
            results[subdir]={ 'name': subdir, 'type': 'directory' }

        #if recurse:
            #for k,_subdir in results.items():
                #results.update(self.listsubdirs(_subdir['name'], recurse-1))

        return results


    def getfilecontents(self, file, use_cache=False):
        """
        if use_cache:
            node=self.statfile(file)
            if node and file_cache.hit(file, node['date'][0], node['size']):
                self.log('Reading from cache: '+file)
                _data=file_cache.data(file)
                if _data:
                    return _data
                self.log('Cache file corrupted and discarded')

        """
        start=time.time()
        self.log("Getting file contents '"+file+"'")
        desc="Reading "+file

        req=self.protocolclass.fsinforequest()
        res=self.sendpbcommand(req, self.protocolclass.fsinforesponse)

        """
        req=self.protocolclass.filerequest()
        req.filename=file
        res=self.sendpbcommand(req, self.protocolclass.fileresponse, autocontinue=False)
        """
        try:
            response_lines=self.comm.sendatcommand("+FSFR=-1,\"" + file + "\"", ignoreerror=False, autocontinue=False)
        except commport.ATError:
            self.comm.success=False
            self.mode=self.MODENONE
            self.raisecommsdnaexception("manipulating the phonebook")

        self.comm.success=True

        self.log('response_lines: ' + str(response_lines))

        data=cStringIO.StringIO()

        if len(response_lines) > 1:
            self.log("short way")
            res=self.protocolclass.fileresponse()
            line=response_lines.pop(0)
            buffer=prototypes.buffer(line)
            res.readfrombuffer(buffer, logtitle="Samsung phonebook response")
            filesize=res.size

            for line in response_lines:
                res=self.protocolclass.downloadpacket()
                buffer=prototypes.buffer(line)
                res.readfrombuffer(buffer, logtitle="Samsung phonebook response")

                data.write(res.data)

            data=data.getvalue()
            return data;

        self.log("long way")
        res=self.protocolclass.fileresponse()
        buffer=prototypes.buffer(response_lines[0][:-4])
        res.readfrombuffer(buffer, logtitle="Samsung phonebook response")
        filesize=res.size

        #req=self.protocolclass.continuerequest()
        #res=self.sendpbcommand(req, self.protocolclass.download)
        try:
            charsread=0
            tries=0
            self.comm.write("##>\r\n")

            res=""
            while True:
                b=self.comm.ser.inWaiting()
                if b:
                    read=self.comm.read(b,0)
                    if read.find("OK\r")>=0 or (res.find("ERROR\r")>=0):
                        break
                    if read.find("#OK#\r\n"):
                        res=read[:-6]
                        self.log("myres: " + str(read[:-6]))

                        #dl=self.protocolclass.downloadpacket()
                        #buffer=prototypes.buffer(read[:-6])
                        #dl.readfrombuffer(buffer, logtitle="Samsung phonebook response")

                        self.comm.write("##>\r\n")
                    continue
                r=self.comm.read(1,0)
                if len(r):
                    res=res+r
                    continue
                break

            data.write(res)

            return data.getvalue()
            """
            while True:
                b=self.comm.ser.inWaiting()

                if b == 0:
                    #if tries > 3:
                    #    self.log("3 tries...")
                    #    break
                    #tries+=1
                    continue

                data=self.comm._read(b, True)
                if data.endswith("#OK#\r\n"):
                    #res=self.protocolclass.downloadpacket()
                    #moo=data[2:]
                    #moo=moo[:-6]
                    #buffer=prototypes.buffer(moo)
                    #res.readfrombuffer(buffer, logtitle="Samsung phonebook response")

                    charsread+=512
                    self.progress(charsread, filesize, 'Reading file...')

                    self.comm.write("##>\r\n")

            """
            #self.log('readahead: ' + str(self.comm.readahead[:-6]))
        except commport.ATError:
            self.comm.success=False
            self.mode=self.MODENONE
            self.raisecommsdnaexception("manipulating the phonebook")

        #line=self.getcleanline()
        #self.log("getfile cleanline: " + str(line))
        """
        if line==fullline:
            line=self.getcleanline()
        while line!="OK" and line:
            if line=="ERROR":
                if not ignoreerror:
                    raise ATError
            elif line.endswith("#OK#"):
                if autocontinue:
                    res.append(line[:-4])
                    self.write(str("##>\r\n"))
                else:
                    res.append(line)
                    break
                try:
                    self.readatresponse(ignoreerror)
                except CommTimeout:
                    raise
            else:
                res.append(line)
            line=self.getcleanline()

        self.log("res: " + str(res))
        """
        """
         * first packet looks like this:
         * +FSFR: 0,"test.jpg",106,"",0,513,0,"","",""#OK#
         *
         * @param 1 int ?
         * @param 2 qval filename
         * @param 3 int ?
         * @param 4 qval ?
         * @param 5 int ?
         * @param 6 int size
         * @param 7 int ?
         * @param 8 qval ?
         * @param 9 qval ?
         * @param 10 qval ?
         *
         *
         * after sending "##>\r\n":
         * +FSFR:    512,0,-587442163,<data>
         *
         * @param 1 int packet size
         * @param 2 int packet number
         * @param 3 int ?
         *
        """


        #while (res.endswith("#OK#"))
        #    self.comm.write("##>\r\n")
        #    res=self.comm._read()

        res=[]

        #line=self.comm.getcleanline()
        #self.log("mycleanline: " + str(line))
        """
        if line==fullline:
            line=self.getcleanline()
            self.log("cleanline: " + str(line))
        while line!="OK" and line:
            if line=="ERROR":
                if not ignoreerror:
                    raise ATError
            elif line.endswith("#OK#"):
                if autocontinue:
                    res.append(line[:-4])
                    self.write(str("##>\r\n"))
                else:
                    res.append(line)
                    break
                try:
                    self.readatresponse(ignoreerror)
                except CommTimeout:
                    raise
            else:
                res.append(line)
            line=self.getcleanline()
            self.log("cleanline: " + str(line))

        self.log('res: ' + str(res))
        """
        #data=cStringIO.StringIO()
        """
        req=p_brew.readfilerequest()
        req.filename=file

        res=self.sendbrewcommand(req, p_brew.readfileresponse)

        filesize=res.filesize
        data.write(res.data)

        counter=0
        while res.thereismore:
            counter+=1
            if counter>0xff:
                counter=0x01
            if counter%5==0:
                self.progress(data.tell(), filesize, desc)
            req=p_brew.readfileblockrequest()
            req.blockcounter=counter
            res=self.sendbrewcommand(req, p_brew.readfileblockresponse)
            data.write(res.data)

        self.progress(1,1,desc)

        data=data.getvalue()

        # give the download speed if we got a non-trivial amount of data
        end=time.time()
        if end-start>3:
            self.log("Read "+`filesize`+" bytes at "+`int(filesize/(end-start))`+" bytes/second")

        if filesize!=len(data):
            self.log("expected size "+`filesize`+"  actual "+`len(data)`)
            self.raisecommsexception("Brew file read is incorrect size", common.CommsDataCorruption)
        if use_cache and node:
            file_cache.add(file, node.get('date', [0])[0], data)
        """
        #return data

    def getfundamentals(self, results):
        """Gets information fundamental to interoperating with the phone and UI.

        Currently this is:

          - 'uniqueserial'     a unique serial number representing the phone
          - 'groups'           the phonebook groups
          - 'wallpaper-index'  map index numbers to names
          - 'ringtone-index'   map index numbers to ringtone names

        This method is called before we read the phonebook data or before we
        write phonebook data.
        """
        self.comm.setbaudrate(115200)

        # use a hash of ESN and other stuff (being paranoid)
        self.log("Retrieving fundamental phone information")
        self.log("Reading phone serial number")
        results['uniqueserial']=sha.new(self.get_esn()).hexdigest()

        req=self.protocolclass.inforequest()
        res=self.sendpbcommand(req, self.protocolclass.inforesponse)

        """ static groups, dunno how to read """
        groups={}
        groups[0] = {'name': 'unassigned'}
        groups[1] = {'name': 'family'}
        groups[2] = {'name': 'office'}
        groups[3] = {'name': 'friends'}
        groups[4] = {'name': 'others'}

        results['groups']=groups
        self.log("Fundamentals retrieved")
        return results

    def getwallpapers(self, result):
        wallpapers = {}
        return wallpapers

    def getcalendar(self, result):
        entries = {}
        self.log("Getting calendar entries")

        # get number of entries
        req=self.protocolclass.organizerinforequest()
        res=self.sendpbcommand(req, self.protocolclass.organizerinforesponse)

        events = res[0].entries

        req=self.protocolclass.eventrequest()
        cal_cnt=0
        for slot in range(events):
            req.slot=slot
            res=self.sendpbcommand(req,self.protocolclass.eventresponse)
            if len(res) > 0:
                self.progress(slot+1, events, res[0].eventname)

                # build a calendar entry
                entry=bpcalendar.CalendarEntry()

                # start time date
                entry.start=(res[0].start_year, res[0].start_month, res[0].start_day, res[0].start_hour, res[0].start_minute)

                if res[0].end_year:
                    # valid end time
                    entry.end=(res[0].end_year, res[0].end_month, res[0].end_day, res[0].end_hour, res[0].end_minute)
                else:
                    entry.end=entry.start

                # description[location]
                entry.desc_loc=res[0].eventname

                try:
                    alarm=self.__cal_alarm_values[res[0].alarm]
                except:
                    alarm=None
                entry.alarm=alarm

                # update calendar dict
                entries[entry.id]=entry
                cal_cnt += 1

        result['calendar']=entries
        return result


    def getphonebook(self, result):
        pbook={}
        count=0

        #req=self.protocolclass.phonebookmemoryrequest()
        #res=self.sendpbcommand(req, self.protocolclass.phonebookmemoryresponse)
        self.comm.sendatcommand("+CPBS=\"ME\"", ignoreerror=False)

        # get count of phone book entries
        req=self.protocolclass.phonebookinforequest()
        res=self.sendpbcommand(req, self.protocolclass.phonebookinforesponse)
        entries=res[0].usedslots

        req=self.protocolclass.phonebookslotrequest()
        name=""
        surname=""
        for slot in range(1, entries+1):
            req.slot=slot
            res=self.sendpbcommand(req, self.protocolclass.phonebookslotresponse) #, fixup=self.pblinerepair)
            if len(res) > 0:
                name=res[0].entry.name
                name=name[1:len(name)-1]
                surname=res[0].entry.surname
                surname=surname[1:len(surname)-1]
                self.log('Slot #' + `slot` + ": " + name + ' ' + surname)

                entry=self.extractphonebookentry(res[0].entry, result)
                pbook[count]=entry
                count+=1
            else:
                name=""
                surname=""

            self.progress(slot, entries, 'Reading entry %(slot)d: %(name)s'%{ 'slot': slot, 'name': surname + ', ' + name })

        result['phonebook']=pbook
        cats=[]
        for i in result['groups']:
            if result['groups'][i]['name']!='Unassigned':
                cats.append(result['groups'][i]['name'])
        result['categories']=cats
        print "returning keys",result.keys()

        return pbook


    def extractphonebookentry(self, entry, fundamentals):
        res={}

        res['serials']=[ {'sourcetype': self.serialsname,
                          'slot': entry.slot,
                          'sourceuniqueid': fundamentals['uniqueserial']} ]
        # only one name
        #res['names']=[ {'first': entry.name, 'last': entry.surname} ]
        res['names']=[ {'full': entry.name[1:len(entry.name)-1].decode("utf8") + ' ' + entry.surname[1:len(entry.surname)-1].decode("utf8")} ]

        # only one category
        cat=fundamentals['groups'].get(entry.group, {'name': "Unassigned"})['name']
        if cat!="Unassigned":
            res['categories']=[ {'category': cat} ]
        # only one email
        if len(entry.email):
            res['emails']=[ {'email': entry.email} ]
        # only one url
        if len(entry.url):
            res['urls']=[ {'url': entry.url} ]
        # separate the following processing into methods so subclass can
        # customize them
        self._extractphonebook_numbers(entry, fundamentals, res)
        #self._extractphonebook_ringtone(entry, fundamentals, res)
        #self._extractphonebook_wallpaper(entry, fundamentals, res)

        # We don't have a place to put these
        # print entry.name, entry.birthday
        # print entry.name, entry.timestamp

        return res


    def _extractphonebook_numbers(self, entry, fundamentals, res):
        """Extract and build phone numbers"""
        res['numbers']=[]
        secret=0

        #speeddialtype=entry.speeddial
        numberindex=0
        for type in self.numbertypetab:
            if len(entry.numbers[numberindex].number):
                numhash={'number': entry.numbers[numberindex].number, 'type': type }
                #if entry.numbers[numberindex].secret==1:
                #    secret=1
                #if speeddialtype==numberindex:
                #    numhash['speeddial']=entry.uslot
                res['numbers'].append(numhash)

            numberindex+=1

        # Field after each number is secret flag.  Setting secret on
        # phone sets secret flag for every defined phone number
        #res['flags']=[ {'secret': secret} ]

    def getsms(self, result):
        storagetypes=("ME", "SM")
        sims={}

        for storage in storagetypes:
            req=self.protocolclass.select_message_storage_req()
            req.storage=storage
            res=self.sendpbcommand(req, self.protocolclass.select_message_storage_resp)

            self.log('storage: ' + req.storage + ': ' + str(res[0].used) + ' used / ' + str(res[0].total) + ' total')

            self.comm.sendatcommand("+CMGF=1", ignoreerror=False)
            self.comm.sendatcommand("+CSDH=1", ignoreerror=False)

            req=self.protocolclass.message_read_req()
            usedslots = res[0].used

            for slot in range(1, usedslots+1):
                req.slot = slot

                self.progress(slot, usedslots+1, 'Reading memory %(storage)s, message %(slot)d'%{ 'storage': storage, 'slot': slot })

                try:
                    res2=self.sendpbcommand(req, self.protocolclass.message_read_resp, getasone=True)
                #except:
                #    pass

                    _sms=sms.SMSEntry()
                    if res2[0].msg_type==self.protocolclass.SMS_MSG_REC_UNREAD or \
                       res2[0].msg_type==self.protocolclass.SMS_MSG_REC_READ:
                        # unread/read inbox
                        _sms._from=res2[0].sender
                        _sms.folder=sms.SMSEntry.Folder_Inbox
                        _sms.read=res2[0].msg_type==self.protocolclass.SMS_MSG_REC_READ
                    elif res2[0].msg_type==self.protocolclass.SMS_MSG_STO_SENT:
                        # outbox
                        #_sms.add_recipient(res[0].address)
                        _sms.folder=sms.SMSEntry.Folder_Sent
                    elif res2[0].msg_type==self.protocolclass.SMS_MSG_STO_UNSENT:
                        # saved
                        _sms.folder=sms.SMSEntry.Folder_Saved
                        #_sms.add_recipient(res[0].address)
                    else:
                        self.log('Unknown message type: %s' % res2[0].msg_type)
                        _sms=None

                    if _sms:
                        if res2[0].timestamp:
                            _sms.datetime=res2[0].timestamp
                        _sms.text=str(res2[0].rest).decode("utf8")
                        #_sms.text=res2[0].rest
                        result['sms'] = []
                        sims[_sms.id]=_sms
                except:
                    pass
                #except:
                #    if __debug__:
                #        raise

            result['canned_msg']=[]
            result['sms']=sims

        return result

    def get_firmware_version(self):
        req=self.protocolclass.firmwareinforeq()
        res=self.sendpbcommand(req, self.protocolclass.firmwareinforesp)
        return res[0].firmware


    def get_signal_quality(self):
        req=self.protocolclass.signalreq()
        res=self.sendpbcommand(req, self.protocolclass.signalresp)
        #return res[0].signal
        if res[0].signal is not None:
            return str(100*int(res[0].signal)/31)+'%'



class Profile(com_samsung.Profile):

    serialsname='sghd600'

    WALLPAPER_WIDTH=128
    WALLPAPER_HEIGHT=128
    MAX_WALLPAPER_BASENAME_LENGTH=19
    WALLPAPER_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ."
##    WALLPAPER_CONVERT_FORMAT="bmp"

    usbids=( ( 0x04e8, 0x663e, 2),)

    WALLPAPER_CONVERT_FORMAT="jpg"
    MAX_RINGTONE_BASENAME_LENGTH=19
    RINGTONE_FILENAME_CHARS="abcdefghijklmnopqrstuvwxyz0123456789_ ."
    RINGTONE_LIMITS= {
        'MAXSIZE': 30000
    }
    # use for auto-detection
    phone_manufacturer='SAMSUNG'
    phone_model='SAMSUNG SGH-D600'

    def __init__(self):
        com_samsung.Profile.__init__(self)

    """
    _supportedsyncs=(
        ('phonebook', 'read', None),  # all phonebook reading
        ('phonebook', 'write', 'OVERWRITE'),  # only overwriting phonebook
        ('calendar', 'read', None),   # all calendar reading
        ('calendar', 'write', 'OVERWRITE'),   # only overwriting calendar
        ('ringtone', 'read', None),   # all ringtone reading
        ('ringtone', 'write', 'OVERWRITE'),
        ('wallpaper', 'read', None),  # all wallpaper reading
        ('wallpaper', 'write', 'OVERWRITE'),
        ('memo', 'read', None),     # all memo list reading DJP
        ('memo', 'write', 'OVERWRITE'),  # all memo list writing DJP
        ('todo', 'read', None),     # all todo list reading DJP
        ('todo', 'write', 'OVERWRITE'),  # all todo list writing DJP
        ('sms', 'read', None),     # all SMS list reading DJP
        )
    """

    _supportedsyncs=(
        ('phonebook', 'read', None),  # all phonebook reading
        ('phonebook', 'write', 'OVERWRITE'),  # only overwriting phonebook
        ('calendar', 'read', None),   # all calendar reading
        ('calendar', 'write', 'OVERWRITE'),   # only overwriting calendar
        ('todo', 'read', None),     # all todo list reading
        ('todo', 'write', 'OVERWRITE'),   # only overwriting calendar
        ('wallpaper', 'read', None),
        ('wallpaper', 'write', 'OVERWRITE'),
        ('sms', 'read', None),
    )

    if __debug__:
        _supportedsyncs+=(('sms', 'write', 'OVERWRITE'),)

    def convertphonebooktophone(self, helper, data):
        return data

    __audio_ext={ 'MIDI': 'mid', 'PMD': 'pmd', 'QCP': 'pmd' }
    def QueryAudio(self, origin, currentextension, afi):
        # we don't modify any of these
        if afi.format in ("MIDI", "PMD", "QCP"):
            for k,n in self.RINGTONE_LIMITS.items():
                setattr(afi, k, n)
            return currentextension, afi
        d=self.RINGTONE_LIMITS.copy()
        d['format']='QCP'
        return ('pmd', fileinfo.AudioFileInfo(afi, **d))

    imageorigins={}
    imageorigins.update(common.getkv(com_samsung.Profile.stockimageorigins, "images"))

    imagetargets={}
    imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "wallpaper",
                                      {'width': 128, 'height': 128, 'format': "PNG"}))
    imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "fullscreen",
                                      {'width': 128, 'height': 160, 'format': "PNG"}))
    imagetargets.update(common.getkv(com_samsung.Profile.stockimagetargets, "pictureid",
                                      {'width': 96, 'height': 96, 'format': "JPEG"}))

    def GetImageOrigins(self):
        # Note: only return origins that you can write back to the phone
        return self.imageorigins

    def GetTargetsForImageOrigin(self, origin):
        # right now, supporting just 'images' origin
        if origin=='images':
            return self.imagetargets


------------------------------------------------------------------------------

_______________________________________________
BitPim-devel mailing list
BitPim-devel@...
https://lists.sourceforge.net/lists/listinfo/bitpim-devel