http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz
[gnokii.git] / Docs / developers / protocol / n6110.txt
index 98c8303..7a04373 100644 (file)
-
-Last update 06.02.2002
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Assembled by
-       Balazs Nagy (js@lsc.hu)
-        Harri Yli-Torkko (hyt@surfeu.fi)
-       Alfred R. Nurnberger <arnu@flosys.com>
-       Hugh Blemings <Hugh.Blemings@vsb.com.au>
-       Mike Bradley <mike@trumpington.st>
-       Odinokov Serge <serge@takas.lt>
-       Pavel Janik <Pavel@Janik.cz>
-       Pawel Kot <pkot@linuxnews.pl>
-       Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)
-       ... and other members of gnokii mailing list
-            and authors of some WWW pages.
-
-The data provided is for information purposes only. 
-Some of the frames might be hazardous to your phone. Be careful!!! 
-We do not take any responsibility or liability for damages, etc.
-
-NOTE: this information isn't (and can't be) complete.  If you know anything
-about features not listed here or you noticed a bug in this list, please
-notify us via e-mail.  Thank you.
-
-Document describing frames used in
-GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150,
-5190, 3210, 3310)
-Correct format is FBUS version 2/Direct IRDA/MBUS version 2
-(see nokia.txt for protocol details):
-
- List:
-
-0x00: Monitoring values
-    r monitoring value      {+0x01, 0x01, block... }
-      where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO
-                      Battery percent level
-                   0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO
-                      Battery standby voltage
-                   ............
-0x01: Call Information
-    s Make call             { 0x0001, "number", type, block }
-                              where type:
-                                      0x01 - data call
-                                      0x05 - voice call
-                                   block:
-                                     data call (non digital lines):
-                                       0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,
-                                       0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00
-                                     data call (digital lines):
-                                       0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,
-                                       0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,
-                                       0x88,0x90,0x21,0x48,0x40,0xbb
-                                      voice call:
-                                       0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01
-                                        where:
-                                          sendnum (own number sending):
-                                              0x01: preset (depends on network)
-                                              0x03: on
-                                              0x02: off
-    r Call going msg        { 0x0002 }
-    r Call in progress      { 0x0003, seqnr }
-    r Remote end hang up    { 0x0004, seqnr, ?, error (like in netmon in 39) }
-    r incoming call alert   { 0x0005, seqnr, numlen, "number", namelen, "name" }
-    s Answer call part 2    { 0x0006, seqnr, 0x00 }
-    r answered call         { 0x0007, seqnr }
-    s Hang up               { 0x0008, seqnr, 0x85 }
-    r terminated call       { 0x0009, seqnr }
-    r call msg              { 0x000a, seqnr }
-    r Send DTMF/voice call  { 0x0040}
-    s Answer call part 1    { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,
-                                    0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }
-    s Sent after issuing    { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,
-      data call                             0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3,
-      (digital lines)                0xb8,0x81,0x20,0x15,0x63,0x80 }
-    s Sent after issuing    { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,
-      data call                             0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80,
-      (non digital lines)            0x01,0x60 }
-    s Send DTMF             { 0x0050, length, {ascii codes for DTMF}, 0x01 }
-    
-    Note:
-      to make data call (non digital lines):
-        1.send "Make call" for non digital lines
-       2.send "Sent after issuing data call (non digital lines)"
-      to make data call (digital lines):
-        1.send "Answer call part 1"
-       2.send "Sent after issuing data call (digital lines)"
-        3.send "Make call" for digital lines
-      to answer call:
-        1.send "Answer call part 1"
-        2.send "Answer call part 2"
-
-0x02: SMS handling
-    s Send SMS message      { 0x0001, 0x02, 0x00 (SEND REQUEST), ... }
-    r Message sent          { 0x0002 }
-    r Send failed           { 0x0003, ?, ?, error (like in netmon in 65)}    
-    s Get SMS message       { 0x0007, 0x02, location, 0x01, 0x64 }
-    s Initiate connection   { 0x000d, 0x00, 0x00, 0x02 }
-    r Initiate ACK          { 0x000e, 0x01 }
-    r SMS message received  { 0x0010, ...... } (whole message)
-    s Set CellBroadcast     { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }
-                                      for enable cell broadcast ?
-                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
-                                      for disable cell broadcast ?
-    r Set CellBroadcast OK  { 0x0021, 0x01 }
-    r Read CellBroadcast    { 0x0023, ?, ?, ?, channel, ?, message... } ?
-    s Set SMS center        { 0x0030, 0x64, priority, checksum? ,0?, format,
-                                      validity, {DefaultRecipient no.}[12], 
-                                      {SMScenter no.}[12], {SMSC name}, 0x00}
-                              where tel.no.[12]: {len, type, {number(BCD)}}
-                                    type: 0x81: normal
-                                          0x91: + (international)
-                                          0xd0: alphanumeric
-                                    format: 0x00: text
-                                            0x22: fax
-                                            0x24: voice
-                                            0x25: ERMES
-                                            0x26: paging
-                                            0x31: X.400
-                                            0x32: email
-                                    validity: 0x0b:  1 hour
-                                              0x47:  6 hours
-                                              0xa7: 24 hours
-                                              0xa9: 72 hours
-                                              0xad:  1 week
-                                              0xff: max.time
-    r Set SMS center OK     { 0x0031 }
-    r Set SMS center error  { 0x0032, reason }
-    s Get SMS center        { 0x0033, 0x64, priority }
-    r SMS center received   { 0x0034, priority, checksum?, format, 0x00?,
-                                      validity, {DefaultRecipient no.}[12],
-                                      {SMScenter no.}[12], {SMSC name}, 0x00}
-                                      tel.no[12]: {len, type, {number(BCD)}} 
-                              where priority, checksum, type, validity,
-                                    tel.no.[12]: see 0x02/0x0030
-    r SMS center error recv { 0x0035, reason }
-0x03: Phonebook functions
-    s Get mem location      { 0x0001, memtype, location, 0 }
-                            where memory:
-                                     0x01: telephone and SIM phonebook (in one)
-                                     0x02: telephone phonebook
-                                     0x03: SIM phonebook
-                                     0x04: SIM fixdialling-phonebook (?)
-                                     0x05: Own numbers
-                                     0x07: Dialled numbers
-                                     0x08: Missed calls
-                                     0x09: Received calls
-                                     0x0b: voice mailbox (location not important)
-    r mem location recvd    { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. }
-                            Note: in 3310 all entries have null name ("feature" of bug ?)
-    r mem loc error recvd   { 0x0003, errtype }
-                            where errtype: 0x7d: invalid memory type
-    s Set mem location      { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID }
-    r mem set OK            { 0x0005 }
-    r mem set error         { 0x0006, errtype }
-                            where errtype: 0x7d: name is too long
-    s Mem status request    { 0x0007, memtype }
-    r Mem status recvd      { 0x0008, memtype, free, used }
-    r Mem status error recv { 0x0009, errtype }
-                            where errtype: 0x6f: mem status error
-                                           0x7d: invalid memory type
-                                           0x8d: waiting for pin
-    s Get caller group data { 0x0010, groupID }
-    r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }
-    r Get call.group error  { 0x0012, reason }
-                            where reason: 0x7d: invalid location
-    s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }
-    r Set caller group OK   { 0x0014 }
-    r Set call.group error  { 0x0015, reason }
-                            where reason: 0x7d: invalid location
-    s Get speed dial        { 0x0016, index(1-9) }
-    r Get speed dial OK     { 0x0017, mem.type, location }
-                            where mem.type: 0x02: ME        (== 0 if not stored)
-                                            0x03: SIM
-                                  location: memory location (== 0 if not stored)
-    r Get speed dial error  { 0x0018 }
-    s Set speed dial        { 0x0019, index(1-9), mem.type, location }
-    r Set speed dial OK     { 0x001a }
-    r Set speed dial error  { 0x001b }
-0x04: Phone Status
-    s Phone status          { 0x0001 }
-    r Phone status          { 0x0002, mode, signal str, ???, pwr, batt.level }
-                            where mode: 1: registered within the network
-                                        2: call in progress
-                                        3: waiting for pin
-                                        4: powered off
-                                  pwr: 1: AC/DC
-                                       2: battery
-    s Request Phone ID      { 0x0003 }
-    r RequestPhone ID       { 0x0004, 0x01, "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 }
-0x05: Profile settings
-    s Set profile feature   { 0x0010, 1, nr, feature, a, 1 }
-                            where nr: see 0x05/0x0013
-                                  feature: see 0x05/0x0014
-                                  a: see 0x05/0x0014
-    r Set profile feat. OK  { 0x0011, 1 }
-    s Get profile feature   { 0x0013, 1, nr, feature, 1 }
-                            where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6)
-                                  feature: see 0x05/0x0014
-    r Get profile feature   { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 }
-
-      Note: For Nokia 3330 settings num 0x00 .. 0x09 can be assigned
-            separately to each profile (0x00 .. 0x05), but rest are common
-            to all profiles.
-
-      Features and answers (in a, b, c, d form):
-         0x00: keypad notes (in Nokia 33x0 feature 0x00)
-               xx, 1, 0, 2
-                   xx: 0xff: off
-                       0x00: level 1
-                       0x01: level 2
-                       0x02: level 3
-         0x01: lights (? only in car profile) (what number in Nokia 3310 ?)
-               xx, 0, 0, 1
-                   xx: 0x00: off
-                       0x??: on (maybe 0x01)
-         0x02: incoming call alert (in Nokia 33x0 feature 0x01)
-               xx, 1, 0, 7
-                   xx: 1: ringing,
-                       2: beep once,
-                       3: unknown
-                       4: off
-                       5: ring once
-                       6: ascending
-                       7: caller groups (see feature #0x08)
-         0x03: ringing tone (in Nokia 33x0 feature 0x02)
-               xx, 0, 0, 0
-                   xx: 0x12: ring ring
-                       0x13: low
-                       etc
-         0x04: ringing volume (in Nokia 33x0 feature 0x03)
-               xx, 0, 0, 0
-                   xx: level 1 (0x06) - level 5 (0x0a)
-         0x05: message alert tone (in Nokia 33x0 feature 0x04)
-               xx, 1, 0, 4
-                   xx: 0: no tone
-                       1: standard
-                       2: special
-                       3: beep once
-                       4: ascending
-        0x06: vibration (in Nokia 33x0 feature 0x05)
-              xx: 0: off
-                  1: on
-                   2: Vibrate first
-         0x07: warning and game tones (in Nokia 33x0 feature 0x06 called warning tones)
-               xx, 4, 0, 4
-                   xx: 0xff: off
-                       0x04: on
-        0x07: screen saver - Nokia 33x0
-              xx: 1: on
-                  0: off
-         0x08: incoming caller groups (what number in Nokia 3310 ?)
-               xx, 0, 0, 0
-                   xx: 1: family
-                       2: VIP
-                       4: friends
-                       8: collegues
-                      16: other
-         0x08: Screen saver -> Timeout (Nokia 33xx):
-               0x00 = 5 sec
-               0x01 = 20 sec
-               ....
-
-         0x09: automatic answer (what number in Nokia 3310 ?)
-               xx, 0, 0, 1
-                   xx: 0x00: off
-                       0x01: on 
-
-         0x09: Screen saver -> Screen saver (Nokia 33xx):
-               0x00 ... 0x0d = Number of picture image
-
-         0x0a: ???:
-          ...: ???:
-         0x15: ???: Read only?
-
-         0x16: ???:
-               0x00 = ???
-               0x01 = ???
-
-         0x17: Phone book -> Options -> Memory in use (Nokia 3330):
-               0x00 = Phone
-               0x01 = SIM card
-
-         0x18: Settings -> Phone settings -> Network selection (Nokia 3330):
-               0x00 = Automatic
-               0x01 = Manual
-
-         0x19  Settings -> Call settings -> Automatic redial(Nokia 3330):
-               0x00 = Off
-               0x01 = On
-
-         0x1a: Settings -> Call settings -> Speed dialling (Nokia 3330):
-               0x00 = Off
-               0x01 = On
-
-         0x1b: Settings -> Call settings -> Own number sending (Nokia 3330):
-               0x00 = Set by network
-               0x01 = On
-               0x02 = Off
-
-         0x1c: Settings -> Phone settings -> Cell info display (Nokia 3330):
-               0x00 = Off
-
-         0x1d: Phone book -> Options -> Type of view (Nokia 3330):
-               0x00 = Name list
-               0x01 = Name, number
-               0x02 = Large font
-
-         0x1e: Settings -> Phone settings -> Language (Nokia 3330):
-               0x00 = English
-               0x07 = Dansk
-               0x08 = Svenska
-               0x09 = Suomi
-               0x0c = Turcke
-               0x0e = Norsk
-               0x10 = Automatic
-
-         0x32 = Reboots ME (3330)
-
-         0x1f: ???: Read only? (3330)
-
-         0x20: Messages ->  Message settings -> Common -> Reply via same centre (N3330):
-               0x00 = No
-               0x01 = Yes
-
-         0x21: Messages ->  Message settings -> Common -> Delivery reports (3330):
-               0x00 = No
-               0x01 = Yes
-       
-         0x22: Clock -> Clock settings -> Show/Hide clock (3330):
-               0x00 = Show
-               0x01 = Hide
-
-         0x23: Clock -> Clock settings -> Time format (N3330):
-               0x00 = 24-hour
-               0x01 = 12-hour
-
-         0x24: Select profile (N3330):
-               0x00 = General
-               0x01 ... 0x05 = rest of them
-
-         0x25: ???: Read only? (N3330)
-
-         0x26: Settings -> Phone settings -> Confirm SIM service actions (N3330):
-               0x00 = Not asked
-               0x01 = Asked
-
-         0x27: Messages -> Write messages -> Options -> Dictionary (N3330):
-               0x00 = Off
-               0x01 = English
-               0x0a = Suomi
-
-         0x28: Messages -> Message settings -> Common -> Character support (N3330):
-               0x00 = Automatic
-               0x01 = GSM alphabet
-               0x02 = Unicode
-
-         0x29: Startup logo settings (N33x0):
-               0x00 = Your own uploaded logo
-               0x01 = Nokia
-               0x02 = Draft HUMAN technology(tm)
-               0x03 = Itineris
-
-         0x2a:???: 0x00 = ??? 0x01 = ??? (N3330)
-
-         0x2b: ???: 0x00 = ??? 0x01 = ??? (N3330)
-
-         0x2c: ???: Read only? (N3330)
-
-         0x2d: Clock -> Auto update of date and time (N3330):
-               0x00 = Off
-               0x01 = Confirm first
-               0x02 = On
-
-    s Get welcome message   { 0x0016 }
-    r Get welcome message   { 0x0017, no.of blocks, { block } * }
-                            where block: { id, {blockspecific} }
-                                  id: 1: startup logo { y, x, picture (coding?) }
-                                      2: welcome note { len, "message" }
-                                      3: operator msg { len, "message" }
-    s Set welcome message   { 0x0018, no.of blocks, { block } * }
-                            where block: see 0x05/0x0017
-    r Set welcome OK        { 0x0019, 0x01 }
-    s Get profile name      { 0x001a, nr }
-                            where nr: see 0x05/0x0013
-    r Profile name          { 0x001b, 1, 1, 3, flen, nr, len, {text} }
-                            where nr: see 0x05/0x0013
-                                  len: text length 
-                                  flen len + len(nr, len) = len + 2
-                            Note: in Nokia 3310 name is in Unicode
-    s ???                   { 0x001c }
-    r ???                   { 0x001d, 0x93 }
-    s Set oplogo            { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }
-    r Set oplogo OK         { 0x0031 }
-    r Set oplogo error      { 0x0032, reason }
-                            where reason: 0x7d invalid location
-    s Get oplogo            { 0x0033, location }
-                            where location: 1 (doesn't seem to matter)
-    r Get oplogo            { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }
-    r Get oplogo error      { 0x0035, reason }
-                            where reason: 0x7d invalid location
-    s Set ringtone          { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0}
-    r Set ringtone OK       { 0x0037 }
-    r Set ringtone error    { 0x0038, reason }
-                            where reason=0x7d, when not supported location
-    s Get services settings { 0x0080, setting (2 bytes) }
-                            where: setting: 0x02,0x00=Nokia access number 1
-                                            0x02,0x01=Operator access number 1
-                                            0x01,0x00=Personal bookmark 1 settings (name only ?)
-                                            0x01,0x01=?
-                                            0x02,0x02=?
-    r Get services sett.OK  { 0x0081, .... }
-    r Get services sett.err { 0x0082, 0x7b }
-0x06: Calling line restriction/Call forwarding etc
+\r
+Last update 23.02.2002\r
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+\r
+Assembled by\r
+       Balazs Nagy (js@lsc.hu)\r
+        Harri Yli-Torkko (hyt@surfeu.fi)\r
+       Alfred R. Nurnberger <arnu@flosys.com>\r
+       Hugh Blemings <Hugh.Blemings@vsb.com.au>\r
+       Mike Bradley <mike@trumpington.st>\r
+       Odinokov Serge <serge@takas.lt>\r
+       Pavel Janik <Pavel@Janik.cz>\r
+        BORBELY Zoltan (bozo@andrews.hu)
+       Pawel Kot <pkot@linuxnews.pl>\r
+       Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)\r
+       ... and other members of gnokii mailing list\r
+            and authors of some WWW pages.\r
+\r
+The data provided is for information purposes only. \r
+Some of the frames might be hazardous to your phone. Be careful!!! \r
+We do not take any responsibility or liability for damages, etc.\r
+\r
+NOTE: this information isn't (and can't be) complete.  If you know anything\r
+about features not listed here or you noticed a bug in this list, please\r
+notify us via e-mail.  Thank you.\r
+\r
+Document describing frames used in\r
+GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150,\r
+5190, 3210, 3310)\r
+Correct format is FBUS version 2/Direct IRDA/MBUS version 2\r
+(see nokia.txt for protocol details):\r
+\r
+ List:\r
+\r
+0x00: Monitoring values\r
+    r monitoring value      {+0x01, 0x01, block... }\r
+      where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO\r
+                      Battery percent level\r
+                   0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO\r
+                      Battery standby voltage\r
+                   ............\r
+0x01: Call Information\r
+    s Make call             { 0x0001, "number", type, block }\r
+                              where type:\r
+                                      0x01 - data call\r
+                                      0x05 - voice call\r
+                                   block:\r
+                                     data call (non digital lines):\r
+                                       0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,\r
+                                       0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00\r
+                                     data call (digital lines):\r
+                                       0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,\r
+                                       0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,\r
+                                       0x88,0x90,0x21,0x48,0x40,0xbb\r
+                                      voice call:\r
+                                       0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01\r
+                                        where:\r
+                                          sendnum (own number sending):\r
+                                              0x01: preset (depends on network)\r
+                                              0x03: on\r
+                                              0x02: off\r
+    r Call going msg        { 0x0002 }\r
+    r Call in progress      { 0x0003, seqnr }\r
+    r Remote end hang up    { 0x0004, seqnr, ?, error (like in netmon in 39) }\r
+    r incoming call alert   { 0x0005, seqnr, numlen, "number", namelen, "name" }\r
+    s Answer call part 2    { 0x0006, seqnr, 0x00 }\r
+    r answered call         { 0x0007, seqnr }\r
+    s Hang up               { 0x0008, seqnr, 0x85 }\r
+    r terminated call       { 0x0009, seqnr }\r
+    r call msg              { 0x000a, seqnr }\r
+    r call held             { 0x0023, seqnr, 0x01 }\r
+    r call resumed          { 0x0025, seqnr, 0x01 }\r
+    r Send DTMF/voice call  { 0x0040}\r
+    s Answer call part 1    { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,\r
+                                    0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }\r
+    s Sent after issuing    { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,\r
+      data call                             0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3,\r
+      (digital lines)                0xb8,0x81,0x20,0x15,0x63,0x80 }\r
+    s Sent after issuing    { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,\r
+      data call                             0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80,\r
+      (non digital lines)            0x01,0x60 }\r
+    s Send DTMF             { 0x0050, length, {ascii codes for DTMF}, 0x01 }\r
+    \r
+    Note:\r
+      to make data call (non digital lines):\r
+        1.send "Make call" for non digital lines\r
+       2.send "Sent after issuing data call (non digital lines)"\r
+      to make data call (digital lines):\r
+        1.send "Answer call part 1"\r
+       2.send "Sent after issuing data call (digital lines)"\r
+        3.send "Make call" for digital lines\r
+      to answer call:\r
+        1.send "Answer call part 1"\r
+        2.send "Answer call part 2"\r
+\r
+0x02: SMS handling\r
+    s Send SMS message      { 0x0001, 0x02, 0x00 (SEND REQUEST), ... }\r
+    r Message sent          { 0x0002 }\r
+    r Send failed           { 0x0003, ?, ?, error (like in netmon in 65)}    \r
+    s Get SMS message       { 0x0007, 0x02, location, 0x01, 0x64 }\r
+    s Initiate connection   { 0x000d, 0x00, 0x00, 0x02 }\r
+    r Initiate ACK          { 0x000e, 0x01 }\r
+    r SMS message received  { 0x0010, ...... } (whole message)\r
+    s Set CellBroadcast     { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }\r
+                                      for enable cell broadcast ?\r
+                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }\r
+                                      for disable cell broadcast ?\r
+    r Set CellBroadcast OK  { 0x0021, 0x01 }\r
+    r Read CellBroadcast    { 0x0023, ?, ?, ?, channel, ?, message... } ?\r
+    s Set SMS center        { 0x0030, 0x64, priority, checksum? ,0?, format,\r
+                                      validity, {DefaultRecipient no.}[12], \r
+                                      {SMScenter no.}[12], {SMSC name}, 0x00}\r
+                              where tel.no.[12]: {len, type, {number(BCD)}}\r
+                                    type: 0x81: normal\r
+                                          0x91: + (international)\r
+                                          0xd0: alphanumeric\r
+                                    format: 0x00: text\r
+                                            0x22: fax\r
+                                            0x24: voice\r
+                                            0x25: ERMES\r
+                                            0x26: paging\r
+                                            0x31: X.400\r
+                                            0x32: email\r
+                                    validity: 0x0b:  1 hour\r
+                                              0x47:  6 hours\r
+                                              0xa7: 24 hours\r
+                                              0xa9: 72 hours\r
+                                              0xad:  1 week\r
+                                              0xff: max.time\r
+    r Set SMS center OK     { 0x0031 }\r
+    r Set SMS center error  { 0x0032, reason }\r
+    s Get SMS center        { 0x0033, 0x64, priority }\r
+    r SMS center received   { 0x0034, priority, checksum?, format, 0x00?,\r
+                                      validity, {DefaultRecipient no.}[12],\r
+                                      {SMScenter no.}[12], {SMSC name}, 0x00}\r
+                                      tel.no[12]: {len, type, {number(BCD)}} \r
+                              where priority, checksum, type, validity,\r
+                                    tel.no.[12]: see 0x02/0x0030\r
+    r SMS center error recv { 0x0035, reason }\r
+0x03: Phonebook functions\r
+    s Get mem location      { 0x0001, memtype, location, 0 }\r
+                            where memory:\r
+                                     0x01: telephone and SIM phonebook (in one)\r
+                                     0x02: telephone phonebook\r
+                                     0x03: SIM phonebook\r
+                                     0x04: SIM fixdialling-phonebook (?)\r
+                                     0x05: Own numbers\r
+                                     0x07: Dialled numbers\r
+                                     0x08: Missed calls\r
+                                     0x09: Received calls\r
+                                     0x0b: voice mailbox (location not important)\r
+    r mem location recvd    { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. }\r
+                            Note: in 3310 all entries have null name ("feature" of bug ?)\r
+    r mem loc error recvd   { 0x0003, errtype }\r
+                            where errtype: 0x7d: invalid memory type\r
+    s Set mem location      { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID }\r
+    r mem set OK            { 0x0005 }\r
+    r mem set error         { 0x0006, errtype }\r
+                            where errtype: 0x7d: name is too long\r
+    s Mem status request    { 0x0007, memtype }\r
+    r Mem status recvd      { 0x0008, memtype, free, used }\r
+    r Mem status error recv { 0x0009, errtype }\r
+                            where errtype: 0x6f: mem status error\r
+                                           0x7d: invalid memory type\r
+                                           0x8d: waiting for pin\r
+    s Get caller group data { 0x0010, groupID }\r
+    r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }\r
+    r Get call.group error  { 0x0012, reason }\r
+                            where reason: 0x7d: invalid location\r
+    s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }\r
+    r Set caller group OK   { 0x0014 }\r
+    r Set call.group error  { 0x0015, reason }\r
+                            where reason: 0x7d: invalid location\r
+    s Get speed dial        { 0x0016, index(1-9) }\r
+    r Get speed dial OK     { 0x0017, mem.type, location }\r
+                            where mem.type: 0x02: ME        (== 0 if not stored)\r
+                                            0x03: SIM\r
+                                  location: memory location (== 0 if not stored)\r
+    r Get speed dial error  { 0x0018 }\r
+    s Set speed dial        { 0x0019, index(1-9), mem.type, location }\r
+    r Set speed dial OK     { 0x001a }\r
+    r Set speed dial error  { 0x001b }\r
+0x04: Phone Status\r
+    s Phone status          { 0x0001 }\r
+    r Phone status          { 0x0002, mode, signal str, ???, pwr, batt.level }\r
+                            where mode: 1: registered within the network\r
+                                        2: call in progress\r
+                                        3: waiting for pin\r
+                                        4: powered off\r
+                                  pwr: 1: AC/DC\r
+                                       2: battery\r
+    s Request Phone ID      { 0x0003 }\r
+    r RequestPhone ID       { 0x0004, 0x01,"NOKIA""imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 }\r
+0x05: Profile settings\r
+    s Set profile feature   { 0x0010, 1, nr, feature, a, 1 }\r
+                            where nr: see 0x05/0x0013\r
+                                  feature: see 0x05/0x0014\r
+                                  a: see 0x05/0x0014\r
+    r Set profile feat. OK  { 0x0011, 1 }\r
+    s Get profile feature   { 0x0013, 1, nr, feature, 1 }\r
+                            where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6)\r
+                                  feature: see 0x05/0x0014\r
+    r Get profile feature   { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 }\r
+\r
+      Note: For Nokia 3330 settings num 0x00 .. 0x09 can be assigned\r
+            separately to each profile (0x00 .. 0x05), but rest are common\r
+            to all profiles.\r
+\r
+      Features and answers (in a, b, c, d form):\r
+         0x00: keypad notes (in Nokia 33x0 feature 0x00)\r
+               xx, 1, 0, 2\r
+                   xx: 0xff: off\r
+                       0x00: level 1\r
+                       0x01: level 2\r
+                       0x02: level 3\r
+         0x01: lights (? only in car profile) (what number in Nokia 3310 ?)\r
+               xx, 0, 0, 1\r
+                   xx: 0x00: off\r
+                       0x??: on (maybe 0x01)\r
+         0x02: incoming call alert (in Nokia 33x0 feature 0x01)\r
+               xx, 1, 0, 7\r
+                   xx: 1: ringing,\r
+                       2: beep once,\r
+                       3: unknown\r
+                       4: off\r
+                       5: ring once\r
+                       6: ascending\r
+                       7: caller groups (see feature #0x08)\r
+         0x03: ringing tone (in Nokia 33x0 feature 0x02)\r
+               xx, 0, 0, 0\r
+                   xx: 0x12: ring ring\r
+                       0x13: low\r
+                       etc\r
+         0x04: ringing volume (in Nokia 33x0 feature 0x03)\r
+               xx, 0, 0, 0\r
+                   xx: level 1 (0x06) - level 5 (0x0a)\r
+         0x05: message alert tone (in Nokia 33x0 feature 0x04)\r
+               xx, 1, 0, 4\r
+                   xx: 0: no tone\r
+                       1: standard\r
+                       2: special\r
+                       3: beep once\r
+                       4: ascending\r
+        0x06: vibration (in Nokia 33x0 feature 0x05)\r
+              xx: 0: off\r
+                  1: on\r
+                   2: Vibrate first\r
+         0x07: warning and game tones (in Nokia 33x0 feature 0x06 called warning tones)\r
+               xx, 4, 0, 4\r
+                   xx: 0xff: off\r
+                       0x04: on\r
+        0x07: screen saver - Nokia 33x0\r
+              xx: 1: on\r
+                  0: off\r
+         0x08: incoming caller groups (what number in Nokia 3310 ?)\r
+               xx, 0, 0, 0\r
+                   xx: 1: family\r
+                       2: VIP\r
+                       4: friends\r
+                       8: collegues\r
+                      16: other\r
+         0x08: Screen saver -> Timeout (Nokia 33xx):\r
+               0x00 = 5 sec\r
+               0x01 = 20 sec\r
+               ....\r
+\r
+         0x09: automatic answer (what number in Nokia 3310 ?)\r
+               xx, 0, 0, 1\r
+                   xx: 0x00: off\r
+                       0x01: on \r
+\r
+         0x09: Screen saver -> Screen saver (Nokia 33xx):\r
+               0x00 ... 0x0d = Number of picture image\r
+\r
+         0x0a: ???:\r
+          ...: ???:\r
+         0x15: ???: Read only?\r
+\r
+         0x16: ???:\r
+               0x00 = ???\r
+               0x01 = ???\r
+\r
+         0x17: Phone book -> Options -> Memory in use (Nokia 3330):\r
+               0x00 = Phone\r
+               0x01 = SIM card\r
+\r
+         0x18: Settings -> Phone settings -> Network selection (Nokia 3330):\r
+               0x00 = Automatic\r
+               0x01 = Manual\r
+\r
+         0x19  Settings -> Call settings -> Automatic redial(Nokia 3330):\r
+               0x00 = Off\r
+               0x01 = On\r
+\r
+         0x1a: Settings -> Call settings -> Speed dialling (Nokia 3330):\r
+               0x00 = Off\r
+               0x01 = On\r
+\r
+         0x1b: Settings -> Call settings -> Own number sending (Nokia 3330):\r
+               0x00 = Set by network\r
+               0x01 = On\r
+               0x02 = Off\r
+\r
+         0x1c: Settings -> Phone settings -> Cell info display (Nokia 3330):\r
+               0x00 = Off\r
+\r
+         0x1d: Phone book -> Options -> Type of view (Nokia 3330):\r
+               0x00 = Name list\r
+               0x01 = Name, number\r
+               0x02 = Large font\r
+\r
+         0x1e: Settings -> Phone settings -> Language (Nokia 3330):\r
+               0x00 = English\r
+               0x07 = Dansk\r
+               0x08 = Svenska\r
+               0x09 = Suomi\r
+               0x0c = Turcke\r
+               0x0e = Norsk\r
+               0x10 = Automatic\r
+\r
+         0x32 = Reboots ME (3330)\r
+\r
+         0x1f: ???: Read only? (3330)\r
+\r
+         0x20: Messages ->  Message settings -> Common -> Reply via same centre (N3330):\r
+               0x00 = No\r
+               0x01 = Yes\r
+\r
+         0x21: Messages ->  Message settings -> Common -> Delivery reports (3330):\r
+               0x00 = No\r
+               0x01 = Yes\r
+       \r
+         0x22: Clock -> Clock settings -> Show/Hide clock (3330):\r
+               0x00 = Show\r
+               0x01 = Hide\r
+\r
+         0x23: Clock -> Clock settings -> Time format (N3330):\r
+               0x00 = 24-hour\r
+               0x01 = 12-hour\r
+\r
+         0x24: Select profile (N3330):\r
+               0x00 = General\r
+               0x01 ... 0x05 = rest of them\r
+\r
+         0x25: ???: Read only? (N3330)\r
+\r
+         0x26: Settings -> Phone settings -> Confirm SIM service actions (N3330):\r
+               0x00 = Not asked\r
+               0x01 = Asked\r
+\r
+         0x27: Messages -> Write messages -> Options -> Dictionary (N3330):\r
+               0x00 = Off\r
+               0x01 = English\r
+               0x0a = Suomi\r
+\r
+         0x28: Messages -> Message settings -> Common -> Character support (N3330):\r
+               0x00 = Automatic\r
+               0x01 = GSM alphabet\r
+               0x02 = Unicode\r
+\r
+         0x29: Startup logo settings (N33x0):\r
+               0x00 = Your own uploaded logo\r
+               0x01 = Nokia\r
+               0x02 = Draft HUMAN technology(tm)\r
+               0x03 = Itineris\r
+\r
+         0x2a:???: 0x00 = ??? 0x01 = ??? (N3330)\r
+\r
+         0x2b: ???: 0x00 = ??? 0x01 = ??? (N3330)\r
+\r
+         0x2c: ???: Read only? (N3330)\r
+\r
+         0x2d: Clock -> Auto update of date and time (N3330):\r
+               0x00 = Off\r
+               0x01 = Confirm first\r
+               0x02 = On\r
+\r
+    s Get welcome message   { 0x0016 }\r
+    r Get welcome message   { 0x0017, no.of blocks, { block } * }\r
+                            where block: { id, {blockspecific} }\r
+                                  id: 1: startup logo { y, x, picture (coding?) }\r
+                                      2: welcome note { len, "message" }\r
+                                      3: operator msg { len, "message" }\r
+    s Set welcome message   { 0x0018, no.of blocks, { block } * }\r
+                            where block: see 0x05/0x0017\r
+    r Set welcome OK        { 0x0019, 0x01 }\r
+    s Get profile name      { 0x001a, nr }\r
+                            where nr: see 0x05/0x0013\r
+    r Profile name          { 0x001b, 1, 1, 3, flen, nr, len, {text} }\r
+                            where nr: see 0x05/0x0013\r
+                                  len: text length \r
+                                  flen len + len(nr, len) = len + 2\r
+                            Note: in Nokia 3310 name is in Unicode\r
+    s ???                   { 0x001c }\r
+    r ???                   { 0x001d, 0x93 }\r
+    s Set oplogo            { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }\r
+    r Set oplogo OK         { 0x0031 }\r
+    r Set oplogo error      { 0x0032, reason }\r
+                            where reason: 0x7d invalid location\r
+    s Get oplogo            { 0x0033, location }\r
+                            where location: 1 (doesn't seem to matter)\r
+    r Get oplogo            { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }\r
+    r Get oplogo error      { 0x0035, reason }\r
+                            where reason: 0x7d invalid location\r
+    s Set ringtone          { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0}\r
+    r Set ringtone OK       { 0x0037 }\r
+    r Set ringtone error    { 0x0038, reason }\r
+                            where reason=0x7d, when not supported location\r
+    s Get services settings { 0x0080, setting (2 bytes) }\r
+                            where: setting: 0x02,0x00=Nokia access number 1\r
+                                            0x02,0x01=Operator access number 1\r
+                                            0x01,0x00=Personal bookmark 1 settings (name only ?)\r
+                                            0x01,0x01=?\r
+                                            0x02,0x02=?\r
+    r Get services sett.OK  { 0x0081, .... }\r
+    r Get services sett.err { 0x0082, 0x7b }\r
+0x06: Calling line restriction/Call forwarding etc\r
     r Get call divert       { 0x0001, 0x02, x, 0x00, divtype, 0x02, calltype, y, z, 0x0b, number, 0x00...0x00, timeout (byte 45) }
     s Set call divert       { 0x0001, 0x03, 0x00, divtype, calltype, 0x01, number(packed like in SMS), 0x00 ... 0x00,
                                       length of number (byte 29), 0x00 ... 0x00, timeout (byte 52), 0x00, 0x00, 0x00}
-                            NOTE: msglen=0x37
-                            where timeout:
-                              0x00: not set ?
-                              0x05: 5 second
-                              0x0a: 10 second
-                              0x0f: 15 second
-                              0x1e: 20 second
-                              0x14: 25 second
-                              0x19: 30 second
-                            where divtype:
-                              0x02: all diverts for all call types ?
-                                    Found only, when deactivate all diverts for all call types (with call type 0x00)
-                              0x15: all calls
-                              0x43: when busy
-                              0x3d: when not answered
-                              0x3e: if not reached
-                            calltype:
-                              0x00: all calls (data, voice, fax)
-                              0x0b: voice calls
-                              0x0d: fax calla
-                              0x19: data calls
-    s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 }
-                            where divtype, calltype: see above
-    s Get call diverts      { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }
-                            where divtype, calltype: see above
-    r Get prepaid(?) info   { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)}
-0x07:
-    s ???                   { 0x0022, ? (1&2 sounds OK) }
-    r ??? OK                { 0x0023, ?,?,? }
-    r ??? error             { 0x0024, reason }
-    s ???                   { 0x0025, ??? }
-    r ??? OK                { 0x0026, ??? }
-    r ??? error             { 0x0027, reason }
-0x08: Security codes
-    s Change code           { 0x0004, code, "current", 0x00, "new", 0x00 }
-                            where code: 1: security code (5 chars)
-                                        2: PIN (4 chars)
-                                        3: PIN2 (4 chars)
-                                        4: PUK (8 chars)
-                                        5: PUK2 (8 chars)
-    s Status request        { 0x0007, 0x01 }
-    r pin recvd             { 0x0008, accepted }
-                            where accepted: 0x0c (or 0x06): OK
-                                            code: waiting for (0x08/0x0004) code
-    s entering code         { 0x000a, code, "code", 0x00 }
-                            where code: see 0x08/0x0004
-0x09: SIM login
-    r login                 { 0x0080 }
-    r logout                { 0x0081 }
-0x0a: Network status
-    s Key duplication on/off{ 0x0044, on? 0x01: 0x02 }
-    s get used network      { 0x0070 }
-    r network registration  { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode }
-0x0c: Keys
-    s Get key assignments   { 0x0040, 0x01 }
-    r Get key assignments   { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 }
-                            where {key '0'} => ' ', '0'
-    s Press key             { 0x0042, press: 0x01; release: 0x02, button, 0x01 }
-                            where button: 0x01 - 0x09: 1-9
-                                          0x0a: 0
-                                          0x0b: #
-                                          0x0c: *
-                                          0x0d: Power
-                                          0x0e: Pick up phone
-                                          0x0f: Hang
-                                          0x10: Volume +
-                                          0x11: Volume -
-                                          0x17: Up
-                                          0x18: Down
-                                          0x19: Menu
-                                          0x1a: Names
-                                          0x1B onwards: don't know but they do produce
-                                               a beep and light up the keypad as if
-                                               a key had been pressed. 
-    r Press key ack         { 0x0043, press/release/error(0x05) }
-    s ???                   { 0x0044 }
-    r ??? ack               { 0x0045, 0x01 }
-0x0d: Status
-    r Display               { 0x0050, 0x01, y, x, len, "string"(unicode) }
-    s Status request        { 0x0051 }
-    r Status                { 0x0052, no. of byte pairs, {byte pair} }
-                            where {byte pair}: {cmd, 1:off 2:on}
-                            cmd: 1: call in progress
-                                 2: ???
-                                 3: have unread sms
-                                 4: voice call active
-                                 5: fax call active
-                                 6: data call active
-                                 7: key lock active
-                                 8: is SMS storage full
-    s Display status        { 0x0053, 1:on 2:off }
-                            (will send displayed messages with x,y coordinates)
-    r Display status ack    { 0x0054, 1 }
-0x11: Phone clock & alarm
-    s set date and time     { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 }
-    r date and time set     { 0x0061 }
-    s get date and time     { 0x0062 }
-    r date and time recvd   { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second }
-                            where: date_set & time_set==0x01 - set
-                                                       0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second
-                                                               not available in frame
-    s set alarm             { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 }
-    r alarm set             { 0x006c }
-    s get alarm             { 0x006d }
-    r alarm received        { 0x006e,?,?,?,?,alrm(==2:on),hour,min }
-0x12: Connect to NBS port (61xx only ?)
-    s Send                  {+0x0c, 0x01, UDH header, data}
-                            (without 0,1 header  -- for oplogo, cli, ringtone etc upload)
-                           where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl
-0x13: Calendar notes
-    s Write calendar note   { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone,
-                              alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0),
-                              textlen, "text" }
-    r Write cal.note report { 0x0065, return }
-                            where return: 0x01: ok
-                                          0x73: failure
-                                         0x81: calendar functions busy. Exit Calendar menu and try again
-    s Calendar notes set    { 0x0066... }
-    r Calendar note recvd   { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" }
-    r Cal.note recvd error  { 0x0067, err }
-                            where err: 0x93: not available
-                                      (0x01: OK)
-                                       other: error
-    s Delete cal.note       { 0x0068, location }
-    r Del. cal.note report  { 0x0069, err }
-                            where err: 0x01: OK
-                                       0x93: cannot delete
-0x14: SMS funcs
-    s Write SMS to SIM      { 0x0004, .... }
-    s Mark SMS as read      { 0x0007, 0x02, location, 0x00, 0x64 }
-    r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status
-                            where type: 0x06: delivery report 
-                                  status: 0x00: delivered
-                                          0x30: pending
-                                          0x46: failed
-                                          0x09: reading failed
-                                  subtype: 0x02: invalid mem type
-                                           0x07: empty SMS location
-                                          0x0c: no access to memory (no PIN in card, etc.)
-    s Delete SMS message    { 0x000a, 0x02, location }
-    r Delete OK             { 0x000b }
-    s SMS status request    { 0x0036, 0x64 }
-    r SMS status            { 0x0037,?,?,?,?,?,?,msgnumber,unread }
-    r SMS status error      { 0x0038 }
-0x3f: WAP 
-    s Enable WAP frames     { 0x0000}
-    r Enable WAP frames     { 0x0002, 0x01}
-
-    s  ??                   { 0x0003}
-    r  ??                   { 0x0004}
-
-    s Get WAP bookmark      { 0x0006, 0x00, location}
-                              where location: 0 - 14
-    r Get WAP bookmark      { 0x0007, 0x00, name_len, name(unicode),
-                              url_len, url(unicode), 0x01,0x80,0x00[7]}
-    r Get WAP bookmark err  { 0x0008, error }
-                              where error:
-                                0x00(?)invalid position
-                                0x01   user inside "Bookmarks" menu. Must leave it
-                                0x02   invalid/too high/empty location
-
-    s Set WAP bookmark      { 0x0009, 0xff, 0xff, name_len, name(unicode),
-                              url_len, url(unicode), 0x01,0x80,0x00[7] }
-                              Note: bookmark is added to the first free location.
-    r Set WAP bookmark OK   {+0x01, 0x36, 0x0a, block }
-                              where block:
-                                0x0a, location_of_just_written_bookmark(?),
-                                0x00, next_free_location(?)
-    r Set WAP bookmark err  {+0x01, 0x36, 0x0b, error }
-                              where error:
-                               0x04 - memory is full
-                               0x01 - we are in the bookmark menu
-                               0x00 - unknown reason for now ;(
-
-?   s Delete WAP bookmark   { 0x000c, 0x00, location }
-                              where: location = 0-14
-?   r Delete WAR bookmark OK{ 0x000d }
-?   r Delete WAPbookmark err{ 0x000e, 0x02 }
-
-    s ??                    { 0x000F}
-    r ??                    { 0x0010, 0x00}
-
-    s Get WAP settings 1    { 0x0015, location}
-                            where location: 0x00 - 0x05
-    r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...}
-                            where:
-                              con_type: 0x00 - temporary
-                                        0x01 - continuous
-                              location: when use "Get WAP settings 2 frame", must give it
-                              security: 0x00 = no, 0x01 = yes
-    r Get WAP settings 1 err{ 0x0017, error }
-                              where error:
-                                0x01   user inside "Settings" menu. Must leave it
-                                0x02   invalid/too high/empty location
-
-    s Get WAP settings 2    { 0x001b, location}
-                            where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame)
-    r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...}
-                            where type : 0x00 - SMS bearer
-                                           frame:
-                                             service_num_len, service_num (Unicode), server_num_len, server_num(Unicode)
-                                         0x01 - data bearer
-                                           frame:
-                                             auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode),
-                                             user len, user (Unicode), password len, password (Unicode)
-                                             where auth: 0x00 - normal, 0x01 - secure
-                                                   call_type: 0x00 - analogue, 0x01 - ISDN
-                                                   call_speed: 0x00 - 9600, 0x01 - 14400
-                                        0x02 - USSD bearer
-                                          frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len,
-                                                 service code (Unicode)
-                                            where type: 0x01 - service number, 0x00 - IP
-    r Get WAP settings 2 err{ 0x001d,error}
-                            where: error=0x05    
-0x40: Security commands
-    s ???                   {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00}
-                            This frame hangs phone (N3310 4.02). Meaning unknown !
+                            NOTE: msglen=0x37\r
+                            where timeout:\r
+                              0x00: not set ?\r
+                              0x05: 5 second\r
+                              0x0a: 10 second\r
+                              0x0f: 15 second\r
+                              0x14: 20 second\r
+                              0x19: 25 second\r
+                              0x1e: 30 second\r
+                            where divtype:\r
+                              0x02: all diverts for all call types ?\r
+                                    Found only, when deactivate all diverts for all call types (with call type 0x00)\r
+                              0x15: all calls\r
+                              0x43: when busy\r
+                              0x3d: when not answered\r
+                              0x3e: if not reached\r
+                            calltype:\r
+                              0x00: all calls (data, voice, fax)\r
+                              0x0b: voice calls\r
+                              0x0d: fax calla\r
+                              0x19: data calls\r
+    s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 }\r
+                            where divtype, calltype: see above\r
+    s Get call diverts      { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }\r
+                            where divtype, calltype: see above\r
+    r Get prepaid(?) info   { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)}\r
+0x07:\r
+    s ???                   { 0x0022, ? (1&2 sounds OK) }\r
+    r ??? OK                { 0x0023, ?,?,? }\r
+    r ??? error             { 0x0024, reason }\r
+    s ???                   { 0x0025, ??? }\r
+    r ??? OK                { 0x0026, ??? }\r
+    r ??? error             { 0x0027, reason }\r
+0x08: Security codes\r
+    s Change code           { 0x0004, code, "current", 0x00, "new", 0x00 }\r
+                            where code: 1: security code (5 chars)\r
+                                        2: PIN (4 chars)\r
+                                        3: PIN2 (4 chars)\r
+                                        4: PUK (8 chars)\r
+                                        5: PUK2 (8 chars)\r
+    s Status request        { 0x0007, 0x01 }\r
+    r pin recvd             { 0x0008, accepted }\r
+                            where accepted: 0x0c (or 0x06): OK\r
+                                            code: waiting for (0x08/0x0004) code\r
+    s entering code         { 0x000a, code, "code", 0x00 }\r
+                            where code: see 0x08/0x0004\r
+0x09: SIM login\r
+    r login                 { 0x0080 }\r
+    r logout                { 0x0081 }\r
+0x0a: Network status\r
+    s Key duplication on/off{ 0x0044, on? 0x01: 0x02 }\r
+    s get used network      { 0x0070 }\r
+    r network registration  { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode }\r
+0x0c: Keys\r
+    s Get key assignments   { 0x0040, 0x01 }\r
+    r Get key assignments   { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 }\r
+                            where {key '0'} => ' ', '0'\r
+    s Press key             { 0x0042, press: 0x01; release: 0x02, button, 0x01 }\r
+                            where button: 0x01 - 0x09: 1-9\r
+                                          0x0a: 0\r
+                                          0x0b: #\r
+                                          0x0c: *\r
+                                          0x0d: Power\r
+                                          0x0e: Pick up phone\r
+                                          0x0f: Hang\r
+                                          0x10: Volume +\r
+                                          0x11: Volume -\r
+                                          0x17: Up\r
+                                          0x18: Down\r
+                                          0x19: Menu\r
+                                          0x1a: Names\r
+                                          0x1B onwards: don't know but they do produce\r
+                                               a beep and light up the keypad as if\r
+                                               a key had been pressed. \r
+    r Press key ack         { 0x0043, press/release/error(0x05) }\r
+    s ???                   { 0x0044 }\r
+    r ??? ack               { 0x0045, 0x01 }\r
+0x0d: Status\r
+    r Display               { 0x0050, 0x01, y, x, len, "string"(unicode) }\r
+    s Status request        { 0x0051 }\r
+    r Status                { 0x0052, no. of byte pairs, {byte pair} }\r
+                            where {byte pair}: {cmd, 1:off 2:on}\r
+                            cmd: 1: call in progress\r
+                                 2: ???\r
+                                 3: have unread sms\r
+                                 4: voice call active\r
+                                 5: fax call active\r
+                                 6: data call active\r
+                                 7: key lock active\r
+                                 8: is SMS storage full\r
+    s Display status        { 0x0053, 1:on 2:off }\r
+                            (will send displayed messages with x,y coordinates)\r
+    r Display status ack    { 0x0054, 1 }\r
+0x11: Phone clock & alarm\r
+    s set date and time     { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 }\r
+    r date and time set     { 0x0061 }\r
+    s get date and time     { 0x0062 }\r
+    r date and time recvd   { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second }\r
+                            where: date_set & time_set==0x01 - set\r
+                                                       0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second\r
+                                                               not available in frame\r
+    s set alarm             { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 }\r
+    r alarm set             { 0x006c }\r
+    s get alarm             { 0x006d }\r
+    r alarm received        { 0x006e,?,?,?,?,alrm(==2:on),hour,min }\r
+0x12: Connect to NBS port (61xx only ?)\r
+    s Send                  {+0x0c, 0x01, UDH header, data}\r
+                            (without 0,1 header  -- for oplogo, cli, ringtone etc upload)\r
+                           where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl\r
+0x13: Calendar notes\r
+    s Write calendar note   { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone,\r
+                              alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0),\r
+                              textlen, "text" }\r
+    r Write cal.note report { 0x0065, return }\r
+                            where return: 0x01: ok\r
+                                          0x73: failure\r
+                                         0x81: calendar functions busy. Exit Calendar menu and try again\r
+    s Calendar notes set    { 0x0066... }\r
+    r Calendar note recvd   { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" }\r
+    r Cal.note recvd error  { 0x0067, err }\r
+                            where err: 0x93: not available\r
+                                      (0x01: OK)\r
+                                       other: error\r
+    s Delete cal.note       { 0x0068, location }\r
+    r Del. cal.note report  { 0x0069, err }\r
+                            where err: 0x01: OK\r
+                                       0x93: cannot delete\r
+0x14: SMS funcs\r
+    s Write SMS to SIM      { 0x0004, .... }\r
+    s Mark SMS as read      { 0x0007, 0x02, location, 0x00, 0x64 }\r
+    r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status\r
+                            where type: 0x06: delivery report \r
+                                  status: 0x00: delivered\r
+                                          0x30: pending\r
+                                          0x46: failed\r
+                                          0x09: reading failed\r
+                                  subtype: 0x02: invalid mem type\r
+                                           0x07: empty SMS location\r
+                                          0x0c: no access to memory (no PIN in card, etc.)\r
+    s Delete SMS message    { 0x000a, 0x02, location }\r
+    r Delete OK             { 0x000b }\r
+    s SMS status request    { 0x0036, 0x64 }\r
+    r SMS status            { 0x0037,?,?,?,?,?,?,msgnumber,unread }\r
+    r SMS status error      { 0x0038 }\r
+0x3f: WAP \r
+    s Enable WAP frames     { 0x0000}\r
+    r Enable WAP frames     { 0x0002, 0x01}\r
+\r
+    s  ??                   { 0x0003}\r
+    r  ??                   { 0x0004}\r
+\r
+    s Get WAP bookmark      { 0x0006, 0x00, location}\r
+                              where location: 0 - 14\r
+    r Get WAP bookmark      { 0x0007, 0x00, name_len, name(unicode),\r
+                              url_len, url(unicode), 0x01,0x80,0x00[7]}\r
+    r Get WAP bookmark err  { 0x0008, error }\r
+                              where error:\r
+                                0x00(?)invalid position\r
+                                0x01   user inside "Bookmarks" menu. Must leave it\r
+                                0x02   invalid/too high/empty location\r
+\r
+    s Set WAP bookmark      { 0x0009, 0xff, 0xff, name_len, name(unicode),\r
+                              url_len, url(unicode), 0x01,0x80,0x00[7] }\r
+                              Note: bookmark is added to the first free location.\r
+    r Set WAP bookmark OK   {+0x01, 0x36, 0x0a, block }\r
+                              where block:\r
+                                0x0a, location_of_just_written_bookmark(?),\r
+                                0x00, next_free_location(?)\r
+    r Set WAP bookmark err  {+0x01, 0x36, 0x0b, error }\r
+                              where error:\r
+                               0x04 - memory is full\r
+                               0x01 - we are in the bookmark menu\r
+                               0x00 - unknown reason for now ;(\r
+\r
+?   s Delete WAP bookmark   { 0x000c, 0x00, location }\r
+                              where: location = 0-14\r
+?   r Delete WAR bookmark OK{ 0x000d }\r
+?   r Delete WAPbookmark err{ 0x000e, 0x02 }\r
+\r
+    s ??                    { 0x000F}\r
+    r ??                    { 0x0010, 0x00}\r
+\r
+    s Get WAP settings 1    { 0x0015, location}\r
+                            where location: 0x00 - 0x05\r
+    r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...}\r
+                            where:\r
+                              con_type: 0x00 - temporary\r
+                                        0x01 - continuous\r
+                              location: when use "Get WAP settings 2 frame", must give it\r
+                              security: 0x00 = no, 0x01 = yes\r
+    r Get WAP settings 1 err{ 0x0017, error }\r
+                              where error:\r
+                                0x01   user inside "Settings" menu. Must leave it\r
+                                0x02   invalid/too high/empty location\r
+\r
+    s Get WAP settings 2    { 0x001b, location}\r
+                            where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame)\r
+    r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...}\r
+                            where type : 0x00 - SMS bearer\r
+                                           frame:\r
+                                             service_num_len, service_num (Unicode), server_num_len, server_num(Unicode)\r
+                                         0x01 - data bearer\r
+                                           frame:\r
+                                             auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode),\r
+                                             user len, user (Unicode), password len, password (Unicode)\r
+                                             where auth: 0x00 - normal, 0x01 - secure\r
+                                                   call_type: 0x00 - analogue, 0x01 - ISDN\r
+                                                   call_speed: 0x00 - 9600, 0x01 - 14400\r
+                                        0x02 - USSD bearer\r
+                                          frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len,\r
+                                                 service code (Unicode)\r
+                                            where type: 0x01 - service number, 0x00 - IP\r
+    r Get WAP settings 2 err{ 0x001d,error}\r
+                            where: error=0x05    \r
+0x40: Security commands\r
+    s ???                   {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00}\r
+                            This frame hangs phone (N3310 4.02). Meaning unknown !\r
     s Open simlock 1        { 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00}
     r Open simlock 1        { 0x02 }
-    s ???(N6150)            { 0x08, 0x00 }
-    r ???(N6150)            { 0x08 }
-    s Enable extended cmds  { 0x64, cmd }
-                            where cmd: 0x00: off
-                                       0x01: on
+    s ???(N6150)            { 0x08, 0x00 }\r
+    r ???(N6150)            { 0x08 }\r
+    s Enable extended cmds  { 0x64, cmd }\r
+                            where cmd: 0x00: off\r
+                                       0x01: on\r
                                       0x02: enter service mode ?
-                                       0x03: reset (doesn't ask for PIN again)
-                                       0x04: reset (PIN is requested)
-                                             In 5110 makes reset without PIN
-                                       0x06: CONTACT SERVICE!!! Don't try it!
+                                       0x03: reset (doesn't ask for PIN again)\r
+                                       0x04: reset (PIN is requested)\r
+                                             In 5110 makes reset without PIN\r
+                                       0x06: CONTACT SERVICE!!! Don't try it!\r
     s Reset phone settings  { 0x65, value, 0x00 }
                             where value: 0x08 - reset UI (User Interface) settings
                                         0x38 - reset UI, SCM and call counters
     r Reset phone settings  { 0x65, 0x00 }
-    s Get IMEI              { 0x66 }
-    r Get IMEI              { 0x66, 0x01, IMEI, 0x00}
-    s (ACD Readings)?(N6150 { 0x68 }
-    r (ACD Readings)?(N6150 { 0x68, ... }
-    s Get Product Profile
-      Settings              { 0x6a}
-    r Get Product Profile
-      Settings              { 0x6a, 4bytes with Product Profile Settings }
-    s Set Product Profile
-      Settings              { 0x6b, 4bytes with Product Profile Settings }
-    r Set Product Profile
-      Settings OK ?         { 0x6b }
-    s Get code              { 0x6e, code }
-                            where code: see 0x08/0x0004 (only sec.code is allowed)
-    r Get code              { 0x6e, code, allowed, allowed? (sec code (text)) }
-                            where code: see 0x08/0x0004
-                                  allowed: 0: no
-                                           1: yes
+    s Get IMEI              { 0x66 }\r
+    r Get IMEI              { 0x66, 0x01, IMEI, 0x00}\r
+    s (ACD Readings)?(N6150 { 0x68 }\r
+    r (ACD Readings)?(N6150 { 0x68, ... }\r
+    s Get Product Profile\r
+      Settings              { 0x6a}\r
+    r Get Product Profile\r
+      Settings              { 0x6a, 4bytes with Product Profile Settings }\r
+    s Set Product Profile\r
+      Settings              { 0x6b, 4bytes with Product Profile Settings }\r
+    r Set Product Profile\r
+      Settings OK ?         { 0x6b }\r
+    s Get code              { 0x6e, code }\r
+                            where code: see 0x08/0x0004 (only sec.code is allowed)\r
+    r Get code              { 0x6e, code, allowed, allowed? (sec code (text)) }\r
+                            where code: see 0x08/0x0004\r
+                                  allowed: 0: no\r
+                                           1: yes\r
     s Set code              { 0x6f, code, sec code(text), 0x00 }
-                            where code: see 0x08/0x0004
-    s Start monitoring      { 0x70, block }
-                            where block(N6150):
-                              0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
-                              0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00,
-                              0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00,
-                              0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
-                              0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80,
-                              0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20,
-                              0x20,0x20,0x20,0x20
-                            This block enables probably all possible monitorred parameters.
-                            After it phone sends 0x00 message type values
-    s Break monitoring      { 0x71 }
-    r Break monitoring      { 0x71 }
-    s Reset Permanent
-      Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e }
-    r Reset Permanent
-      Counters (nm->test36) { 0x74 }
-    s Call commands         { 0x7c, block }
-                            where where: command, (values)
-                                 command: 0x01
-                                     values: number(ASCII), 0x00 - makes voice call
-                                 command: 0x02 - answer call
-                                 command: 0x03 - release call
-    r Call commands         { 0x7c, command }
-    s Netmonitor            { 0x7e, field }
-                            where: field: 00: next
-                                          F0: reset
-                                          F1: off
-                                          F2: field test menus
-                                          F3: developer menus
+                            where code: see 0x08/0x0004\r
+    s Start monitoring      { 0x70, block }\r
+                            where block(N6150):\r
+                              0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,\r
+                              0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00,\r
+                              0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00,\r
+                              0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,\r
+                              0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80,\r
+                              0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20,\r
+                              0x20,0x20,0x20,0x20\r
+                            This block enables probably all possible monitorred parameters.\r
+                            After it phone sends 0x00 message type values\r
+    s Break monitoring      { 0x71 }\r
+    r Break monitoring      { 0x71 }\r
+    s Reset Permanent\r
+      Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e }\r
+    r Reset Permanent\r
+      Counters (nm->test36) { 0x74 }\r
+    s Call commands         { 0x7c, block }\r
+                            where where: command, (values)\r
+                                 command: 0x01\r
+                                     values: number(ASCII), 0x00 - makes voice call\r
+                                 command: 0x02 - answer call\r
+                                 command: 0x03 - release call\r
+    r Call commands         { 0x7c, command }\r
+    s Netmonitor            { 0x7e, field }\r
+                            where: field: 00: next\r
+                                          F0: reset\r
+                                          F1: off\r
+                                          F2: field test menus\r
+                                          F3: developer menus\r
     s Open simlock 2        { 0x81, 0x01, locknumber, 0x10, 0x10, 0x10, 0x10, 0x10 }
                             Note: sets simlock type to factory?
                            where locknumber: 1,2,4,8
@@ -706,151 +709,151 @@ Correct format is FBUS version 2/Direct IRDA/MBUS version 2
     s Close simlock         { 0x82, 0x01, locknumber, 0x00, 0x00, locksinfo(lock1,4,2,3), 0x00 }
                             where locknumber: 1,2,4,8
     r Close simlock         { 0x82, the rest like in 0x40/0x8a }
-    s Get simlock info      { 0x8a, 0x00}
-    r Get simlock info      { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 }
-                            where: lockstype:   bit1,bit2,bit3,bit4 - if set, selected lock is user lock
-                                   locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed
-                                   counter1 - counter4: counters for locks
-    s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 }
-    r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 }
-    s Get downloaded OpName { 0x8c, 0x00 }
-    r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...}
-    s Buzzer pitch          { 0x8f, volume, hzLO, hzHI }
-                            if volume and hz is 0, it's off
-    r Buzzer pitch          { 0x8f}
-    s ACD Readings ?        { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) }
-    r ACD Readings ?        { 0x91, parameter?, value? }
+    s Get simlock info      { 0x8a, 0x00}\r
+    r Get simlock info      { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 }\r
+                            where: lockstype:   bit1,bit2,bit3,bit4 - if set, selected lock is user lock\r
+                                   locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed\r
+                                   counter1 - counter4: counters for locks\r
+    s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 }\r
+    r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 }\r
+    s Get downloaded OpName { 0x8c, 0x00 }\r
+    r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...}\r
+    s Buzzer pitch          { 0x8f, volume, hzLO, hzHI }\r
+                            if volume and hz is 0, it's off\r
+    r Buzzer pitch          { 0x8f}\r
+    s ACD Readings ?        { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) }\r
+    r ACD Readings ?        { 0x91, parameter?, value? }\r
     s Sleep mode test       { 0x92, 0x00, 0x00, howlong(2 bytes), enable }
                             where: enable == 0x01 - enable after test
                                             0x00 - don't enable after test
                                   howlong (ms) = 0x07, 0xd0 = 2000
-    s ???(N6150)            { 0x98, 0x00 }
-    r ???(N6150)            { 0x98, 0x00, 0x04 }
-    s Get bin ringtone      { 0x9e, location }
-                            where: location=0,1,etc.
-    r Get bin ringtone      { 0x9e, location, error, contents... }
-                            where location=0,1,etc.
-                                  error=0x0a, ringtone NOT available
-                                        0x00, OK
-    s Set bin ringtone      { 0xa0, location, 0x00, contenst... }
-                            where: location=0,1,etc.
-    r Set bin ringtone      { 0xa0, location, error }
-                              where location=0,1,etc.
-                                    error=0x0a, ringtone NOT set
-                                          0x00, ringtone set OK
-    r Get MSid              { 0xb5, 0x01, 0x2f, msid, 0x25 }
-    s Get info about phone  { 0xc8, 0x01 }
-    r Get info about phone  { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }
-    s Get MCU SW Checksum   { 0xc8, 0x02 }
-    r Get MCU SW Checksum   { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 }
-    s DPS External SW       { 0xc7, 0x03 }
-    r DSP External SW       { 0xc7, 0x03, 0x00, string,0x00 }
-    s Get HW                { 0xc8, 0x05 }
-    r Get HW                { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 }
-    s Get "Made" Date       { 0xc8, 0x05 }
-    r Get "Made" Date       { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 }
-    s Get DSP Internal SW   { 0xc8, 0x09 }
-    r Get DSP Internal SW   { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 }
-    s Get PCI version       { 0xc8, 0x0b }
-    r Get PCI version       { 0xc8, 0x0b, 0x00, version, 0x00 }
-    s Get system ASIC       { 0xc8, 0x0c }
-    r Get system ASIC       { 0xc8, 0x0c, 0x00, string, 0x00 }
-    s Get COBBA             { 0xc8, 0x0d }
-    r Get COBBA             { 0xc8, 0x0d, 0x00, string, 0x00 }
-    s Get PLUSSA            { 0xc8, 0x0e }
-    r Get PLUSSA            { 0xc8, 0x0e, available, 0x00 }
-                            where available: 0x01: not available
-    s Get CCONT             { 0xc8, 0x0f }
-    r Get CCONT             { 0xc8, 0x0f, available, 0x00 }
-                            where available: 0x01: not available
-    s Get PPM version       { 0xc8, 0x10 }
-    r Get PPM version       { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }
-    s Get PPM info          { 0xc8, 0x12 }
-    r Get PPM info          { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 }
-    s Set HW version        { 0xc9, 0x05, version, 0x00 }
-    s Get Product Code      { 0xca, 0x01 }
-    r Get Product Code      { 0xca, 0x01, 0x00, number, 0x00 }
-    s Get Order Number      { 0xca, 0x02 }
-    r Get Order Number      { 0xca, 0x02, 0x00, string, 0x00 }
-    s Get Prod.Ser.Number   { 0xca, 0x03 }
-    r Get Prod.Ser.Number   { 0xca, 0x03, 0x00, number, 0x00 }
-    s Get Basic Prod.Code   { 0xca, 0x04 }
-    r Get Basic Prod.Code   { 0xca, 0x04, 0x00, number, 0x00 }
-    s Set Product Code      { 0xcb, 0x01, product code, 0x00 }
-    s Set Order Number      { 0xcb, 0x02, number, 0x00 }
-    s Set Prod.Ser.Number   { 0xcb, 0x03, number, 0x00 }
-    s Get (original ?)IMEI  { 0xcc, 0x01 }
-    r Get (original ?)IMEI  { 0xcc, 0x01, IMEI, 0x00 }
-    s Get Manufacture Month { 0xcc, 0x02 }
-    r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 }
-    s Get Purchare date     { 0xcc, 0x04 }
-    r Get Purchare date     { 0xcc, 0x04, 0x00, string, 0x00 }
-    s Set "Made" date       { 0xcd, 0x02, string, 0x00 }
-    s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00}
-    s Make one phone test   { 0xce,0x1d,num1,num2,num3,num4}
-                            Where num1-num4: 0x02,0x00,0x00,0x00;
-                                             0x04,0x00,0x00,0x00;
-                                             0x08,0x00,0x00,0x00;
-                                             0x10,0x00,0x00,0x00;
-                                             0x20,0x00,0x00,0x00;
-                                             0x40,0x00,0x00,0x00;
-                                             0x80,0x00,0x00,0x00;
-                                             0x00,0x01,0x00,0x00;
-                                             0x00,0x02,0x00,0x00;
-                                             0x00,0x04,0x00,0x00; - "Power off"
-                                               No test for "Security data"
-                                             0x00,0x10,0x00,0x00;
-                                             0x00,0x20,0x00,0x00;
-                                             0x00,0x40,0x00,0x00;
-                                             0x00,0x80,0x00,0x00;
-                                             0x00,0x00,0x01,0x00;
-                                             ....
-                                             0x00,0x00,0x10,0x00;
-    s Result of phone tests { 0xcf }
-    r Result of phone tests { 0xcf, number of tests, results of next tests }
-    s ???                   { 0xd1 }
-    r ???(N5110)            { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 }
-    s LCD Test              { 0xd3, value }
-                            where value: 0x03, 0x02 - 1'st test
-                                         0x03, 0x01 - 2'nd test
-                                         0x02, 0x03 - clears screen
-    s ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01}
-    r ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?}
+    s ???(N6150)            { 0x98, 0x00 }\r
+    r ???(N6150)            { 0x98, 0x00, 0x04 }\r
+    s Get bin ringtone      { 0x9e, location }\r
+                            where: location=0,1,etc.\r
+    r Get bin ringtone      { 0x9e, location, error, contents... }\r
+                            where location=0,1,etc.\r
+                                  error=0x0a, ringtone NOT available\r
+                                        0x00, OK\r
+    s Set bin ringtone      { 0xa0, location, 0x00, contenst... }\r
+                            where: location=0,1,etc.\r
+    r Set bin ringtone      { 0xa0, location, error }\r
+                              where location=0,1,etc.\r
+                                    error=0x0a, ringtone NOT set\r
+                                          0x00, ringtone set OK\r
+    r Get MSid              { 0xb5, 0x01, 0x2f, msid, 0x25 }\r
+    s Get info about phone  { 0xc8, 0x01 }\r
+    r Get info about phone  { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+    s Get MCU SW Checksum   { 0xc8, 0x02 }\r
+    r Get MCU SW Checksum   { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 }\r
+    s DPS External SW       { 0xc7, 0x03 }\r
+    r DSP External SW       { 0xc7, 0x03, 0x00, string,0x00 }\r
+    s Get HW                { 0xc8, 0x05 }\r
+    r Get HW                { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 }\r
+    s Get "Made" Date       { 0xc8, 0x05 }\r
+    r Get "Made" Date       { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 }\r
+    s Get DSP Internal SW   { 0xc8, 0x09 }\r
+    r Get DSP Internal SW   { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 }\r
+    s Get PCI version       { 0xc8, 0x0b }\r
+    r Get PCI version       { 0xc8, 0x0b, 0x00, version, 0x00 }\r
+    s Get system ASIC       { 0xc8, 0x0c }\r
+    r Get system ASIC       { 0xc8, 0x0c, 0x00, string, 0x00 }\r
+    s Get COBBA             { 0xc8, 0x0d }\r
+    r Get COBBA             { 0xc8, 0x0d, 0x00, string, 0x00 }\r
+    s Get PLUSSA            { 0xc8, 0x0e }\r
+    r Get PLUSSA            { 0xc8, 0x0e, available, 0x00 }\r
+                            where available: 0x01: not available\r
+    s Get CCONT             { 0xc8, 0x0f }\r
+    r Get CCONT             { 0xc8, 0x0f, available, 0x00 }\r
+                            where available: 0x01: not available\r
+    s Get PPM version       { 0xc8, 0x10 }\r
+    r Get PPM version       { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+    s Get PPM info          { 0xc8, 0x12 }\r
+    r Get PPM info          { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 }\r
+    s Set HW version        { 0xc9, 0x05, version, 0x00 }\r
+    s Get Product Code      { 0xca, 0x01 }\r
+    r Get Product Code      { 0xca, 0x01, 0x00, number, 0x00 }\r
+    s Get Order Number      { 0xca, 0x02 }\r
+    r Get Order Number      { 0xca, 0x02, 0x00, string, 0x00 }\r
+    s Get Prod.Ser.Number   { 0xca, 0x03 }\r
+    r Get Prod.Ser.Number   { 0xca, 0x03, 0x00, number, 0x00 }\r
+    s Get Basic Prod.Code   { 0xca, 0x04 }\r
+    r Get Basic Prod.Code   { 0xca, 0x04, 0x00, number, 0x00 }\r
+    s Set Product Code      { 0xcb, 0x01, product code, 0x00 }\r
+    s Set Order Number      { 0xcb, 0x02, number, 0x00 }\r
+    s Set Prod.Ser.Number   { 0xcb, 0x03, number, 0x00 }\r
+    s Get (original ?)IMEI  { 0xcc, 0x01 }\r
+    r Get (original ?)IMEI  { 0xcc, 0x01, IMEI, 0x00 }\r
+    s Get Manufacture Month { 0xcc, 0x02 }\r
+    r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 }\r
+    s Get Purchare date     { 0xcc, 0x04 }\r
+    r Get Purchare date     { 0xcc, 0x04, 0x00, string, 0x00 }\r
+    s Set "Made" date       { 0xcd, 0x02, string, 0x00 }\r
+    s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00}\r
+    s Make one phone test   { 0xce,0x1d,num1,num2,num3,num4}\r
+                            Where num1-num4: 0x02,0x00,0x00,0x00;\r
+                                             0x04,0x00,0x00,0x00;\r
+                                             0x08,0x00,0x00,0x00;\r
+                                             0x10,0x00,0x00,0x00;\r
+                                             0x20,0x00,0x00,0x00;\r
+                                             0x40,0x00,0x00,0x00;\r
+                                             0x80,0x00,0x00,0x00;\r
+                                             0x00,0x01,0x00,0x00;\r
+                                             0x00,0x02,0x00,0x00;\r
+                                             0x00,0x04,0x00,0x00; - "Power off"\r
+                                               No test for "Security data"\r
+                                             0x00,0x10,0x00,0x00;\r
+                                             0x00,0x20,0x00,0x00;\r
+                                             0x00,0x40,0x00,0x00;\r
+                                             0x00,0x80,0x00,0x00;\r
+                                             0x00,0x00,0x01,0x00;\r
+                                             ....\r
+                                             0x00,0x00,0x10,0x00;\r
+    s Result of phone tests { 0xcf }\r
+    r Result of phone tests { 0xcf, number of tests, results of next tests }\r
+    s ???                   { 0xd1 }\r
+    r ???(N5110)            { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 }\r
+    s LCD Test              { 0xd3, value }\r
+                            where value: 0x03, 0x02 - 1'st test\r
+                                         0x03, 0x01 - 2'nd test\r
+                                         0x02, 0x03 - clears screen\r
+    s ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01}\r
+    r ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?}\r
     s Get EEPROM            { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes }
                             where: numofbytes - how many bytes to read
                            Note: Works ONLY in MBUS
     r Get EEPROM            { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes, contest... }
                             where numofbytes - how many bytes available
                                     contest - bytes with contests (if numofbytes != 0)
-0x41: Snake game ?
-0x47:
-    s Get Picture Image     { 0x0001, location }
-    r Get Picture Image     when contains sender number
-                            { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap }
-                           NOTE:
-                              Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!)
-                              in sender without sender number
-                            { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap }
-    s Set Picture Image     { 0x0003, frame...}
-                            where frame: see 0x47/0x0002
-    r Get/Set PictureImageOK{ 0x0004 }
-    r Set Picture Image err { 0x0005, error? }
-                            where error=0x74 - wrong location ?
-0x64:
-    s Phone ID request      { 0x0010 }
-    r Phone ID recvd        { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... }
-    s Accessory connection  { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes)
-0x7f: Acknowledge(FBUS/IRDA){+type, seq }
-      Acknowledge(MBUS)...
-0xd0: 
-    s Power on message seq1 {+04 }
-    r Power on message seq1 {+05 }
-0xd1:
-    s Get HW&SW version     { 0x0003, 0x00 }
-0xd2:
-    r Get HW&SW version     { 0x0003 "V " "firmware\n" "firmware date\n"
-                              "model\n" "(c) NMP." }
-0xda: ? (during playing 2 player snake)
-0xf0:
-    s Send RLP frame        {+0x00, 0xd9, ... }
-0xf4: Power on message seq 2
+0x41: Snake game ?\r
+0x47:\r
+    s Get Picture Image     { 0x0001, location }\r
+    r Get Picture Image     when contains sender number\r
+                            { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap }\r
+                           NOTE:\r
+                              Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!)\r
+                              in sender without sender number\r
+                            { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap }\r
+    s Set Picture Image     { 0x0003, frame...}\r
+                            where frame: see 0x47/0x0002\r
+    r Get/Set PictureImageOK{ 0x0004 }\r
+    r Set Picture Image err { 0x0005, error? }\r
+                            where error=0x74 - wrong location ?\r
+0x64:\r
+    s Phone ID request      { 0x0010 }\r
+    r Phone ID recvd        { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... }\r
+    s Accessory connection  { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes)\r
+0x7f: Acknowledge(FBUS/IRDA){+type, seq }\r
+      Acknowledge(MBUS)...\r
+0xd0: \r
+    s Power on message seq1 {+04 }\r
+    r Power on message seq1 {+05 }\r
+0xd1:\r
+    s Get HW&SW version     { 0x0003, 0x00 }\r
+0xd2:\r
+    r Get HW&SW version     { 0x0003 "V " "firmware\n" "firmware date\n"\r
+                              "model\n" "(c) NMP." }\r
+0xda: ? (during playing 2 player snake)\r
+0xf0:\r
+    s Send RLP frame        {+0x00, 0xd9, ... }\r
+0xf4: Power on message seq 2\r