--- /dev/null
+
+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 01.03.2001
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Assembled by
+ Balazs Nagy (js@lsc.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>
+ Pawe³ Kot <pkot@linuxnews.pl>
+ Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)
+ 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 transmition and\r
+ reception.
+
+ Because of this characteristics of the phone connector, every time that the\r
+ PC writes into the phone it is writing as well into its own Rx. So every\r
+ time the PC sends info into the phone it finds that same information in its\r
+ own Rx buffers, like a mirror copy. This should be discarded.\r
+
+ The communications is made like an old cb radio, only one\r
+ 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.
+\r
+ Frame format for FBUS version 1:
+
+ { 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:
+
+ { 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:
+
+ { 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 }\r
+ \r
+ where Id_SeqNo: Is the sequence number that you are
+ acknowleging (from\r the other part).\r
+
+ 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}
+
+ 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