summaryrefslogtreecommitdiff
path: root/docs/manual/protocol
diff options
context:
space:
mode:
Diffstat (limited to 'docs/manual/protocol')
-rw-r--r--docs/manual/protocol/carkit.rst698
-rw-r--r--docs/manual/protocol/discovering.rst82
-rw-r--r--docs/manual/protocol/gnapplet.rst62
-rw-r--r--docs/manual/protocol/index.rst28
-rw-r--r--docs/manual/protocol/m-obex.rst440
-rw-r--r--docs/manual/protocol/mtk.rst41
-rw-r--r--docs/manual/protocol/n6110.rst798
-rw-r--r--docs/manual/protocol/n6510.rst806
-rw-r--r--docs/manual/protocol/n7110.rst717
-rw-r--r--docs/manual/protocol/nokia-s40-sms-scratch.txt151
-rw-r--r--docs/manual/protocol/nokia-s40-sms.rst74
-rw-r--r--docs/manual/protocol/nokia.rst317
-rw-r--r--docs/manual/protocol/s60-download-qr.pngbin0 -> 286 bytes
-rw-r--r--docs/manual/protocol/s60.rst167
-rw-r--r--docs/manual/protocol/samsung-gt.rst168
-rw-r--r--docs/manual/protocol/samsung.rst304
-rw-r--r--docs/manual/protocol/sonim.rst37
-rw-r--r--docs/manual/protocol/tdma_5120.rst121
18 files changed, 5011 insertions, 0 deletions
diff --git a/docs/manual/protocol/carkit.rst b/docs/manual/protocol/carkit.rst
new file mode 100644
index 0000000..ea74cf5
--- /dev/null
+++ b/docs/manual/protocol/carkit.rst
@@ -0,0 +1,698 @@
+Nokia 6210/6310, CARC91, PC Experiment
+======================================
+
+Author:
+ Jens Bennfors
+
+Company
+ AB Indevia
+
+Date:
+ 2002-04-09
+
+Introduction
+-------------
+
+The purpose of this experiment is to gain understanding about how Nokias commands for handsfree works in a way that can be of use in the construction of Com.n.sense. The means available is a Nokia 6210, a Nokia 6310, a HFU-2 CARC91 and a PC with a LabVIEW program installed.
+
+Setup
+-----
+
+I have connected the phone to a Nokia original handsfree (CARC91). I then use the PC for listening to the data communication between the phone and CARC91. I also send the frames directly from the PC to the phone.
+
+Nokia 6210
+----------
+
+Phone connected to PC
++++++++++++++++++++++
+
+Initiation
+~~~~~~~~~~
+1F0004 D0 0001 04 00CE
+ Power up from PC
+1F0004 D0 0001 04 01CF
+ Power up from PC
+1F0400 D0 0001 05 10DF
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0203
+ Enable carkit mode from PC
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from PC
+1F0400 7F 0367
+ Ack from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 044F
+ HFU-2 Version
+1F0400 7F 0460
+ Ack from phone
+1F0400 78 0004 0102 0801 117C
+ Status 0x08, 0x01 from phone
+1F0400 DA 0002 0002 12D3
+ Type => 0xDA, data => 0x00, 0x02
+1F0004 79 0005 0201 0164 00 0504
+ Enable carkit mode from PC
+1F0004 79 0005 0201 0164 00 0607
+ Enable carkit mode from PC
+1F0400 7F 0662
+ Ack from phone
+1F0004 78 0003 0201 0307 67
+ Status confirm from PC
+1F0004 78 0003 0201 0308 68
+ Status confirm from PC
+1F0400 7F 086C
+ Ack from phone
+
+The phone enters the profile ”handsfree” when the frame carkit enable is sent. It sends out an unknown status frame 0x08, 0x01.
+
+Incoming call
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0102 0701 197B
+ Status 0x07, 0x01 from phone
+1F0400 78 0004 0102 0E03 1A73
+ Status 0x0E, 0x03 from phone
+
+Status type 0x07 with status 0x01 means mute external audio equipment. Status type 0x0E with status 0x03 means audio amplifier on.
+
+Connected
+~~~~~~~~~
+
+The phone doesn’t send out anything when a call has been set up.
+
+Initiation with connected phone
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1F0004 D0 0001 04 00CE
+ Power up from PC
+1F0400 D0 0001 05 1BD4
+ Power up from phone
+1F0004 79 0005 0201 0164 0001 00
+ Enable carkit mode from PC
+1F0400 7F 0165
+ Ack from phone
+1F0400 78 0004 0102 0E03 1C75
+ Status 0x0E, 0x03 from phone
+1F0400 78 0004 0102 0701 1D7F
+ Status 0x07, 0x01 from phone
+1F0004 79 0012 0201 0206 00 5620 3037 2E30 300A 4846 5532 00 0249
+ HFU-2 Version from PC
+1F0400 7F 0266
+ Ack from phone
+1F0400 78 0004 0102 0801 1E73
+ Status 0x08, 0x01 from phone
+1F0004 79 0005 0201 0164 0003 02
+ Enable carkit mode from PC
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0102 0E03 1F76
+ Status 0x0E, 0x03 from phone
+1F0400 78 0004 0102 0701 2042
+ Status 0x07, 0x01 from phone
+1F0004 78 0003 0201 03 0464
+ Status confirm from PC
+1F0400 7F 0460
+ Ack from phone
+
+Disconnected
+~~~~~~~~~~~~
+
+1F04 0078 0004 0102 0700 2142
+ Status 0x07, 0x00
+
+Incoming SMS
+~~~~~~~~~~~~
+
+FCF0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0
+ Initiation of bit length from phone
+1F0400 78 0004 0102 0E03 254C
+ Status 0x0E, 0x03 from phone
+F0F0F0F0
+ Initiation of bit length from phone
+
+Phone connected to CARC91
++++++++++++++++++++++++++
+
+Initiation
+~~~~~~~~~~
+
+1F0004 D0 0001 04 00CE
+ Power up from HFU-2
+1F0400 D0 0001 05 02CD
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0100
+ Enable carkit mode from HFU-2
+1F0400 7F 0165
+ Ack from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0249
+ HFU-2 Version
+1F0400 7F 0266
+ Ack from phone
+1F0400 78 0004 0102 0801 036E
+ Status 0x08, 0x01
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from HFU-2
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0102 0801 036E
+ Status 0x08, 0x01
+1F0004 7F 0367
+ Ack from HFU-2
+1F0400 DA 0002 0002 04C5
+ Status type => 0xDA, data => 0x00, 0x02
+1F0004 7F 0460
+ Ack from HFU-2
+1F0400 78 0004 0102 0E03 056C
+ Status 0x0E, 0x03
+1F0004 7F 0561
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0464
+ Status confirm from HFU-2
+1F0400 7F 0460
+ Ack from phone
+1F0400 78 0004 0102 0E00 066C
+ Status 0x0E, 0x00
+1F0004 7F 0662
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0565
+ Status confirm from HFU-2
+1F0400 7F 0561
+ Ack from phone
+
+Incoming call
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0102 0701 1173
+ Status 0x07, 0x01
+1F0004 7F 1175
+ Ack from HFU-2
+1F0400 78 0004 0102 0E03 127B
+ Status 0x0E, 0x03
+1F0004 7F 1276
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0868
+ Status confirm from HFU-2
+1F0400 7F 086C
+ Ack from phone
+
+Connected
+~~~~~~~~~
+
+The phone doesn’t send out anything when a call has been set up.
+
+Initiation with connected phone
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1F0004 D0 0001 04 00CE
+ Power up from HFU-2
+1F0400 D0 0001 05 1AD5
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0100
+ Enable carkit mode from HFU-2
+1F0400 7F 0165
+ Ack from phone
+1F0400 78 0004 0102 0E03 1B72
+ Status 0x0E, 0x03
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0249
+ HFU-2 Version
+1F0400 7F 0266
+ Ack from phone
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from HFU-2
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0102 0E03 1B72
+ Status 0x0E, 0x03
+1F0004 7F 1B7F
+ Ack from HFU-2
+1F0400 78 0004 0102 0801 1C71
+ Status 0x08, 0x01
+1F0004 78 0003 0201 03 0464
+ Status confirm from HFU-2
+1F0400 7F 0460
+ Ack from phone
+1F0400 78 0004 0102 0801 1C71
+ Status 0x08, 0x01
+1F0004 7F 1C78
+ Ack from HFU-2
+1F0400 78 0004 0102 0E03 1D74
+ Status 0x0E, 0x03
+1F0004 7F 1D79
+ Ack from HFU-2
+1F0400 78 0004 0102 0701 1E7C
+ Status 0x07, 0x01
+1F0004 78 0003 0201 03 0565
+ Status confirm from HFU-2
+1F0400 7F 0561
+ Ack from phone
+1F0400 78 0004 0102 0701 1E7C
+ Status 0x07, 0x01
+1F0004 7F 1E7A
+ Ack from HFU-2
+1F0400 78 0004 0102 0701 1F7D
+ Status 0x07, 0x01
+1F0004 7F 1F7B
+ Ack from phone
+1F0400 DA 0002 0002 20E1
+ Typ => 0xDA, data => 0x00. 0x02
+1F0004 7F 2044
+ Ack from HFU-2
+
+Disconnected
+~~~~~~~~~~~~
+
+1F0400 78 0004 0102 0700 1774
+ Status 0x07, 0x00
+1F0004 7F 1773
+ Ack from HFU-2
+1F0400 78 0004 0102 0E00 1872
+ Status 0x0E, 0x00
+1F0004 7F 187C
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0B6B
+ Status confirm from HFU-2
+1F0400 7F 0B6F
+ Ack from phone
+
+Incoming SMS
+~~~~~~~~~~~~
+
+1F0400 78 0004 0102 0E03 076E
+ Status 0x0E, 0x03
+1F0004 7F 0763
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0666
+ Status confirm from HFU-2
+1F0400 7F 0662
+ Ack from phone
+1F0400 78 0004 0102 0E00 0862
+ Status 0x0E, 0x00
+1F0004 7F 086C
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0767
+ Status confirm from HFU-2
+1F0400 7F 0763
+ Ack from phone
+
+Button pushed
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0102 0E03 0960
+ Status 0x0E, 0x03
+1F0004 7F 096D
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0868
+ Status confirm from HFU-2
+1F0400 7F 086C
+ Ack from phone
+1F0400 78 0004 0102 0E00 0A60
+ Status 0x0E, 0x00
+1F0004 7F 0A6E
+ Ack from HFU-2
+1F0004 78 0003 0201 03 0969
+ Status confirm from HFU-2
+1F0400 7F 096D
+ Ack from phone
+
+Nokia 6310
+----------
+
+Phone connected to PC
++++++++++++++++++++++
+
+Initiation
+~~~~~~~~~~
+
+1F0004 D0 0001 04 02CC
+ Power up from PC
+1F0400 D0 0001 05 0DC2
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0C0D
+ Enable carkit mode from PC
+1F0400 7F 0C68
+ Ack from phone
+1F0400 78 0004 0128 0B00 0E4B
+ Status 0x0B, 0x00 from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0D46
+ HFU-2 version from PC
+1F0400 7F 0E6A
+ Ack from phone
+1F0400 DA 0004 0028 0000 0FE2
+ ?
+1F0004 79 0005 0201 0164 00 1716
+ Enable carkit mode from PC
+1F0400 7F 1773
+ Ack from phone
+1F0400 78 0004 0128 0B00 1055
+ Status 0x0B, 0x00 from phone
+1F0004 78 0003 0201 03 1878
+ Status confirm from PC
+1F0400 7F 1A7E
+ Ack from phone
+
+An unknown status frame (0x0B) is sent by the phone.
+
+Incoming call
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0701 0D45
+ Status 0x07, 0x01 from phone
+1F0400 78 0004 0128 0E01 0F4E
+ Status 0x0E, 0x01 from phone
+1F0400 78 0004 0128 0A00 1054
+ Status 0x0A, 0x00 from phone
+1F0400 78 0004 0128 0901 1157
+ Status 0x09, 0x01 from phone
+
+Byte 8 in the status frames is some kind of ID number. 0x28 is the ID for 6310. Status 0x0A, 0x09 is unknown.
+
+Connected
+~~~~~~~~~
+
+The phone doesn’t send out anything when a call has been set up. This might be because the profile “handsfree” is lost when ack isn’t sent.
+
+Initiation with connected phone
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 1C57
+ HFU-2 version from PC
+1F0400 7F 1C78
+ Ack from phone
+1F0400 78 0004 0128 0E02 1A58
+ Status 0x0E, 0x02
+1F0400 78 0004 0128 0A00 1B5F
+ Status 0x0A, 0x00
+1F0400 78 0004 0128 0900 1C5B
+ Status 0x09, 0x00
+1F0400 78 0004 0128 0701 1D55
+ Status 0x07, 0x01
+1F0004 D0 0001 04 00CE
+ Power up from HFU-2
+1F0400 D0 0001 05 74BB
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0100
+ Enable carkit mode from HFU-2
+1F0400 7F 0165
+ Ack from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0249
+ HFU-2 Version
+1F0400 7F 0266
+ Ack from phone
+1F0400 78 0004 0128 0E01 7534
+ Status 0x0E, 0x01
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from HFU-2
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0128 0E01 7534
+ Status 0x0E, 0x01
+1F0004 7F 7511
+ Ack from HFU-2
+1F0400 78 0004 0128 0A01 7633
+ Status 0x0A, 0x01
+1F0004 7F 7612
+ Ack from HFU-2
+1F0400 78 0004 0128 0901 7731
+ Status 0x09, 0x01
+1F0004 7F 7713
+ Ack from HFU-2
+1F0400 78 0004 0128 0701 7830
+ Status 0x07, 0x01
+1F0004 7F 781C
+ Ack from HFU-2
+1F0400 78 0004 0128 0E01 7938
+ Status 0x0E, 0x01
+1F0004 7F 791D
+ Ack from HFU-2
+1F0004 78 0003 2801 03 044E
+ Status confirm from HFU-2
+1F0400 7F 0460
+ Ack from phone
+1F0400 DA 0004 0028 0000 7A97
+ Type => 0xDA, data => 0x0028, 0x0000
+1F0004 7F 7A1E
+ Ack from HFU-2
+1F0400 78 0004 0128 0E01 7B3A
+ Status 0x0E, 0x01
+1F0004 7F 7B1F
+ Ack from HFU-2
+1F0400 78 0004 0128 0A00 7C38
+ Status 0x0A, 0x00
+1F0004 78 0003 2801 03 054F
+ Status confirm from HFU-2
+1F0400 7F 0561
+ Ack from phone
+1F0400 78 0004 0128 0A00 7C38
+ Status 0x0A, 0x00
+1F0004 7F 7C18
+ Ack from HFU-2
+1F0400 78 0004 0128 0700 7D34
+ Status 0x07, 0x00
+1F0004 7F 7D19
+ Ack from HFU-2
+1F0400 78 0004 0128 0E00 7E3E
+ Status 0x0E, 0x00
+1F0004 7F 7E1A
+ Ack from HFU-2
+1F0004 78 0003 2801 03 064C
+ Status confirm from HFU-2
+1F0400 7F 0662
+ Ack from phone
+
+Disconnected
+~~~~~~~~~~~~
+
+No response. Probably because phone has lost the profile “handsfree”.
+
+Incoming SMS
+~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0E01 0849
+ Status 0x0E, 0x01
+1F0400 78 0004 0128 0A00 094D
+ Status 0x0A, 0x00
+1F0400 78 0004 0128 0901 0A4C
+ Status 0x09, 0x01
+
+Phone connected to CARC91
++++++++++++++++++++++++++
+
+Initiation
+~~~~~~~~~~
+
+1F0004 D0 0001 04 00CE
+ Power up from HFU-2
+1F0400 D0 0001 05 2DE2
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0100
+ Enable carkit mode from HFU-2
+1F0400 7F 0165
+ Ack from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0249
+ HFU version from HFU-2
+1F0400 7F 0266
+ Ack from phone
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from HFU-2
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0128 0E00 2E6E
+ Status 0x0E, 0x00
+1F0004 7F 2E4A
+ Ack from HFU-2
+1F0004 78 0003 2801 03 044E
+ Status confirm from HFU-2
+1F0400 7F 0460
+ Ack from phone
+1F0400 DA 0004 0028 0000 2FC2
+ ?
+1F0004 7F 2F4B
+ Ack from HFU-2
+
+Incoming call
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0701 3078
+ Status 0x07, 0x01
+1F0004 7F 3054
+ Ack from HFU-2
+1F0400 78 0004 0128 0701 3179
+ Status 0x07, 0x01
+1F0004 7F 3155
+ Ack from HFU-2
+1F0400 78 0004 0128 0E01 3273
+ Status 0x0E, 0x01
+1F0004 7F 3256
+ Ack from HFU-2
+1F0400 78 0004 0128 0A00 3377
+ Status 0x0A, 0x00
+1F0004 78 0003 2801 03 054F
+ Status confirm from HFU-2
+1F0400 7F 0561
+ Ack from phone
+1F0400 78 0004 0128 0A00 3377
+ Status 0x0A, 0x00
+1F0004 7F 33 57
+ Ack from HFU-2
+1F0400 78 0004 0128 0901 3472
+ Status 0x09, 0x01
+1F0004 7F 3450
+ Ack from HFU-2
+
+Connected
+~~~~~~~~~
+
+1F0400 78 0004 0128 0E01 3574
+ Status 0x0E, 0x01
+1F0004 7F 3551
+ Ack from HFU-2
+1F0400 78 0004 0128 0A01 3673
+ Status 0x0A, 0x01
+1F0004 78 0003 2801 03 064C
+ Status confirm from HFU-2
+1F0400 7F 0662
+ Ack from phone
+1F0400 78 0004 0128 0A01 3673
+ Status 0x0A, 0x01
+1F0004 7F 3652
+ Ack from HFU-2
+1F0400 78 0004 0128 0A00 3773
+ Status 0x0A, 0x00
+1F0004 7F 3753
+ Ack from HFU-2
+1F0400 78 0004 0128 0900 387F
+ Status 0x09, 0x00
+1F0004 7F 385C
+ Ack from HFU-2
+1F0400 78 0004 0128 0A01 397C
+ Status 0x0A, 0x01
+1F0004 7F 395D
+ Ack from HFU-2
+1F0400 78 0004 0128 0901 3A7C
+ Status 0x09, 0x01
+1F0004 7F 3A5E
+ Ack from HFU-2
+
+Initiation with connected phone
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1F0004 D0 0001 04 00CE
+ Power up from HFU-2
+1F0400 D0 0001 05 5996
+ Power up from phone
+1F0004 79 0005 0201 0164 00 0100
+ Enable carkit mode from HFU-2
+1F0400 7F 0165
+ Ack from phone
+1F0004 79 0012 0201 0206 0056 2030 372E 3030 0A48 4655 3200 0249
+ HFU-2 Version
+1F0400 7F 0266
+ Ack from phone
+1F0400 78 0004 0128 0E01 5A1B
+ Status 0x0E, 0x01
+1F0004 79 0005 0201 0164 00 0302
+ Enable carkit mode from HFU-2
+1F0400 7F 0367
+ Ack from phone
+1F0400 78 0004 0128 0E01 5A1B
+ Status 0x0E, 0x01
+1F0004 7F 5A3E
+ Ack from HFU-2
+1F0400 78 0004 0128 0A01 5B1E
+ Status 0x0A, 0x01
+1F0004 7F 5B3F
+ Ack from HFU-2
+1F0400 78 0004 0128 0901 5C1A
+ Status 0x09, 0x01
+1F0004 7F 5C38
+ Ack from HFU-2
+1F0400 78 0004 0128 0701 5D15
+ Status 0x07, 0x01
+1F0004 7F 5D39
+ Ack from HFU-2
+1F0004 78 0003 2801 0305 4F
+ Status confirm from HFU-2
+1F0400 7F 0561
+ Ack from phone
+1F0400 DA 0004 0028 0000 5EB3
+ ?
+1F0004 7F 5E3A
+ Ack from HFU-2
+
+Disconnected
+~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0E01 3B7A
+ Status 0x0E, 0x01
+1F0004 7F 3B5F
+ Ack from HFU-2
+1F0400 78 0004 0128 0A00 3C78
+ Status 0x0A, 0x00
+1F0004 78 0003 2801 03 074D
+ Status confirm from HFU-2
+1F0400 7F 0763
+ Ack from phone
+1F0400 78 0004 0128 0A00 3C78
+ Status 0x0A, 0x00
+1F0004 7F 3C58
+ Ack from HFU-2
+1F0400 78 0004 0128 0700 3D74
+ Status 0x07, 0x00
+1F0004 7F 3D59
+ Ack from HFU-2
+1F0400 78 0004 0128 0E00 3E7E
+ Status 0x0E, 0x00
+1F0004 7F 3E5A
+ Ack from HFU-2
+1F0004 78 0003 2801 0308 42
+ Status confirm from HFU-2
+1F0400 7F 086C
+ Ack from phone
+
+Incoming SMS
+~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0E01 6627
+ Status 0x0E, 0x01
+1F0004 7F 6602
+ Ack from HFU-2
+1F0004 78 0003 2801 03 064C
+ Status confirm from HFU-2
+1F0400 7F 0662
+ Ack from phone
+1F0400 78 0004 0128 0E00 6727
+ Status 0x0E, 0x00
+1F0004 7F 6703
+ Ack from HFU-2
+1F0004 78 0003 2801 03 074D
+ Status confirm from HFU-2
+1F0400 7F 0763
+ Ack from phone
+
+Button pushed
+~~~~~~~~~~~~~
+
+1F0400 78 0004 0128 0E01 0948
+ Status 0x0E, 0x01
+1F0004 7F 096D
+ Ack from HFU-2
+1F0004 78 0003 2801 03 064C
+ Status confirm from HFU-2
+1F0400 7F 0662
+ Ack from phone
+1F0400 78 0004 0128 0E00 0A4A
+ Status 0x0E, 0x00
+1F0004 7F 0A6E
+ Ack from HFU-2
+1F0004 78 0003 2801 03 074D
+ Status confirm from HFU-2
+1F0400 7F 0763
+ Ack from phone
+
+Result
+------
+
+Important things to consider when designing a program for Com.n.sense that is to work with 6310.
+
+* 6310 sends out status 0x0E, 0x01 when speaker should be enabled
+* HFU-2 version has to be sent in order for 6310 to switch to profile ”Handsfree”.
+* Status 0x0A might say weather the phone is ringing or connected. Only 6310 send this status.
+* Status confirm should be sent when status 0x0E is received.
diff --git a/docs/manual/protocol/discovering.rst b/docs/manual/protocol/discovering.rst
new file mode 100644
index 0000000..b058708
--- /dev/null
+++ b/docs/manual/protocol/discovering.rst
@@ -0,0 +1,82 @@
+.. _Discovering protocol:
+
+Discovering protocol
+====================
+
+You need to get a communication dump to be able to understand protocol
+or discover new commands. As most vendors provide some software for
+Windows, all following sections assume you do the sniffing on Windows.
+
+USB
+---
+
+For USB there exist various tools to dump USB communication. The dumps
+can be later analyzed and used to discover protocol details or unknown
+commands. One of the best free tools available currently is `UsbSnoop`_.
+
+In directory ``contrib/usbsnoop`` in Gammu sources you can find some tools to
+decode the output.
+
+.. _UsbSnoop: http://www.pcausa.com/Utilities/UsbSnoop/
+
+Serial port
+-----------
+
+
+Download `Portmon`_, which allows one to capture bytes sent and received by
+ready binary software.
+
+.. _Portmon: http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx
+
+If you have log saved by PortMon and protocol is the same to "old" Nokia
+protocols, can use Gammu to decode it. It's simple::
+
+ gammu --decodesniff MBUS2 file 6210 > log
+
+saves in log decoded MBUS2 dump session. There is used phone module for
+6210 and have you have debug info about 6210 specific frames (you don't have
+to add model). Dump file for --decodesniff and MBUS should be specific:
+
+1. without bytes sent to phone (in Portmon you set it here:
+ "Edit", "Filter/Highlight")
+
+2. in Hex format ("Options", "Show Hex")
+
+3. without Date & Time ("Options", "Show Time" & "Clock Time")
+
+
+Infrared
+--------
+
+First of all you need two computers with IrDA. One running linux, that will
+sniff and one running windows, which will communicate with the phone and
+whatever software you want (Nokia, Logomanager, Oxygen Phone Manager).
+Then you have to get the software from
+http://www.dev-thomynet.de/nokworld/noktrace/
+
+You have to disable IrDA services on the linux machine and eventually you
+have to change the default port the 'irda_intercept' program is sniffing
+from (default ttyS1). On the windows machine you should decrease the
+maximum transmission speed to 9600bps if possible, because the intercept
+program doesn't seem to handle speed changes. (9600 is for searching
+devices in range and then the highest possible speed is chosen) If it isn't
+possible you have to change the default bitrate in intercept source code,
+too. Then you won't see anything until the windows machine and the phone
+start transmitting data, which isn't too bad. At least here in my setup I
+could sniff the data coming from phone and sent to it in one go, like that::
+
+ win ------------------> Nokia
+ machine <----------------- phone
+ ^^
+ ||
+ sniffing
+ device
+
+You get a raw data file (.trc) from the intercept program, which you can
+then decode to hex with the second program from the above mentioned page.
+You should possibly be able to use Marcin's magnokii for decoding the trc
+files, too, but it didn't work for me so I just figured things out from the
+hex files. In the hex files you should look for primary frames with
+00 01 00 in it, because this is the FBUS header which is in every valuable
+frame sent to phone. It's not really joy to do that, but if it brings
+support for a new phone it's worth it :-)
diff --git a/docs/manual/protocol/gnapplet.rst b/docs/manual/protocol/gnapplet.rst
new file mode 100644
index 0000000..9d452f9
--- /dev/null
+++ b/docs/manual/protocol/gnapplet.rst
@@ -0,0 +1,62 @@
+.. _gnapplet:
+
+Gnapplet Protocol
+=================
+
+.. note::
+
+ The original applet has been created for
+ <http://www.gnokii.org/>. Gammu currently uses slightly
+ extended version which will be hopefully merged back.
+
+Installation
+------------
+
+To communicate with the phone, you need to install the applet. There are few
+options how to do it:
+
+Installation using Gammu
+++++++++++++++++++++++++
+
+Gammu can transmit the applet to your phone automatically. Just configure it
+for use of gnapplet connection and invoke :option:`gammu install`:
+
+.. code-block:: sh
+
+ gammu install
+
+It will automatically transmit the applet to the phone. On some phones the
+installation will start automatically, on some you need to find received files
+in the inbox and install them manually from there.
+
+Downloading from phone
+++++++++++++++++++++++
+
+Downloading files from the phone and installing them directly. You can
+download all required files from http://dl.cihar.com/gammu/gnapplet/.
+
+Manual Installation using Gammu
++++++++++++++++++++++++++++++++
+
+If the above mentioned :option:`gammu install` does not work for you, for
+example when you need to use different applet, you can still use Gammu to send
+files to the phone using :option:`gammu sendfile`.
+
+First you need to create ``~/.gammurc`` with following content:
+
+.. code-block:: ini
+
+ [gammu]
+ connection = blueobex
+ model = obexnone
+ device = 5C:57:C8:XX:XX:XX # Address of the phone
+
+And now you can send files to your phone:
+
+.. code-block:: sh
+
+ gammu sendfile gnapplet.sis
+ gammu sendfile gnapplet.ini
+
+Files should appear in inbox in your phone and you can install them from
+there.
diff --git a/docs/manual/protocol/index.rst b/docs/manual/protocol/index.rst
new file mode 100644
index 0000000..89a91b2
--- /dev/null
+++ b/docs/manual/protocol/index.rst
@@ -0,0 +1,28 @@
+.. _protocols:
+
+Phone Protocols
+===============
+
+.. toctree::
+ :maxdepth: 2
+
+ discovering
+ nokia
+ nokia-s40-sms
+ n6110
+ n6510
+ n7110
+ carkit
+ tdma_5120
+ samsung
+ samsung-gt
+ sonim
+ mtk
+ m-obex
+ s60
+ gnapplet
+
+.. seealso::
+
+ You can also find documentation for some protocols and vendor extensions
+ in separate git repository at http://github.com/gammu/gsm-docs
diff --git a/docs/manual/protocol/m-obex.rst b/docs/manual/protocol/m-obex.rst
new file mode 100644
index 0000000..eb7803f
--- /dev/null
+++ b/docs/manual/protocol/m-obex.rst
@@ -0,0 +1,440 @@
+m-obex protocol used by some Samsung mobiles
+============================================
+
+This document is copied from <http://code.google.com/p/samsyncro/wiki/mobex> and extended.
+
+Introduction
+------------
+
+This is an attempt to document the m-obex protocol. It is a obex-variation by Samsung used to exchange PIM data and files over bluetooth.
+
+This documentation is by no means complete but is only a reference for the samsyncro implementation. As I don't know the obex protocol I can't say in which parts it differs from the standard-obex. The only thing I found strange is the fact, that you will always get 0xA0 as a response. Which means Ok, success in obex. If there was an error you will find it's error code in the 0x42 header. If this is a normal behavior: Why are there so many response codes defined?
+
+The information about the protocol was gained by listening to the transferred data from Samsungs New PC Studio to a SGH-F480i and B2100 mobile.
+
+Requirements
+------------
+
+* Established bluetooth connection to the serial channel of the mobile
+* Some way to access this serial port. For example minicom.
+
+Starting the obex server
+------------------------
+
+To start the obex server you have to send this AT command first::
+
+ AT+SYNCML=MOBEXSTART
+
+Some phones seem to start with following command::
+
+ AT$TSSPCSW=1
+
+Obex commands
+-------------
+
+In the following chapters I will describe the obex packages to read and edit data on the mobile. I think most of them are in standard-obex format and are following this structure:
+
++-------------------------------------------+-----------------------------------+-------------------------------------------+
+|Package Header |Session Id |Obex Header(s) |
++===========================================+===================================+===========================================+
+|* First byte: Type of request. |* 0xCB and four bytes of session id|* First byte: Type of header. |
+|* Second and third bytes: length of package| |* Second and third bytes: length of header.|
+| | |* Next bytes: data. |
+| | |* Last byte: 0x00 |
++-------------------------------------------+-----------------------------------+-------------------------------------------+
+
+For detailed information about obex, for example what types of packages and headers exists, get the official Obex documentation from Infared Data Association. But I don't know if this is available for free.
+
+Here is a list of the most used types for the Samsung mobiles:
+
+There exists mainly two types of operations: Put (package header 0x02 and 0x82) to write data to the mobile and Get (package header 0x03 and 0x83) to retrieve data from the mobile. A put or get operation can be divided into several packages. The high-bit indicates if this is the last package of an operation. For example if you want to transfer a file to the mobile you send n-time 0x02 packages and only the last one is 0x82.
+
+Headers consists normally out of three blocks: First byte: Header type, second and third byte: length of the header (if the headers length is variable), following bytes: data. The most used header types are
+
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Obex description | Byte | following two bytes | following bytes |
++=======================+======+========================+===================================================================================================================================================+
+| Name | 0x01 | length of header | Used for filesystem operation to name a path or file |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Type | 0x42 | length of header | Obex command for example "m-obex/contacts/list" |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Length | 0xC3 | | Used in put operations and specifies the length of the transferred data (without header bytes). The length is represented in 4 bytes. |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Body | 0x48 | length of header | Data in a multi-package put operation |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| End of Bady | 0x49 | length of header | Last data package in a put operation |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Session id | 0xCB | | Four bytes representing the session id. Needed for multiplexing |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+| Application Parameter | 0X4C | length of header | In a request: Parameters for example a contact's id. <p>In an answer: The error/return code. If it is 0x00 0x00 than the operation was successful |
++-----------------------+------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+
+Contacts
+--------
+
+Get contacts count
+++++++++++++++++++
+
+Request
+~~~~~~~
+
+*83* 00 25
+ Obex Get
+CB 00 00 00 00
+ Session Id
+*42* 00 19 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 63 6F 75 6E 74 00
+ m-obex command: m-obex/contacts/count
+4C 00 04 01
+ Unknown! Didn' see PC Studio sending something other than 0x01 as parameter
+
+Answer
+~~~~~~
+*A0* 00 14
+ Obex ok
+*C3* 00 00 00 04
+ Maybe the number of requests you have to send to get all contacts. See next chapter for more information
+*4C* 00 05 00 00
+ Error code
+*49* 00 07 07 D0 00 18
+ First two data bytes: maximum number of contacts (0x07D0 = 2000). Last two data bytes: Current number of contacts
+
+
+List all
+++++++++
+
+Request
+~~~~~~~
+*83* 00 26
+ Obex Get package
+*CB* 00 00 00 00
+ Session Id
+*42* 00 18 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 6C 6F 61 64 00
+ m-obex Command: m-obex/contacts/load
+*4C* 00 06 01 00 00
+ First Byte unknown. Last two bytes: increment until all contacts received
+
+Answer
+~~~~~~
+*A0* 08 C1
+ Obex Ok
+*C3* 00 00 08 B1
+ Length of sent data
+*4C* 00 05 00 02
+ Indicates if these are the last contacts
+*49* 07 41 01 10 01 8D ...."
+ The first byte is unknown but all answers have this byte, then byte 2 and 3 contains the length of the answer, bytes 4 and 5 are the ID of the first entry bytes 6 and 7 are the length of this entry.
+
+ In one response more than 1 vcard can be returned in this case, entries are separated by 4 bytes with the following meaning: bytes 1 and 2 ID of the entry, bytes 3 and 4: length of the entry.
+
+To get all contacts the request have to be sent several times. The last two bytes must be incremented by every call.
+
+The end of the contacts list is reached if the header 0x4C is 0. The header will be 4C 00 05 00 00.
+
+
+Create a contact
+++++++++++++++++
+
+Beware: This is a put operation and is performed in some obex implementations in several packages (for example 0x02, 0x02, 0x82). But I didn't get the mobile to accept this. I had to create/update PIM data in exactly one package.
+
+Request
+~~~~~~~
+*82* 00 88
+ Obex put
+*CB* 00 00 00 00
+ Session id
+*42* 00 1A 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 63 72 65 61 74 65 00
+ m-obex/contacts/create
+*4C* 00 04 01
+ ? maybe flag for internal/external memory
+C3 00 00 00 5A
+ Length of the vcard string
+49 00 5D 42 45....
+ Contact as vcard
+
+Answer
+~~~~~~
+*A0* 00 12
+ Obex ok
+*C3* 00 00 00 02
+ ?
+*4C* 00 05 00 00
+ Error code
+*49* 00 05 00 21
+ last two bytes: the id of the newly created contact
+
+
+Update a contact
+++++++++++++++++
+
+Beware: This is a put operation and is performed in some obex implementations in several packages (for example 0x02, 0x02, 0x82). But I didn't get the mobile to accept this. I had to create/update PIM data in exactly one package.
+
+Request
+~~~~~~~
+*82* 00 8D
+ Obex put
+*CB* 00 00 00 00
+ Session id
+*42* 00 19 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 77 72 69 74 65 00
+ m-obex/contacts/write
+*4C* 00 06 01 00 20
+ Id of the contact which should be updated
+C3 00 00 00 5E
+ Length of the vcard string
+49 00 61 42...
+ Contact as vcard
+
+Answer
+~~~~~~
+*A0* 00 08
+ Obex ok
+*4C* 00 05 00 00
+ Error code: 0x00 0x00 means successful
+
+
+Read one contact
+++++++++++++++++
+
+There is also the possibility to read exactly one contact.
+
+Request
+~~~~~~~
+*83* 00 26
+ Obex get
+*CB* 00 00 00 00
+ Session id
+*42* 00 18 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 72 65 61 64 00
+ m-obex/contacts/read
+*4C* 00 06 01 00 20
+ First byte:? Last two bytes: Id of contact
+
+Answer
+~~~~~~
+*A0* 00 C4
+ Obex ok
+*C3* 00 00 00 B4
+ Length of vcard (without headers, just data)
+*4C* 00 05 00 00
+ Error code
+49 00 B7 42 45 47 49 4E ...
+ contact as vcard. TODO: where is id? First two bytes?
+
+Delete contact
+++++++++++++++
+
+To delete a contact you only have to know it's id.
+
+Request
+~~~~~~~
+*82* 00 28
+ Obex put
+*CB* 00 00 00 00
+ Session id
+*42* 00 1A 6D 2D 6F 62 65 78 2F 63 6F 6E 74 61 63 74 73 2F 64 65 6C 65 74 65 00
+ m-obex/contacts/delete
+*4C* 00 06 01 00 19
+ First byte: ? Last two bytes: Id of contact
+
+Answer
+~~~~~~
+
+*A0* 00 08
+ Obex ok
+*4C* 00 05 00 00
+ Error code
+
+
+Calendar
+--------
+
+Get count
++++++++++
+
+Request
+~~~~~~~
+*83* 00 25
+ Obex get
+*CB* 00 00 00 00
+ Session id
+*42* 00 19 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 63 6F 75 6E 74 00
+ m-obex/calendar/count
+*4C* 00 04 FF
+ ?
+
+Answer
+~~~~~~
+A0 00 1C
+ Obex ok
+*C3* 00 00 00 0C
+ length of data
+*4C* 00 05 00 00
+ Error code
+*49* 00 0F 01 2C 00 06 00 64 00 00 00 64 00 00
+ ?TODO?
+
+List all
+++++++++
+
+Request
+~~~~~~~
+*83* 00 20
+ Obex get
+*CB* 00 00 00 00
+ Session id
+*42* 00 18 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 69 6E 66 6F 00
+ m-obex/calendar/load
+
+
+Answer
+~~~~~~
+*A0* 00 C0
+ Obex ok
+*C3* 00 00 00 B0
+ Session
+*4C* 00 05 00 00
+ Error code
+*49* 00 B3 01 07 08 00 00 00 00 00 00 00 00 ...
+ Calendar items in vcalendar format. TODO: where are the ids?
+
+Create
+++++++
+
+Request
+~~~~~~~
+*82* 00 CC
+ Obex put
+*CB* 00 00 00 00
+ Session
+*42* 00 1A 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 63 72 65 61 74 65 00
+ m-obex/calendar/create
+4C 00 04 01
+ ?
+*C3* 00 00 00 9E
+ Length of vcalendar
+*49* 00 A1 42 45 47 49 4E 3A 56 43 41 4C 45 ...
+ vcalendar
+
+Answer
+~~~~~~
+*A0* 00 12
+ Obex ok
+*C3* 00 00 00 02
+ Length
+*4C* 00 05 00 00
+ Error code
+*49* 00 05 00 06
+ Id of the created item
+
+Update
+++++++
+
+Request
+~~~~~~~
+*82* 00 F7
+ Obex put
+*CB* 00 00 00 00
+ Session
+*42* 00 19 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 77 72 69 74 65 00
+ m-obex/calendar/write
+*4C* 00 06 01 00 05
+ First byte: ? Second and third byte: Id of the item
+*C3* 00 00 00 C8
+ Length of vcalendar
+*49* 00 CB 42 45 47 49 4E 3A 56
+ vcalendar item
+
+Answer
+~~~~~~
+*A0* 00 08
+ Obex ok
+*4C* 00 05 00 00
+ Error code
+
+
+Read
+++++
+
+Request
+~~~~~~~
+*83* 00 26
+ Obex get
+*CB* 00 00 00 00
+ Session
+*42* 00 18 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 72 65 61 64 00
+ m-obex/calendar/read
+4C 00 06 01 00 06
+ Id of calendar item
+
+Answer
+~~~~~~
+*A0* 00 C0
+ Obex ok
+*C3* 00 00 00 B0
+ Length
+*4C* 00 05 00 00
+ Error code
+*49* 00 B3 42 45 47 49 4E 3A 56 43 41 4C 45 4E 44 41 52 0D 0A 56 45 52 53 49 4F 4E 3A 31 2E 3....
+ vcalendar item. TODO: Where is the id?
+
+Delete
+++++++
+
+Request
+~~~~~~~
+*82* 00 28
+ Obex put
+*CB* 00 00 00 00
+ Session
+*42* 00 1A 6D 2D 6F 62 65 78 2F 63 61 6C 65 6E 64 61 72 2F 64 65 6C 65 74 65 00
+ m-obex/calendar/delete
+*4C* 00 06 01 00 06
+ id of calendar item
+
+
+Notes
+-----
+
+
+Tasks
+-----
+
+
+Files
+-----
+
+To get the file structure on the mobile, there are two commands. One that lists all subdirectories and one that lists all files.
+
+List directories
+++++++++++++++++
+
+List files
+++++++++++
+
+Get file
+++++++++
+
+Create file
++++++++++++
+
+Delete file
++++++++++++
+
+
+SMS
+---
+
+0x01: Inbox
+0x08: Outbox
+
+Get sms count
++++++++++++++
+
+List all sms
+++++++++++++
+
+Send sms
+++++++++
+
+Create sms
+++++++++++
+
+I don't think this is possible. At least I didn't find the function in New PC Studio. So sadly there will be no backup of sms messages.
diff --git a/docs/manual/protocol/mtk.rst b/docs/manual/protocol/mtk.rst
new file mode 100644
index 0000000..01e1e98
--- /dev/null
+++ b/docs/manual/protocol/mtk.rst
@@ -0,0 +1,41 @@
+MTK AT Commands
+===============
+
+VCard access
+------------
+
+Read vcard, first 1 is READ command, second 1 is memory position::
+
+ AT+EVCARD=1,1
+ +EVCARD: "0043003a005c00520065006300650069007600650064005c007e00760063006100720064005f0072002e007600630066"
+ OK
+
+HEX UCS2 temporary file name which we must read for VCARD
+
+Filesystem access
+-----------------
+
+Change operation mode to obtain access to filesystem operations::
+
+ AT+ESUO=3
+ OK
+
+Change directory to root folder::
+
+ AT+EFSF=3
+ OK
+
+Read file with name from +EVCARD reply::
+
+ AT+EFSR="0043003a005c00520065006300650069007600650064005c007e00760063006100720064005f0072002e007600630066"
+ +EFSR: 1, 1, 168,
+ "424547494E3A56434152440D0A56455253494F4E3A322E310D0A4E3B434841525345543D5554462D383B454E434F44494E473D51554F5445442D5052494E5441424C453A3D44303D39383D44313D38303D44303D42383D44303D42443D44303D42300D0A54454C3B43454C4C3A2B37787878787878787878780D0A54454C3B484F4D453A2B37787878787878787878780D0A54454C3B574F524B3A2B37787878787878787878780D0A454E443A56434152440D0A"
+ OK
+
+(1, 1, 168) = (<MEM POSITION>, <EOF FLAG>, <HEXLIFIED VCARD LEN>)
+
+Change operation mode to compatible::
+
+ AT+ESUO=4
+ OK
+
diff --git a/docs/manual/protocol/n6110.rst b/docs/manual/protocol/n6110.rst
new file mode 100644
index 0000000..70b4943
--- /dev/null
+++ b/docs/manual/protocol/n6110.rst
@@ -0,0 +1,798 @@
+Nokia 6110
+==========
+
+
+Assembled by
+Balazs Nagy <js@iksz.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>
+BORBELY Zoltan <bozo@andrews.hu>
+Pawel Kot <pkot@linuxnews.pl>
+Marcin Wiacek <Marcin@MWiacek.com>
+Walek <walek@pa98.opole.sdi.tpnet.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 call held { 0x0023, seqnr, 0x01 }
+ r call resumed { 0x0025, seqnr, 0x01 }
+ 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
+ 0x74: empty location ?
+ 0x8d: no PIN
+ 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,"NOKIA""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: Settings num 0x00 .. 0x09 can be assigned
+ separately to each profile (0x00 .. 0x05), but rest are common
+ to all profiles.
+
+ 6110
+
+ Feature Description Value
+ ------- ------------------- -----------------
+ 0x00 keypad notes 0xff=off, 0x00=level 1, 0x01=level 2, 0x02=level 3
+ 0x01 lights (? only in car profile) 0x00=off, 0x??=on (maybe 0x01)
+ 0x02 incoming call alert 1=ringing, 2=beep once, 3=unknown, 4=off, 5=ring once,
+ 6=ascending, 7=caller groups (see feature #0x08)
+ 0x03 ringing tone ID for original 6110: 0x12=ring ring, 0x13=low, etc.
+ 0x04 ringing volume level 1 (0x06) - level 5 (0x0a)
+ 0x05 message alert tone 0=no tone, 1=standard, 2=special, 3=beep once, 4=ascending
+ 0x06 vibration 0=off, 1=on
+ 0x07 warning and game tones 0xff=off, 0x04=on
+ 0x08 incoming caller groups 1=family, 2=VIP, 4=friends, 8=colleagues, 16=other
+ 0x09 automatic answer 0x00=off, 0x01=on
+ -------------------------
+ 0x16 Anykey answer 0x00=Off, 0x01=On
+ 0x17 ??? 0x00 | 0x01
+ 0x18 Memory in use 0x00=Phone, 0x01=SIM card
+ 0x19 Network selection 0x00=Automatic, 0x01=Manual
+ 0x1a Automatic redial 0x00=Off, 0x01=On
+ 0x1b ??? 0x00 | 0x01
+ 0x1c ??? 0x00...0x18
+ 0x1d Speed dialling 0x00=Off, 0x01=On
+ 0x1e Own number sending 0x00=Preset, 0x01=On, 0x02=Off
+ 0x1f Cell info display 0x00=Off, 0x01=On
+ 0x21 Language 0x00=English
+ 0x01=Deutsch
+ 0x02=Francais
+ 0x03=Italiano
+ 0x06=Nederlands
+ 0x07=Dansk
+ 0x08=Svenska
+ 0x09=Suomi
+ 0x0e=Norsk
+ 0x10=Automatic
+ 0x26 Reply via same centre 0x00=No, 0x01=Yes
+ 0x27 Delivery reports 0x00=No, 0x01=Yes
+ 0x28 Hide clock 0x00=Show clock, 0x01=Hide clock
+ 0x29 Time format 0x00=24-hour, 0x01=12-hour
+ 0x2a Selected profile 0x00=General, 0x01.. the rest
+
+ 33x0
+
+ Feature Description Value
+ ------- ------------------- -----------------
+ 0x00 keypad notes 0xff=off, 0x00=level 1, 0x01=level 2, 0x02=level 3
+ 0x01 incoming call alert 1=ringing, 2=beep once, 3=unknown, 4=off, 5=ring once,
+ 6=ascending
+ 0x02 ringing tone ID
+ 0x03 ringing volume level 1 (0x06) - level 5 (0x0a)
+ 0x04 message alert tone 0=no tone, 1=standard, 2=special, 3=beep once, 4=ascending
+ 0x05 vibration 0=off, 1=on, 2=vibrate first
+ 0x06 warning tones 0xff=off, 0x04=on
+ 0x07 screen saver 1=on, 0=off
+ 0x08 Screen saver -> Timeout 0x00=5 sec, 0x01=20 sec,....
+ 0x09 Screen saver -> Screen saver 0x00 ... 0x0d = Number of picture image
+ -------------------------
+ 0x0a: ???:
+ ...: ???:
+ 0x15: ???: Read only?
+ -------------------------
+ 0x16: ???: 0x00=??? 0x01=???
+ 0x17: Memory in use (Nokia 3330): 0x00=Phone, 0x01=SIM card
+ 0x18: Network selection: 0x00=Automatic, 0x01=Manual
+ 0x19: Automatic redial: 0x00=Off, 0x01=On
+ 0x1a: Speed dialling: 0x00=Off, 0x01=On
+ 0x1b: Own number sending: 0x00=Set by network, 0x01=On, 0x02=Off
+ 0x1c: Cell info display: 0x00=Off
+ 0x1d: Type of view: 0x00=Name list,0x01=Name, number,0x02=Large font
+ 0x1e: Language: 0x00=English
+ 0x07=Dansk
+ 0x08=Svenska
+ 0x09=Suomi
+ 0x0c=Turcke
+ 0x0e=Norsk
+ 0x10=Automatic
+ 0x32: Reboots ME (3330)
+ 0x1f: ???: Read only? (3330)
+ 0x20: Reply via same centre: 0x00=No, 0x01=Yes
+ 0x21: Delivery reports: 0x00=No, 0x01=Yes
+ 0x22: Show/Hide clock: 0x00=Show, 0x01=Hide
+ 0x23: Time format: 0x00=24-hour, 0x01=12-hour
+ 0x24: Select profile: 0x00=General, 0x01 ... 0x05=rest of them
+ 0x25: ???: Read only? (N3330)
+ 0x26: Confirm SIM service actions: 0x00=Not asked, 0x01=Asked
+ 0x27: T9 Dictionary: 0x00=Off, 0x01=English, 0x0a=Suomi
+ 0x28: Messages -> Character support: 0x00=Automatic, 0x01=GSM alphabet, 0x02=Unicode
+ 0x29: Startup logo settings: 0x00=Your own uploaded logo,0x01=Nokia
+ 0x02=Draft HUMAN technology(tm),0x03=Itineris
+ 0x2a: ???: 0x00=??? 0x01=???
+ 0x2b: ???: 0x00=??? 0x01=???
+ 0x2c: ???: Read only? (N3330)
+ 0x2d: Auto update of date and time: 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 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
+ 0x14: 20 second
+ 0x19: 25 second
+ 0x1e: 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
+ r Deactivate calldiverts{ 0x0002, 0x04, 0x00, divtype, 0x02, calltype, data }
+ s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }
+ where divtype, calltype: see above
+ r Get call diverts ok { 0x0002, 0x05, 0x00, divtype, 0x02, calltype, data }
+ where divtype, calltype: see above
+ data: { 0x01, 0x00 } - isn't active
+ { 0x02, 0x01, number(packed like in SMS), 0x00, 0x00..., timeout }
+ r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)}
+ r Call diverts active { 0x0006, ??? }
+ 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 !
+ 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
+ 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!
+ s Reset phone settings { 0x65, value, 0x00 }
+ where value: 0x08 - reset UI (User Interface) settings
+ 0x38 - reset UI, SCM and call counters
+ 0x40 - reset test 36 in netmonitor
+ 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 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 monitored parameters.
+ After it phone sends 0x00 message type values
+ s Break monitoring { 0x71 }
+ r Break monitoring { 0x71 }
+ ? s ???? { 0x74, 0x01, 0x01, 0x0e }
+ ? r ???? { 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
+ s Open simlock 2 { 0x81, 0x01, locknumber, 0x10, 0x10, 0x10, 0x10, 0x10 }
+ Note: sets simlock type to factory?
+ where locknumber: 1,2,4,8
+ s Open simlock 2 { 0x81, 0x01, locknumber }
+ where locknumber: 1,2,4,8
+ 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 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 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
diff --git a/docs/manual/protocol/n6510.rst b/docs/manual/protocol/n6510.rst
new file mode 100644
index 0000000..d662047
--- /dev/null
+++ b/docs/manual/protocol/n6510.rst
@@ -0,0 +1,806 @@
+Nokia 6510
+==========
+
+
+Assembled by
+Markus Plail <plail@web.de>
+Marcin Wiacek <Marcin@MWiacek.com>
+<tibor.harsszegi@essnet.se>
+... and other members of gnokii mailing list
+and authors of some WWW pages.
+
+Heavily based on nk7110.txt.
+
+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 Nokia 6510 and derivatives (?)
+
+Correct format is FBUS version 2/Infrared/MBUS version 2
+(see nokia.txt for protocol details)::
+
+ 0x00: Connect to NBS port ?
+ r Set ringtone {+....,ringtone packed according to SM2.0}
+
+ 0x01 COMMUNICATION
+ switch (message[3]) {
+ case 0x02:
+ dprintf("Call established, remote phone is ringing.\n");
+ dprintf("Call ID: %i\n", message[4]);
+ break;
+ case 0x03:
+ dprintf("Call complete.\n");
+ dprintf("Call ID: %i\n", message[4]);
+ dprintf("Call Mode: %i\n", message[5]);
+ dummy = malloc(message[6] + 1);
+ DecodeUnicode(dummy, message + 7, message[6]);
+ dprintf("Number: %s\n", dummy);
+ break;
+ case 0x04:
+ dprintf("Hangup!\n");
+ dprintf("Call ID: %i\n", message[4]);
+ dprintf("Cause Type: %i\n", message[5]);
+ dprintf("Cause ID: %i\n", message[6]);
+ break;
+ case 0x05:
+ dprintf("Incoming call:\n");
+ dprintf("Call ID: %i\n", message[4]);
+ dprintf("Call Mode: %i\n", message[5]);
+ dummy = malloc(message[6] + 1);
+ DecodeUnicode(dummy, message + 7, message[6]);
+ dprintf("From: %s\n", dummy);
+ break;
+ case 0x07:
+ dprintf("Call answer initiated.\n");
+ dprintf("Call ID: %i\n", message[4]);
+ break;
+ case 0x09:
+ dprintf("Call released.\n");
+ dprintf("Call ID: %i\n", message[4]);
+ break;
+ case 0x0a:
+ dprintf("Call is being released.\n");
+ dprintf("Call ID: %i\n", message[4]);
+ break;
+ case 0x0b:
+ /* No idea what this is about! */
+ break;
+ case 0x0c:
+ if (message[4] == 0x01)
+ dprintf("Audio enabled\n");
+ else
+ dprintf("Audio disabled\n");
+ break;
+ case 0x53:
+ dprintf("Outgoing call:\n");
+ dprintf("Call ID: %i\n", message[4]);
+ dprintf("Call Mode: %i\n", message[5]);
+ dummy = malloc(message[6] + 1);
+ DecodeUnicode(dummy, message + 7, message[6]);
+ dprintf("To: %s\n", dummy);
+ break;
+
+
+ 0x02: SMS HANDLING
+ s Send SMS { 0x02, 0x00, 0x00, 0x00, 0x55, 0x55,
+ 0x01 (1 big block), 0x02 (submit), length (big block),
+ type, reference, PID, DCS, 0x00, # blocks,
+ blocks... }
+ r Send SMS { 0x03, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x00, 0xdb, 0x55, 0x55, 0x00 }
+
+ s Get SMSC { 0x14, 0x01, 0x00 }
+ r Get SMSC { 0x15, format, 0x01, 0x0b, 0x28, # of SMSC, 0xf8, 0x00, validity, 0x55
+ #blocks,
+ blocks ...}
+
+ 0x03: PHONEBOOK HANDLING
+
+ s Get memory status { 0x03, 0x01, memory type, 0x55, 0x55, 0x55, 0x00}
+ where: memory type - see 0x03/0x07
+ r Get memory status { 0x04, 0x00, location, 0x00[7], 0x01, 0x10, 0x00, 0x00, 0x0c,
+ total_low, total_high, used_low, used_high, 0x01, 0x00, 0x00}
+
+ s Read memory { 0x07, 0x01, 0x01, 0x00, 0x01, 0x02, memory type,
+ 0x00, 0x00, 0x00, 0x00, location_low, location_high, 0x00, 0x00};
+
+ where MT: memory type
+ 0x01: (256) Dialled numbers
+ 0x02: (512) Missed calls
+ 0x03: (768) Received calls
+ 0x05: (500) telephone phonebook
+ 0x06: (160) SIM phonebook
+ 0x07: (10/0)
+ 0x08: (1/0)
+ 0x09: (4) voice mailbox
+ 0x0e: (10) speed dials
+ 0x10: (5) caller groups
+
+ r Read memory { 0x08, 0x00, 0x01,
+ code, 0x00, 0x00, z, xH, xL, yH, yL, 0x00[7], no.of blocks, { block } * }
+
+ where if code==0x0f && xH==0x34 - phonebook location not found
+ y: location
+ z: generic block size
+ block: {id, 0, 0, blocksize, block no.,
+ {contents}, 0x00}
+ id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] }
+ 0x07 name {len, (unicode)},
+ 0x08 email
+ 0x09 postal
+ 0x0a note {len, (unicode)}
+ 0x0b number {type, 0x00[3], len, (unicode)}
+ 0x0c ringtone {ringtone no., 0, 0}
+ 0x13 date for a called list (DC, RC, etc.)
+ 0x1b caller group graphic {width, height, 0, 0 {bitmap}}
+ 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0}
+ 0x1e caller group number {number, 0, 0}
+ type: 0x0a: General,
+ 0x03: Mobile (office ?),
+ 0x06: Work,
+ 0x04: Fax,
+ 0x02: Home (mobile ?)
+
+ s Set mem location { 0x0b, 0x00, 0x01, 0x01, 0x00, 0x00, z,
+ 0x02, memory type, yH, yL, 0x00[7],
+ no.of blocks, { block }[no.of blocks] }
+ r Set mem location { 0x0c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?,
+ yH, yL, xL }
+ where code:
+ 0x3d - wrong entry type
+
+ 0x08: SECURITY
+
+ s Get status { 0x11, 0x00 }
+ r Get status { 0x12, status, }
+ where status:
+ 0x01: waiting for Security Code
+ 0x07:
+ 0x02: waiting for PIN
+ 0x03: waiting for PUK
+ 0x05: PIN ok, SIM ok
+ 0x06: No input status
+ 0x16: No SIM
+ 0x1A: SIM rejected!
+
+ s Enter PIN { 0x07, 0x02, code, 0x00}
+ r Enter PIN { return code, reason }
+ where:
+ return code: 0x08 = success
+ 0x09 = failure
+ reason: 0x06 = PIN wrong
+
+ 0x0a: NETSTATUS
+
+ s Get Info { 0x00, 0x00 }
+ r Get Info { 0x01, 0x00, # blocks,
+ 0x00, length, 0x00, 0x02, status, length, operator name (unicode),
+ 0x09, length, LAC, LAC, 0x00, 0x00, CellID, CellID, NetworkCode (3 octets), ... }
+
+ s Get RF Level { 0x0b, 0x00, 0x02, 0x00, 0x00, 0x00 }
+ r GET RF Level { 0x0c, 0x00, 0x01, 0x04, 0x04, level, 0x5f }
+
+ s Get operator logo { 0x23, 0x00, 0x00, 0x55, 0x55, 0x55 }
+ r Get operator logo { 0x24, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x0c, 0x08, netcode (3 octets), 0x02, 0x00, 0x00,
+ 0x1a, size, width, height, logo size (2 octets), logo size (2 octets), logo }
+
+ 0x10: SUBSCRIBE
+
+ s Subscribe Channel { 0x10, # channels, message types... }
+
+ 0x13 CALENDAR
+
+ s Add meeting note { 0x01, body like in subtype 0x1a...}
+ r Add meeting note { 0x02, location (2 bytes), status (2 bytes)}
+
+ s Add call note { 0x03, body like in subtype 0x1a...}
+ r Add call note { 0x04, location (2 bytes), status (2 bytes)}
+
+ s Add birthday note { 0x05, body like in subtype 0x1a...}
+ r Add birthday note { 0x06, location (2 bytes), status (2 bytes)}
+
+ s Add reminder note { 0x07, body like in subtype 0x1a...}
+ r Add reminder note { 0x08, location (2 bytes), status (2 bytes)}
+
+ s Delete calendar note { 0x0b, location (2 bytes) }
+ r Delete calendar note { 0x0c, location (2 bytes), ?, ?, ?, ? }
+
+ s Get calendar note { 0x19, location (2 bytes) }
+ r Calendar note recvd { 0x1a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block}
+ where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder
+ block: for Meeting:{hour,minute,alarm (two bytes),recurrence (two bytes),len,0x00,string(unicode)}
+ where alarm=Number of minutes before the time of the meeting
+ that the alarm should be triggered:
+ For meetings with "No alarm"=0xFFFF (-1).
+ For "On time"=0x0000
+ half an hour=0x001E, and so on.
+ Recurrence=in hours, between future occurrences of this meeting.
+ If there is no repeat, this value is 0x0000. The special value 0xffff
+ means 1 Year!
+ for Call:{Hour,Minute,Alarm (as above),Recurrence (as above),namelen,numberlen,
+ name(unicode),number(unicode)}
+ for Reminder:{Recurrence (as above),len,0x00,string(unicode)}
+ for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)}
+ byte1 and byte2 may vary (???). Usually are 0x00 both (but not always)
+ In Birthday, the Year in the common part, usually contains a strange year.
+ So, don't consider it as Year of note, neither year of BirthDay (for Year of
+ Birthday use the value described below).
+ where alarm=32-bit integer that is the number of seconds between the desired
+ alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is
+ 0x0000FFFF (65535).
+ YearOfBirth=used instead of the one in the common part of the entry (see above)
+ but only when reading birthday entries. For storing entries, this field does
+ not exist.
+ AlarmType: 0x00 - Tone, 0x01 - Silent
+
+ ? s??? { 0x0021 }
+ ? r??? { 0x0022, 0x5A, 0x00 }
+ ? s??? { 0x0025 }
+ ? r??? { 0x0026, 0x04, 0x00 }
+ ? s { 0x0029 }
+ ? r { 0x002A, 0x04, 0x00 }
+
+ s Get first free pos { 0x0031 }
+ r Get first free pos { 0x0032, location (2bytes) }
+
+ s Get notes info { 0x003a, 0xFF, 0xFE}
+ r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *}
+
+ s Get first free pos { 0x0031 }
+ r Get first free pos { 0x0032, location (2bytes) }
+ s Get notes info { 0x003a, 0xFF, 0xFE}
+ r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *}
+
+ ? s Get calendar note?? { 0x003E, location (2 bytes) }
+ ? r Get calendar note?? { 0x003F, location (2bytes), ... }
+
+ 0x14: FOLDER/PICTURE SMS HANDLING
+
+ s Get SMS Status { 0x08, 0x00, 0x01 }
+ r Get SMS Status { 0x09, 0x00, #blocks,
+ type, length, blocknumber,
+ a (2 octets), b (2 octets), c (2 octets), 0x00, 0x55 ,
+ type, length, blocknumber,
+ d (2 octets), e (2 octets), f (2 octets), 0x01, 0x55 }
+
+ where:
+ a - max. number of messages in phone memory
+ b - Number of used messages in phone memory. These
+ are messages manually moved from the other folders.
+ Picture messages are saved here.
+ c - Number of unread messages in phone memory. Probably
+ only smart messages.
+ d - max. number of messages on SIM
+ e - Number of used messages in SIM memory. These are
+ either received messages or saved into Outbox/Inbox.
+ Note that you *can't* save message into this memory
+ using 'Move' option. Picture messages are not here.
+ f - Number of unread messages in SIM memory
+
+
+
+ s Get SMS from folder { 0x02, memory, folderID, location, location, 0x01, 0x00}
+ where:
+ memory - 0x01 for SIM, 0x02 for phone (SIM only for IN/OUTBOX
+ folderID - see 0x14/0x017B
+ r Get SMS from folder { 0x03, 0x00, 0x01, memory, folderID, locationH, locationL, 0x55, 0x55, 0x55,
+ 0x01 (on big block), type, length of big block,
+ [date/time1], [date/time2], # blocks,
+ type, length, data...
+ ... }
+
+ s Delete SMS { 0x04, memory, folderID, location, location, 0x0F, 0x55 }
+ r Delete SMS { 0x05 }
+
+ s Get folder status { 0x0c, memory, folderID, 0x0F, 0x55, 0x55, 0x55, 0x55}
+ where: folderID - see 0x14/0x017B
+ r Get folder status { 0x0d, 0x00, length, number of entries (2 bytes),
+ entry1number (2 bytes), entry2number(2 bytes), ..., 0x55[]}
+
+ s Get message info { 0x0e, memory, folderID, location, location, 0x55, 0x55 }
+ r Get message info { 0x0f, 0x00, 0x01, 0x00, 0x50, memory, type, 0x00, location, FolderID, status
+
+ where: type = 0x00 - MT
+ 0x01 - delivery report
+ 0x02 - MO
+ 0x80 - picture message
+ where: status=0x01 - reveived/read
+ 0x03 - received/unread
+ 0x05 - stored/sent
+ 0x07 - stored/not sent
+
+ s Get folder names { 0x12, 0x00, 0x00}
+ r Get folder names { 0x13, 0x00, number of strings, 0x01, 0x28, folderID, length, 0x00, name1, 0x00,
+ 0x55[40-length(name1)], 01 28, folderID, length, 0x00, name2, 0x00, 0x55[dito] ... }
+ where: folderID = 0x02 - Inbox
+ 0x03 - Outbox
+ 0x04 - Archive
+ 0x05 - Templates
+ 0x06 - first "My folders"
+ 0x07 - second "My folders"
+ 0x08 - third -"-
+ and so on
+
+ 0x15:
+ s ??? {+0x00, 0x06, 0x00, 0x01, 0x01, 0x00 }
+ r ??? {+0x06, ',', 0x00, 'd', 0x00, 0x00 }
+ s ??? {+0x00, 0x06, 0x00, 0x02, 0x00, 0x00 }
+ r ??? {+0x06, '.', 0x00, 'e', ?, ? }
+
+ 0x17: BATTERY
+
+ s Get battery level { 0x0a, 0x02, 0x00 }
+ r Get battery level { 0x0b, 0x01, 0x01, 0x16, level, 0x07, 0x05 }
+ where: level: 1-7 (as in phone display)
+
+ 0x19: CLOCK
+
+ s Get ???? {0x01,...}
+ r Get ???? {0x02,...}
+
+ s Get date { 0x0a, 0x00, 0x00 }
+ r Get date { 0x0b, 0x00, 0x02 (blocks),
+ 0x01 (type), 0x0c (length), 0x01, 0x03, year (2 octets), month, day, hour, minute, second, 0x00,
+ 0x04, 0x04, 0x01, 0x00 }
+
+ s Get ???? {0x0c, 0x00, 0x00}
+ r Get ???? {0x0d..}
+ s Get ???? {0x11,...}
+ r Get ???? {0x12,...}
+
+ 0x1b: IDENTIFY
+
+ s Get IMEI {+0x00, 0x01, 0x01, 0x00, 'A', 0x00, 0x00, 0x00 }
+ r Get IMEI { 0x01, 0x00, 0x01, 'A', 0x14, 0x00, 0x10, {IMEI(ASCII)}, 0x00 }
+ s Get IMEI {+0x00, 0x03, 0x01, 0x00, 'A', 0x00, 0x00, 0x00 }
+ r Get IMEI { 0x01, 0x00, 0x01, 'A', 0x14, 0x00, 0x10, {IMEI(ASCII)}, 0x00 }
+ s Get ??? {+0x00, 0x03, 0x00, 0x00, 'D', 0x00, 0x00, 0x00 }
+ r Get ??? { 0x01, 0x02, 0x00 }
+
+ s Get HW version {+0x00, 0x03, 0x02, 0x07, 0x00, 0x02 }
+ r Get HW version { 0x08, 0x00, 0x01, 'I', 0x0c, 0x00, 0x05, HW(4 bytes), 0x00, 0x00, 0x00, 0x00 }
+
+ s get HW&SW version { 0x07, 0x00, 0x01 }
+ r get HW&SW version { 0x08, 0x00, 0x01, 0x58, 0x29, 0x00, 0x22, "V " "firmware\n" "firmware date\n"
+ "model\n" "(c) NMP.", 0x0a, 0x43, 0x00, 0x00, 0x00 }
+
+ s Get product code {+0x00, 0x03, 0x04, 0x0b, 0x00, 0x02 }
+ r Get product code { 0x0c, 0x00, 0x01, 'N', 0x0c, 0x00, 0x08, code(7 bytes), 0x00 }
+ s ??? {+00 |03 |05 |0b |00 |20}
+ r ??? {+03 |2b+|05 |0c |00 |01 |52R|0c |00 |08 |00 |00 |00 |00 |00 |00 | 00 |00}
+ s Get ??? {+00 |03 |06 |0b |00 |01}
+ r Get ??? {+03 |2b+|06 |0c |00 |01 |4dM|10 |00 |0a |53S|54T|41A|344|355|399|311|355|377|00 |00 |00}
+
+ Sending frame 0x1b / 0x0006
+ 00 |03 |07 |0b |00 |ff  ..... 
+ Received frame 0x1b / 0x0072
+ 03 |2b+|07 |0c |00 |08 |4dM|10 |00 |0a |53S|54T|41A|344|355|39 .+....M...STA459
+ 311|355|377|00 |00 |00 |4eN|0c |00 |08 |300|355|300|377|355|32 157...N...050752
+ 300|00 |50P|0c |00 |08 |00 |00 |00 |00 |00 |00 |00 |00 |4fO|0c 0.P...........O.
+ 00 |08 |300|355|300|333|366|366|366|00 |51Q|0c |00 |06 |00 |00 ..0503666.Q.....
+ 00 |00 |00 |00 |00 |00 |52R|0c |00 |08 |00 |00 |00 |00 |00 |00 ......R.........
+ 00 |00 |53S|0c |00 |5b[|00 |00 |00 |0d |00 |00 |00 |00 |59Y|14 ..S..[........Y.
+ 00 |10 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 ................
+ 00 |00 ..
+ Sending frame 0x1b / 0x0006
+ 00 |03 |08 |07 |01 |ff  ..... 
+ Received frame 0x1b / 0x00ae
+ 03 |2b+|08 |08 |00 |09 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 |49I|0c .(c) NMP......I.
+ 00 |05 |300|388|300|322|00 |00 |00 |00 |4aJ|0c |00 |05 |00 |00 ..0802....J.....
+ 00 |00 |00 |00 |00 |00 |4bK|08 |00 |03 |333|366|00 |00 |4cL|0c ......K...36..L.
+ 00 |04 |322|388|388|00 |00 |00 |00 |00 |54T|0c |00 |05 |300|31 ..288.....T...01
+ 300|355|00 |00 |00 |00 |55U|10 |00 |0a |47G|344|2e.|300|2d-|34 05....U...G4.0-4
+ 2e.|311|322|00 |00 |00 |57W|10 |00 |08 |53S|45E|49I|4bK|4fO|20 .12...W...SEIKO
+ 300|00 |00 |00 |00 |00 |58X|29)|00 |22"|56V|20 |300|344|2e.|30 0.....X)."V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|0a |44D|00 |00 |00 .(c) NMP..D...
+ Sending frame 0x1b / 0x0008
+ 00 |03 |09 |00 |41A|00 |00 |00 ....A...
+ Received frame 0x1b / 0x001a
+ 03 |2b+|09 |01 |00 |01 |41A|14 |00 |10 |333|355|300|377|300|30 .+....A...350700
+ 311|300|355|388|300|311|333|300|333|00 105801303.
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0a |00 |42B|00 |00 |00 ....B...
+ Received frame 0x1b / 0x0012
+ 03 |2b+|0a |01 |00 |01 |42B|0c |00 |08 |3a:|05 |07 |10 |50P|08 .+....B...:...P.
+ 311|00 1.
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0b |00 |43C|00 |00 |00 ....C...
+ Received frame 0x1b / 0x0016
+ 03 |2b+|0b |01 |00 |01 |43C|10 |00 |09 |333|05 |07 |10 |50P|08 .+....C...3...P.
+ 311|00 |f6÷|00 |00 |00 1.÷...
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0c |00 |44D|00 |00 |00 ....D...
+ Received frame 0x1b / 0x0006
+ 03 |2b+|0c |01 |02 |00 .+....
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0d |00 |45E|00 |00 |00 ....E...
+ Received frame 0x1b / 0x0006
+ 03 |2b+|0d |01 |02 |00 .+....
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0e |00 |46F|00 |00 |00 ....F...
+ Received frame 0x1b / 0x0012
+ 03 |2b+|0e |01 |00 |01 |46F|0c |00 |08 |4eN|54T|54T|4aJ|50P|12 .+....F...NTTJP.
+ 344|56V 4V
+ Sending frame 0x1b / 0x0008
+ 00 |03 |0f |00 |56V|00 |00 |00 ....V...
+ Received frame 0x1b / 0x0006
+ 03 |2b+|0f |01 |02 |00 .+....
+ Sending frame 0x1b / 0x0008
+ 00 |03 |10 |00 |5aZ|00 |00 |00 ....Z...
+ Received frame 0x1b / 0x0006
+ 03 |2b+|10 |01 |02 |00 .+....
+ Sending frame 0x1b / 0x0006
+ 00 |03 |11 |0b |00 |02 ......
+ Received frame 0x1b / 0x0012
+ 03 |2b+|11 |0c |00 |01 |4eN|0c |00 |08 |300|355|300|377|355|32 .+....N...050752
+ 300|00 0.
+ Sending frame 0x1b / 0x0006
+ 00 |03 |12 |0b |00 |20 .....
+ Received frame 0x1b / 0x0012
+ 03 |2b+|12 |0c |00 |01 |52R|0c |00 |08 |00 |00 |00 |00 |00 |00 .+....R.........
+ 00 |00 ..
+ Sending frame 0x1b / 0x0006
+ 00 |03 |13 |0b |00 |01 ......
+ Received frame 0x1b / 0x0016
+ 03 |2b+|13 |0c |00 |01 |4dM|10 |00 |0a |53S|54T|41A|344|355|39 .+....M...STA459
+ 311|355|377|00 |00 |00 157...
+ Sending frame 0x1b / 0x0006
+ 00 |03 |14 |07 |00 |02 ......
+ Received frame 0x1b / 0x0012
+ 03 |2b+|14 |08 |00 |01 |49I|0c |00 |05 |300|388|300|322|00 |00 .+....I...0802..
+ 00 |00 ..
+
+ s Get IMEI { 0x00, 0x41 }
+ r Get IMEI { 0x01, 0x00, 0x01, 0x41, 0x14, 0x00, 0x10, {IMEI(ASCII)}, 0x00 }
+
+ Sending frame 0x1b / 0x0008
+ 00 |03 |16 |00 |44D|00 |00 |00 ....D...
+ Received frame 0x1b / 0x0006
+ 03 |2b+|16 |01 |02 |00 .+....
+ Sending frame 0x1b / 0x0006
+ 00 |03 |17 |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|17 |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |18 |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|18 |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |19 |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|19 |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |1a |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|1a |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |1b |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|1b |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |1c |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|1c |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |1d |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|1d |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+ Sending frame 0x1b / 0x0006
+ 00 |03 |1e |07 |00 |01 ......
+ Received frame 0x1b / 0x002e
+ 03 |2b+|1e |08 |00 |01 |48H|28(|00 |20 |56V|20 |300|344|2e.|30 .+....H(. V 04.0
+ 344|0a |322|399|2d-|311|300|2d-|300|311|0a |4eN|48H|4dM|2d-|37 4.29-10-01.NHM-7
+ 0a |28(|63c|29)|20 |4eN|4dM|50P|2e.|00 |00 |00 |00 |00 .(c) NMP......
+
+ 0x1f: RINGTONE
+
+ s Get Ringtones { 0x07, 0x00, 0x00, 0xFE, 0x00, 0x7D }
+ r Get Ringtones { 0x08, 0x00, 0x23, 0x00, # ringtones, 0x00,
+ ringtone number, 0x01, 0x01, 0x00, name length (chars), name (unicode)... }
+
+
+ 0x2b:
+ s Get IMEI { 0x00, 0x41 }
+ r Get IMEI { 0x01, 0x00, 0x01, 0x41, 0x14, 0x00, 0x10, {IMEI(ASCII)}, 0x00 }
+ s get HW&SW version { 0x07, 0x00, 0x01 }
+ r get HW&SW version { 0x08, 0x00, 0x01, 0x58, 0x29, 0x00, 0x22, "V " "firmware\n" "firmware date\n"
+ "model\n" "(c) NMP.", 0x0a, 0x43, 0x00, 0x00, 0x00 }
+
+ 0x38:
+ s ??? {+00 |02 |00 |0a |00 |01 |00, location, 00}
+ where location: 0, 1, 2, 3
+ r ??? {+02 |1d |00 |0b |00 |01 |00, location, 08 |00 |00 |00 |00 |00}
+ s ???
+ 00 |02 |00 |0a |00 |60`|00 |10 |00 |11 |00 |12 |00 |13 |00 |14 .....`..........
+ 00 |15 |00 |16 |00 |17 |00 |18 |00 |19 |00 |1a |00 |1b |00 |1c ................
+ 00 |1d |00 |1e |00 |1f |00 |20 |00 |21!|00 |22"|00 |23#|00 |24 ....... .!.".#.$
+ 00 |25%|00 |26&|00 |27'|00 |28(|00 |29)|00 |2a*|00 |2b+|00 |2c .%.&.'.(.).*.+.,
+ 00 |2d-|00 |2e.|00 |2f/|00 |300|00 |311|00 |322|00 |333|00 |34 .-.../.0.1.2.3.4
+ 00 |355|00 |366|00 |377|00 |388|00 |399|00 |3a:|00 |3b;|00 |3c .5.6.7.8.9.:.;.<
+ 00 |3d=|00 |3e>|00 |3f?|00 |40@|00 |41A|00 |42B|00 |43C|00 |44 .=.>.?.@.A.B.C.D
+ 00 |45E|00 |46F|00 |47G|00 |48H|00 |49I|00 |4aJ|00 |4bK|00 |4c .E.F.G.H.I.J.K.L
+ 00 |4dM|00 |4eN|00 |4fO|00 |50P|00 |51Q|00 |52R|00 |53S|00 |54 .M.N.O.P.Q.R.S.T
+ 00 |55U|00 |56V|00 |57W|00 |58X|00 |59Y|00 |5aZ|00 |5b[|00 |5c .U.V.W.X.Y.Z.[.\
+ 00 |5d]|00 |5e^|00 |5f_|00 |60`|00 |61a|00 |62b|00 |63c|00 |64 .].^._.`.a.b.c.d
+ 00 |65e|00 |66f|00 |67g|00 |68h|00 |69i|00 |6aj|00 |6bk|00 |6c .e.f.g.h.i.j.k.l
+ 00 |6dm|00 |6en|00 |6fo|00 .m.n.o.
+ r ???
+ 02 |1d |00 |0b |00 |60`|00 |10 |04 |00 |00 |11 |0c |06 |00 |00 .....`..........
+ 00 |00 |00 |00 |00 |00 |00 |12 |04 |00 |00 |13 |04 |00 |00 |14 ................
+ 08 |00 |00 |00 |00 |00 |00 |15 |08 |00 |00 |00 |00 |00 |00 |16 ................
+ 08 |00 |00 |00 |00 |00 |00 |17 |08 |00 |00 |00 |00 |00 |00 |18 ................
+ 08 |00 |00 |00 |00 |00 |00 |19 |08 |00 |00 |00 |00 |00 |00 |1a ................
+ 08 |00 |00 |00 |00 |00 |00 |1b |08 |00 |00 |00 |00 |00 |00 |1c ................
+ 04 |00 |00 |1d |08 |04 |00 |00 |00 |00 |00 |1e |3c<|355|ff |ff ............<5  
+ ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff                 
+ ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff                 
+ ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff |ff                 
+ ff |ff |ff |00 |00 |00 |00 |1f |08 |00 |00 |00 |00 |00 |00 |20    ............
+ 04 |00 |00 |21!|04 |00 |00 |22"|04 |00 |00 |23#|04 |00 |00 |24 ...!..."...#...$
+ 04 |00 |00 |25%|04 |00 |00 |26&|04 |00 |00 |27'|08 |00 |00 |00 ...%...&...'....
+ 00 |00 |00 |28(|08 |00 |00 |00 |00 |00 |00 |29)|08 |00 |00 |00 ...(.......)....
+ 00 |00 |00 |2a*|04 |00 |00 |2b+|0c |08 |00 |00 |00 |00 |00 |00 ...*...+........
+ 00 |00 |00 |2c,|04 |00 |00 |2d-|08 |00 |00 |00 |00 |00 |00 |2e ...,...-........
+ 08 |00 |00 |00 |00 |00 |00 |2f/|08 |00 |00 |00 |00 |00 |00 |30 ......./.......0
+ 08 |00 |00 |00 |00 |00 |00 |311|08 |00 |00 |00 |00 |00 |00 |32 .......1.......2
+ 08 |00 |00 |00 |00 |00 |00 |333|08 |00 |00 |00 |00 |00 |00 |34 .......3.......4
+ 08 |00 |00 |00 |00 |00 |00 |355|08 |00 |00 |00 |00 |00 |00 |36 .......5.......6
+ 08 |00 |00 |00 |00 |00 |00 |377|08 |00 |00 |00 |00 |00 |00 |38 .......7.......8
+ 08 |04 |00 |00 |00 |00 |00 |399|08 |04 |00 |00 |00 |00 |00 |3a .......9.......:
+ 08 |04 |00 |00 |00 |00 |00 |3b;|14 |10 |00 |00 |00 |00 |00 |00 .......;........
+ 00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |00 |3c<|08 |00 |00 |00 ...........<....
+ 00 |00 |00 |3d=|08 |00 |00 |00 |00 |00 |00 |3e>|08 |00 |00 |00 ...=.......>....
+ 00 |00 |00 |3f?|08 |00 |00 |00 |00 |00 |00 |40@|08 |00 |00 |8e ...?.......@...Ä
+ 00 |00 |00 |41A|04 |00 |00 |42B|04 |00 |00 |43C|08 |00 |00 |00 ...A...B...C....
+ 00 |00 |00 |44D|08 |00 |00 |00 |00 |00 |00 |45E|08 |00 |00 |00 ...D.......E....
+ 00 |00 |00 |46F|08 |00 |00 |00 |00 |00 |00 |47G|08 |00 |00 |00 ...F.......G....
+ 00 |00 |00 |48H|08 |00 |00 |00 |00 |00 |00 |49I|08 |00 |00 |00 ...H.......I....
+ 00 |00 |00 |4aJ|08 |00 |00 |00 |00 |00 |00 |4bK|08 |00 |00 |00 ...J.......K....
+ 00 |00 |00 |4cL|08 |00 |00 |00 |00 |00 |00 |4dM|08 |00 |00 |00 ...L.......M....
+ 00 |00 |00 |4eN|08 |00 |00 |00 |00 |00 |00 |4fO|08 |00 |00 |00 ...N.......O....
+ 00 |00 |00 |50P|08 |00 |00 |00 |00 |00 |00 |51Q|08 |00 |00 |00 ...P.......Q....
+ 00 |00 |00 |52R|08 |00 |00 |00 |00 |00 |00 |53S|08 |00 |00 |00 ...R.......S....
+ 00 |00 |00 |54T|08 |00 |00 |00 |00 |00 |00 |55U|08 |00 |00 |00 ...T.......U....
+ 00 |00 |00 |56V|08 |00 |00 |00 |00 |00 |00 |57W|08 |00 |00 |00 ...V.......W....
+ 00 |00 |00 |58X|08 |00 |00 |00 |00 |00 |00 |59Y|08 |00 |00 |00 ...X.......Y....
+ 00 |00 |00 |5aZ|08 |00 |00 |00 |00 |00 |00 |5b[|08 |00 |00 |00 ...Z.......[....
+ 00 |00 |00 |5c\|08 |00 |00 |00 |00 |00 |00 |5d]|08 |00 |00 |00 ...\.......]....
+ 00 |00 |00 |5e^|08 |00 |00 |00 |00 |00 |00 |5f_|08 |00 |00 |00 ...^......._....
+ 00 |00 |00 |60`|08 |00 |00 |00 |00 |00 |00 |61a|08 |00 |00 |00 ...`.......a....
+ 00 |00 |00 |62b|08 |00 |00 |00 |00 |00 |00 |63c|08 |00 |00 |00 ...b.......c....
+ 00 |00 |00 |64d|08 |00 |00 |00 |00 |00 |00 |65e|08 |00 |00 |00 ...d.......e....
+ 00 |00 |00 |66f|08 |00 |00 |00 |00 |00 |00 |67g|08 |00 |00 |00 ...f.......g....
+ 00 |00 |00 |68h|08 |00 |00 |00 |00 |00 |00 |69i|08 |00 |00 |00 ...h.......i....
+ 00 |00 |00 |6aj|08 |00 |00 |00 |00 |00 |00 |6bk|08 |04 |00 |00 ...j.......k....
+ 00 |00 |00 |6cl|08 |04 |00 |00 |00 |00 |00 |6dm|08 |00 |00 |00 ...l.......m....
+ 00 |00 |00 |6en|08 |00 |00 |00 |00 |00 |00 |6fo|08 |00 |00 |00 ...n.......o....
+ 00 |00 ..
+ Sending frame 0x38 / 0x00c7
+ 00 |02 |00 |0a |00 |60`|00 |70p|00 |71q|00 |72r|00 |73s|00 |74 .....`.p.q.r.s.t
+ 00 |75u|00 |76v|00 |77w|00 |78x|00 |79y|00 |7az|00 |7b{|00 |7c .u.v.w.x.y.z.{.|
+ 00 |7d}|00 |7e~|00 |7f |00 |80Ç|00 |81ü|00 |82é|00 |83â|00 |84 .}.~...Ç.ü.é.â.ä
+ 00 |85ů|00 |86ć|00 |87ç|00 |88ł|00 |89ë|00 |8aŐ|00 |8bő|00 |8c .ů.ć.ç.ł.ë.Ő.ő.î
+ 00 |8dŹ|00 |8eÄ|00 |8fĆ|00 |90É|00 |91Ĺ|00 |92ĺ|00 |93ô|00 |94 .Ź.Ä.Ć.É.Ĺ.ĺ.ô.ö
+ 00 |95Ľ|00 |96ľ|00 |97Ś|00 |98ś|00 |99Ö|00 |9aÜ|00 |9bŤ|00 |9c .Ľ.ľ.Ś.ś.Ö.Ü.Ť.ť
+ 00 |9dŁ|00 |9e×|00 |9fč|00 |a0á|00 |a1í|00 |a2ó|00 |a3ú|00 |a4 .Ł.×.č.á.í.ó.ú.Ą
+ 00 |a5ą|00 |a6Ž|00 |a7ž|00 |a8Ę|00 |a9ę|00 |aa¬|00 |abź|00 |ac .ą.Ž.ž.Ę.ę.¬.ź.Č
+ 00 |adş|00 |ae«|00 |af»|00 |b0 |00 |b1 |00 |b2 |00 |b3 |00 |b4 .ş.«.»..........
+ 00 |b5Á|00 |b6Â|00 |b7Ě|00 |b8Ş|00 |b9 |00 |ba |00 |bb |00 |bc .Á.Â.Ě.Ş........
+ 00 |bdŻ|00 |beż|00 |bf |00 |c0 |00 |c1 |00 |c2 |00 |c3 |00 |c4 .Ż.ż............
+ 00 |c5 |00 |c6Ă|00 |c7ă|00 |c8 |00 |c9 |00 |ca |00 |cb |00 |cc ...Ă.ă..........
+ 00 |cd |00 |ce |00 |cf¤|00 .....¤.
+ Received frame 0x38 / 0x0306
+ 02 |1d |00 |0b |00 |60`|00 |70p|08 |00 |00 |00 |00 |00 |00 |71 .....`.p.......q
+ 08 |00 |00 |00 |00 |00 |00 |72r|08 |00 |00 |00 |00 |00 |00 |73 .......r.......s
+ 08 |00 |00 |00 |00 |00 |00 |74t|08 |00 |00 |00 |00 |00 |00 |75 .......t.......u
+ 08 |00 |00 |00 |00 |00 |00 |76v|08 |00 |00 |00 |00 |00 |00 |77 .......v.......w
+ 08 |00 |00 |00 |00 |00 |00 |78x|08 |00 |00 |00 |00 |00 |00 |79 .......x.......y
+ 08 |00 |00 |00 |00 |00 |00 |7az|08 |00 |00 |00 |00 |00 |00 |04 .......z........
+ 08 |04 |00 |7b{|00 |00 |00 |04 |08 |04 |00 |7c||00 |00 |00 |04 ...{.......|....
+ 08 |04 |00 |7d}|00 |00 |00 |04 |08 |04 |00 |7e~|00 |00 |00 |04 ...}.......~....
+ 08 |04 |00 |7f |00 |00 |00 |04 |08 |04 |00 |80Ç|00 |00 |00 |04 ...........Ç....
+ 08 |04 |00 |81ü|00 |00 |00 |04 |08 |04 |00 |82é|00 |00 |00 |04 ...ü.......é....
+ 08 |04 |00 |83â|00 |00 |00 |04 |08 |04 |00 |84ä|00 |00 |00 |04 ...â.......ä....
+ 08 |04 |00 |85ů|00 |00 |00 |04 |08 |04 |00 |86ć|00 |00 |00 |04 ...ů.......ć....
+ 08 |04 |00 |87ç|00 |00 |00 |04 |08 |04 |00 |88ł|00 |00 |00 |04 ...ç.......ł....
+ 08 |04 |00 |89ë|00 |00 |00 |04 |08 |04 |00 |8aŐ|00 |00 |00 |04 ...ë.......Ő....
+ 08 |04 |00 |8bő|00 |00 |00 |04 |08 |04 |00 |8cî|00 |00 |00 |04 ...ő.......î....
+ 08 |04 |00 |8dŹ|00 |00 |00 |04 |08 |04 |00 |8eÄ|00 |00 |00 |04 ...Ź.......Ä....
+ 08 |04 |00 |8fĆ|00 |00 |00 |04 |08 |04 |00 |90É|00 |00 |00 |04 ...Ć.......É....
+ 08 |04 |00 |91Ĺ|00 |00 |00 |04 |08 |04 |00 |92ĺ|00 |00 |00 |04 ...Ĺ.......ĺ....
+ 08 |04 |00 |93ô|00 |00 |00 |04 |08 |04 |00 |94ö|00 |00 |00 |04 ...ô.......ö....
+ 08 |04 |00 |95Ľ|00 |00 |00 |04 |08 |04 |00 |96ľ|00 |00 |00 |04 ...Ľ.......ľ....
+ 08 |04 |00 |97Ś|00 |00 |00 |04 |08 |04 |00 |98ś|00 |00 |00 |04 ...Ś.......ś....
+ 08 |04 |00 |99Ö|00 |00 |00 |04 |08 |04 |00 |9aÜ|00 |00 |00 |04 ...Ö.......Ü....
+ 08 |04 |00 |9bŤ|00 |00 |00 |04 |08 |04 |00 |9cť|00 |00 |00 |04 ...Ť.......ť....
+ 08 |04 |00 |9dŁ|00 |00 |00 |04 |08 |04 |00 |9e×|00 |00 |00 |04 ...Ł.......×....
+ 08 |04 |00 |9fč|00 |00 |00 |04 |08 |04 |00 |a0á|00 |00 |00 |04 ...č.......á....
+ 08 |04 |00 |a1í|00 |00 |00 |04 |08 |04 |00 |a2ó|00 |00 |00 |04 ...í.......ó....
+ 08 |04 |00 |a3ú|00 |00 |00 |04 |08 |04 |00 |a4Ą|00 |00 |00 |04 ...ú.......Ą....
+ 08 |04 |00 |a5ą|00 |00 |00 |04 |08 |04 |00 |a6Ž|00 |00 |00 |04 ...ą.......Ž....
+ 08 |04 |00 |a7ž|00 |00 |00 |04 |08 |04 |00 |a8Ę|00 |00 |00 |04 ...ž.......Ę....
+ 08 |04 |00 |a9ę|00 |00 |00 |04 |08 |04 |00 |aa¬|00 |00 |00 |04 ...ę.......¬....
+ 08 |04 |00 |abź|00 |00 |00 |04 |08 |04 |00 |acČ|00 |00 |00 |04 ...ź.......Č....
+ 08 |04 |00 |adş|00 |00 |00 |04 |08 |04 |00 |ae«|00 |00 |00 |04 ...ş.......«....
+ 08 |04 |00 |af»|00 |00 |00 |04 |08 |04 |00 |b0 |00 |00 |00 |04 ...»............
+ 08 |04 |00 |b1 |00 |00 |00 |04 |08 |04 |00 |b2 |00 |00 |00 |04 ................
+ 08 |04 |00 |b3 |00 |00 |00 |04 |08 |04 |00 |b4 |00 |00 |00 |04 ................
+ 08 |04 |00 |b5Á|00 |00 |00 |04 |08 |04 |00 |b6Â|00 |00 |00 |04 ...Á.......Â....
+ 08 |04 |00 |b7Ě|00 |00 |00 |04 |08 |04 |00 |b8Ş|00 |00 |00 |04 ...Ě.......Ş....
+ 08 |04 |00 |b9 |00 |00 |00 |04 |08 |04 |00 |ba |00 |00 |00 |04 ................
+ 08 |04 |00 |bb |00 |00 |00 |04 |08 |04 |00 |bc |00 |00 |00 |04 ................
+ 08 |04 |00 |bdŻ|00 |00 |00 |04 |08 |04 |00 |beż|00 |00 |00 |04 ...Ż.......ż....
+ 08 |04 |00 |bf |00 |00 |00 |04 |08 |04 |00 |c0 |00 |00 |00 |04 ................
+ 08 |04 |00 |c1 |00 |00 |00 |04 |08 |04 |00 |c2 |00 |00 |00 |04 ................
+ 08 |04 |00 |c3 |00 |00 |00 |04 |08 |04 |00 |c4 |00 |00 |00 |04 ................
+ 08 |04 |00 |c5 |00 |00 |00 |04 |08 |04 |00 |c6Ă|00 |00 |00 |04 ...........Ă....
+ 08 |04 |00 |c7ă|00 |00 |00 |04 |08 |04 |00 |c8 |00 |00 |00 |04 ...ă............
+ 08 |04 |00 |c9 |00 |00 |00 |04 |08 |04 |00 |ca |00 |00 |00 |04 ................
+ 08 |04 |00 |cb |00 |00 |00 |04 |08 |04 |00 |cc |00 |00 |00 |04 ................
+ 08 |04 |00 |cd |00 |00 |00 |04 |08 |04 |00 |ce |00 |00 |00 |04 ................
+ 08 |04 |00 |cf¤|00 |00 ...¤..
+ Received frame 0x38 / 0x0306
+ 02 |1d |00 |0b |00 |60`|00 |04 |08 |04 |00 |d0đ|00 |00 |00 |04 .....`.....đ....
+ 08 |04 |00 |d1Đ|00 |00 |00 |04 |08 |04 |00 |d2Ď|00 |00 |00 |04 ...Đ.......Ď....
+ 08 |04 |00 |d3Ë|00 |00 |00 |04 |08 |04 |00 |d4ď|00 |00 |00 |04 ...Ë.......ď....
+ 08 |04 |00 |d5Ň|00 |00 |00 |04 |08 |04 |00 |d6Í|00 |00 |00 |04 ...Ň.......Í....
+ 08 |04 |00 |d7Î|00 |00 |00 |04 |08 |04 |00 |d8ě|00 |00 |00 |04 ...Î.......ě....
+ 08 |04 |00 |d9 |00 |00 |00 |04 |08 |04 |00 |da |00 |00 |00 |db ................
+ 08 |00 |00 |00 |00 |00 |00 |dc |08 |00 |00 |00 |00 |00 |00 |dd ...............Ţ
+ 08 |00 |00 |00 |00 |00 |00 |deŮ|08 |00 |00 |00 |00 |00 |00 |df .......Ů........
+ 08 |00 |00 |00 |00 |00 |00 |e0Ó|08 |00 |00 |00 |00 |00 |00 |e1 .......Ó.......ß
+ 08 |00 |00 |00 |00 |00 |00 |e2Ô|08 |00 |00 |00 |00 |00 |00 |e3 .......Ô.......Ń
+ 08 |00 |00 |00 |00 |00 |00 |e4ń|08 |00 |00 |00 |00 |00 |00 |e5 .......ń.......ň
+ 08 |00 |00 |00 |00 |00 |00 |04 |08 |04 |00 |e6Š|00 |00 |00 |e7 ...........Š...š
+ 08 |00 |00 |00 |00 |00 |00 |e8Ŕ|08 |00 |00 |00 |00 |00 |00 |04 .......Ŕ........
+ 08 |04 |00 |e9Ú|00 |00 |00 |04 |08 |04 |00 |eaŕ|00 |00 |00 |04 ...Ú.......ŕ....
+ 08 |04 |00 |ebŰ|00 |00 |00 |04 |08 |04 |00 |ecý|00 |00 |00 |04 ...Ű.......ý....
+ 08 |04 |00 |edÝ|00 |00 |00 |04 |08 |04 |00 |eeţ|00 |00 |00 |04 ...Ý.......ţ....
+ 08 |04 |00 |ef´|00 |00 |00 |04 |08 |04 |00 |f0­|00 |00 |00 |04 ...´.......­....
+ 08 |04 |00 |f1 |00 |00 |00 |04 |08 |04 |00 |f2 |00 |00 |00 |04 ................
+ 08 |04 |00 |f3 |00 |00 |00 |04 |08 |04 |00 |f4 |00 |00 |00 |f5 ...............§
+ 08 |00 |00 |00 |00 |00 |00 |f6÷|08 |00 |00 |00 |00 |00 |00 |f7 .......÷.......¸
+ 08 |00 |00 |00 |00 |00 |00 |f8°|08 |00 |00 |00 |00 |00 |00 |04 .......°........
+ 08 |04 |00 |f9¨|00 |00 |00 |04 |08 |04 |00 |fa |00 |00 |00 |04 ...¨............
+ 08 |04 |00 |fbű|00 |00 |00 |04 |08 |04 |00 |fcŘ|00 |00 |00 |04 ...ű.......Ř....
+ 08 |04 |00 |fdř|00 |00 |00 |04 |08 |04 |00 |fe |00 |00 |00 |04 ...ř............
+ 08 |04 |00 |ff |00 |00 |00 |04 |08 |04 |01 |00 |00 |00 |00 |04 ... ............
+ 08 |04 |01 |01 |00 |00 |00 |04 |08 |04 |01 |02 |00 |00 |00 |04 ................
+ 08 |04 |01 |03 |00 |00 |00 |04 |08 |04 |01 |04 |00 |00 |00 |04 ................
+ 08 |04 |01 |05 |00 |00 |00 |04 |08 |04 |01 |06 |00 |00 |00 |04 ................
+ 08 |04 |01 |07 |00 |00 |00 |04 |08 |04 |01 |08 |00 |00 |00 |04 ................
+ 08 |04 |01 |09 |00 |00 |00 |04 |08 |04 |01 |0a |00 |00 |00 |04 ................
+ 08 |04 |01 |0b |00 |00 |00 |04 |08 |04 |01 |0c |00 |00 |00 |04 ................
+ 08 |04 |01 |0d |00 |00 |00 |04 |08 |04 |01 |0e |00 |00 |00 |04 ................
+ 08 |04 |01 |0f |00 |00 |00 |04 |08 |04 |01 |10 |00 |00 |00 |04 ................
+ 08 |04 |01 |11 |00 |00 |00 |04 |08 |04 |01 |12 |00 |00 |00 |04 ................
+ 08 |04 |01 |13 |00 |00 |00 |04 |08 |04 |01 |14 |00 |00 |00 |04 ................
+ 08 |04 |01 |15 |00 |00 |00 |04 |08 |04 |01 |16 |00 |00 |00 |04 ................
+ 08 |04 |01 |17 |00 |00 |00 |04 |08 |04 |01 |18 |00 |00 |00 |04 ................
+ 08 |04 |01 |19 |00 |00 |00 |04 |08 |04 |01 |1a |00 |00 |00 |04 ................
+ 08 |04 |01 |1b |00 |00 |00 |04 |08 |04 |01 |1c |00 |00 |00 |04 ................
+ 08 |04 |01 |1d |00 |00 |00 |04 |08 |04 |01 |1e |00 |00 |00 |04 ................
+ 08 |04 |01 |1f |00 |00 |00 |04 |08 |04 |01 |20 |00 |00 |00 |04 ........... ....
+ 08 |04 |01 |21!|00 |00 |00 |04 |08 |04 |01 |22"|00 |00 |00 |04 ...!......."....
+ 08 |04 |01 |23#|00 |00 |00 |04 |08 |04 |01 |24$|00 |00 |00 |04 ...#.......$....
+ 08 |04 |01 |25%|00 |00 |00 |04 |08 |04 |01 |26&|00 |00 |00 |04 ...%.......&....
+ 08 |04 |01 |27'|00 |00 |00 |04 |08 |04 |01 |28(|00 |00 |00 |04 ...'.......(....
+ 08 |04 |01 |29)|00 |00 |00 |04 |08 |04 |01 |2a*|00 |00 |00 |04 ...).......*....
+ 08 |04 |01 |2b+|00 |00 |00 |04 |08 |04 |01 |2c,|00 |00 |00 |04 ...+.......,....
+ 08 |04 |01 |2d-|00 |00 |00 |04 |08 |04 |01 |2e.|00 |00 |00 |04 ...-............
+ 08 |04 |01 |2f/|00 |00 .../..
+ Sending frame 0x38 / 0x000e
+ 00 |02 |00 |0c |00 |01 |00 |01 |08 |02 |05 |08 |00 |00 ..............
+ Received frame 0x38 / 0x0006
+ 02 |1d |00 |0d |00 |00 ......
+
+ 0x39: PROFILES
+
+ s Get Profile { 0x01, 0x01, 0x0c, 0x01,
+ 0x04 (length), profile #, 'feature', 0x01 }
+ r Get Profile { 0x02, 0x00, 0x0c, 0x02,
+ 0x09 (length), type, 0x01, 0x02, 0x00, 0x00, 0x01, value, 0x02 ... }
+
+ s Set Profile { 0x03, 0x01, # blocks, 0x03,
+ length, type, profile #, value, 0x00, 0x00, 0x01, value, 0x03 ... }
+ r Set Profile { 0x04, 0x01, # blocks,
+ length, 0xXX, type, 0xXX, value
+ where value: 0x00 = success
+
+ 0x3E: FM Radio
+ s Get FM Station { 0x00, 0x01, 0x00, 0x05, location, 0x00, 0x01}
+ r Get FM Station { 0x06, 0x00, 0x01, 0x00, 0x1c,
+ name_length, 0x14, 0x09, 0x00, location, 0x00, 0x00, 0x01,
+ FreqHI , FreqLO,
+ name_in_unicode,[0x55,0x55] - if name_length is odd}
+ where frequency = (0xffff + FreqHi * 0x100 + FreqLo) kHz
+
+ r Get FM Station { 0x16, 0x05, 0x06 } - if entry is empty
+
+ 0x42:
+ s ???? {+00 |07 |00 |01 |00 |02}
+ r ???? {+07 |2d-|00 |02 |06 |02 |00 |02 |00 |01 |02 |08 |00 |0c |07 |d1 |00 |00}
+
+ 0x42:
+ s Get ??? {+0x00, 0x07, 0x02, 0x01, 0x00, 0x01 }
+ r Get ??? { 02 |06 |02 |00 |02 |00 |01 |02 |08 |00 |0c |07 |d1 |00 |00}
+ s Get original IMEI ? {+0x00, 0x07, 0x02, 0x01, 0x00, 0x01 }
+ r Get original IMEI ? { 0x02, 0x06, 0x01, 0x01, 0x00, 0x01, 0x01, 0x18, 0x01, 0x00, IMEI, 0x00, 'U' }
+ s Get ??? {+0x00, 0x07, 0x03, 0x01, 0x00, 0x02 }
+ r Get ??? { 02 |06 |02 |00 |02 |00 |01 |02 |08 |00 |0c |07 |d1 |00 |00}
+ s Get ??? {+0x00, 0x07, 0x04, 0x01, 0x00, 0x10 }
+ r Get ??? { 02 |06 |10 |00 |10 |00 |01 |05 |08 |00 |00 |00 |00 | 00 |00}
+ s Get ??? {+0x00, 0x07, 0x05, 0x01, 0x00, 0x08 }
+ r Get ??? { 02 |06 |08 |00 |08 |00 |01 |04 |08 |00 |00 |00 |00 | 00 |00}
+ s Get ??? {+0x00, 0x07, 0x06, 0x01, 0x00, 0x20 }
+ r Get ??? { 02 |06 |20 |00 |20 |00 |01 |06 |04 |03 |00}
+
+ 0x43:
+ s ???? {+00 |08 |00 |01 |00 |00 |00 |00 |00, x}
+ where x = 0x01, 0x02, 0x04, 0x08, 0x10
+ r ???? {+08 |1f |y |02 |00 |00 |00 |00 }
+ where y = 0 - 0x04
+ s ??? {+00 |08 |05 |01 |00 |00 |00 |00 |00 |20}
+ r ??? {+08 |1f |05 |02 |00 |00 |00 |00}
+
+ 0x45: PHONEBOOK HANDLING ????
+ the same to msg 0x03 ????
+
+ 0x53:
+ s Get simlock info {0x0C}
+
+ 0x55: TODO
+ s Get TODO {0x03, 0x00, 0x00, 0x80, location low, location hi}
+ r Get TODO {0x04, .... }
+ s Get number of TODO {0x07}
+ r Get number of TODO {0x08, number lo, number hi}
+ s Delete all TODO {0x11}
+ r Delete all TODO {0x12}
+ s Get TODO locations {0x15, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}
+ r Get TODO locations {0x16, ...}
+
+ 0x7a: STARTUP
+
+ s Get startup logo { 0x02, 0x0f }
+ r Get startup logo { 0x03, 0x0f, 0x00[4], # blocks,
+ 0xc0, 0x02, height (2 octets),
+ 0xc0, 0x03, width (2 octets),
+ 0xc0, 0x04, size (2 octets),
+ picture }
+
+ s Get startup greeting { 0x02, 0x01, 0x00 }
+ r Get startup greeting { 0x03, 0x01, 0x00, greeting (unicode), 0x00 }
+
+ s Get anykey answer { 0x02, 0x05, 0x00 }
+ r Get anykey answer { 0x03, 0x05, 0x00, 0x00/0x01 }
+
+ 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." }
diff --git a/docs/manual/protocol/n7110.rst b/docs/manual/protocol/n7110.rst
new file mode 100644
index 0000000..409de6e
--- /dev/null
+++ b/docs/manual/protocol/n7110.rst
@@ -0,0 +1,717 @@
+Nokia 7110
+==========
+
+
+Assembled by
+Balazs Nagy <js@iksz.hu>
+Marcin Wiacek <Marcin@MWiacek.com>
+Jens Bennfors <jens.bennfors@ing.hj.se>
+Michael Hund <michael@drhund.de>
+Jay Bertrand <jay.bertrand@libertysurf.fr>
+Gabriele Zappi <gzappi@inwind.it>
+Markus Plail <plail@web.de>
+Ralf Thelen <ralf@mythelen.de>
+Walek <walek@pa98.opole.sdi.tpnet.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 Nokia 6210 and derivatives (7110)
+
+Correct format is FBUS version 2/Infrared/MBUS version 2
+(see nokia.txt for protocol details):
+
+List::
+
+ 0x00: Connect to NBS port ?
+ r Set ringtone {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0}
+ Seems not to work in MBUS!
+ 0x01: Communication Status
+ ? r Call 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" }
+ ? r answered call { 0x0007, seqnr }
+ ? r terminated call { 0x0009, seqnr }
+ ? r call msg { 0x000a, seqnr }
+ Note: in 6210 4.27 all msg from 0x01 seems to be unavailable
+ 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 Incoming SMS info on { 0x000d, 0x00, 0x00, 0x02}
+ note: no info about Delivery Reports
+ r Incoming SMS info onOK{ 0x000e }
+ note: no info about Delivery Reports
+ r Incoming SMS infoonerr{ 0x000f, error }
+ where error: 0x0c - no PIN
+ r SMS message received { 0x0011, ...... } (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?, format,
+ validity[2], {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: 0x000b: 1 hour
+ 0x0047: 6 hours
+ 0x00a7: 24 hours
+ 0x00a9: 72 hours
+ 0x00ad: 1 week
+ 0x00ff: 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?, type,
+ validity[2], {DefaultRecipient no.}[12],
+ {SMScenter no.}[12], {SMSC name}, 0x00 }
+ where priority, checksum, type, validity,
+ tel.no.[12]: see 0x02/0x0030
+ r SMS center error recv { 0x0035, reason }
+ s?? { 0x0074}
+ r?? { 0x0075, 0xFF, 0x11, 0x98}
+ s?? { 0x008C}
+ r?? { 0x008D, 0x00}
+ 0x03: Phonebook functions
+ s Get memory status { 0x0103, 0x02, memory type }
+ where: memory type - see 0x03/0x0107
+ r Get memory status { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10,
+ 0x00[2], z?, ymaxH, ymaxL, y2H, y2L,
+ 0x0d?, xH?, 0x00[2]? }
+ where y1: location (lowermost)
+ y2: no. of locations
+ ymax: maximum location no.
+ s Read memory { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL,
+ yH, yL, 0x00, 0x00}
+ where x: memory type
+ 0x01: (256) Dialled numbers
+ 0x02: (512) Missed calls
+ 0x03: (768) Received calls
+ 0x05: (500) telephone phonebook
+ 0x06: (160) SIM phonebook
+ 0x07: (10/0)
+ 0x08: (1/0)
+ 0x09: (4) voice mailbox
+ 0x0e: (10) speed dials
+ 0x10: (5) caller groups
+ y: location
+ r Read memory error { 0x0108, 0x00, 0x01,
+ code,0x00, 0x00, z, error}
+ where code==0x0f
+ error: 0x34 - phonebook location not found
+ 0x3b - speed dial not assigned
+ r Read memory OK { 0x0108, 0x00, 0x01,
+ code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * }
+ where code: != 0x0f
+ y: location
+ z: generic block size
+ block: {id, 0, 0, blocksize, block no.,
+ {contents}, 0x00}
+ id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] }
+ 0x07 name {len, (unicode)},
+ 0x08 email
+ 0x09 postal
+ 0x0a note {len, (unicode)}
+ 0x0b number {type, 0x00[3], len, (unicode)}
+ 0x0c ringtone {ringtone no., 0, 0}
+ 0x13 date for a called list (DC, RC, etc.)
+ 0x1b caller group graphic {width, height, 0, 0 {bitmap}}
+ 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0}
+ 0x1e caller group number {number, 0, 0}
+ type: 0x0a: General,
+ 0x03: Mobile (office ?),
+ 0x06: Work,
+ 0x04: Fax,
+ 0x02: Home (mobile ?)
+ s Set mem location { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z,
+ xH, xL, yH, yL, 0x00, 0x00, 0x00,
+ no.of blocks, { block }[no.of blocks] }
+ r Set mem location { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?,
+ yH, yL, xL }
+ where code:
+ 0x3d - wrong entry type
+ 0x3e - too many entries
+ s Delete mem location { 0x010f, 0x00, 0x01, 0x04, 0x00, 0x00, 0x0c, 0x01, 0xff, xH, xL,
+ yH, yL, 0x00, 0x00}
+ where x: location
+ y: memory type
+ r Delete mem location { 0x0110, 0x00, 0x00 }
+ 0x06: Calling line restriction/Call forwarding etc
+ 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
+ 0x14: 20 second
+ 0x19: 25 second
+ 0x1e: 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
+ r Deactivate calldiverts{ 0x0002, 0x04, 0x00, divtype, 0x02, calltype, data }
+ s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }
+ where divtype, calltype: see above
+ r Get call diverts ok { 0x0002, 0x05, 0x00, divtype, 0x02, calltype, data }
+ where divtype, calltype: see above
+ data: { 0x01, 0x00 } - isn't active
+ { 0x02, 0x01, number(packed like in SMS), 0x00, 0x00..., timeout }
+ r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)}
+ r Call diverts active { 0x0006, ??? }
+ 0x0a: Network status
+ s get used network { 0x0070 }
+ r get used network { 0x0071, available,?,?,length,netstatus,netsel,cellIDH,
+ cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?,
+ len, xlen(78), ylen(21), 0, {bitmap} }
+ where {Opstr}: namelen, {operator name(unicode)}
+ len: {xlen, ylen, 0, {bitmap} + 2
+ {bitmap}: bitmaplen, 0, 0, {OTA bitmap}
+ available: 0x02 if the logo following is valid,
+ 0x01 for no operator logo following
+ s get network status { 0x0081 }
+ r get network status { 0x0082, network%, 0x14? }
+ s set operator logo { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len,
+ xlen(78),ylen(21), 0 (frames?),
+ {bitmap}*?, 0x00(padding) }
+ where len, {bitmap}: see 0x0a/0x0071
+ r set operator logo OK { 0x01a4 }
+ s clear operator logo { 0x00af, x}
+ where x==0 to 4
+ r clear operator logo { 0x00bf}
+ 0x13: Calendar notes
+ s Add meeting note { 0x0001, body like in subtype 0x001a...}
+ r Add meeting note { 0x0002, location (2 bytes), status (2 bytes)}
+ s Add call note { 0x0003, body like in subtype 0x001a...}
+ r Add call note { 0x0004, location (2 bytes), status (2 bytes)}
+ s Add birthday note { 0x0005, location (2 bytes), entry type, 0x00, year of birth(2 bytes),
+ Month, Day, 0x00, 0x00, alarm (4 bytes), alarm type, length, text (Unicode)}
+ r Add birthday note { 0x0006, location (2 bytes), status (2 bytes)}
+ s Add reminder note { 0x0007, body like in subtype 0x001a...}
+ r Add reminder note { 0x0008, location (2 bytes), status (2 bytes)}
+ s Delete calendar note { 0x000b, location (2 bytes) }
+ r Delete calendar note { 0x000c, location (2 bytes), ?, ?, ?, ? }
+ s Get calendar note { 0x0019, location (2 bytes) }
+ r Calendar note recvd { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block}
+ where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder
+ block: for Meeting:{hour,minute,alarm (two bytes),recurrence (two bytes),len,0x00,string(unicode)}
+ where alarm=Number of minutes before the time of the meeting
+ that the alarm should be triggered:
+ For meetings with "No alarm"=0xFFFF (-1).
+ For "On time"=0x0000
+ half an hour=0x001E, and so on.
+ Recurrence=in hours, between future occurrences of this meeting.
+ If there is no repeat, this value is 0x0000. The special value 0xffff
+ means 1 Year!
+ for Call:{Hour,Minute,Alarm (as above),Recurrence (as above),namelen,numberlen,
+ name(unicode),number(unicode)}
+ for Reminder:{Recurrence (as above),len,0x00,string(unicode)}
+ for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)}
+ byte1 and byte2 may vary (???). Usually are 0x00 both (but not always)
+ In Birthday, the Year in the common part, usually contains a strange year.
+ So, don't consider it as Year of note, neither year of BirthDay (for Year of
+ Birthday use the value described below).
+ where alarm=32-bit integer that is the number of seconds between the desired
+ alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is
+ 0x0000FFFF (65535).
+ YearOfBirth=used instead of the one in the common part of the entry (see above)
+ but only when reading birthday entries. For storing entries, this field does
+ not exist.
+ AlarmType: 0x00 - Tone, 0x01 - Silent
+ ? s??? { 0x0021 }
+ ? r??? { 0x0022, 0x5A, 0x00 }
+ ? s??? { 0x0025 }
+ ? r??? { 0x0026, 0x04, 0x00 }
+ ? s { 0x0029 }
+ ? r { 0x002A, 0x04, 0x00 }
+ s Get first free pos { 0x0031 }
+ r Get first free pos { 0x0032, location (2bytes) }
+ s Get notes info { 0x003a, 0xFF, 0xFE}
+ r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *}
+ ? s Get calendar note?? { 0x003E, location (2 bytes) }
+ ? r Get calendar note?? { 0x003F, location (2bytes), ... }
+ 0x14:
+ s Get Picture Image { 0x0007, location, number[2 bytes], 0x00, 0x64 }
+ r Get Picture Image { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38],
+ width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...}
+ r Get SMS failed { 0x0009, 0x02 },
+ s Get SMS status { 0x0036, 0x64 }
+ r Get SMS Status { 0x0037, 0x05/0x03, 0x01, 0x00, 0x00,
+ a (2 octets), b (2 octets), c (2 octets),
+ d (2 octets), e (2 octets), 0x00
+ where:
+ a - according to P.Kot:
+ Number of locations in "fixed" memory. These are all
+ Templates entries in my Nokias 6210 (NPE-3 (c) NMP V05.36
+ 14-11-01, NPE-3 (c) NMP V05.27 01-08-01).
+ I can't remove any of Templates entries in my phone.
+ Marcin Wiącek: Rather not ! I don't agree.
+ I have 0x00, 0x0f and 10 templates and 3 SMS
+ and 10 Picture Images.
+ b - Number of used messages in phone memory. These
+ are messages manually moved from the other folders.
+ Picture messages are saved here.
+ c - Number of unread messages in phone memory. Probably
+ only smart msssages.
+ d - Number of used messages in SIM memory. These are
+ either received messages or saved into Outbox/Inbox.
+ Note that you *can't* save message into this memory
+ using 'Move' option. Picture messages are not here.
+ e - Number of unread messages in SIM memory
+
+ s Set Picture Image { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38],
+ width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...}
+ std. size: 72x28
+ r Set Picture Image { 0x0051, location, number[2 bytes], 0x07 }
+ s Set SMS name { 0x0083,folder,location(2bytes),name(Unicode),0x00 , 0x00}
+ r Set SMS name { 0x0084,folder,0x00, 0x00, name (Unicode),0x00,0x00}
+ s List Picture Images { 0x0096, location, 0x0f, 0x07 }
+ where location:
+ LM tries with 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39, 0x41, 0x49
+ Returned value with 0x21
+ r List Picture Images { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., }
+ s Write SMS to folder { 0x0104, status, folder ID, location(2 bytes), 0x02, 0x01, SMS stuff ... }
+ r Write SMS to folder { 0x0105, folder ID, location(2 bytes), 0x00 }
+ r Write SMS to folder { 0x0106, 0x02 (write failed errorcode ?) }
+ s Get SMS from folder { 0x0107, folderID, location(2 bytes), 0x01, 0x65, 0x01}
+ where: folderID - see 0x14/0x017B
+ r Get SMS from folder { 0x0108, status, folderID, 0x00, location, type, sender number,...}
+
+ where: status=0x01 - reveived/read
+ 0x03 - received/unread
+ 0x05 - stored/sent
+ 0x07 - stored/not sent
+
+ where: folderID - see 0x14/0x017B
+
+ where: type=0x00 - received SMS
+ 0x01 - delivery report
+ 0x02 - stored SMS
+ 0x07 - picture message
+ s Delete SMS message { 0x010a, folderID, location(2 bytes), 0x01 }
+ r Delete SMS { 0x010b }
+ s Get folder status { 0x016b, folderID, 0x0F, 0x01}
+ where: folderID - see 0x14/0x017B
+ r Get folder status { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....}
+ s Get folder names { 0x017A, 0x00, 0x00}
+ r Get folder names { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...}
+ where: folderID=0x08 - Inbox
+ 0x10 - Outbox
+ 0x18 - Archive
+ 0x20 - Templates
+ 0x29 - first "My folders"
+ 0x31 - second "My folders"
+ 0x39 - third -"-
+ and so on
+ 0x17:
+ s Get Battery info { 0x0002 }
+ r Get Battery info { 0x0003, 0x0b, batt%, 0x14?, 0x01? }
+ 0x19: Phone clock & alarm
+
+ These frames are like the same frames subtypes in 0x11 in 6110
+
+ 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 }
+
+ These are new (?)
+
+ ? s ?? { 0x0083, id }
+ ? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 }
+ ? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 }
+ ? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 }
+ where: id=0x27,0x2a,0x32,0x28,0x40
+ 0x1b:
+ s Get IMEI { 0x0001 }
+ r Get IMEI { 0x0002, {IMEI(ASCII)}, 0x00 }
+ s get HW&SW version { 0x0003, 0x01, 0x32 }
+ r get HW&SW version { 0x0004, "V " "firmware\n" "firmware date\n"
+ "model\n" "(c) NMP." 0x00 0xff[14] }
+ 0x1f:
+ s ??? { 0x0010, 0x02, 0x00, 0xff, 0xff }
+ r ??? { 0x0011, length, 0x00, {block}[length] }
+ where block: { unicode letter[2], 0x0000,
+ 0x00, 0x55, ??, ?? }
+ s Set ringtone { 0x011f, 0x00, location, 0x00, name(Unicode),
+ ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) }
+ where: location: 0x87 to 0x8b on N6210
+ 0x74 to ... on N7110
+ s Get ringtone { 0x0122, 0x00, location}
+ r Get ringtone { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)}
+ r Get ringtone error { 0x0124, ...}
+ 0x39:
+ s get profile feature { 0x0101, 0x01, 0x01, 0x01, number1, number2}
+ where number1: from 0x00 to 0x07 (for each profile ?)
+ number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff
+ where 0x09: keypad tones 0x02: incoming call alert 0x03: ringtone number
+ 0x04: ringing volume
+ 0x05: message alert tone 0x06: vibra 0x07: warning tones 0x08: caller groups alert for 0x09: automatic answer
+ 0xff: name
+ r get profile feature { 0x0102, 0x01, 0x02, number2, block...}
+ for number2==0xff: (Profile Name)
+ block: 0x01, length, name(Unicode), 0x00, 0x00
+ for number2==0x00: (Keypad Tones)
+ block: 0x01, 0x01, 0x01, Type, 0x01
+ where: Type : 0x00 = Off
+ 0x01 to 0x03 = Level1 .. Level3
+ for number2==0x02: (Incoming Call Alert)
+ block: 0x01, 0x01, 0x01, Type, 0x01
+ where: Type : 0x00 = Ringing
+ 0x01 = Ascending
+ 0x02 = Ring Once
+ 0x03 = Beep Once
+ 0x05 = Off
+ for number2==0x03: (Ringtone Number)
+ block: 0x01, 0x01, 0x01, Number, 0x01
+ where: Number : 0x40 to 0x62 - gives number of factory ringtone. The number of menu is
+ obtained by doing (Number - 0x3f);
+ where: Number : 0x89 to 0x8d - gives number of uploaded ringtone. The number of menu is
+ obtained by doing (Number - 0x65),while the uploaded ringtone number is
+ obtained by doing (Number - 0x88).
+ for number2==0x04: (Ringing volume)
+ block: 0x01, 0x??, 0x??, Volume, 0x01
+ where: Volume : 0 = Level1 .. to 4 = Level5
+ for number2==0x05: (Message Alert Tone)
+ block: 0x01, 0x01, 0x??, Type, 0x01
+ where: Type : 0x00 = Off
+ 0x01 = Standard
+ 0x02 = Special
+ 0x03 = Beep Once
+ 0x04 = Ascending
+ for number2==0x06: (Vibration)
+ block: 0x01, 0x??, 0x??, Switch, 0x01
+ where: Switch : 0 = Off, 1 = On
+ for number2==0x07: (Warning Tones)
+ block: 0x01, 0x??, 0x??, Switch, 0x01
+ where: Switch : 0 = Off, 1 = On
+ for number2==0x08: (Caller groups Alert for)
+ block: 0x01, 0x??, 0x??, Callers, 0x01
+ where: Callers : 0xff = All calls alert (Read below *)
+ 0x01 = Family
+ 0x02 = VIP
+ 0x04 = Friends
+ 0x08 = Colleagues
+ 0x10 = Others
+ All logical OR among groups are valid, so if you select from one phone's profile
+ alert for Friends and Colleagues, a 0x0c will return (because 0x04 OR 0x08 = 0x0c).
+ (*) If Callers==0xff, means "Alert for All calls". Then, in this case, you don't
+ need to read other groups selection.
+ for number2==0x09: (Automatic answer)
+ block: 0x01, 0x??, 0x??, Switch, 0x01
+ where: Switch : 0 = Off, 1 = On
+ N.B. This feature is valid for Handsfree and Headset profiles only!
+ s ??? { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 }
+ r ??? { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 }
+
+ s ? { 0x0105}
+ r ? { 0x0106, 0x01, 0x04}
+ 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 ???(N6150) { 0x08, 0x00 }
+ ? r ???(N6150) { 0x08 }
+ s Enable extended cmds { 0x64, cmd }
+ where cmd: 0x00: off
+ 0x01: on
+ 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!
+ s Reset phone settings { 0x65, value, 0x00 }
+ where value: 0x08 - reset UI (User Interface) settings
+ 0x38 - reset UI, SCM and call counters
+ 0x40 - reset test 36 in netmonitor
+ 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 (no allowed code !)
+ r Get code { 0x6e, code, allowed, allowed? (sec code (text)) }
+ where code: see 0x08/0x0004
+ allowed: 0: no
+ 1: yes
+ ? s ???? { 0x74, 0x01, 0x01, 0x0e }
+ ? r ???? { 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
+ 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 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 ???(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, ?}
+ r Function of { 0xff, 0x8c }
+ 0x40 msgtype not
+ supported ?
+ 0x78:
+ s Status confirm { 0x0201, 0x03 }
+ r Incoming call seq1 { 0x0102 0x0e 0x03 }
+ r Incoming call seq2 { 0x0102 0x7e 0x01 }
+ 0x79:
+ s CarKit enable { 0x0201 0x01 0x62 0x00 }
+ r CarKit enabled { 0x0201 0x02 0x06 0x00 "V " {version} "\nHFU"
+ 0x00 }
+ 0x7a: settings
+ r Set setting { 0x01eb, number, 0x00 }
+ s Set setting { 0x01ec, number, contents }
+ where for number:
+ 0x02 (startup text) : 0x00, text (Unicode)
+ 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04,
+ 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width,
+ 0xc0, 0x04, 0x03, 0x00, {bitmap} }
+ where width, height, {bitmap}: see 0x7a/0x01ed 0x15
+ s Get setting { 0x01ee, number}
+ where number: 0x01 - 0x1e
+ 0x02: startup text
+ 0x15: startup logo
+ 0x1c: security code
+ r Get setting { 0x01ed,number, 0x00, contents}
+ where for number:
+ 0x02 (startup text) : 0x00, text (Unicode)
+ 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04,
+ 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width,
+ 0xc0, 0x04, 0x03, 0x00, {bitmap} }
+ where height: 60 (0x3c) or 65
+ width: 96 (0x60)
+ {bitmap}: like other bitmaps but pixels
+ placed vertically.
+ 0x1c (security code): {code(ascii)}, 0x00
+ 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." }
+ 0xf4: Power on message seq 2
diff --git a/docs/manual/protocol/nokia-s40-sms-scratch.txt b/docs/manual/protocol/nokia-s40-sms-scratch.txt
new file mode 100644
index 0000000..485d3e8
--- /dev/null
+++ b/docs/manual/protocol/nokia-s40-sms-scratch.txt
@@ -0,0 +1,151 @@
+10:
+
+\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x01\x91
+\x00[\x00B\x00u\x00g\x00 \x002\x001\x003\x006\x003\x009\x00]\x00 \x00R\x00e\x00:\x00 \x00P\x00r\x00o\x00b\x00l\x00e\x00m\x00 \x00w\x00i\x00t\x00h\x00 \x00I\x00D\x00E\x00 \x00D\x00V\x00D\x00-\x00R\x00W\x00\x00
+\x00b\x00i\x00g\x00l\x00@\x00a\x00f\x00f\x00.\x00c\x00o\x00m\x00.\x00p\x00l\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01
+
+\x00\xde
+
+\x01\x00\x01\x00
+\x08\x00\x01\x00
+\x0e\x00\x01\x00
+\x0b\x00\x01\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x09\x00\x04\x00\x00\x00\x00
+\x27\x00\x01\x00
+\x23\x00\x04\x00\x00\t\xa6
+\x26\x00\x01\x00
+\x04\x00 \x00b\x00i\x00g\x00l\x00@\x00a\x00f\x00f\x00.\x00c\x00o\x00m\x00.\x00p\x00l\x00\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x12\x00\x045\xean\xd2
+\x24\x00\x01\x00
+\x04\x006\x00r\x00u\x00s\x00l\x00a\x00n\x00.\x00l\x00e\x00v\x00i\x00t\x00s\x00k\x00i\x00y\x00@\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x12\x00\x045\xean\xd2
+\x24\x00\x01\x01
+\x22\x00\x01\x84
+\x25\x00\x0e\x00L\x00e\x00s\x00z\x00e\x00k\x00\x00
+\x00\x17GmailId11c13012913d0af7
+
+06:
+
+\x00\x02\x00\x01\x00\x00\x00\x16\x00\x00\x01\x20
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
+
+\x004\x002\x000\x002\x002\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x05\x81$ \xf2\x00\x00\x80!\x02\x02\x002@\x06\xb4Z\xadVS\x00
+
+\x01\x00W
+
+\x01\x00\x01\x00
+\x02\x00\x0e+393492000200\x00
+\x03\x00\x0e\x004\x005\x005\x005\x005\x00\n\x00\x00
+\x04\x00\x0c\x004\x002\x000\x002\x002\x00\x00
+\x0c\x00\x01\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x08\x00\x01\x02
+\x0b\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
+
+08:
+
+\x00\x02\x00\x01\x00\x00\x00B\x00\x00\x01\xd7
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x00c\x00h\x00i\x00b\x00o\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
+
+\x04\x0b\xd0\xd41:-~\x03\x00\x00\x90P\x81"\x10#\x805\xc8\xb2\\\xcfN\x8f\xd1\xa0k\x9a\xcd^\xbf\xdb\xed\xb2\x1b$.\xa7AI\xb4\xbc\xdc\x06Q\xc7\xe8\xb4\xf8\rj\xbe\xc5i\xb6\xb9\xee^\xb7\xa8ay\xda\xec\x02
+
+\x01\x00\xe2
+
+\x01\x00\x01\x00
+\x08\x00\x01\x00
+\x0e\x00\x01\x00
+\x0b\x00\x01\x00
+\x0f\x00\x02\x00\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x09\x00\x04\x00\x00\x00\x00
+\x27\x00\x01\x00
+\x2A\x00\x01\x00
+\x23\x00\x04\x00\x00\x00\x00
+\x26\x00\x01\x00
+\x03\x00l\x00H\x00e\x00r\x00z\x00l\x00i\x00c\x00h\x00 \x00W\x00i\x00l\x00l\x00k\x00o\x00m\x00m\x00e\x00n\x00 \x00b\x00e\x00i\x00 \x00I\x00h\x00r\x00e\x00m\x00 \x00T\x00c\x00h\x00i\x00b\x00o\x00 \x00M\x00o\x00b\x00i\x00l\x00f\x00u\x00n\x00k\x00-\x00T\x00a\x00r\x00i\x00f\x00.\x00\x00
+
+\x02\x00\x0e+491760000443\x00
+\x04\x00\x01\x00
+\x2b\x00\x0e\x00T\x00c\x00h\x00i\x00b\x00o\x00\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x12\x00\x04\x00\x00\x00\x00
+\x24\x00\x01\x00
+\x22\x00\x01\x00
+
+07:
+
+\x00\x02\x00\x01\x00\x00\x00>\x00\x00\x01\x4c
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
+
+\x8c\x84\x8d\x92\x8bmejhkyee1lz9e6hc16\x00\x85\x04I\x89i)\x84\x83Failed to retrieve the message
+
+\x01\x00[
+
+\x01\x00\x01\x00
+\x0b\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
+\x03\x00>\x00F\x00a\x00i\x00l\x00e\x00d\x00 \x00t\x00o\x00 \x00r\x00e\x00t\x00r\x00i\x00e\x00v\x00e\x00 \x00t\x00h\x00e\x00 \x00m\x00e\x00s\x00s\x00a\x00g\x00e\x00\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x08\x00\x01\x00
+
+05:
+
+\x00\x02\x00\x01\x00\x00\x00\x9f\x00\x00\x02\x51
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+\x003\x009\x003\x003\x003\x003\x003\x003\x001\x000\x005\x008\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
+
+D\x0c\x91\x93#h(\x01\x85\x00\x08\x80\x90\x032!\x10\x80\x8c\x05\x00\x03\xe3\x02\x01\x00P\x00e\x00z\x00z\x00o\x00 \x00d\x00i\x00 \x00z\x00u\x00l\x00\xfa\x00 \x00m\x00a\x00 \x00k\x00e\x00.\x00.\x00n\x00n\x00 \x00s\x00i\x00 \x00r\x00i\x00s\x00p\x00o\x00n\x00d\x00e\x00 \x00p\x00i\x00\xf9\x00 \x00a\x00i\x00 \x00m\x00e\x00s\x00s\x00a\x00g\x00i\x00?\x00!\x00 \x00C\x00a\x00g\x00a\x00t\x00i\x00.\x00 \x00B\x00u\x00o\x00n\x00a\x00
+
+\x01\x00\xff
+
+\x01\x00\x01\x00
+\x02\x00\x0e+393205956111\x00
+\x03\x00\xa6\x00P\x00e\x00z\x00z\x00o\x00 \x00d\x00i\x00 \x00z\x00u\x00l\x00\xfa\x00 \x00m\x00a\x00 \x00k\x00e\x00.\x00.\x00n\x00n\x00 \x00s\x00i\x00 \x00r\x00i\x00s\x00p\x00o\x00n\x00d\x00e\x00 \x00p\x00i\x00\xf9\x00 \x00a\x00i\x00 \x00m\x00e\x00s\x00s\x00a\x00g\x00i\x00?\x00!\x00 \x00C\x00a\x00g\x00a\x00t\x00i\x00.\x00 \x00B\x00u\x00o\x00n\x00a\x00 \x00n\x00o\x00t\x00t\x00e\x00!\x00:\x00-\x00P\x00 \x00e\x00h\x00 \x00e\x00h\x00\x00
+\x04\x00\x1c\x00+\x003\x009\x003\x002\x008\x006\x008\x002\x001\x000\x005\x008\x00\x00
+\x0c\x00\x01\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x08\x00\x01\x00
+\x0b\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
+\x00
+\x0b\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
+
+03:
+
+\x00\x02\x00\x01\x00\x00\x00\x71\x00\x00\x02\x48
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x39\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03\x81\x95\xF5\x00\x00\x70\x40\x41\x70\x24\x43\x80\x6F\xD6\x37\x39\x6C\x7E\xBB\xCB\xA0\x66\x79\x3E\x2F\xBB\xCF\x65\xB9\x0B\x04\x0D\xCB\xC3\xA0\xF1\xDB\x5D\x1E\xD3\xC3\x72\x7A\x19\x44\x2E\xCF\xC9\x65\x50\x99\x0D\x1A\xB2\xD3\x65\x37\xBD\x0C\x82\x0E\x41\xF4\x3A\x28\x49\x04\x91\xCB\xA0\x66\x79\x3E\x2F\xBB\xCF\x65\x39\xA8\x3C\xD7\x81\xCA\x73\x98\x0C\x16\x93\xC1\x6A\x33\x50\x1E\x44\xAF\x83\xC6\xEC\xB0\xBD\x0C\x2A\xCF\x75\xA0\x99\x0D\x76\xCB\xB9\x00\x01\x01\x24
+\x01\x00\x01\x00
+\x02\x00\x0D\x2B\x33\x34\x36\x30\x37\x30\x30\x33\x31\x31\x30\x00
+\x03\x00\xE0\x00\x56\x00\x6F\x00\x64\x00\x61\x00\x66\x00\x6F\x00\x6E\x00\x65\x00\x20\x00\x4D\x00\x65\x00\x73\x00\x73\x00\x65\x00\x6E\x00\x67\x00\x65\x00\x72\x00\x2E\x00\x20\x00\x50\x00\x61\x00\x72\x00\x61\x00\x20\x00\x63\x00\x6F\x00\x6E\x00\x65\x00\x63\x00\x74\x00\x61\x00\x72\x00\x74\x00\x65\x00\x20\x00\x64\x00\x65\x00\x73\x00\x64\x00\x65\x00\x20\x00\x65\x00\x6C\x00\x20\x00\x43\x00\x6C\x00\x69\x00\x65\x00\x6E\x00\x74\x00\x65\x00\x20\x00\x50\x00\x43\x00\x20\x00\x74\x00\x75\x00\x20\x00\x49\x00\x44\x00\x20\x00\x64\x00\x65\x00\x20\x00\x4D\x00\x65\x00\x73\x00\x73\x00\x65\x00\x6E\x00\x67\x00\x65\x00\x72\x00\x20\x00\x65\x00\x73\x00\x3A\x00\x20\x00\x65\x00\x73\x00\x30\x00\x32\x00\x30\x00\x31\x00\x32\x00\x30\x00\x35\x00\x33\x00\x20\x00\x79\x00\x20\x00\x74\x00\x75\x00\x20\x00\x63\x00\x6C\x00\x61\x00\x76\x00\x65\x00\x20\x00\x65\x00\x73\x00\x3A\x00\x20\x00\x33\x00\x36\x00\x30\x00\x37\x00\x39\x00\x2E\x00\x00
+\x04\x00\x08\x00\x35\x00\x39\x00\x35\x00\x00\x0C\x00
+\x01\x00\x07\x00\x01\x00\x05\x00\x01\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x08\x00\x01\x00
+\x0B\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
+
+
+\x00\x02\x00\x01\x00\x00\x00q\x00\x00\x02\x48
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x005\x009\x005\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03\x81\x95\xf5\x00\x00p@Ap$C\x80o\xd679l~\xbb\xcb\xa0fy>/\xbb\xcfe\xb9\x0b\x04\r\xcb\xc3\xa0\xf1\xdb]\x1e\xd3\xc3rz\x19D.\xcf\xc9eP\x99\r\x1a\xb2\xd3e7\xbd\x0c\x82\x0eA\xf4:(I\x04\x91\xcb\xa0fy>/\xbb\xcfe9\xa8<\xd7\x81\xcas\x98\x0c\x16\x93\xc1j3P\x1eD\xaf\x83\xc6\xec\xb0\xbd\x0c*\xcfu\xa0\x99\rv\xcb\xb9\x00\x01\x01$
+\x01\x00\x01\x00
+\x02\x00\0x0d+34607003110\x00
+\x03\x00\xe0\x00V\x00o\x00d\x00a\x00f\x00o\x00n\x00e\x00 \x00M\x00e\x00s\x00s\x00e\x00n\x00g\x00e\x00r\x00.\x00 \x00P\x00a\x00r\x00a\x00 \x00c\x00o\x00n\x00e\x00c\x00t\x00a\x00r\x00t\x00e\x00 \x00d\x00e\x00s\x00d\x00e\x00 \x00e\x00l\x00 \x00C\x00l\x00i\x00e\x00n\x00t\x00e\x00 \x00P\x00C\x00 \x00t\x00u\x00 \x00I\x00D\x00 \x00d\x00e\x00 \x00M\x00e\x00s\x00s\x00e\x00n\x00g\x00e\x00r\x00 \x00e\x00s\x00:\x00 \x00e\x00s\x000\x002\x000\x001\x002\x000\x005\x003\x00 \x00y\x00 \x00t\x00u\x00 \x00c\x00l\x00a\x00v\x00e\x00 \x00e\x00s\x00:\x00 \x003\x006\x000\x007\x009\x00.\x00\x00
+\x04\x00\x08\x005\x009\x005\x00\x00
+\x0c\x00\x01\x00
+\x07\x00\x01\x00
+\x05\x00\x01\x00
+\x06\x00\x04\x00\x00\x00\x00
+\x08\x00\x01\x00
+\x0b\x00\x01\x00
+\x09\x00\x04\x00\x00\x00\x00
diff --git a/docs/manual/protocol/nokia-s40-sms.rst b/docs/manual/protocol/nokia-s40-sms.rst
new file mode 100644
index 0000000..4ee56ae
--- /dev/null
+++ b/docs/manual/protocol/nokia-s40-sms.rst
@@ -0,0 +1,74 @@
+Nokia S40 filesystem SMS format
+===============================
+
+This text is work in progress and does not claim to be correct or accurate. It
+is solely based on Gammu dumps received from users. Analysed by Michal Cihar
+<michal@cihar.com>.
+
+File structure
+--------------
+
+- 176 bytes header
+ - at offset 7 is length of PDU data
+ - at offset 94 is stored remote number in unicode
+ - rest is not known
+- PDU data (without SMSC)
+ - here can be sometimes also some failure block, which is not known yet
+- structured data header: 0x01 0x00 <LEN>, where <LEN> is length of rest
+- structured blocks:
+
+Block: <TYPE = byte> <LENGTH = word> <DATA ...>
+
+Blocks
+------
+
+0x01
+ Unknown \x00 / \x01 (maybe received / sent)
+0x02
+ SMSC number, ASCII
+0x03
+ Text, unicode
+0x04
+ Sender, unicode
+0x05
+ Recipient, unicode
+0x06
+ Unknown \x00\x00\x00\x00
+0x07
+ Unknown \x00
+0x08
+ Unknown \x02 / \x00
+0x09
+ Unknown \x00\x00\x00\x00
+0x0a
+ Unknown \x00
+0x0b
+ Unknown \x00
+0x0c
+ Unknown, several values (maybe message reference per number)
+0x0d
+ Unknown \x00\x00
+0x0e
+ Unknown \x00\x00
+0x0f
+ Unknown \x00\x00
+
+
+0x22
+ Unknown \x00
+0x23
+ Unknown \x00\x00\x00\x00
+0x24
+ Unknown \x00
+0x26
+ Unknown \x00
+0x27
+ Unknown \x00
+0x2a
+ Unknown \x00
+0x2b
+ some text (Sender?), unicode
+
+
+To test:
+ - multiple recipients sms
diff --git a/docs/manual/protocol/nokia.rst b/docs/manual/protocol/nokia.rst
new file mode 100644
index 0000000..30efad2
--- /dev/null
+++ b/docs/manual/protocol/nokia.rst
@@ -0,0 +1,317 @@
+Nokia protocols
+===============
+
+Document describing protocol used in Nokia phones.
+
+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.
+
+Last update 23.06.2003
+
+Assembled by
+Balazs Nagy <js@iksz.hu>
+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@MWiacek.com>
+Jens Bennfors <jens.bennfors@ing.hj.se>
+Michael Hund <michael@drhund.de>
+Jay Bertrand <jay.bertrand@libertysurf.fr>
+<arnu@venia.net>
+Andrew Kozin
+Pavel Machek <pavel@ucw.cz>
+Diego Betancor <dbetancor@duocom.net>
+... and other members of gnokii mailing list
+and authors of some WWW pages.
+
+.. 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.
+
+Frame format for MBUS version 1
+-------------------------------
+
+Request from Computer/Answer from Phone::
+
+ { DestDEV, SrcDEV, FrameLength, MsgType, {block}, id, ChkSum }
+
+ where DestDEV, SrcDEV: 0x00: phone
+ 0xf8: PC (wakeup msg)
+ 0xe4: PC (normal msg)
+ FrameLength: length of data frame. Maximal 0x78. Longer
+ frames are divided into smaller.
+ MsgType: see List
+ {block}: main frame
+ id: request identity number 1..n, incremented after
+ the request is accepted
+ ChkSum: XOR on frame's all numbers
+
+Ack from Phone::
+
+ { DestDEV, 0x00, FrameLength, MsgType, {block} , id, ChkSum }
+
+ where DestDEV: taken from original request packet
+ FrameLength: 0x7f, when DestDEV = 0xe4
+ 0x7e, when DestDEV = 0xf8
+ MsgType: see List. Present only, when DestDEV = 0xf8
+ {block}: main frame. Present only, when DestDEV = 0xf8
+ id: request identity number 1..?, corresponding
+ to the original request packet id
+ the request is accepted
+ ChkSum: XOR on frame's all numbers
+
+Update: description above according to the
+http://www.gadgets.demon.co.uk/nokia21xx/protocol.html.
+
+Pavel Machek <pavel@ucw.cz> wrote:
+ 0x7e is actually registration acknowledge. Both have nothing to do
+ with DestDEV, except that special device needs to be used for
+ registration.
+
+Ack from Computer::
+
+ { 0x00, SrcDEV, 0x7f, id, ChkSum }
+
+ where SrcDEV: taken from response packet
+ id: request identity number 1..?, corresponding
+ to the response packet id
+ the request is accepted
+ ChkSum: XOR on frame's all numbers
+
+Port settings:
+ Speed 9600 bps, Bits 8, ParityOdd, Stop Bits 1, DTR and RTS logic 0
+
+In the MBUS bus, the phone has only one connector for transmission and
+reception.
+
+Because of this characteristics of the phone connector, every time that the
+PC writes into the phone it is writing as well into its own Rx. So every
+time the PC sends info into the phone it finds that same information in its
+own Rx buffers, like a mirror copy. This should be discarded.
+
+The communications is made like an old cb radio, only one
+talking at a time. Many transmission are made this way:
+
+* <computer sends request>
+* <phone sends ack>
+* <phone sends response>
+* <computer sends ack>
+
+Some frames are sent from phone without asking for them
+
+You have to implement collision protocol. IE. you should listen for
+what you are transmitting, and if it does not come back, you have
+collision.
+
+You should wait for bus to be free for 3 miliseconds before normal
+message, and for 2.5 miliseconds before acknowledge. You should wait
+for acknowledge for 200 miliseconds, then retransmit.
+
+Frame format for FBUS version 1
+-------------------------------
+
+All frames::
+
+ { FrameID, FrameLength, MsgType, {block}, SeqNo, ChkSum }
+
+ where FrameID: 0x01 Command frame from computer to Nokia
+ 0x02 ??? - Data call frame from computer to Nokia - ???
+ 0x03 Data call frame from Nokia to computer
+ 0x04 Command frame from Nokia to computer
+ FrameLength: {block} + 2
+ MsgType: see List
+ SeqNum: Sequence number of command in case where direction is
+ from ME to computer, the sequence number is
+ counting from 0x30 to 0x37 and resetting back to 0x30.
+ When direction is from computer to ME,
+ sequence number counts from 0x08 to 0x0f and resets back to 0x08.
+ It may not be required to be this way.
+ Sequence numbers are used in acknowledging commands.
+ ChkSum1: CRC = 0;
+ for (i = 0; i < (2 + CMD_LEN); i++)
+ CRC ^= frame[i];
+
+Frame format for FBUS version 2/Direct IRDA
+-------------------------------------------
+
+All frames::
+
+ { FrameID, DestDEV, SrcDEV, MsgType, 0x00, FrameLength, {block}, FramesToGo,
+ SeqNo, PaddingByte?, ChkSum1, ChkSum2 }
+
+ where FrameID: 0x1c: IR / FBUS
+ 0x1e: Serial / FBUS
+ DestDev, SrcDev: 0x00: mobile phone
+ 0x0c: TE (FBUS) [eg. PC]
+ MsgType: see List
+ FrameLength: {block} + 2 (+ 1 if PaddingByte exists)
+ FramesToGo: 0x01 means the last frame
+ SeqNo: [0xXY]
+ X: 4: first block
+ 0: continuing block
+ Y: sequence number
+ PaddingByte: 0x00 if FrameLength would be an odd number
+ anyways it doesn't exists
+ ChkSum1: XOR on frame's odd numbers
+ ChkSum2?: XOR on frame's even numbers
+
+Frame format for MBUS version 2
+-------------------------------
+
+Cable::
+
+ { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLO, FrameLengthHI, {block},
+ SeqNo, ChkSum }
+
+ where FrameID: 0x1f: Serial / M2BUS
+ DestDev, SrcDev: 0x00: mobile phone
+ 0x1d: TE (M2BUS)
+ 0x10: TE (M2BUS) (Service Software ?)
+ 0x04: Carkit?
+ 0x48: DLR3 cable?
+ 0xF8: unknown target?
+ 0xFF: global target?
+ MsgType: see List
+ FrameLength: {block}
+ SeqNo: sequence number
+ ChkSum: XOR on frame's all numbers
+
+Please note that M2BUS has only one checksum: XOR on frame[FrameID..SeqNo]
+
+Ack::
+
+ { FrameID, DestDEV, SrcDEV, 0x7f, Id_SeqNo, ChkSum }
+
+ where Id_SeqNo: Is the sequence number that you are
+ acknowleging (from the other part).
+
+Frame format for Infrared::
+
+ { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLo, FrameLengthHi, {block}}
+
+ where FrameID: 0x14
+ DestDev, SrcDev: 0x00: mobile phone
+ 0x0c: TE [eg. PC]
+ MsgType: see List
+ FrameLength: {block}
+
+Frame format for Bluetooth::
+
+ { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLo, FrameLengthHi, {block} }
+
+ where FrameID: 0x19
+ DestDev, SrcDev: 0x00: mobile phone
+ 0x10: TE [eg. PC]
+ MsgType: see List
+ FrameLength: {block}
+
+Frames list format::
+
+ hex: Short description
+ x msg desc { ... }
+ 0xXX -> one byte
+ 0xXXYY -> two bytes (== 0xXX, 0xYY)
+
+ where hex: message type
+ x: s=send (eg. to mobile), r=receive
+ { ... }: data after 0x00, 0x01 header
+ {+... }: raw data (without header)
+
+Misc (about MBUS version 2)
+---------------------------
+
+0x4E commands
++++++++++++++
+
+(sent from a 5160i TDMA / 6160i TDMA / 6185 CDMA or 7110 GSM
+phone to the uC in the DLR-3 cable)
+
+DLR-3 req:
+
+1F 48 00 4E 00 02 01 XX SQ CS
+
+ frame sent from the phone to the DLR-3 cable
+ (after 15kOhm resistor detected betw. XMIC (3) and DGND (9).)
+ DSR,DCD,CTS flow control data is coded into the 2nd databyte
+
+ XX:
+
+ * bit.0=/CTS
+ * bit.1=/DCD
+ * bit.2=CMD/DATA
+ * bit.3=DSR
+ * bit.4-7=0
+
+0x78 / 0x79 commands
+++++++++++++++++++++
+
+(used by handsfree carkit) Works also on GSM phones (5110 / 6110 / etc)
+
+These commands are used by the Nokia Carkits to switch the phone audio path to
+XMiC and XEAR , turn the phone on/off according to the car ignition, and
+control the PA loudspeaker amplifier in the carkit and the car radio mute
+output which silences the car radio during a call
+
+mute status tone:
+ 1F 04 00 78 00 04 01 02 0E 00 SQ CS
+ status indication = disable carkit audio amplifier (no audio / no tone)
+mute status tone:
+ 1F 04 00 78 00 04 01 02 0E 03 SQ CS
+ status indication = enable carkit audio amplifier (audio / tone present)
+mute status call:
+ 1F 04 00 78 00 04 01 02 07 00 SQ CS
+ status indication = disable radio mute output (no call)
+mute status call:
+ 1F 04 00 78 00 04 01 02 07 01 SQ CS
+ status indication = enable radio mute output (call active)
+enable ???:
+ 1F 04 00 78 00 04 01 02 08 01 SQ CS
+ status indication = enable ??? sent to HFU-2 on power on
+ byte 9 (07,08,0E) seems to be a pointer to a memory location,
+ byte 10 is the data at this memeory location.
+response from HFU:
+ 1F 00 04 78 00 03 02 01 03 SQ CS
+ response message from HFU-2 (use unknown)
+go HF and IGN on:
+ 1F 00 04 79 00 05 02 01 01 63 00 SQ CS
+ enables carkit mode + turns phone on + req. mute status
+go HF and IGN off:
+ 1F 00 04 79 00 05 02 01 01 61 00 SQ CS
+ enables carkit mode + powers phone off (1 min delay) + req. mute status
+ext. HS Offhk:
+ 1F 00 04 79 00 05 02 01 01 23 00 SQ CS
+ enables carkit mode + external handset lifted (OFF-Hook)
+ext. HS Onhk:
+ 1F 00 04 79 00 05 02 01 01 63 00 SQ CS
+ enables carkit mode + external handset put back (ON-Hook)
+ Ignition and Hook are coded into one byte
+
+ * bit.0 = 0:on power on 1:when in operation
+ * bit.1 = IGNITION STATUS
+ * bit.2 = x can be 1 or 0
+ * bit.3 = 0
+ * bit.4 = 0
+ * bit.5 = 1
+ * bit.6 = Hook (inverted)
+ * bit.7 = 0
+HFU-2 version:
+ 1F 00 04 79 00 12 02 01 02 06 00 56 20 30 36 2E 30 30 0A 48 46 55 32 00 SQ CS
+for HFU-2:
+ 1F 04 00 DA 00 02 00 02 SQ CS
+ function unknown - sent from Nokia phone to HFU-2mute output (call active )
+
+0xD0 commands
++++++++++++++
+
+init:
+ 1F 00 1D D0 00 01 04 SQ CS
+ sent by the Service Software or HFU-2 on startup
+init resp:
+ 1F 1D 00 D0 00 01 05 SQ CS
+ response from phone to above frame
diff --git a/docs/manual/protocol/s60-download-qr.png b/docs/manual/protocol/s60-download-qr.png
new file mode 100644
index 0000000..5661e57
--- /dev/null
+++ b/docs/manual/protocol/s60-download-qr.png
Binary files differ
diff --git a/docs/manual/protocol/s60.rst b/docs/manual/protocol/s60.rst
new file mode 100644
index 0000000..9eeecf9
--- /dev/null
+++ b/docs/manual/protocol/s60.rst
@@ -0,0 +1,167 @@
+.. _s60:
+
+Series60 Remote Protocol
+========================
+
+.. versionchanged:: 1.31.90
+ There were some changes in the protocol and applet has been renamed.
+
+.. note::
+
+ The original applet has been created for
+ <http://series60-remote.sourceforge.net/>. Gammu uses
+ extended version which is probably not fully compatible with original.
+
+.. warning::
+
+ Connection to S60 phones currently works only using Bluetooth.
+
+Choosing right version
+----------------------
+
+Before using this connection type, you need to install the applet to the
+phone. The applet can be found in ``contrib/s60`` directory and there are two
+variants of the applets:
+
+``gammu-s60-remote.sis``
+ Not signed applet, which can be installed to the phone if it has enabled
+ installation of unsigned applications (see :ref:`s60-unsigned`).
+
+ .. note::
+
+ This applet also lacks some capabilities, so for example you will not
+ be able to get network information.
+
+``gammu-s60-remote-sign.sis``
+ Applet ready for signing using `Open Signed Online`_. This will allow you
+ to install applet to your phone only (it is bound to IMEI), but you don't
+ need to allow installation of unsigned applications.
+
+.. note::
+
+ The best way of course would be to have properly signed applet. However
+ access to signing tools costs 200 USD per year, what is something we can
+ not afford right now.
+
+.. _s60-unsigned:
+
+Allowing installation of unsigned applications
+++++++++++++++++++++++++++++++++++++++++++++++
+
+For security reasons, Symbian defaults to install signed applications only. As
+getting properly signed applet is expensive for non commercial product like
+Gammu, you need to either sign applet yourself (the signature is valid for
+single phone) or allow installation of unsigned applications:
+
+1. Open :guilabel:`Application Manager`, it is usually located in :guilabel:`Control Center`.
+2. Press left soft key for :guilabel:`Options` menu.
+3. From the menu choose :guilabel:`Settings`.
+4. Change the :guilabel:`Software Installation` to :guilabel:`All`.
+5. Change the :guilabel:`Online certif. check` to :guilabel:`Off`.
+
+.. warning::
+
+ This allows installation of any not signed code to your phone. You should
+ consider reverting this change, once you have installed applet required
+ for Gammu.
+
+Installation
+------------
+
+To run the applet you need to install `Python for S60`_ 2.0 to the phone. You
+can either download it from their website, or just get mirrored installation
+package from <http://dl.cihar.com/gammu/s60/Python_2.0.0.sis>. This file is
+not distributed with Gammu due to licensing reasons.
+
+.. note::
+
+ On some phones, the Python for S60 2.0 will not start, in this case you
+ need to install some additional support libraries coming with Python for S60 2.0 -
+ :file:`pips.sis`, :file:`ssl.sis` and :file:`stdioserver.sis`. You can get
+ all of them at https://wammu.eu/s60/ as well.
+
+Installing Python for S60 and Series60 remote applet can be done in several
+ways:
+
+Installation using Gammu
+++++++++++++++++++++++++
+
+Gammu can transmit the applet to your phone automatically. Just configure it
+for use of BlueS60 connection (see :ref:`connecting-s60` chapter below) and
+invoke :option:`gammu install`:
+
+.. code-block:: sh
+
+ gammu install
+
+It will automatically transmit the applet to the phone. On some phones the
+installation will start automatically, on some you need to find received files
+in the inbox and install them manually from there.
+
+If you want to install Python for S60 as well you need to download it and
+place in folder where Gammu searches for installation images (you can
+configure it by setting :config:option:`DataPath`). For example:
+
+.. code-block:: sh
+
+ cd /usr/share/data/gammu
+ wget http://dl.cihar.com/gammu/s60/Python_2.0.0.sis
+ wget http://dl.cihar.com/gammu/s60/pips.sis
+
+Downloading from phone
+++++++++++++++++++++++
+
+Downloading files from the phone and installing them directly. You can
+download all required files from https://wammu.eu/s60/.
+
+.. figure:: s60-download-qr.png
+ :target: https://wammu.eu/s60/
+ :alt: QR code for download of applet.
+
+ QR code for download of applet.
+
+Manual Installation using Gammu
++++++++++++++++++++++++++++++++
+
+If the above mentioned :option:`gammu install` does not work for you, for
+example when you need to use different applet, you can still use Gammu to send
+files to the phone using :option:`gammu sendfile`.
+
+First you need to create ``~/.gammurc`` with following content:
+
+.. code-block:: ini
+
+ [gammu]
+ connection = blueobex
+ model = obexnone
+ device = 5C:57:C8:XX:XX:XX # Address of the phone
+
+And now you can send files to your phone:
+
+.. code-block:: sh
+
+ gammu sendfile Python_2.0.0.sis
+ gammu sendfile contrib/s60/gammu-s60-remote.sis
+
+Files should appear in inbox in your phone and you can install them from
+there.
+
+.. _connecting-s60:
+
+Connecting to Series60 phone
+----------------------------
+
+The Gammu configuration is simple, all you need to specify is correct
+:config:option:`Connection`:
+
+.. code-block:: ini
+
+ [gammu]
+ connection = blues60
+ device = 5C:57:C8:XX:XX:XX # Address of the phone
+
+Now you need to start the Series60 applet in the phone and Gammu should be
+able to talk to it.
+
+.. _Open Signed Online: https://www.symbiansigned.com/app/page/public/openSignedOnline.do
+.. _Python for S60: https://garage.maemo.org/projects/pys60/
diff --git a/docs/manual/protocol/samsung-gt.rst b/docs/manual/protocol/samsung-gt.rst
new file mode 100644
index 0000000..10aea3e
--- /dev/null
+++ b/docs/manual/protocol/samsung-gt.rst
@@ -0,0 +1,168 @@
+SAMSUNG GT calendar AT commands
+===============================
+
+Calendar Entries
+----------------
+
+``AT+SSHT=1`` - selects the Organizer->Calendar->Appointment entries
+(Spotkania in Polish version)
+
+``AT+SSHT=2`` - selects the Organizer->Calendar->Anniversary entries
+(Rocznice in Polish version)
+
+``AT+SSHT=5`` - selects the Organizer->Calendar->Holiday entries (Święta
+in Polish version)
+
+``AT+SSHT=6`` - selects the Organizer->Calendar->Important entries (Ważne
+in Polish version)
+
+``AT+SSHT=7`` - selects the Organizer->Calendar->Private entries (Prywatne
+in Polish version)
+
+After selection of type, we can read all items::
+
+ AT+SSHR=0
+ +SSHR:5,"5,test1","0,","0,",2010,5,12,2010,5,12,21,49,22,49,0,0,0,0,2010,5,30,,
+ +SSHR:3,"1,x","0,","0,",2010,6,2,2010,6,3,0,0,0,0,0,0,0,0,2010,5,30,,
+ +SSHR:1,"9,event1234","0,","0,",2010,6,7,2010,6,7,7,0,8,59,0,0,0,0,2010,5,30,,
+ +SSHR:4,"7,test123","0,","0,",2010,6,14,2010,6,14,21,37,22,37,0,0,0,0,2010,5,30,,
+ +SSHR:2,"7,Meeting","0,","0,",2010,6,15,2010,6,15,8,0,8,59,0,0,0,0,2010,5,30,,
+ OK
+
+Or just read a single item::
+
+ AT+SSHR=1
+ +SSHR:1,"9,Event 123","0,","0,",2010,6,7,2010,6,7,7,0,8,59,0,0,0,0,2010,5,30,,
+ OK
+
+Getting status (the last number appears to be number of notes)::
+
+ AT+SSHR=?
+ +SSHR:100,15,100,15,"1000000",2008,2024,5
+ OK
+
+You can also add or modify an item::
+
+ AT+SSHW="7,event01","16,details of event","5,where",2010,06,03,2010,06,04,12,31,13,42,0,0,0,0,2010,05,31,,,0
+
+It seems, that the last number in the above record specifies whether
+it is addition of a new record (0), or modification of the old record
+(then the number is the position of the item, as the first number
+listed after ``AT+SSHR=0``). e.g.::
+
+ AT+SSHW="13,event1234 new","0,","0,",2010,06,07,2010,06,07,07,00,08,59,0,0,0,0,2010,05,30,,,1
+
+
+Please note, that the format for writing is somehow different, than
+for reading - hour and minuts must be in two-digit form!
+The text fields (as shown above) are formatted in the following way:
+"number_of_characters_in_string,string"
+In all items above the first string is the name of event, the second
+string - details of event, the third one - place of event.
+The numeric fields encode start date (year,month,day), end date (year,
+month, day), start time (hour,minutes),
+end time (hour, minutes), four unknown to me (yet?) values, date of
+creation? (year month day) - the meaning of this date is not sure for
+me yet.
+
+To delete entries::
+
+ AT+SSHD=1
+ OK
+
+Task Entries
+------------
+
+There is yet another type, that can be selected by ``AT+SSHT=3``
+This is Organizer->Task::
+
+ AT+SSHT=3
+ OK
+ AT+SSHR=0
+ +SSHR:1,"10,Test event","10,2010-06-05",60823,11,25,60823,11,26,0,0,0,0,0,0,0,0,0
+ OK
+
+Please note, that the format of output is different, when you read the
+specific task::
+
+ AT+SSHR=1
+ +SSHR:1,"10,Test event","12,Some details",2010,6,3,2010,6,5,1,2010,6,4,10,11,0,2,0
+
+You can similarly add a new task::
+
+ AT+SSHW="9,New task1","10,0123456789",2010,06,21,2010,06,30,1,2010,06,27,08,07,0,2,0,0
+ +SSHW:2
+ OK
+
+Read it back::
+
+ AT+SSHR=2
+ +SSHR:2,"9,New task1","10,0123456789",2010,6,21,2010,6,30,1,2010,6,27,8,7,0,2,0
+ OK
+
+And modify::
+
+ AT+SSHW="9,New task1","11,New details",2010,06,21,2010,06,30,1,2010,06,27,08,07,0,2,0,2
+ +SSHW:2
+ OK
+ AT+SSHR=2
+ +SSHR:2,"9,New task1","11,New details",2010,6,21,2010,6,30,1,2010,6,27,8,7,0,2,0
+ OK
+
+To delete entries::
+
+ AT+SSHT=3
+ OK
+ AT+SSHR=0
+ +SSHR:1,"10,Test
+ event","10,2010-06-05",60823,11,25,60823,11,26,0,60823,11,26,0,0,0,0,0
+ +SSHR:2,"9,New task1","10,2010-06-30",60823,11,25,60823,11,26,0,60823,11,26,0,0,0,0,0
+ OK
+ AT+SSHD=1
+ OK
+ AT+SSHR=0
+ +SSHR:2,"9,New task1","10,2010-06-30",60823,11,25,60823,11,26,0,0,0,0,0,0,0,0,0
+ OK
+
+Memo Notes
+----------
+
+The memo notes are accessible via ``AT+OMM???`` commands::
+
+ AT+OMMI?
+ +OMMI:4,100,100
+
+We found, that we have 4 memos
+
+You can add a note::
+
+ AT+OMMW=0,"This is a note"
+ +OMMW:6
+ OK
+
+You can read it::
+
+ AT+OMMR=6
+ +OMMR:"This is a note"
+ OK
+
+You can modify it::
+
+ AT+OMMW=6,"This is a new modified note"
+ +OMMW:6
+ OK
+ AT+OMMR=6
+ +OMMR:"This is a new modified note"
+ OK
+
+To delete entries::
+
+ AT+OMMR=3
+ +OMMR:"Note number 3"
+ OK
+ AT+OMMD=3
+ OK
+ AT+OMMW=3,"New note number 3"
+ +CME ERROR:29
+
+ ERROR
diff --git a/docs/manual/protocol/samsung.rst b/docs/manual/protocol/samsung.rst
new file mode 100644
index 0000000..41e8344
--- /dev/null
+++ b/docs/manual/protocol/samsung.rst
@@ -0,0 +1,304 @@
+SAMSUNG Organizer AT commands
+=============================
+
+Get organizer information
++++++++++++++++++++++++++
+
+Invocation::
+
+ AT+ORGI?
+
+Example::
+
+ AT+ORGI?
+ +ORGI: 84,400,30,100,30
+ OK
+
+Return 5 values:
+
+par1
+ ( 84) Busy entries (1 to par1 of par2 possibles entries)
+par2
+ (400) Max possible entries
+par3
+ ( 30) Unknown
+par4
+ (100) Unknown
+par5
+ ( 30) Unknown
+
+
+Get organizer details
++++++++++++++++++++++
+
+Invocation::
+
+ AT+ORGR=number
+
+Get organizer details for index entry "number"
+Returns 24 values:
+
+Example 1::
+
+ AT+ORGR=10
+ +ORGR: 161,1,"Comprar lagrimas artificiales","Farmacia",2,4,2009,9,0,2,4,2009,9,10,"Farmacia",1,1,0,3,,,29,1,2010
+ OK
+
+Example 2::
+
+ AT+ORGR=15
+ +ORGR: 67,2,,"Laura Santiesteban Cabrera",3,11,2009,9,0,,,,,,,1,3,0,4,,,,,
+ OK
+
+Example 3::
+
+ AT+ORGR=19
+ +ORGR: 205,3,,"Cemento",13,3,2009,10,35,13,3,2009,,,,1,3,0,0,1,0,,,
+ OK
+
+Example 4::
+
+ AT+ORGR=23
+ +ORGR: 235,4,"Curso","Averiguar",13,3,2009,9,50,13,3,2009,9,59,,1,1,0,,,,,,
+ OK
+
++ORGR: AT+ORGR answer header
+
+par01
+ Pointer to real memory position
+par02
+ Organizer entry type (1=appointments, 2=aniversaries, 3=tasks, 4=miscellany )
+
+If par02 =1, appointment entry type
+
+par03
+ Organizer entry short name
+par04
+ Organizer entry detailed description
+par05
+ Start day
+par06
+ Start month
+par07
+ Start year
+par08
+ Start hour
+par09
+ Start minute
+par10
+ End day
+par11
+ End month
+par12
+ End year
+par13
+ End hour
+par14
+ End minute
+par15
+ Location
+par16
+ Alarm flag (0=no, 1=yes)
+par17
+ Alarm time unit (1=minutes, 2=hours, days, 4=weeks)
+par18
+ Alarm items quantity
+par19
+ Alarm repeat flag (0 or empty=no, 2=yes)
+par20
+ Empty
+par21
+ Empty
+par22
+ Repeat until day
+par23
+ Repeat until month
+par24
+ Repeat until year
+
+If par02 = 2, anniversary entry type
+
+par03
+ Empty
+par04
+ Occasion name
+par05
+ Alarm day
+par06
+ Alarm month
+par07
+ Alarm year
+par08
+ Alarm hour
+par09
+ Alarm minutes
+par10
+ Empty
+par11
+ Empty
+par12
+ Empty
+par13
+ Empty
+par14
+ Empty
+par15
+ Empty
+par16
+ Alarm flag (0=no, 1=yes)
+par17
+ Alarm time unit (1=minutes, 2=hours, days, 4=weeks)
+par18
+ Alarm items quantity
+par19
+ Repeat each year (0=no, 4=yes)
+par20
+ Empty
+par21
+ Empty
+par22
+ Empty
+par23
+ Empty
+par24
+ Empty
+
+If par02 = 3, task entry type
+
+par03
+ Empty
+par04
+ Task name
+par05
+ Start day
+par06
+ Start month
+par07
+ Start year
+par08
+ Alarm hour
+par09
+ Alarm minute
+par10
+ Due day
+par11
+ Due month
+par12
+ Due year
+par13
+ Empty
+par14
+ Empty
+par15
+ Empty
+par16
+ Alarm flag (0=no, 1=yes)
+par17
+ Alarm time unit (1=minutes, 2=hours, days, 4=weeks)
+par18
+ Alarm items quantity
+par19
+ Empty
+par20
+ Task priority (1=high, 2=normal, 3=low)
+par21
+ Task status (0=undone, 1=done)
+par22
+ Empty
+par23
+ Empty
+par24
+ Empty
+
+If par02 = 4, miscellany entry type
+
+par03
+ Entry name
+par04
+ Details
+par05
+ Start day
+par06
+ Start month
+par07
+ Start year
+par08
+ Start hour
+par09
+ Start minutes
+par10
+ End day
+par11
+ End month
+par12
+ End year
+par13
+ End hour
+par14
+ End minutes
+par15
+ Empty
+par16
+ Alarm flag (0=no, 1=yes)
+par17
+ Alarm time unit (1=minutes, 2=hours, days, 4=weeks)
+par18
+ Alarm items quantity
+par19
+ Empty
+par20
+ Empty
+par21
+ Empty
+par22
+ Empty
+par23
+ Empty
+par24
+ Empty
+
+Write organizer entry
++++++++++++++++++++++
+
+Invocation::
+
+ AT+ORGW=par0,par1,par2...par24
+
+Write organizer entry in memory location par0
+
+If par0=65535 then locate next empty entry on memory
+
+Example::
+
+ AT+ORGW=65535,0,4,"p2","p2",14,3,2009,2,23,14,3,2009,3,23,,0,0,0,,,,,,
+ +ORGW: 253,253
+ OK
+
+par1 to par24 has the same significance than in the AT+ORGR command
+
+Delete organizer entry
+++++++++++++++++++++++
+
+Invocation::
+
+ AT+ORGD=number
+
+Delete organizer entry of index "number"
+
+Example::
+
+ AT+ORGD=21
+
+ OK
+
+Notes
++++++
+
+Read command use index reference.
+
+Write command uses index and direct memory reference with special 65535 value to locate empty memory position.
+
+Delete command use direct memory reference, index are automatically reorganized.
+
+Hint: After create or delete an organizer entry, reread full information to update index table.
+
diff --git a/docs/manual/protocol/sonim.rst b/docs/manual/protocol/sonim.rst
new file mode 100644
index 0000000..60c2214
--- /dev/null
+++ b/docs/manual/protocol/sonim.rst
@@ -0,0 +1,37 @@
+Sonim AT Commands
+=================
+
+Filesystem access::
+
+ at*list=<path> - list directory content
+ (0=file, 1=subdirectory)
+ at*mkdir=<path> - make directory
+ at*rmdir=<path> - remove directory
+ at*remove=<path> - remove file
+ at*move=<srcpath>,<dstpath> - ? copy (move?) files
+ at*startul=<srcpath> - prepare file to upload (from phone)
+ returned data:
+ *STARTUL: <filesize_in_bytes>
+ at*startdl=<dstpath>,<filesize> - prepare file to download (to phone)
+ at*get - get base64 coded data chunk
+ returned data:
+ *GET: <chunklen>,<data>
+ at*get - get base64 coded data chunk
+ returned data:
+ *GET: <chunklen>,<data>
+ at*put=<no>,<len>,<data>,<chck> - put base64 coded data chunk
+ (no is chunk number, starting from 0)
+ (len is chunk length)
+ (last 4 characters is checksum ?)
+ at*end - end/finish file transfer operation
+ -------------------
+ at*syph=?,?.?,<path> - ? (add downloaded record to phonebook?)
+ at*syph=0,1,%d,%s
+ EXAMPLE:
+ AT*SYPH=0,1,74,/app/dir/tmp.dat
+ at*sysm=0,1,%d - ? SMS handling
+
+ ---
+ Phone has at least two directories from root, /app and /app3 .
+ at*list=/ gives error.
+
diff --git a/docs/manual/protocol/tdma_5120.rst b/docs/manual/protocol/tdma_5120.rst
new file mode 100644
index 0000000..a006e16
--- /dev/null
+++ b/docs/manual/protocol/tdma_5120.rst
@@ -0,0 +1,121 @@
+TDMA 5120
+=========
+
+Eduardo Spremolla at gnokii-users@mail.freesoftware.fsf.org
+
+After playing a while with my 5120i y find some use full frames:
+
+got from sneefing in Logomanger the get startup logo
+----------------------------------------------------
+
+request::
+
+ 40 {0x07, 0x07, 0x08, section} section goes from 1 to 6
+
+answer::
+
+ dd {+0x01, 0x00, 0x07, 0x08, (84 bytes => 84 cols x 8 bits bit0 first row )
+
+Can't figure out how to modify 6110 code to get & put the logo, not in a
+hi value to me now.
+
+got key press working
+---------------------
+
+As stated in http://www.flosys.com/tdma/n5160.html
+
+with frame: key-press::
+
+ D1 {+00 01 50 00 01 KY}
+
+this seems to press the key for a while. No release needed
+
+key-release:
+
+ D1 {+00 01 50 00 00 KY}
+
+keep the key press => got speedee dial::
+
+ D1 {+00 01 50 00 02 00 KY}
+
+get memory
+----------
+
+the getmemory::
+ 40 {+00 00 07 11 00 10 00 mem}
+
+get phonebook with the phone in bcd, but it seems to be a way to read
+chunks of memory with different numbers in the 6 place. in particular:
+
+get configuration pins::
+
+ 40 {+0x00, 0x00, 0x07, 0x11, 0x00, 0x0f, 0x00, 0x00 }
+
+get security code::
+
+ 40 {+0x00, 0x00, 0x07, 0x11, 0x00, 0x09, 0x00, 0x00 }
+
+get NAM data ::
+
+ 40 {+0x00, 0x00, 0x07, 0x11, 0x00, 0x08, 0x00, nam# }
+
+that last answers with::
+
+ dd {+01 00 11 00 08 00 00,
+
+03 04
+ home sys id
+01 4d
+ primary paggin channel
+02 c4
+ seconda paggin channel
+88 88 88 88 88
+ own #
+09 63 c2 09 03 00 0b
+ unknow
+0a
+ group id
+01
+ Access method
+01
+ local option
+0f
+ overload class
+20 41 43 41 45 00 00 00 00 00 00 00 00 00 00 00
+ alpha tag
+b3 4d
+ unknow
+01
+ NAM status
+11 11 11 11 11 00 00 00 00 00 00 00 00
+ unknow
+00 00 00 00 00 00 01 00 00 00 01 36
+ unknow
+01 4d
+ dedicate ch
+01 4e
+ dedicate B ch
+14
+ dedicate ch #
+14
+ dedicate B ch #
+00
+ msg center # len
+00
+ msg center in flag
+00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ msg center #
+08 01 80 70 8f dd 00 ef 00 00 00 00 00 00 00 00
+ unknow
+00 00 00 00 00
+ gate way #
+00 00 00
+ unknow
+
+More interesting ( and dangerous ) is than the 07 10 sequence in place
+of 07 11 in the request change the command from read to write.be care
+full!!! I almost ruin my 5125 with a 40 {+0x00, 0x00, 0x07, 0x10, 0x00,
+0x08, 0x00, 0x01 } frame , since the frame is ok, but the phone the
+write info from an area of the buffer that I did not send!!!!
+
+OK so far. Still looking for how to handle SMS......