c95d9b914a3cbf4d2fed3b80bcb573b871de0423
[gnokii.git] / Docs / protocol / nk7110.txt
1 $Id$
2
3 Assembled by
4         Balazs Nagy (js@lsc.hu)
5         Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)
6         Jens Bennfors <jens.bennfors@ing.hj.se>
7         Michael Hund <michael@drhund.de>
8         Jay Bertrand <jay.bertrand@libertysurf.fr>
9         Gabriele Zappi <gzappi@inwind.it>
10         Markus Plail <plail@web.de>
11         ... and other members of gnokii mailing list
12             and authors of some WWW pages.
13
14 The data provided is for information purposes only. 
15 Some of the frames might be hazardous to your phone. Be careful!!! 
16 We do not take any responsibility or liability for damages, etc.
17
18 NOTE: this information isn't (and can't be) complete.  If you know anything
19 about features not listed here or you noticed a bug in this list, please
20 notify us via e-mail.  Thank you.
21
22 Document describing frames used in
23 GSM Nokia 6210 and derivatives (7110)
24 Correct format is FBUS version 2/Infrared/MBUS version 2
25 (see nokia.txt for protocol details):
26
27  List:
28
29 0x00: Connect to NBS port ?
30     r Set ringtone          {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0}
31                             Seems not to work in MBUS!
32 0x01: Communication Status
33 ?   r Call msg              { 0x0002 }
34 ?   r Call in progress      { 0x0003, seqnr }
35 ?   r Remote end hang up    { 0x0004, seqnr, ?, error (like in netmon in 39) }
36 ?   r incoming call alert   { 0x0005, seqnr, numlen, "number", namelen, "name" }
37 ?   r answered call         { 0x0007, seqnr }
38 ?   r terminated call       { 0x0009, seqnr }
39 ?   r call msg              { 0x000a, seqnr }
40     Note: in 6210 4.27 all msg from 0x01 seems to be unavailable
41 0x02: SMS handling
42     s Send SMS message      { 0x0001, 0x02, 0x00 (SEND REQUEST), ... }
43     r Message sent          { 0x0002 }
44     r Send failed           { 0x0003, ?, ?, error (like in netmon in 65)}
45     r SMS message received  { 0x0010, ...... } (whole message)
46     s Set CellBroadcast     { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }
47                                       for enable cell broadcast ?
48                                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
49                                       for disable cell broadcast ?
50     r Set CellBroadcast OK  { 0x0021, 0x01 }
51     r Read CellBroadcast    { 0x0023, ?, ?, ?, channel, ?, message... } ?
52     s Set SMS center        { 0x0030, 0x64, priority, checksum?, format,
53                                       validity[2], {DefaultRecipient no.}[12],
54                                       {SMScenter no.}[12], {SMSC name}, 0x00}
55                               where tel.no.[12]: {len, type, {number(BCD)}}
56                                     type: 0x81: normal
57                                           0x91: + (international)
58                                           0xd0: alphanumeric
59                                     format: 0x00: text
60                                             0x22: fax
61                                             0x24: voice
62                                             0x25: ERMES
63                                             0x26: paging
64                                             0x31: X.400
65                                             0x32: email
66                                     validity: 0x000b:  1 hour
67                                               0x0047:  6 hours
68                                               0x00a7: 24 hours
69                                               0x00a9: 72 hours
70                                               0x00ad:  1 week
71                                               0x00ff: max.time
72     r Set SMS center OK     { 0x0031 }
73     r Set SMS center error  { 0x0032, reason }
74     s Get SMS center        { 0x0033, 0x64, priority }
75     r SMS center received   { 0x0034, priority, checksum?, type,
76                                       validity[2], {DefaultRecipient no.}[12],
77                                       {SMScenter no.}[12], {SMSC name}, 0x00 }
78                               where priority, checksum, type, validity,
79                                     tel.no.[12]: see 0x02/0x0030
80     r SMS center error recv { 0x0035, reason }
81     s??                     { 0x0074}
82     r??                     { 0x0075, 0xFF, 0x11, 0x98}
83     s??                     { 0x008C}
84     r??                     { 0x008D, 0x00}
85 0x03: Phonebook functions
86     s Get memory status     { 0x0103, 0x02, memory type }
87                             where: memory type - see 0x03/0x0107
88     r Get memory status     { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10,
89                                       0x00[2], z?, ymaxH, ymaxL, y2H, y2L,
90                                       0x0d?, xH?, 0x00[2]? }
91                               where y1: location (lowermost)
92                                     y2: no. of locations
93                                     ymax: maximum location no.
94     s Read memory           { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL,
95                                      yH, yL, 0x00, 0x00}
96                             where x: memory type
97                                      0x01: (256) Dialled numbers
98                                      0x02: (512) Missed calls
99                                      0x03: (768) Received calls
100                                      0x05: (500) telephone phonebook
101                                      0x06: (160) SIM phonebook
102                                      0x07: (10/0)
103                                      0x08: (1/0)
104                                      0x09: (4) voice mailbox
105                                      0x0e: (10) speed dials
106                                      0x10: (5) caller groups
107                                   y: location
108     r Read memory           { 0x0108, 0x00, 0x01,
109                              code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * }
110                             where if code==0x0f && xH==0x34 - phonebook location not found
111                               y: location
112                               z: generic block size
113                               block: {id, 0, 0, blocksize, block no.,
114                                       {contents}, 0x00}
115                                 id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] }
116                                     0x07 name {len, (unicode)},
117                                     0x08 email
118                                     0x09 postal
119                                     0x0a note {len, (unicode)}
120                                     0x0b number {type, 0x00[3], len, (unicode)}
121                                     0x0c ringtone {ringtone no., 0, 0}
122                                     0x13 date for a called list (DC, RC, etc.)
123                                     0x1b caller group graphic {width, height, 0, 0 {bitmap}}
124                                     0x1c caller group graphic on? {(1: yes, 0: no), 0, 0}
125                                     0x1e caller group number {number, 0, 0}
126                                    type: 0x0a: General,
127                                          0x03: Mobile (office ?),
128                                          0x06: Work,
129                                          0x04: Fax,
130                                          0x02: Home (mobile ?)
131     s Set mem location      { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z,
132                                       xH, xL, yH, yL, 0x00, 0x00, 0x00,
133                                       no.of blocks, { block }[no.of blocks] }
134     r Set mem location      { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?,
135                                       yH, yL, xL }
136                             where code:
137                                     0x3d - wrong entry type
138                                     0x3e - too much entries
139 0x0a: Network status
140     s get used network      { 0x0070 }
141     r get used network      { 0x0071, available,?,?,length,netstatus,netsel,cellIDH,
142                                       cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?,
143                                       len, xlen(78), ylen(21), 0, {bitmap} }
144                               where {Opstr}: namelen, {operator name(unicode)}
145                                     len: {xlen, ylen, 0, {bitmap} + 2
146                                     {bitmap}: bitmaplen, 0, 0, {OTA bitmap}
147                                     available: 0x02 if the logo following is valid,
148                                                0x01 for no operator logo following
149     s get network status    { 0x0081 }
150     r get network status    { 0x0082, network%, 0x14? }
151     s set operator logo     { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len,
152                                      xlen(78),ylen(21), 0 (frames?),
153                                      {bitmap}*?, 0x00(padding) }
154                               where len, {bitmap}: see 0x0a/0x0071
155     r set operator logo OK  { 0x01a4 }
156 0x13: Calendar notes
157     s Add meeting note      { 0x0001, body like in subtype 0x001a...}
158     r Add meeting note      { 0x0002, location (2 bytes), status (2 bytes)}
159     s Add call note         { 0x0003, body like in subtype 0x001a...}
160     r Add call note         { 0x0004, location (2 bytes), status (2 bytes)}
161     s Add birthday note     { 0x0005, body like in subtype 0x001a...}
162     r Add birthday note     { 0x0006, location (2 bytes), status (2 bytes)}
163     s Add reminder note     { 0x0007, body like in subtype 0x001a...}
164     r Add reminder note     { 0x0008, location (2 bytes), status (2 bytes)}
165     s Delete calendar note  { 0x000b, location (2 bytes) }
166     r Delete calendar note  { 0x000c, location (2 bytes), ?, ?, ?, ? }
167     s Get calendar note     { 0x0019, location (2 bytes) }
168     r Calendar note recvd   { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block}
169                             where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder
170                                    block: for Meeting:{hour,minute,alarm (two bytes),recurrance (two bytes),len,0x00,string(unicode)}
171                                           where alarm=Number of minutes before the time of the meeting
172                                                   that the alarm should be triggered:
173                                                   For meetings with "No alarm"=0xFFFF (-1).
174                                                   For "On time"=0x0000
175                                                   half an hour=0x001E, and so on.
176                                                 Recurrance=in hours, between future occurances of this meeting.
177                                                   If there is no repeat, this value is 0x0000. The special value 0xffff 
178                                                   means 1 Year!
179                                           for Call:{Hour,Minute,Alarm (as above),Recurrance (as above),namelen,numberlen,
180                                                     name(unicode),number(unicode)}
181                                           for Reminder:{Recurrance (as above),len,0x00,string(unicode)}
182                                           for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)}
183                                                     byte1 and byte2 may vary (???). Usually are 0x00 both (but not always)
184                                                     In Birthday, the Year in the common part, usually contains a strange year.
185                                                     So, don't consider it as Year of note, neither year of BirthDay (for Year of
186                                                     Birthday use the value described below).
187                                           where alarm=32-bit integer that is the number of seconds between the desired
188                                                   alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is
189                                                   0x0000FFFF (65535).
190                                                 YearOfBirth=used instead of the one in the common part of the entry (see above)
191                                                   but only when reading birthday entries. For storing entries, this field does
192                                                   not exist.
193                                                 AlarmType: 0x00 - Tone, 0x01 - Silent
194 ?   s???                    { 0x0021 }
195 ?   r???                    { 0x0022, 0x5A, 0x00 }
196 ?   s???                    { 0x0025 }
197 ?   r???                    { 0x0026, 0x04, 0x00 }
198 ?   s                       { 0x0029 }
199 ?   r                       { 0x002A, 0x04, 0x00 }
200     s Get first free pos    { 0x0031 }
201     r Get first free pos    { 0x0032, location (2bytes) }
202     s Get notes info        { 0x003a, 0xFF, 0xFE}
203     r Get notes info        { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *}
204 ?   s Get calendar note??   { 0x003E, location (2 bytes) }
205 ?   r Get calendar note??   { 0x003F, location (2bytes), ... }
206 0x14:
207     s Get Picture Image     { 0x0007, location, number[2 bytes], 0x00, 0x64 }
208                               where location: 0x21 (always ?)
209     r Get Picture Image     { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38],
210                                      width, height, lenH, lenL, {bitmap}}
211                               where location: 0x21 (always ?)
212     s Set Picture Image     { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38], 
213                                      width, height, lenH, lenL, {bitmap}}
214                               std. size: 72x28
215                               where location: 0x21 (always ?)
216     r Set Picture Image     { 0x0051, location, number[2 bytes], 0x07 }
217                               where location: 0x21 (always ?)
218
219     s List Picture Images   { 0x0096, FolderID, 0x0f, 0x07 }
220                               where: FolderID - see 0x14/0x017B
221     r List Picture Images   { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., }
222
223     s Get SMS from folder   { 0x0107, folderID, 0x00, location, 0x01, 0x65, 0x01}
224                             where: folderID - see 0x14/0x017B
225     r Get SMS from folder   { 0x0108, status, folderID, 0x00, location, type, sender number,...}
226
227                             where: status=0x01 - reveived/read
228                                           0x03 - received/unread
229                                           0x05 - stored/sent
230                                           0x07 - stored/not sent
231
232                             where: folderID - see 0x14/0x017B
233
234                             where: type=0x00 - received SMS
235                                         0x01 - delivery report
236                                         0x02 - stored SMS
237                                         0x07 - picture message
238     s Get folder status     { 0x016b, folderID, 0x0F, 0x01}
239                             where: folderID - see 0x14/0x017B
240     r Get folder status     { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....}
241     s Get folder names      { 0x017A, 0x00, 0x00}
242     r Get folder names      { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...}
243                             where: folderID=0x08 - Inbox
244                                             0x10 - Outbox
245                                             0x18 - Archive
246                                             0x20 - Templates
247                                             0x29 - first "My folders"
248                                             0x31 - second "My folders"
249                                             0x39 - third -"-
250                                             and so on
251 0x17:
252     s Get Battery info      { 0x0002 }
253     r Get Battery info      { 0x0003, 0x0b, batt%, 0x14?, 0x01? }
254 0x19: Date & time
255 ?   s Get date time ?       { 0x0062 }
256 ?   r Get date time ?       { 0x0063, 0x01, 0x01, 0x01, 0x07, 0x07,0xD1(year==2001) 0x05(month?) 0x02(day?) 0x00,0x1D,0x0D(hour:minute:second?)
257
258 ?   s Get alarm ?           { 0x006D }
259 ?   r Get alarm ?           { 0x006E 0x01, 0x01, 0x20, 0x03, 0x01, 0x0B, 0x14 }
260
261 ?   s ??                    { 0x0083, id }
262 ?   r ??                    { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 }
263 ?   r ??                    { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 }
264 ?   r ??                    { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 }
265                             where: id=0x27,0x2a,0x32,0x28,0x40
266 0x1b:
267     s Get IMEI              { 0x0001 }
268     r Get IMEI              { 0x0002, {IMEI(ASCII)}, 0x00 }
269     s get HW&SW version     { 0x0003, 0x01, 0x32 }
270     r get HW&SW version     { 0x0004, "V " "firmware\n" "firmware date\n"
271                               "model\n" "(c) NMP." 0x00 0xff[14] }
272 0x1f:
273     s ???                   { 0x0010, 0x02, 0x00, 0xff, 0xff }
274     r ???                   { 0x0011, length, 0x00, {block}[length] }
275                               where block: { unicode letter[2], 0x0000,
276                                 0x00, 0x55, ??, ?? }
277     s Set ringtone          { 0x011f, 0x00, location, 0x00, name(Unicode),
278                               ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) }
279                               where: location: 0x87 to 0x8b on N6210
280                                                0x74 to ... on N7110
281 ?   s Get ringtone          { 0x0122, 0x00, location}
282 ?   r Get ringtone          { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)}
283 0x39:
284     s get profile feature ? { 0x0101, 0x01, 0x01, 0x01, number1, number2}
285                             where number1: from 0x00 to 0x07 (for each profile ?)
286                                   number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff
287     r get profile feature ? { 0x0102, 0x01, number1, number2, block...}
288                             for number2==0xff: block: 0x01, 0x01, length, name(Unicode), 0x00, 0x00
289
290     s ???                   { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 }
291     r ???                   { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 }
292
293     s ?                     { 0x0105}
294     r ?                     { 0x0106, 0x01, 0x04}
295 0x3f: WAP 
296     s                       { 0x0000}
297     r                       { 0x0001, 0x01}
298     s  ??                   { 0x0003}
299     r  ??                   { 0x0004}
300     s Get WAP bookmark      { 0x0006, 0x00, location}
301                               where location: 0 - 14
302     r Get WAP bookmark      { 0x0007, 0x00, name_len, name(unicode),
303                               url_len, url(unicode), 0x01,0x80,0x00[7]}
304     r Get WAP bookmark err  { 0x0008, error }
305                               where error:
306                                 0x00  invalid position
307                                 0x02  no more bookmark stored
308     s Set WAP bookmark      { 0x0009, 0xff, 0xff, name_len, name(unicode),
309                               url_len, url(unicode), 0x01,0x80,0x00[7] }
310                               Note: bookmark is added to the first free location.
311
312 ?   r Set WAP bookmark err  {+0x01, 0x36, 0x0b, error }
313                               where error:
314                                0x04 - memory is full
315                                0x01 - we are in the bookmark menu
316                                0x00 - unknown reason for now ;(
317 ?   r Set WAP bookmark OK   {+0x01, 0x36, 0x00, block }
318                               where block:
319                                 0x0a, location_of_just_written_bookmark(?),
320                                 0x00, next_free_location(?)
321
322     s Delete WAP bookmark   { 0x000c, 0x00, location }
323                               where: location = 0-14
324     r Delete WAR bookmark OK{ 0x000d }
325     r Delete WAPbookmark err{ 0x000e, 0x02 }
326     s ??                    { 0x000F}
327     r ??                    { 0x0010, 0x00}
328     s Get WAP settings      { 0x0015, location}
329                             where location: 0x00 - 0x05
330     r Get WAP settings OK   { 0x0016, location }
331     r Get WAP settings err  { 0x0017, error }
332     s ???                   { 0x001b, location}
333                             where location: 0x00 - 0x1d
334     r ???                   { 0x001c,...}
335     r ??? err               { 0x001d,error}
336                             where: error=0x05    
337 0x40: Security commands
338 ?   s ???(N6150)            { 0x08, 0x00 }
339 ?   r ???(N6150)            { 0x08 }
340     s Enable extended cmds  { 0x64, cmd }
341                             where cmd: 0x00: off
342                                        0x01: on
343                                        0x03: reset (doesn't ask for PIN again)
344                                        0x04: reset (PIN is requested)
345                                              In 5110 makes reset without PIN
346                                        0x06: CONTACT SERVICE!!! Don't try it!
347     s Get IMEI              { 0x66 }
348     r Get IMEI              { 0x66, 0x01, IMEI, 0x00}
349     s (ACD Readings)?(N6150 { 0x68 }
350     r (ACD Readings)?(N6150 { 0x68, ... }
351     s Get Product Profile
352       Settings              { 0x6a}
353     r Get Product Profile
354       Settings              { 0x6a, 4bytes with Product Profile Settings }
355     s Set Product Profile
356       Settings              { 0x6b, 4bytes with Product Profile Settings }
357     r Set Product Profile
358       Settings OK ?         { 0x6b }
359     s Get code              { 0x6e, code }
360                             where code: see 0x08/0x0004 (no allowed code !)
361     r Get code              { 0x6e, code, allowed, allowed? (sec code (text)) }
362                             where code: see 0x08/0x0004
363                                   allowed: 0: no
364                                            1: yes
365 ?   s Reset Permanent
366 ?     Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e }
367 ?   r Reset Permanent
368 ?     Counters (nm->test36) { 0x74 }
369     s Call commands         { 0x7c, block }
370                             where where: command, (values)
371                                   command: 0x01
372                                       values: number(ASCII), 0x00 - makes voice call
373                                   command: 0x02 - answer call
374                                   command: 0x03 - release call
375     r Call commands         { 0x7c, command }
376     s Netmonitor            { 0x7e, field }
377                             where: field: 00: next
378                                           F0: reset
379                                           F1: off
380                                           F2: field test menus
381                                           F3: developer menus
382     s Get simlock info      { 0x8a, 0x00}
383     r Get simlock info      { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 }
384                             where: lockstype:   bit1,bit2,bit3,bit4 - if set, selected lock is user lock
385                                    locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed
386                                    counter1 - counter4: counters for locks
387     s Buzzer pitch          { 0x8f, volume, hzLO, hzHI }
388                             if volume and hz is 0, it's off
389     r Buzzer pitch          { 0x8f}
390     s ACD Readings ?        { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) }
391     r ACD Readings ?        { 0x91, parameter?, value? }
392 ?   s ???(N6150)            { 0x98, 0x00 }
393 ?   r ???(N6150)            { 0x98, 0x00, 0x04 }
394     s Get bin ringtone      { 0x9e, location }
395                             where: location=0,1,etc.
396     r Get bin ringtone      { 0x9e, location, error, contents... }
397                             where location=0,1,etc.
398                                   error=0x0a, ringtone NOT available
399                                         0x00, OK
400     s Set bin ringtone      { 0xa0, location, 0x00, contenst... }
401                             where: location=0,1,etc.
402     r Set bin ringtone      { 0xa0, location, error }
403                               where location=0,1,etc.
404                                     error=0x0a, ringtone NOT set
405                                           0x00, ringtone set OK
406 ?   r Get MSid              { 0xb5, 0x01, 0x2f, msid, 0x25 }
407     s Get info about phone  { 0xc8, 0x01 }
408     r Get info about phone  { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }
409     s Get MCU SW Checksum   { 0xc8, 0x02 }
410     r Get MCU SW Checksum   { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 }
411     s DPS External SW       { 0xc7, 0x03 }
412     r DSP External SW       { 0xc7, 0x03, 0x00, string,0x00 }
413     s Get HW                { 0xc8, 0x05 }
414     r Get HW                { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 }
415     s Get "Made" Date       { 0xc8, 0x05 }
416     r Get "Made" Date       { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 }
417     s Get DSP Internal SW   { 0xc8, 0x09 }
418     r Get DSP Internal SW   { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 }
419     s Get PCI version       { 0xc8, 0x0b }
420     r Get PCI version       { 0xc8, 0x0b, 0x00, version, 0x00 }
421     s Get system ASIC       { 0xc8, 0x0c }
422     r Get system ASIC       { 0xc8, 0x0c, 0x00, string, 0x00 }
423     s Get COBBA             { 0xc8, 0x0d }
424     r Get COBBA             { 0xc8, 0x0d, 0x00, string, 0x00 }
425     s Get PLUSSA            { 0xc8, 0x0e }
426     r Get PLUSSA            { 0xc8, 0x0e, available, 0x00 }
427                             where available: 0x01: not available
428     s Get CCONT             { 0xc8, 0x0f }
429     r Get CCONT             { 0xc8, 0x0f, available, 0x00 }
430                             where available: 0x01: not available
431     s Get PPM version       { 0xc8, 0x10 }
432     r Get PPM version       { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }
433     s Get PPM info          { 0xc8, 0x12 }
434     r Get PPM info          { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 }
435     s Set HW version        { 0xc9, 0x05, version, 0x00 }
436     s Get Product Code      { 0xca, 0x01 }
437     r Get Product Code      { 0xca, 0x01, 0x00, number, 0x00 }
438     s Get Order Number      { 0xca, 0x02 }
439     r Get Order Number      { 0xca, 0x02, 0x00, string, 0x00 }
440     s Get Prod.Ser.Number   { 0xca, 0x03 }
441     r Get Prod.Ser.Number   { 0xca, 0x03, 0x00, number, 0x00 }
442     s Get Basic Prod.Code   { 0xca, 0x04 }
443     r Get Basic Prod.Code   { 0xca, 0x04, 0x00, number, 0x00 }
444     s Set Product Code      { 0xcb, 0x01, product code, 0x00 }
445     s Set Order Number      { 0xcb, 0x02, number, 0x00 }
446     s Set Prod.Ser.Number   { 0xcb, 0x03, number, 0x00 }
447     s Get (original ?)IMEI  { 0xcc, 0x01 }
448     r Get (original ?)IMEI  { 0xcc, 0x01, IMEI, 0x00 }
449     s Get Manufacture Month { 0xcc, 0x02 }
450     r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 }
451     s Get Purchare date     { 0xcc, 0x04 }
452     r Get Purchare date     { 0xcc, 0x04, 0x00, string, 0x00 }
453     s Set "Made" date       { 0xcd, 0x02, string, 0x00 }
454     s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00}
455     s Make one phone test   { 0xce,0x1d,num1,num2,num3,num4}
456                             Where num1-num4: 0x02,0x00,0x00,0x00;
457                                              0x04,0x00,0x00,0x00;
458                                              0x08,0x00,0x00,0x00;
459                                              0x10,0x00,0x00,0x00;
460                                              0x20,0x00,0x00,0x00;
461                                              0x40,0x00,0x00,0x00;
462                                              0x80,0x00,0x00,0x00;
463                                              0x00,0x01,0x00,0x00;
464                                              0x00,0x02,0x00,0x00;
465                                              0x00,0x04,0x00,0x00; - "Power off"
466                                                No test for "Security data"
467                                              0x00,0x10,0x00,0x00;
468                                              0x00,0x20,0x00,0x00;
469                                              0x00,0x40,0x00,0x00;
470                                              0x00,0x80,0x00,0x00;
471                                              0x00,0x00,0x01,0x00;
472                                              ....
473                                              0x00,0x00,0x10,0x00;
474     s Result of phone tests { 0xcf }
475     r Result of phone tests { 0xcf, number of tests, results of next tests }
476 ?   s ???                   { 0xd1 }
477 ?   r ???(N5110)            { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 }
478     s LCD Test              { 0xd3, value }
479                             where value: 0x03, 0x02 - 1'st test
480                                          0x03, 0x01 - 2'nd test
481                                          0x02, 0x03 - clears screen
482     s ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01}
483     r ACD Readings(N6150)?  { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?}
484     r Function of           { 0xff, 0x8c }
485       0x40 msgtype not
486       supported ?
487 0x78:
488     s Status confirm        { 0x0201, 0x03 }
489     r Incoming call seq1    { 0x0102 0x0e 0x03 }
490     r Incoming call seq2    { 0x0102 0x7e 0x01 }
491 0x79:
492     s CarKit enable         { 0x0201 0x01 0x62 0x00 }
493     r CarKit enabled        { 0x0201 0x02 0x06 0x00 "V " {version} "\nHFU"
494                                      0x00 }
495 0x7a: settings
496     r Set setting           { 0x01eb, number, 0x00 }
497     s Set setting           { 0x01ec, number, contents }
498                             where for number:
499                               0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04,
500                                         0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width,
501                                         0xc0, 0x04, 0x03, 0x00, {bitmap} }
502                                 where width, height, {bitmap}: see 0x7a/0x01ed 0x15
503     s Get setting           { 0x01ee, number}
504                             where number: 0x01 - 0x1e
505                               0x15: startup logo
506                               0x1c: security code
507     r Get setting           { 0x01ed,number, 0x00, contents}
508                             where for number:
509                               0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04,
510                                         0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width,
511                                         0xc0, 0x04, 0x03, 0x00, {bitmap} }
512                                 where height: 60 (0x3c) or 65
513                                       width:  96 (0x60)
514                                       {bitmap}: like other bitmaps but pixels
515                                                 placed vertically.
516                               0x1c (security code): {code(ascii)}, 0x00 
517 0x7f: Acknowledge(FBUS/IRDA){+type, seq }
518       Acknowledge(MBUS)...
519 0xd0: 
520     s Power on message seq1 {+04 }
521     r Power on message seq1 {+05 }
522 0xd1:
523     s Get HW&SW version     { 0x0003, 0x00 }
524 0xd2:
525     r Get HW&SW version     { 0x0003 "V " "firmware\n" "firmware date\n"
526                               "model\n" "(c) NMP." }
527 0xf4: Power on message seq 2