--- /dev/null
+Twoja Era:d=8,o=6,s=N,b=160,l=0:g5,c,g,2f,2e,2p,p,g5,c,g,2f,2e,2p,4p,h5,g5,2d.5,4p,2p,p,g5,c,g,2f,2e,2p,p,g5,c,g,2f,2e,2p,4p,h5,g5,2d.5,4p
\ No newline at end of file
--- /dev/null
+In subdirs there are original ringtones and SMS tones
+from various Nokia phones. They're saved in special
+binary format used in phone's firmware. You can download them to your phone,
+if it has downloadable ringtone(s) - use
+"gnokii --setbinringtone file [location]". I tested Nokia 6150 5.22 and it was
+OK. I hope, that Nokia will not change this format and you will be able to
+use it with new phones too (update: 3310 seems to have different format).
+
+I also noticed, that with Nokia 6150 some ringtones required small changes
+(inserting space (0x20 char) after name displayed in phone's menu).
+Maximal length of names for this phone is 12 chars (that's why "Moon & clouds"
+is only "Moon & cloud", "Mexican Hat Dance" -> "Mexican Dance",
+"Piano concerto" -> "Piano concer", "WalzeBrillant" -> "WalzeBrilla")
+
+I wasn't also to restore Badinerie, Tchaikovsky,
+Entertainer, Valkyrie, Four seasons, Auld lang syne, Bumblebee,
+Brave Scotland, Liszt, Hungarian, Left Hand
+(I had it in the file - it was no problem to save
+it), because it was too long (ringtones in phone's firmware in flash
+can be infinitely long, downloadable not - frame can be 317 chars long
+only)... I had to short name in "Swan Lake" to "Swan" because of it...
+
+In Get_Cool,Sunny_Walks,Tick tick ringtones there is and error - small
+"pyk" on the end. It's not my fault, it was made by Nokia...
+
+Similiary Hopping-down seems to cut (next Nokia fault ?)...
+
+PS. I didn't compared many of these ringtones with original phones.
+If there are differences, please let me know (my files could be broken too)
+
+PS2. I tried to understand this format, but I didn't make it at all (too small
+free time, etc.). Here are some observations:
+
+Format is used by 0x40/0x9e and 0x40/0xa0 frames. General format is:
+
+0x00,0x01,0xa0(0x9e),location,0x00,0xc1,0x01,?,name,0x00,0x00,0x02,
+commands and tones?each probably in two bytes?,0x0b
+
+where: location=0x00,0x01,etc.
+ name=name in ASCII displayed in menu
+
+If phone doesn't find 0xc1,0x01,? bytes in 7,8,9 byte, don't display ringtone
+name and treat them (if there are next) as ringtone contenst
+
+Marcin-Wiacek@Topnet.PL
\ No newline at end of file
--- /dev/null
+http://www.gsmcity.de/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=1&t=001084&counterhit=yes
+03.09.2001 19:00
+
+ can i change the original ringtones on 5110? i've heard that
+ with datasuite u can change the ringtones. pls let me know
+ regards
+ --------------------
+ ---I'M UNIQUE AND SO IS MY PHONE---
+ -- sms,logos,soft,ringtones and many more free --
+
+
+ Posts: 247 | From: Bucharest,Romania | Registered: May 2001 |
+ IP:
+
+ azywerks
+ Newbie
+
+ posted 09 June 2001 18:58
+
+ No.
+ You can add/change 1 ringtone (Received tone) for a 61XX phone
+ using Datasuite though.
+
+ aCe
+
+
+ IP:
+
+ mrENigma
+ Moderator
+
+ Member # 4409
+ Member Rated:
+ posted 09 June 2001 19:01
+
+
+ TOO BAD!!!!
+ IS ANY WAY TO DO THIS? ON ANY NOKIA HANDY???
+ --------------------
+ ---I'M UNIQUE AND SO IS MY PHONE---
+ -- sms,logos,soft,ringtones and many more free --
+
+
+ Posts: 247 | From: Bucharest,Romania | Registered: May 2001 |
+ IP:
+
+ azywerks
+ Newbie
+
+ posted 09 June 2001 19:48
+
+ Except for the downloaded ringtones which is available to most
+ nokia phones(GSM) except 5110, no.
+ Maybe if you can understand the two byte(i guess, or was it
+ four) sequence for the tones notation in the PPM section and
+ have it manually changed to a tone of your desire then your
+ probably half way there.
+ The other half would then be spent on how to get your phone to
+ accept the new PPM package you've just made without causing
+ any problems like Contact Service, sim locks, and Network
+ Access. Heck, I can't even change just the simple "Insert"
+ from "Insert SIM Card" to tresnI without causing my phone to
+ display Contact Service. Must have some security data
+ elsewhere.
+
+ Anyway, we'll keep on trying.
+
+ aCe
+
+
+ IP:
+
+ zizo
+ Freak Poster
+
+ Member # 2631
+ Member Rated:
+ posted 10 June 2001 00:32
+
+ Hi mrENigma!
+ U can not change a ringtone on your phone, U have only I think
+ 2 byte free memory there u can recive one ringtone on it.
+ Good luck!
+ --------------------
+ /Z
+
+
+ Posts: 102 | From: Sweden | Registered: Nov 2000 | IP:
+
+ mrENigma
+ Moderator
+
+ Member # 4409
+ Member Rated:
+ posted 10 June 2001 20:44
+
+ even if i erase some of them? 10 originals for one of mine
+ it's kind a stupid can't do this....
+ --------------------
+ ---I'M UNIQUE AND SO IS MY PHONE---
+ -- sms,logos,soft,ringtones and many more free --
+
+
+ Posts: 247 | From: Bucharest,Romania | Registered: May 2001 |
+ IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 14 June 2001 03:23
+
+
+ quote:
+
+ Originally posted by mrENigma:
+ even if i erase some of them? 10 originals for one of mine
+ it's kind a stupid can't do this....
+
+
+ Well, I have a post of this a while (months) ago.
+ It's not possible to ADD TONES to the Nokia 5110 but it is
+ possible to CHANGE TONES on the Nokia 5110.
+ Well, changing RING TONES is a bit hard but changing ALERT
+ TONES is relatively easier to do.
+ Of course us all Nokia users can add ring tones to phone like
+ the 61xx, 6210, 3210, 33xx, etc. but I bet most of our alert
+ tones are all the same.
+ The beep, the standard (which is a dit-dit tone), the special
+ (which is a dit-dit-dit-dat-dat-dit-dit-dit, which is actually
+ a Morse code for "SMS"), and the ascending (which is actualy a
+ Morse code for "connecting people") are the same to all Nokia
+ phones unless there is one I don't know about.
+ Anyway, have any of you once experienced when on a crowd when
+ a SMS message came and most people around you have Nokia
+ phones (riding a bus for example or on a bar).
+ Some of us would check their phone if it was for them, like I
+ did.
+ So I changed my standard tone which is a dit-dit to dit-dat to
+ sound differently. And my special tone from
+ dit-dit-dit-dat-dat-dit-dit-dit to
+ dat-dit-dit-dit-dat-dit-dit-dit (which sounds like "Who let
+ the dogs out" with dit-dit-dit at the end). So when I myself
+ received a message, I know that it's for me coz I only have to
+ take note of the tone.
+ Too bad, Viper stopped his research with the NFREE project. I
+ have been inquiring about the checksums but he's no longer
+ responding. So I guess I have to do this on my own.
+ I'm coming up with a software to change the ringtone on the
+ 5110, just like I came up with the soft for changing the alert
+ tone on my 5110. Imagine, we have 30 changeable ringtones on
+ our Nokia, not just the 5110 but also with the 3210, 33xx,
+ 51xx, 61xx, 62xx, 7110, 82xx, 88xx, etc.
+ The info about this is not for free of course. Anyone
+ experimenting with his Nokia can come with a way to change the
+ fixed ringtones and alert tones on his phone.
+ BTW, the ringtones can be found on the PPM part of the phone.
+ Regards...
+ [ 15 June 2001 06:43: Message edited 1 time, lastly by Ice
+ Dragon ]
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
+ Posts: 171 | From: Bacolod, Philippines | Registered: Feb 2001
+ | IP:
+
+ azywerks
+ Newbie
+
+ posted 14 June 2001 18:05
+
+ Yo Ice! Could you share with me the search values for the SMS
+ tones. Pleazzee.
+ BTW, have you tried changing the words in our PPM package (i.e
+ "Insert" in Insert SIM card to something else). I've tried
+ even simply reversing Insert to tresnI so as not to get any
+ checksum problems but still I get the CS.
+ Maybe their using a different method of calculation (CRC
+ perhaps) or they have a compare module elsewhere?
+ Just wondering,
+ aCe
+
+
+ IP:
+
+ Leeloo
+ Major Poster
+
+ Member # 2809
+ Rate Member posted 16 June 2001 13:31
+
+ If the ringtones are saved in the ppm pack, and you get cs
+ when trying to change places of some letters in ppm.....what
+ happens in the phon when you download a new ringtone ?
+ does it recalculate the cs for ppm itself ?
+ I thought these ringtones where saved in a area without any cs
+ check.
+ /Leeloo
+
+
+ Posts: 46 | From: Sweden | Registered: Dec 2000 | IP:
+
+ azywerks
+ Newbie
+
+ posted 17 June 2001 20:27
+
+ The downloaded tones aren't stored in your PPM, they are
+ stored in your EEPROM. It is in the EEPROM where checksum
+ recalculation takes place.
+ The tones that are in the PPM are the static tones (i.e Ring
+ Ring, Mosquito).
+ The SMS alert tones on the other hand (according to ICE
+ DRAGON) are located at the MCU portion of your flash.
+ Hope this clears up the confusion.
+ Regards,
+ aCe
+
+
+ IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 03 July 2001 04:11
+
+
+ quote:
+
+ Originally posted by aZyWeRks:
+ Yo Ice! Could you share with me the search values for the
+ SMS tones. Pleazzee.
+ BTW, have you tried changing the words in our PPM package
+ (i.e "Insert" in Insert SIM card to something else). I've
+ tried even simply reversing Insert to tresnI so as not to
+ get any checksum problems but still I get the CS.
+ Maybe their using a different method of calculation (CRC
+ perhaps) or they have a compare module elsewhere?
+ Just wondering,
+ aCe
+
+
+
+ Yo aCe! Here's the hex values particularly for the Special and
+ Ascending alerts tones.
+ Using flash from a 5110v5.30C:
+ For Special (morse code for "SMS"):
+ 5A0C,400C,5A0C,400C,0AFE,5A0C,
+ 4025,0A01,5A25,400C,5A25,4025,
+ 0AFE,5A0C,400C,5A0C,400C,5A0C
+ So it sounds like:
+ dit-dit-dit dat-dat dit-dit-dit
+ "5A0C" is a "dit" with a duration of 0C
+ "5A25" is a "dat" with a duration of 25
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ "0AFE" is.... I don't know what this means, let me know
+ For Ascending (morse code for "connecting people"):
+ 5A25,400C,5A0C,0AFE,400C,5A25,400C,5A0C,4025,0A01,
+ 5A25,400C,5A25,0AFE,400C,5A25,4025,
+ 5A25,400C,5A0C,4025,
+ 5A25,400C,5A0C,4025,
+ 5A0C,4025,
+ 5A25,400C,5A0C,400C,5A25,400C,5A0C,4025,
+ 5A25,4025,
+ 5A0C,400C,5A0C,4025,
+ 5A25,400C,5A0C,4025,
+ 5A25,400C,5A25,400C,5A0C,4064
+ 5A0C,400C,5A25,400C,5A25,400C,5A0C,4025
+ 5A0C,4025
+ 5A25,400C,5A25,400C,5A25,4025
+ 5A0C,400C,5A25,400C,5A25,400C,5A0C,4025
+ 5A0C,400C,5A25,400C,5A0C,400C,5A0C,4025
+ 5A0C,4025
+ So it sounds like:
+ dat-dit-dat-dit dat-dat-dat dat-dit dat-dit dit
+ dat-dit-dat-dit dat dit-dit dat-dit dat-dat-dit
+ dit-dat-dat-dit dit dat-dat-dat dit-dat-dat-dit
+ dit-dat-dit-dit dit
+ Again:
+ "5A0C" is a "dit" with a duration of 0C
+ "5A25" is a "dat" with a duration of 25
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ "4064" is a pause with a duration of 64 (long pause)
+ "0A01" and "0AFE" are.... I don't know what these means, let
+ me know
+ Correct me if I'm wrong, I think "0A01" and "0AEF" is a system
+ pause to let the user interrupt the beeping. for sure, it's
+ not a checksum.
+ On other phone models:
+ Read a full flash from any model of Nokia phone (from 3210,
+ 33xx, 51xx, 61xx, 62xx, 7110, 82xx, 88xx) and use these search
+ strings on a hex editor (I use HexWorks):
+ For alert tones: 8005020A01
+ Following hex values after these hex are actual alert tones
+ For ringtones: 0905020A01 or 0A05020A01
+ Hex values following after these hex are not necessarily ring
+ tones but you can see the names of the ring tones and
+ following them are their ringtone values. Just see for
+ yourself what I mean.
+ Can I ask one-thing? If any of you find these info
+ interesting, please rate me
+ Thanks and best regards...
+ P.S. Oh, about changing the "Insert" to "tresnI" in PPM won't
+ work.
+ You see, checksum calculation in PPM is not done by
+ byte-addition (byte added to another byte) but by
+ word-addition (two bytes added to the next two bytes).
+ Let's take "Insert" as an example:
+ Letter - Hex value - Decimal
+ I 49 73
+ n 6E 110
+ s 73 115
+ e 65 101
+ r 72 114
+ t 74 116
+ In a byte-to-byte addition, the resulting checksum should be:
+ hex 275, decimal 629
+ And it would be equal to the checksum of "tresnI"
+ But in a word-to-word addition, checksum is computed in
+ byte-pairs, therefore taking "In" as one word or hex
+ equivalent to 496E, decimal 18798
+ So if we are to add them in words:
+ Letters - Hex values - Decimal
+ In 496E 18798
+ se 7365 29541
+ rt 7274 29300
+ The checksum should be: hex 2F47 or decimal 12103.
+ Now with "tresnI", the first two letter pair would be "tr"
+ with a hex equivalent to 7472, decimal 29810.
+ So if we are to add them in words:
+ Letters - Hex values - Decimal
+ tr 7472 29810
+ es 6573 25971
+ nI 6E49 28233
+ The checksum should be: hex 482E or decimal 18478.
+ Therefore, changing "Insert" to "tresnI" would yield a
+ "Contact Service" error.
+ Again, I only ask one favor. If any of you find these info
+ interesting, please rate me
+ Cheers...
+ [ 03 July 2001 04:43: Message edited 1 time, lastly by Ice
+ Dragon ]
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
+ Posts: 171 | From: Bacolod, Philippines | Registered: Feb 2001
+ | IP:
+
+ mrENigma
+ Moderator
+
+ Member # 4409
+ Member Rated:
+ posted 03 July 2001 08:06
+
+ i'm confuse a little bit, but i think that i learn something.
+ and when release software to do this pls let me know 'cause i
+ want to get ride off those stupid ringtones.
+ thx again and keep in touch.
+ --------------------
+ ---I'M UNIQUE AND SO IS MY PHONE---
+ -- sms,logos,soft,ringtones and many more free --
+
+
+ Posts: 247 | From: Bucharest,Romania | Registered: May 2001 |
+ IP:
+
+ qtboy
+ Major Poster
+
+ Member # 3427
+ Rate Member posted 03 July 2001 13:03
+
+ yo ice!!!
+ da bes ka gid migs bah!
+ pakopyahon mo na lang ko kung matapos na imo
+ program. hehehe
+
+
+ Posts: 46 | From: davao city, philippines | Registered: Feb
+ 2001 | IP:
+
+ mrENigma
+ Moderator
+
+ Member # 4409
+ Member Rated:
+ posted 03 July 2001 13:53
+
+ yo qtboy......... english pls
+ --------------------
+ ---I'M UNIQUE AND SO IS MY PHONE---
+ -- sms,logos,soft,ringtones and many more free --
+
+
+ Posts: 247 | From: Bucharest,Romania | Registered: May 2001 |
+ IP:
+
+ brittnee
+ Insane Poster
+
+ Member # 2085
+ Rate Member posted 03 July 2001 16:06
+
+ nice job, i would just like to ask if i should have the same
+ number of dits and dats as to avoid contact service?
+ salamat
+
+ Posts: 94 | Registered: Sep 2000 | IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 04 July 2001 04:17
+
+
+ quote:
+
+ Originally posted by brittnee:
+ nice job, i would just like to ask if i should have the same
+ number of dits and dats as to avoid contact service?
+ salamat
+
+
+ Not necessarily.
+ Let's take the Standard alert tone (Morse code for "M") as an
+ example (using the 5110v5.30C flash):
+ 5519, 400A, 5519, 400A
+ So it sounds like "dat-dat"
+ 5519 - is a "dat" with a duration of 19
+ 400A - is a pause with a duration of 0C
+ We could change it to:
+ 550C, 400A, 5526, 400A
+ So it sounds like "dit-dat"
+ Take note that we subtracted hex 0D from the first 5519 and
+ added it to the second 5519 to compensate the values so we
+ wont have a contact service message.
+ Here's a more interesting one. Change the Standard alert tone
+ (5519,400A, 5519,400A) to something like this:
+ 5B19, 4005, 4F19, 400F
+ So it sounds like high-note-dat, low-note-dat
+ Or to something like:
+ 4C0C, 4005, 5E25, 400F
+ So it sounds like low-note-dit, high-note-dat
+ Notice that we subtracted duration values from the first pause
+ and add it to the next pause, and so with the first tone to
+ the second tone.
+ Sometimes I get an error when I subtract values from the pause
+ and add it to the tone. Or vice versa. It won't work.
+ So the following won't work in changing Special alert (morse
+ code for "SMS"):
+ 5A0C,400C,5A0C,400C,0AFE,5A0C,4025,
+ 0A01,5A25,400C,5A25,4025,0AFE,
+ 5A0C,400C,5A0C,400C,5A0C
+ That sounds like:
+ dit-dit-dit dat-dat dit-dit-dit
+ "5A0C" is a "dit" with a duration of 0C
+ "5A25" is a "dat" with a duration of 25
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ "0AFE" is.... I don't know what this means, let me know
+ Into a variation of "Let's go":
+ 5A0C,4025,5A0C,4025,0AFE,
+ 5A0C,400C,0A01,5A0C,400C,5A0C,400C,0AFE,5A0C,4025,
+ 5A0C,4025,5A0C
+ That sounds like:
+ dit-dit dit-dit-dit-dit dit-dit
+ "5A0C" is a "dit" with a duration of 0C
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ "0AFE" is.... I don't know what this means, let me know
+ It wont work because we subtract values from pause and add it
+ to the tone.
+ So that's that. I'm still studying the behaviour for the
+ default ringtones.
+ Sure I can change some values without incurring a "Contact
+ Service" but the tones won't make any sense.
+ Anyway, I would know who reads this forum in my area when I
+ start hearing a different alert tone around here.
+ P.S. If you find some info here to be interesting, I only ask
+ one thing: please rate me
+ BR
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
+ Posts: 171 | From: Bacolod, Philippines | Registered: Feb 2001
+ | IP:
+
+ brittnee
+ Insane Poster
+
+ Member # 2085
+ Rate Member posted 04 July 2001 17:16
+
+ very nice indeed, i've change the alert tone of my 6210, still
+ looking for the standard tone, but i found the special tone
+ which is the one i change, thanks a lot!!!!
+
+ Posts: 94 | Registered: Sep 2000 | IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 05 July 2001 03:50
+
+
+ quote:
+
+ Originally posted by brittnee:
+ very nice indeed, i've change the alert tone of my 6210,
+ still looking for the standard tone, but i found the special
+ tone which is the one i change, thanks a lot!!!!
+
+
+
+ On a 6210:
+ As always, before tinkering with your phone flash, make a full
+ backup of your phone flash if you haven't yet.
+ Let's assume you don't have a full backup of your phone flash.
+ 1. Read the flash address 00200000 to 00600000.
+ 2. Copy the \flasher\flash.out to \nk_files\6210full.fls
+ 3. Use a hex editor (I suggest Hexworks), open the
+ \nk_files\6210full.fls and do the following to obtain a full
+ flash without the EEPROM:
+ WARNING: If you notice the file contains FF00,FF00 from
+ beginning to end, DO NOT PROCEED because this is a bad read
+ flash.
+ 3.1 Go to address 3FC000 (this is equivalent to flash address
+ 005FC000)
+ 3.2 Press Shift-Ctrl-Home. This will highlight the data from
+ offset 00000000 to 003FC000. Release the keys.
+ 3.3 Press Ctrl-C. This will copy the highlighted data to the
+ clipboard or memory.
+ 3.4 Press Ctrl-N. This will create an empty file.
+ 3.5 Press Ctrl-V. you will be asked "Are you sure you want to
+ insert?", select "Ok".
+ This will copy the previously highlighted data to the new
+ file.
+ 3.6 Save the file as "my6210.fls"
+ 4. Make a copy of the flash that contains the alert tones.
+ 4.1 Still using the hex editor, open the file "my6210.fls"
+ 4.2 Go to offset 350000. Press Shift-Ctrl-Home. This will
+ highlight the data from offset 00000000 to 003FC000. Release
+ the keys.
+ 4.3 Press Del. You will be asked "Are you sure you want to
+ delete?". Press "Ok". This will delete the data from 0 to
+ 350000.
+ 4.4 Go to offset 10000. Press Shift-Ctrl-End. This will
+ highlight the data from offset 10000 to the end of file.
+ 4.5 Press Del. You will be asked "Are you sure you want to
+ delete?". Press "Ok". This will leave you a 64k data from 0 to
+ 10000 (which is equivalent to flash address 00550000 to
+ 00560000).
+ 4.6 Save the file as \nk_files\6210al.fls
+ 5. Copy \nk_files\6210al.fls to \nk_files\alert.fls
+ 6. Open the \nk_files\alert.fls with a hex editor (I use
+ Hexworks).
+ 7. Use the search string "8005020A01".
+ First stop should be the Special alert tone.
+ You will notice that there's "SMSS.......S.p.e.c.i.a.l" before
+ it.
+ Pressing F3 will take you to the next found string. This is
+ the Standard alert. You will notice that there's
+ "SMS.......S.t.a.n.d.a.r.d" before it.
+ Again pressing F3 will take you to the next found string. This
+ is the Ascending alert. You will notice that there's
+ "SMSL.......L.o.n.g. .l.o.u.d" before it.
+ Don't forget when you flash it back, you should use alert.fls
+ as source and the address should be 00550000.
+ Assuming you have flashed it back to the correct address and
+ it shows a "Contact Service", you may have incorrectly
+ modified your alert tone. If this happens, proceed to number 5.
+ If you want to flash it back to its original alert tones,
+ flash it back with 6210al.fls at address 00550000.
+ But if it still has a Contact Service, flash it back with a
+ my6210.fls starting from address 00200000. This should restore
+ your original flash without the EEPROM part.
+ This procedure is a little bit for advanced flasher users. If
+ you don't know what you're doing, don't try it out. You have
+ yourself to blame if something pukes up.
+ Hmmm... I guess few people are interested in what I'm posting
+ here. Out of more than 100 readers since my first posting in
+ this thread, only 2 person rated me.
+ Oh well, all I'm asking is: rate me please
+ -----------------
+ Misqouted qoutes:
+ "Don't judge the book without its cover"
+ "Birds flock together on the same feather"
+ "Don't cross the bridge when you get there"
+ "There's no water under the bridge"
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
+ Posts: 171 | From: Bacolod, Philippines | Registered: Feb 2001
+ | IP:
+
+ nuggie
+ Junior Member
+
+ Member # 3304
+ Member Rated:
+ posted 05 July 2001 13:34
+
+ I've tryed to do this like that :
+ 1.make a full backup 002 to 006 (6210)
+ 2.edit with hexworkshop and change the SMS alert
+ 3.try to correct checksums with NK1.2 to avoid Contact Service
+ 4.put flash back to phone
+ 5.works fine
+ Ice Dragon: does point 3 make any sense?
+ [ 05 July 2001 13:38: Message edited 3 times, lastly by nuggie ]
+
+
+ Posts: 27 | From: Westcoast, Poland | Registered: Feb 2001 |
+ IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 06 July 2001 03:07
+
+
+ quote:
+
+ Originally posted by nuggie:
+ I've tryed to do this like that :
+ 1.make a full backup 002 to 006 (6210)
+ 2.edit with hexworkshop and change the SMS alert
+ 3.try to correct checksums with NK1.2 to avoid Contact
+ Service
+ 4.put flash back to phone
+ 5.works fine
+ Ice Dragon: does point 3 make any sense?
+
+
+
+ Not only "sense" (cents), but also dollars... heh..heh...heh...
+ I did that already but it always take a long wait to write the
+ whole modified flash back to the phone.
+ With a 5110v530C flash, I also tried cutting the first part of
+ the modified flash (flash address 00200000-00210000), write it
+ back to the phone, then cut the last part of the modified
+ flash (002F0000-00300000) back to the phone so it would take a
+ much lesser time.
+ The one I posted earlier is also to let our members reader
+ learn a little bit about the alert and ring tones in the
+ flash, and the possibility of changing them. Although I
+ believe that our members here know more than I do.
+ Cheers to you... and best regards to all
+ [ 06 July 2001 03:10: Message edited 1 time, lastly by Ice
+ Dragon ]
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
+ Posts: 171 | From: Bacolod, Philippines | Registered: Feb 2001
+ | IP:
+
+ aZyWeRks
+ Freak Poster
+
+ Member # 3170
+ Member Rated:
+ posted 06 July 2001 15:56
+
+ Man, thanks a lot for the values. I'll try it.
+ And about the word addition information. I'll try to make a
+ workaround on this if I have enough time. I've been off the
+ internet for a time.
+ Thanks a lot man. You're great.
+
+ Regards,
+ aCe
+ --------------------
+ http://getit.at/azywerks
+
+
+ Posts: 131 | From: I.C., R.P. | Registered: Jan 2001 | IP:
+
+ koloksky
+ Freak Poster
+
+ Member # 718 posted 07 July 2001 00:26
+
+ hi,
+ That is really cool!! thanks IceDragon!
+ u deserve a
+ regards
+
+
+ Posts: 156 | Registered: Nov 1999 | IP:
+
+ nuggie
+ Junior Member
+
+ Member # 3304
+ Member Rated:
+ posted 14 July 2001 20:23
+
+ Ice Dragon:
+ Look here at the ringtone info.
+ web page
+ [ 14 July 2001 20:26: Message edited 2 times, lastly by nuggie
+ ]
+
+
+ Posts: 27 | From: Westcoast, Poland | Registered: Feb 2001 |
+ IP:
+
+ Rayborg
+ Newbie
+
+ Member # 5357
+ Rate Member posted 19 July 2001 14:37
+
+ How does it works with a Nokia 3310?
+ I think there are other HexValues, but I´m not able to find
+ them! Please help me!
+
+ Posts: 8 | From: Germany | Registered: Jul 2001 | IP:
+
+ Ice Dragon
+ Freak Poster
+
+ Member # 3365
+ Member Rated:
+ posted 23 July 2001 03:32
+
+
+ quote:
+
+ Originally posted by Rayborg:
+ How does it works with a Nokia 3310?
+ I think there are other HexValues, but I´m not able to find
+ them! Please help me!
+
+
+ Still use the search string: "8005020A01".
+ First stop should be the Special alert tone.
+ You will notice that previously the tones have 5A0C, 400C,
+ 5A25, 400C values. With the 3310, it uses the 5B0C, 400C,
+ 5A25, 400c values.
+ "5B0C" is a "dit" with a duration of 0C
+ "5B25" is a "dat" with a duration of 25
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ Pressing F3 will take you to the next found string. This is
+ the Standard alert. It uses the 5619, 400A, 5618, 400A values.
+ "5619" is a "dit" with a duration of 19
+ "400A" is a pause with a duration of 0A
+ Again pressing F3 will take you to the next found string. This
+ is the Ascending alert. It uses the 5B0C, 400C, 5B25, 400C
+ values.
+ "5B0C" is a "dit" with a duration of 0C
+ "5B25" is a "dat" with a duration of 25
+ "400C" is a pause with a duration of 0C
+ "4025" is a pause with a duration of 25
+ The alert tones on the 3310 reside in the MCU part of the full
+ flash.
+ Best regards and cheers...
+ [ 23 July 2001 03:45: Message edited 1 time, lastly by Ice
+ Dragon ]
+ --------------------
+ "Keyboard not found. Press F1 to continue."
+ ICQ#:97427188
+ -------------------
+ Send me private messages if any, no kinky stuff though. :-)
+
+
--- /dev/null
+
+ Linux kernel coding style
+
+This is a short document describing the preferred coding style for the
+linux kernel. Coding style is very personal, and I won't _force_ my
+views on anybody, but this is what goes for anything that I have to be
+able to maintain, and I'd prefer it for most other things too. Please
+at least consider the points made here.
+
+First off, I'd suggest printing out a copy of the GNU coding standards,
+and NOT read it. Burn them, it's a great symbolic gesture.
+
+Anyway, here goes:
+
+
+ Chapter 1: Indentation
+
+Tabs are 8 characters, and thus indentations are also 8 characters.
+There are heretic movements that try to make indentations 4 (or even 2!)
+characters deep, and that is akin to trying to define the value of PI to
+be 3.
+
+Rationale: The whole idea behind indentation is to clearly define where
+a block of control starts and ends. Especially when you've been looking
+at your screen for 20 straight hours, you'll find it a lot easier to see
+how the indentation works if you have large indentations.
+
+Now, some people will claim that having 8-character indentations makes
+the code move too far to the right, and makes it hard to read on a
+80-character terminal screen. The answer to that is that if you need
+more than 3 levels of indentation, you're screwed anyway, and should fix
+your program.
+
+In short, 8-char indents make things easier to read, and have the added
+benefit of warning you when you're nesting your functions too deep.
+Heed that warning.
+
+
+ Chapter 2: Placing Braces
+
+The other issue that always comes up in C styling is the placement of
+braces. Unlike the indent size, there are few technical reasons to
+choose one placement strategy over the other, but the preferred way, as
+shown to us by the prophets Kernighan and Ritchie, is to put the opening
+brace last on the line, and put the closing brace first, thusly:
+
+ if (x is true) {
+ we do y
+ }
+
+However, there is one special case, namely functions: they have the
+opening brace at the beginning of the next line, thus:
+
+ int function(int x)
+ {
+ body of function
+ }
+
+Heretic people all over the world have claimed that this inconsistency
+is ... well ... inconsistent, but all right-thinking people know that
+(a) K&R are _right_ and (b) K&R are right. Besides, functions are
+special anyway (you can't nest them in C).
+
+Note that the closing brace is empty on a line of its own, _except_ in
+the cases where it is followed by a continuation of the same statement,
+ie a "while" in a do-statement or an "else" in an if-statement, like
+this:
+
+ do {
+ body of do-loop
+ } while (condition);
+
+and
+
+ if (x == y) {
+ ..
+ } else if (x > y) {
+ ...
+ } else {
+ ....
+ }
+
+Rationale: K&R.
+
+Also, note that this brace-placement also minimizes the number of empty
+(or almost empty) lines, without any loss of readability. Thus, as the
+supply of new-lines on your screen is not a renewable resource (think
+25-line terminal screens here), you have more empty lines to put
+comments on.
+
+
+ Chapter 3: Naming
+
+C is a Spartan language, and so should your naming be. Unlike Modula-2
+and Pascal programmers, C programmers do not use cute names like
+ThisVariableIsATemporaryCounter. A C programmer would call that
+variable "tmp", which is much easier to write, and not the least more
+difficult to understand.
+
+HOWEVER, while mixed-case names are frowned upon, descriptive names for
+global variables are a must. To call a global function "foo" is a
+shooting offense.
+
+GLOBAL variables (to be used only if you _really_ need them) need to
+have descriptive names, as do global functions. If you have a function
+that counts the number of active users, you should call that
+"count_active_users()" or similar, you should _not_ call it "cntusr()".
+
+Encoding the type of a function into the name (so-called Hungarian
+notation) is brain damaged - the compiler knows the types anyway and can
+check those, and it only confuses the programmer. No wonder MicroSoft
+makes buggy programs.
+
+LOCAL variable names should be short, and to the point. If you have
+some random integer loop counter, it should probably be called "i".
+Calling it "loop_counter" is non-productive, if there is no chance of it
+being mis-understood. Similarly, "tmp" can be just about any type of
+variable that is used to hold a temporary value.
+
+If you are afraid to mix up your local variable names, you have another
+problem, which is called the function-growth-hormone-imbalance syndrome.
+See next chapter.
+
+
+ Chapter 4: Functions
+
+Functions should be short and sweet, and do just one thing. They should
+fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
+as we all know), and do one thing and do that well.
+
+The maximum length of a function is inversely proportional to the
+complexity and indentation level of that function. So, if you have a
+conceptually simple function that is just one long (but simple)
+case-statement, where you have to do lots of small things for a lot of
+different cases, it's OK to have a longer function.
+
+However, if you have a complex function, and you suspect that a
+less-than-gifted first-year high-school student might not even
+understand what the function is all about, you should adhere to the
+maximum limits all the more closely. Use helper functions with
+descriptive names (you can ask the compiler to in-line them if you think
+it's performance-critical, and it will probably do a better job of it
+that you would have done).
+
+Another measure of the function is the number of local variables. They
+shouldn't exceed 5-10, or you're doing something wrong. Re-think the
+function, and split it into smaller pieces. A human brain can
+generally easily keep track of about 7 different things, anything more
+and it gets confused. You know you're brilliant, but maybe you'd like
+to understand what you did 2 weeks from now.
+
+
+ Chapter 5: Commenting
+
+Comments are good, but there is also a danger of over-commenting. NEVER
+try to explain HOW your code works in a comment: it's much better to
+write the code so that the _working_ is obvious, and it's a waste of
+time to explain badly written code.
+
+Generally, you want your comments to tell WHAT your code does, not HOW.
+Also, try to avoid putting comments inside a function body: if the
+function is so complex that you need to separately comment parts of it,
+you should probably go back to chapter 4 for a while. You can make
+small comments to note or warn about something particularly clever (or
+ugly), but try to avoid excess. Instead, put the comments at the head
+of the function, telling people what it does, and possibly WHY it does
+it.
+
+
+ Chapter 6: You've made a mess of it
+
+That's OK, we all do. You've probably been told by your long-time Unix
+user helper that "GNU emacs" automatically formats the C sources for
+you, and you've noticed that yes, it does do that, but the defaults it
+uses are less than desirable (in fact, they are worse than random
+typing - a infinite number of monkeys typing into GNU emacs would never
+make a good program).
+
+So, you can either get rid of GNU emacs, or change it to use saner
+values. To do the latter, you can stick the following in your .emacs file:
+
+(defun linux-c-mode ()
+ "C mode with adjusted defaults for use with the Linux kernel."
+ (interactive)
+ (c-mode)
+ (c-set-style "K&R")
+ (setq c-basic-offset 8))
+
+This will define the M-x linux-c-mode command. When hacking on a
+module, if you put the string -*- linux-c -*- somewhere on the first
+two lines, this mode will be automatically invoked. Also, you may want
+to add
+
+(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode)
+ auto-mode-alist))
+
+to your .emacs file if you want to have linux-c-mode switched on
+automagically when you edit source files under /usr/src/linux.
+
+But even if you fail in getting emacs to do sane formatting, not
+everything is lost: use "indent".
+
+Now, again, GNU indent has the same brain dead settings that GNU emacs
+has, which is why you need to give it a few command line options.
+However, that's not too bad, because even the makers of GNU indent
+recognize the authority of K&R (the GNU people aren't evil, they are
+just severely misguided in this matter), so you just give indent the
+options "-kr -i8" (stands for "K&R, 8 character indents").
+
+"indent" has a lot of options, and especially when it comes to comment
+re-formatting you may want to take a look at the manual page. But
+remember: "indent" is not a fix for bad programming.
+
+
+ Chapter 7: Configuration-files
+
+For configuration options (arch/xxx/config.in, and all the Config.in files),
+somewhat different indentation is used.
+
+An indention level of 3 is used in the code, while the text in the config-
+options should have an indention-level of 2 to indicate dependencies. The
+latter only applies to bool/tristate options. For other options, just use
+common sense. An example:
+
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ tristate 'Apply nitroglycerine inside the keyboard (DANGEROUS)' CONFIG_BOOM
+ if [ "$CONFIG_BOOM" != "n" ]; then
+ bool ' Output nice messages when you explode' CONFIG_CHEER
+ fi
+fi
+
+Generally, CONFIG_EXPERIMENTAL should surround all options not considered
+stable. All options that are known to trash data (experimental write-
+support for file-systems, for instance) should be denoted (DANGEROUS), other
+Experimental options should be denoted (EXPERIMENTAL).
--- /dev/null
+1. What do I need?\r
+\r
+- a reasonably recent version of GNU gettext (e.g. 0.10.35)\r
+ Check the version using e.g. msgfmt -V\r
+\r
+- autoconf\r
+\r
+- gnokii distribution :-)\r
+\r
+- if you have the variable LINGUAS in the environment\r
+ (most Red Hats have, no idea about other distributions),\r
+ unset it\r
+\r
+\r
+2. How to make gnokii.pot file?\r
+\r
+gnokii.pot file is a collection of all localizable strings\r
+in the gnokii package. It will be generated automagically\r
+and is included in the standard distribution package.\r
+\r
+If you need to regenerate it, goto "po" directory,\r
+remove gnokii.pot and say\r
+\r
+ make gnokii.pot\r
+\r
+\r
+3.1 How to start translating for a new language?\r
+\r
+First, you would like to contact the authors or write\r
+to the mailing list - maybe there already is someone\r
+working on this translation. \r
+\r
+If you get the OK from the maintainer, there are several\r
+steps to do:\r
+\r
+- add the code of your language to the ALL_LINGUAS line\r
+ in the configure.in file\r
+\r
+ Caution: the language code may differ from the country\r
+ code, e.g. czech language is cs, Czech Republic is cz \r
+\r
+- run autoconf to recreate configure script\r
+\r
+- reconfigure the package (./configure)\r
+\r
+- in the po directory, copy gnokii.pot to <country>.po\r
+\r
+- start translating\r
+ \r
+\r
+3.2 How to merge existing translations with the updated gnokii.pot?\r
+\r
+This is simple. Rename the old file and use msgmerge to create\r
+an updated one:\r
+\r
+ mv cs.po cs.po.bak\r
+ msgmerge -o cs.po cs.po.bak gnokii.pot\r
+\r
+\r
+4. How to generate a .mo file\r
+\r
+When you say make in the po directory, all existing\r
+translations will be generated. The suffix will be .gmo.\r
+\r
+If you want to do this manually, use the msgfmt utility, e.g.\r
+\r
+ msgfmt -o cs.mo -v cs.po \r
+\r
+\r
+5. How to install the files\r
+\r
+Again, the makefile takes care of this. Simply use (as root)\r
+\r
+ make install\r
+\r
+in the po directory. If you want to do this manually (and/or\r
+for your language only), move the .mo file to\r
+/usr/share/locale/<your locale>/LC_MESSAGES/gnokii.mo \r
+\r
+\r
+I'm from Czech republic, so I did (well, I did not, but if you would\r
+like to localize gnokii, you should :-):\r
+\r
+ cd po\r
+ make gnokii.pot\r
+ cp gnokii.pot cs.po\r
+ <translating messages in cs.po>\r
+ <checking the translations using> msgfmt -o cs.mo -v cs.po\r
+ make\r
+ make install\r
+\r
+And now:\r
+\r
+SnowWhite:/tmp/gnokii$ export LC_MESSAGES=cs_CZ\r
+SnowWhite:/tmp/gnokii$ ./gnokii --version\r
+GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. <hugh@linuxcare.com>\r
+ Kompilace: 19:09:02 Mar 13 1999 pro model 6110 na portu /dev/ttyS0 \r
+SnowWhite:/tmp/gnokii$ \r
+\r
+The second line is in czech language :-) There are some problems - for\r
+example with "Mar" which is substitute by the C preprocessor.\r
+\r
--- /dev/null
+NOTE for command line gnokii:
+
+--netmonitordata\r
+\r\r
+ we have used two data structure, defined in gnokii.h :\r
+\r
+ PARAM_INFO_MON wich is a single linked recursive list of pointers,\r
+ each pointers contain the complete description of one netmonitor param.\r
+\r
+ ///////////////////////////////////////////////////////////////////////\r
+ // start->next->next->next-> ...->next->NULL\r
+ // | | | |\r
+ // V V V V\r
+ // par0 par1 par2 parN\r
+ ///////////////////////////////////////////////////////////////////////\r
+ \r
+ OUT_INFO_MON, contains parameters as specified\r
+ from the command line and an array of data pointers requested by user,\r
+ each one point to a single PARAM_INFO_MON\r
+ for optimization reason, also we filled in one array of required screen.\r
+\r
+\r
+ this the block diagram of program:\r
+ \r
+ PARAM_INFO_MON *info:\r
+ OUT_INFO_MON *out:\r
+\r
+ netmonitordata()\r
+\r
+ check for -S option, assign filename\r
+ \r
+ check for -I option, assign filename\r
+ \r
+ autodetect_phonemodel_phone_version() This is TO DO\r
+ \r
+ info = get_min_param_info() // nedeed here, so later we can check args param\r
+ \r
+ // here we check command line arguments\r
+ if -I option\r
+\r
+ for each line\r
+ do\r
+ parse_check(f_argc, f_argv, info, file, line)\r
+ done\r
+ else\r
+ parse_check(argc, argv, info, NULL, 0)\r
+ fi\r
+\r
+ \r
+ // HERE, ALL IS CHECKED\r
+ \r
+ // here we make OUT_INFO_MON\r
+ if -I option\r
+\r
+ for each line\r
+ do\r
+ out = parse_process(f_argc, f_argv, info, file, line)\r
+\r
+ nmd_output(out)\r
+\r
+ free(out)\r
+ done\r
+ else\r
+ out = parse_process(argc, argv, info, NULL, 0)\r
+\r
+ nmd_output(out)\r
+\r
+ free(out)\r
+ fi\r
--- /dev/null
+\r
+ Common information:\r
+ \r
+ For more install/compilation information see the INSTALL file.\r
+ \r
+ (!) Makefiles support make install prefix=<your_directory> \r
+ for package building. You can use it example in for .spec:\r
+ \r
+ ./configure --prefix=/usr\r
+ make install prefix=$RPM_BUILD_ROOT/usr\r
+\r
+ (You not need create any dirs - all make make install.)\r
+\r
+ For a installation procedure is used 'make install' or\r
+ 'make install prefix=', and all outputs from this routine must be \r
+ correct. Please, not make any correction in your package specific \r
+ build system (example use 'cp' in package routines - .spec - \r
+ it is job for Makefiles). Write more different routines for \r
+ instalation is good way to hell...\r
+ \r
+ 'make install' not install documentation, because for this use \r
+ any distribution itself routines. If you want install docs via\r
+ Makefile you must type 'make install-docs' \r
+\r
+ Debian:\r
+ \r
+ 1/ Add new lines to Debian/changelog and set corect verion in this\r
+ file.\r
+\r
+ 2/ Check files: rules, menu, docs\r
+\r
+ 3/ Well, because gnokii's debian directory is in subdirectory \r
+ 'packaging' and it is total non-standard for Debian package \r
+ building system, you must firstly type in top directory:\r
+\r
+ # ln -s packaging/Debian debian \r
+ \r
+ 3/ In source type:\r
+\r
+ # debian/rules binary\r
+ # debian/rules clean\r
+\r
+ 4/ Delete symlink\r
+\r
+ # rm debian\r
+\r
+ \r
+\r
+ FreeBSD:\r
+\r
+ \r
+\r
+ RedHat:\r
+\r
+\r
+\r
+\r
+\r
+ Win32:\r
+
\ No newline at end of file
--- /dev/null
+Subject: RE: Xgnokii in win32 ?\r
+Date: Mon, 29 Nov 1999 08:45:31 +0100\r
+From: Acquadro Daniele <acquadro.daniele@logicasiel.it>\r
+To: marcinw0@poczta.onet.pl\r
+CC: gnokii <gnokii@net.lut.ac.uk>\r
+\r
+Hi ,\r
+gtk for windows can be donloaded from www.gtk.org. On the left there's a\r
+link to GTK+ on win32 (on the bottom of the page).\r
+\r
+To compile xGnokii, using VC ide, you have to create a new win32 CONSOLE\r
+application (NOT a win32 application) and then add the libraries.\r
+TO COMPILE you need those libraries\r
+gdk-1.3.lib\r
+gtk-1.3.lib\r
+glib-1.3.lib\r
+\r
+ bye\r
+ Daniele\r
+> -----Original Message-----\r
+> From: Marcin Wiacek [SMTP:marcinw0@poczta.onet.pl]\r
+> Sent: domenica 28 novembre 1999 22.50\r
+> To: GNU Nokia mailing List\r
+> Subject: Xgnokii in win32 ?\r
+>\r
+>\r
+> Hi,\r
+>\r
+> I want to know only, where can I get GTK libraries for win32 (they're\r
+> required for compiling xgnokii) from ?\r
+>\r
+> Or maybe somebody will write on the list/some WWW page, what to do to\r
+> compile xgnokii in win32 (how to replace GTK libraries with win procedures\r
+> -\r
+> I think, it will be better) ?\r
+>\r
+> ...maybe I shouldn't ask for it, but it isn't written in gnokii source...\r
+>\r
+> Regards,\r
+>\r
+> Marcin\r
+>\r
--- /dev/null
+Do: Markus Plail\r
+Temat: RE: RE:\r
+\r
+\r
+Hi,\r
+\r
+> Sorry for the confusion. I wrote the subject (getsms for 6210) in \r
+> the CC field.\r
+No problem :-)\r
+\r
+> So this is what I want to try, in linux btw. U wrote that u can \r
+> give some information on that topic.\r
+OK. Good.\r
+\r
+First of all, you HAVE to understand, how/where are created all phone functions. Look into n7110.c for N7110_Functions. This is our structure for each function - getting SMS, etc. You have pointers to each function sending request.\r
+\r
+Example: N6110_NetMonitor for netmonitor function.\r
+\r
+If each function (let's say N6110_NetMonitor) you send frame for phone:\r
+-----------------------------\r
+ unsigned char req[] = { 0x00, 0x01, 0x7e, 0x00 };\r
+ \r
+ GSM_Error error;\r
+ \r
+ error=N6110_EnableExtendedCommands(0x01);\r
+ if (error!=GE_NONE) return error;\r
+\r
+ CurrentNetmonitor=Screen;\r
+\r
+ req[3]=mode;\r
+\r
+ return N6110_SendMessageSequence\r
+ (20, &CurrentNetmonitorError, 4, 0x40, req);\r
+---------------------------\r
+In req you prepare it (see 6110.txt/7110.txt for frame for netmonitor and compare it with req).\r
+\r
+First (this is specific for netmonitor and some other) need to send something, we call EnableExtendedCommands - we must send special frame and wait for answer. And ONLY after it phone will answer with 0x40 frames. For SMS in 6210 it's not required.\r
+\r
+After it we set pointer to structure given by user (pointers are declared in gsm-api.c & gsm-api.h): CurrentNetmonitor=Screen;\r
+\r
+Prepare frame send to phone...\r
+\r
+And use N6110_SendMessageSequence -> first is, how long we can wait for phone answer (20), next: what variable is used to see, if phone answered (I will later describe more - variable created in gsm-api.c & gsm-api.h), how many bytes in req, frame type and req.\r
+\r
+That's all here.\r
+\r
+All answers are handled in N7110_DispatchMessage\r
+\r
+In example look for:\r
+\r
+ fprintf(stdout, _("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]);\r
+\r
+You copy formatted answer to structure pointed by CurrentNetmonitor (in example) and set CurrentNetmonitorError to GE_NONE (it makes, that N6110_SendMessageSequence returns: NO error). That's all.\r
+--------------------\r
+If you understand, let's start:\r
+\r
+1.need to make new N7110_GetSMSFolders similiar to N6110_GetSMSFolders (send frame - it's described in 7110.txt: "Get folder names", wait for answer and return it) and set N7110_Functions to point on it (in line 127).\r
+\r
+After it we will be able to make "real" getsms...\r
+\r
+Any questions ?\r
+\r
+Pozdrowienia/Best Regards\r
+--\r
+Marcin Wiacek -> mailto:marcinwiacek@topnet.pl http://marcin-wiacek.topnet.pl (http://www.fkn.pl/marcinw) -> netmonitor, firmware, mygnokii (GSM & Nokia)\r
+http://www.mds.mdh.se/~cel95eig/mygnokii/ & http://grumble.zereau.com/gnokii/ & http://reinhold.bachrain.de/ -> mygnokii mirrors
\ No newline at end of file
--- /dev/null
+//SCKL1584 \r
+BODY:\r
+IA:\r
+OPER ariel\r
+Link up\r
+N\r
+\r
+M SMS\r
++6421XXXXXX/+6421YYYYYY\r
+6:LINKUP\r
+--\r
+IA:\r
+OPER ariel\r
+Link down\r
+N\r
+\r
+M SMS\r
++6421XXXXXX/+6421YYYYYY\r
+8:LINKDOWN\r
--- /dev/null
+\r
+1.see Smart Messaging 2.0 for info, what the DMCP is\r
+\r
+2.I didn't have success in changing menus via cable (without sending SMS).\r
+ Here is example foogle funtion. You will see only "Nokia service update failed"\r
+------------------------------------\r
+int foogle(char *argv[])\r
+{\r
+ GSM_NetworkInfo NetworkInfo;\r
+ int i;\r
+\r
+ char buffer[100]= { 0x0c, 0x01,\r
+ 0x06, /* User Data Header Length */\r
+ 0x05, /* IEI: application port addressing scheme, 16 bit address */\r
+ 0x04, /* IEDL (IED length ?) */\r
+ 0x15, /* destination address: high byte */\r
+ 0x84, /* destination address: low byte */\r
+ 0x00, /* originator address: high byte */\r
+ 0x00}; /* originator address: low byte */\r
+\r
+ int MSGLEN=9;\r
+\r
+ /* Initialise the code for the GSM interface. */ \r
+\r
+ fbusinit(NULL);\r
+\r
+ buffer[MSGLEN++]='B';\r
+ buffer[MSGLEN++]='O'; \r
+ buffer[MSGLEN++]='D';\r
+ buffer[MSGLEN++]='Y';\r
+ buffer[MSGLEN++]=':';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='I';\r
+ buffer[MSGLEN++]='A';\r
+ buffer[MSGLEN++]=':';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='O';\r
+ buffer[MSGLEN++]='P';\r
+ buffer[MSGLEN++]='E';\r
+ buffer[MSGLEN++]='R';\r
+ buffer[MSGLEN++]=' ';\r
+ buffer[MSGLEN++]='a';\r
+ buffer[MSGLEN++]='l';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='L';\r
+ buffer[MSGLEN++]='i';\r
+ buffer[MSGLEN++]='n';\r
+ buffer[MSGLEN++]='k';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='N';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='M';\r
+ buffer[MSGLEN++]=' ';\r
+ buffer[MSGLEN++]='S';\r
+ buffer[MSGLEN++]='M';\r
+ buffer[MSGLEN++]='S';\r
+ buffer[MSGLEN++]=10;\r
+ buffer[MSGLEN++]='+';\r
+ buffer[MSGLEN++]='4';\r
+ buffer[MSGLEN++]='8';\r
+ buffer[MSGLEN++]='6';\r
+ buffer[MSGLEN++]='0';\r
+ buffer[MSGLEN++]='2';\r
+ buffer[MSGLEN++]='9';\r
+ buffer[MSGLEN++]='5';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='/';\r
+ buffer[MSGLEN++]='+';\r
+ buffer[MSGLEN++]='4';\r
+ buffer[MSGLEN++]='8';\r
+ buffer[MSGLEN++]='6';\r
+ buffer[MSGLEN++]='0';\r
+ buffer[MSGLEN++]='2';\r
+ buffer[MSGLEN++]='9';\r
+ buffer[MSGLEN++]='5';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+ buffer[MSGLEN++]='1';\r
+\r
+ for (i=0;i<MSGLEN;i++) {\r
+ fprintf(stdout,_("%c"),buffer[i]);\r
+ }\r
+\r
+ Protocol->SendMessage(MSGLEN, 0x12, buffer);\r
+ GSM->GetNetworkInfo(&NetworkInfo); //need to make something\r
+\r
+ \r
+ GSM->Terminate();\r
+\r
+ return 0;\r
+}\r
+-----------------------------------\r
+3.to change via SMS - read parts of email sent by Martin Lucina [mato@kotelna.sk]\r
+-----------------------------------\r
+\r
+1. First of all, use the OPER (Operator) services rather than the Nokia\r
+ services. There's probably no reason why you couldn't use either but\r
+ there may be extra hooks in the phone firmware regarding Nokia\r
+ services that I don't know about.\r
+\r
+2. Make sure that "Operator access number 1" and "Operator access number\r
+ 2" are set correctly in the services menu. The former should be set\r
+ to the SMS centre the messages you send are going to come from\r
+ (important, send yourself a test message and check it's details, some\r
+ operators set the sending SMSC number to one different from the one\r
+ you originally sent the message to). The latter should be the number\r
+ of the MS you are sending the SMS from.\r
+\r
+3. Don't send the messages as binary NBS messsages using the UDH. I\r
+ haven't been able to get this method to work and besides, the //SCK\r
+ compatibility header works just fine. \r
+ \r
+ Also, while I haven't seen this, it's possible that if you send a\r
+ message in binary format, the destination MS will reply in binary\r
+ format. This makes the reply useless if you are sending from another\r
+ NBS-aware phone, since the NBS router will most likely silently\r
+ discard it (or try to forward it to the phones TTML/DMCP server,\r
+ which won't help either). \r
+ \r
+ If you send the messages as text, the replies I've seen also come\r
+ back as text so you can retrieve them from the phone in the normal\r
+ fashion.\r
+\r
+One caveat I've noticed with sending NBS messages using the //SCK\r
+compatibility header is that the NBS grammar in the Nokia SM spec\r
+version 2 contradicts the grammar in the original Intel NBS spec. Nokia\r
+says you can using either a newline or space as the delimiter after\r
+"//SCK", it turns out that you _must_ use a space (as stated in the\r
+Intel spec). Of course you can still stick a newline in afterwards.\r
+\r
+I have attached a test file that will add two menu items that send SMS\r
+messages to your services menu. I send this to the phone using\r
+\r
+$ sendsms +6421XXXXXX < addsms\r
+\r
+[...]\r
+\r
+Cheers,\r
+\r
+-- \r
+Martin Lucina http://www.kotelna.sk/mato/ Wellington, New Zealand \r
+I've always been mad I know I've been mad like the most of us are \r
+Pretty hard to explain why you're a madman even if you're not mad \r
--- /dev/null
+//SCKL1584 \r
+BODY:\r
+IR:\r
+OPER ariel\r
+Link up\r
--- /dev/null
+Subject: Ringtones
+Date: Wed, 2 Feb 2000 13:32:47 -0000
+From: "Mike Bradley" <mike@trumpington.st>
+To: "GNU Nokia mailing List" <gnokii@net.lut.ac.uk>
+
+Does anyone know anything about the ringtone IDs in the group info? It
+seems that all the various handsets have different ID codes and different
+sets of tones. Is there any order to all this? Here's what I've got:
+
+RINGTONEDESC
+eNam
+100
+
+ 0x10, "Preset",
+ 0x11, "Custom",
+ 0x12, "Ring ring", //
+ 0x13, "Low", //
+ 0x14, "Fly",
+ 0x15, "Mosquito", //
+ 0x16, "Bee", //
+ 0x17, "Intro",
+ 0x18, "Etude",
+ 0x19, "Hunt",
+ 0x1a, "Going up",
+ 0x1b, "City bird", //
+ 0x1e, "Chase",
+ 0x20, "Scifi",
+ 0x23, "Do-mi-so", //
+ 0x24, "Robo N1X",
+ 0x27, "Playground",
+ 0x2b, "That's It!",
+ 0x2f, "Grande valse", //
+ 0x30, "Helan",
+ 0x31, "Fuga",
+ 0x32, "Menuet",
+ 0x33, "Ode to Joy",
+ 0x34, "Elise", //
+ 0x35, "Mozart 40", //
+ 0x36, "Piano Concerto", //
+ 0x37, "William Tell",
+ 0x38, "Badinerie", //
+ 0x39, "Polka",
+ 0x3a, "Attraction", //
+ 0x3c, "Polite",
+ 0x3d, "Persuasion",//
+ 0x43, "Tick tick",//
+ 0x44, "Samba",//
+ 0x46, "Orient",//
+ 0x47, "Charleston",//
+ 0x49, "Jumping",//
+
+ 0x00, "??"
+};
+
+// the following are also on the 8850
+//Trio
+//Knock knock
+//Cicada
+//Kick
+//Dawn
+//Buffoon
+//Barn dance
+//Basic rock
+//Groovy blue
+//Frantic
+//Baroque
+//Entertainer
+//Indifference
+//Swan Lake
+//Tchaikovsky
+//Liszt
+//Bounce
+
+RINGTONEDESC
+eNam
+100
+
+ 0xff, "Default",
+ 0x2c, "That's It!",
+ 0x2d, "Siren",
+ 0x2e, "Tripod",
+ 0x2f, "Ring ring",
+ 0x30, "Low",
+ 0x31, "Intro",
+ 0x32, "Bee",
+ 0x33, "Etude",
+ 0x34, "Polite",
+ 0x35, "Persuasion",
+ 0x36, "Attraction",
+ 0x37, "Bumblebee",
+ 0x38, "Menuet",
+ 0x39, "Grande valse",
+ 0x3a, "Ode to Joy",
+ 0x3b, "Mozart 40",
+ 0x3c, "Elise",
+ 0x3d, "William Tell",
+ 0x3e, "Charleston",
+ 0x3f, "Helan",
+ 0x40, "Left Hand",
+ 0x41, "Right Hand",
+ 0x42, "Happy Birthday",
+ 0x43, "Playground",
+ 0x44, "Fuga",
+ 0x45, "Chase",
+ 0x46, "Classical",
+ 0x47, "Hungarian",
+ 0x48, "Valkyrie",
+ 0x49, "Badinerie",
+ 0x4a, "Bach #3",
+ 0x4b, "Swan Lake",
+ 0x4c, "Tchaikovsky",
+ 0x4d, "Samba",
+ 0x4e, "Mosquito",
+ 0x00, "??"
+};
--- /dev/null
+Od: owner-gnokii@net.lut.ac.uk w imieniu Bernhard Mähr [Bernhard.Maehr@GMX.at]\r
+Wysłano: 25 listopada 2000 17:06\r
+Do: gnokii@net.lut.ac.uk\r
+Temat: Telefonbucheditor 7110 \r
+\r
+For everyone who trys to decode the 7110 FBUS protocol a tip:\r
+If in the Windows-Registry HKEY_LOCAL_MACHINE\SOFTWARE\moosy.development\TBE7110 \r
+the String Data is replaced with a Binary with the name Data the program shows a \r
+error message at the begin but it also enables a option debug. This option \r
+displays a second window showing the trace of the FBUS. So it should be easier \r
+to decode the protocol. So it is possible to see the communiction while loading \r
+the phone numbers, adresses,... and also syncronizing the calendar. \r
+ \r
+I know it is a little bit unfair, don't tell me that.\r
+ \r
+I hope this is useful for someone\r
+ \r
+Bernhard Mähr\r
+ \r
--- /dev/null
+To irda sniffs use irda_intercept.tgz\r
+(http://www.dev-thomynet.de/nokworld/noktrace/index.html or \rtools directory
+- unpacked source is there) from Thomas Schneider
+\r
+how to use it:\r
+you MUST stop irda support ('rcirda stop' fur SUSE)\r
+to free the infrared tty port.\r
+just type irda_intercept and you should see\r
+irda packages of port /dv/ttyS1 (hardcoded in source).\r
+The tool writes also to file 'out.trc'.\r
+Use this file to decode: 'gnokii --decodefile out.trc'\r
+(mygnokii have to be compiled with debug)
+\r
\ No newline at end of file
--- /dev/null
+/*********************************************************************
+ *
+ * Filename: fcs.c
+ * Version: 0.1
+ * Description: fcs calculation routines
+ * Status: Experimental.
+ * Author: Dag Brattli <dagb@cs.uit.no>
+ * Created at: Mon Aug 4 20:40:53 1997
+ * Modified at: Sat Jul 17 08:43:59 1999
+ * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ * Sources: crc.h by Dag Brattli <dagb@cs.uit.no> in
+ * linux-irda-project,
+ * ppp.c by Michael Callahan <callahan@maths.ox.ac.uk>
+ * Al Longyear <longyear@netcom.com>
+ *
+ ********************************************************************/
+
+#include "fcs.h"
+
+__u16 irda_fcs16_table[256] =
+{
+ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
+ 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
+ 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
+ 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
+ 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
+ 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
+ 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
+ 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
+ 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
+ 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
+ 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
+ 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
+ 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
+ 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
+ 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
+ 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
+ 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
+ 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
+ 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
+ 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
+ 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
+ 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
+ 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
+ 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
+ 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
+ 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
+ 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
+ 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
+ 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
+ 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
+ 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
+ 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
+};
+
+unsigned short fcs_calc( __u16 oldfcs, __u8 *buf, int len) {
+ __u16 fcs = oldfcs;
+
+ while ( len--)
+ fcs = IR_FCS(fcs, *buf++);
+ return (fcs);
+}
--- /dev/null
+/*********************************************************************
+ *
+ * Filename: fcs.h
+ * Version:
+ * Description: fcs routines for irda
+ * Status: Experimental.
+ * Author: Dag Brattli <dagb@cs.uit.no>
+ * Created at: Mon Aug 4 20:40:53 1997
+ * Modified at: Sat Jul 17 08:43:59 1999
+ * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ * Sources: crc.h by Dag Brattli <dagb@cs.uit.no> in
+ * linux-irda-project
+ *
+ ********************************************************************/
+
+#ifndef FCS_H
+#define FCS_H
+
+#include <linux/types.h>
+
+#define INIT_FCS 0xffff /* Initial FCS value */
+#define GOOD_FCS 0xf0b8 /* Good final FCS value */
+
+#define IR_FCS(fcs, byte)((fcs >> 8)^irda_fcs16_table[ (fcs^byte) & 0xff])
+
+unsigned short fcs_calc( __u16 oldfcs, __u8 *buf, int len);
+
+extern __u16 irda_fcs16_table[];
+
+#endif
--- /dev/null
+/*********************************************************************
+ *
+ * Filename: irda.h
+ * Version:
+ * Description: irda-specific defines
+ * Status: Experimental.
+ * Author: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ * Created at:
+ * Modified at:
+ * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ *
+ * Copyright (c) 1999 Thomas Schneider, All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * IN NO EVENT SHALL THOMAS SCHNEIDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THOMAS SCHNEIDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THOMAS SCHNEIDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER
+ * IS ON AN "AS IS" BASIS, AND THOMAS SCHNEIDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+ * MODIFICATIONS.
+ *
+ * This material is provided "AS-IS" and at no charge.
+ *
+ ********************************************************************/
+
+#ifndef __NOKTRACE_IRDA_H
+#define __NOKTRACE_IRDA_H
+
+#include <glib.h>
+
+
+/*
+ * service hints
+ * -------------
+ * - first byte
+ */
+#define PNP_COMP 0x00
+#define PDA_PALM 0x01
+#define COMPUTER 0x02
+#define PRINTER 0x03
+#define MODEM 0x04
+#define FAX 0x05
+#define LAN 0x06
+#define EXTENS 0x07
+
+
+/*
+ * output-defines
+ * --------------
+ */
+#define OUT_ALL 0x01
+#define OUT_IRLAP 0x02
+#define OUT_IRLMP 0x03
+#define OUT_HIGH_LEVEL 0x04
+
+#define OUT_FORM_LINE 0x01
+#define OUT_FORM_STEP 0x02
+
+#define OUT_SCREEN 0x01
+#define OUT_FILE 0x02
+
+/*
+ * some types
+ */
+typedef unsigned char BYTE;
+typedef unsigned char U8 ;
+typedef unsigned short U16 ;
+typedef unsigned int U32 ;
+
+/*
+ * some structs
+ */
+typedef struct
+{
+ U16 length;
+ U16 a_offset;
+ BYTE buf[4096];
+} RAW_FRAME;
+
+typedef struct
+{
+ U16 bof_length;
+ BYTE * bof;
+ BYTE a;
+ BYTE c;
+ U16 info_length;
+ BYTE * info;
+ U32 fcs; /* must be U32 because escaped fcs */
+ BYTE eof_length;
+ BYTE * eof;
+ BYTE esc_nr; /* all ce's - include also esc_fcs */
+ BYTE esc_fcs; /* nr of ce's in fcs */
+ U16 computed_fcs;
+} IRLAP_FRAME;
+
+typedef struct
+{
+ U16 bof_length;
+ BYTE * bof;
+ BYTE a;
+ BYTE c;
+ U16 info_length;
+ BYTE * info;
+ U32 fcs; /* must be U32 because escaped fcs */
+ BYTE eof_length;
+ BYTE * eof;
+ BYTE esc_nr; /* all ce's - include also esc_fcs */
+ BYTE esc_fcs; /* nr of ce's in fcs */
+ U16 computed_fcs;
+} IRLAP_RAW_FRAME;
+
+typedef struct
+{
+ U8 cmd;
+ U8 dlsap_sel;
+ U8 slsap_sel;
+ U16 info_length;
+ U8 * info;
+} IRLMP_FRAME;
+
+typedef struct
+{
+ BYTE baud_rate_master;
+ BYTE baud_rate_client;
+ BYTE baut_rate_connection;
+ BYTE state;
+} NEGOTATION_PARAM;
+
+typedef struct
+{
+ BYTE irlap_state;
+ BYTE irlmp_state;
+ U32 p_src_adr; /* primary - source address */
+ U32 s_src_adr; /* secondary - source address */
+ U8 conn_adr; /* connection address */
+} CONNECTION;
+
+typedef struct
+{
+ U32 prim_nr_bytes; /* bytes from primary station */
+ U32 sec_nr_bytes ; /* bytes from secomdary station */
+ U32 prim_fcs_errors; /* nr of fcs-errors from prim. */
+ U32 sec_fcs_errors; /* nr of fcs-errors from sec. */
+ U32 prim_frames; /* frames from primary */
+ U32 sec_frames; /* frames from secondary */
+ U32 prim_esc_nr; /* nr of ecsapes from primary */
+ U32 sec_esc_nr; /* nr of escapes from secondary */
+} CONNECT_STATISTIC;
+
+typedef struct
+{
+ BYTE deep; /* deep of output (L2, L3, ... */
+ BYTE form; /* kind of output (line, steps) */
+ BYTE bit_output; /* if output as bits */
+ BYTE dest; /* file, screen */
+ FILE input_fd; /* input FILE */
+ GString infile_name; /* name of input-file */
+ FILE output_file; /* output FILE */
+ GString outfile_name; /* name of input-file */
+} OUTPUT_PARAMS;
+
+
+#endif /* __NOKTRACE_IRDA_H */
+
--- /dev/null
+/*********************************************************************
+ *
+ * Filename: irlap.h
+ * Version:
+ * Description: in this file you can only find define´s for parts
+ * of the irlap-layer. If you want read the typedef´s
+ * for struct´s look into irda.h
+ * Status: Experimental.
+ * Author: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ * Created at:
+ * Modified at:
+ * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ *
+ * Copyright (c) 1999 Thomas Schneider, All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * IN NO EVENT SHALL THOMAS SCHNEIDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THOMAS SCHNEIDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THOMAS SCHNEIDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER
+ * IS ON AN "AS IS" BASIS, AND THOMAS SCHNEIDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+ * MODIFICATIONS.
+ *
+ * This material is provided "AS-IS" and at no charge.
+ *
+ ********************************************************************/
+/*
+ * in this file you can only find define´s for parts
+ * of the irlap-layer. If you want read the typedef´s
+ * for struct´s look into irda.h
+ */
+
+#ifndef __IRLAP_H
+#define __IRLAP_H
+
+#include <glib.h>
+
+
+#define IRDA_XBOF 0xFF
+#define IRDA_BOF 0xC0
+#define IRDA_EOF 0xC1
+
+/*
+ * IrLAP-OFFSETS
+ * -------------
+ */
+#define IRLAP_A_OFF 0x00
+#define IRLAP_C_OFF 0x01
+#define IRLAP_I_OFF 0x02
+
+/*
+ * IrLAP-DEFINES
+ * -------------
+ */
+#define IRLAP_XBOF 0xFF
+#define IRLAP_BOF 0xC0
+#define IRLAP_EOF 0xC1
+#define IRLAP_CE 0x7D
+#define IRLAP_ESC IRLAP_CE
+
+#define IRLAP_ESC_MASK (~0xDF)
+
+#define IRLAP_A_LENGTH 1
+#define IRLAP_C_LENGTH 1
+#define IRLAP_FCS_LENGTH 2
+#define IRLAP_EOF_LENGTH 1
+
+#define IRLAP_C_MASK 0x03
+#define IRLAP_U_FRAME 0x03
+#define IRLAP_S_FRAME 0x01
+#define IRLAP_PF_BIT_MASK (~0xEF)
+#define IRLAP_PF_BIT_CLR_MASK (~0x10)
+#define IRLAP_Nr_CLR_MASK 0x1F
+
+/*
+ * IRLAP U cmd/response
+ * --------------------
+ * - all defines use a cleared P/F-Bit
+ * (irlap_frame -> c & IRLAP_PF_BIT_CLR_MASK)
+ * - page 26 in IrLAP-spec
+ * - if no _CMD or _RSP name is _CMD_RSP (e.g. 0x83)
+ */
+#define IRLAP_SNRM_RNRM 0x83
+#define IRLAP_DISC_RD 0x43
+#define IRLAP_UI_UI 0x03
+#define IRLAP_XID_CMD 0x2F
+#define IRLAP_TEST_TEST 0xE3
+#define IRLAP_UA_RSP 0x63
+#define IRLAP_FRMR_RSP 0x87
+#define IRLAP_DM_RSP 0x0F
+#define IRLAP_XID_RSP 0xAF
+
+/*
+ * IRLAP S cmd/response
+ * --------------------
+ * - all defines use a cleared P/F-Bit and cleared Nr
+ * (irlap_frame -> c & IRLAP_PF_BIT_CLR_MASK & IRLAP_Nr_CLR_MASK)
+ * - page 32 in IrLAP-spec
+ * - for both (cmd and response) the same mask is defined
+ */
+#define IRLAP_RR 0x01
+#define IRLAP_RNR 0x05
+#define IRLAP_REJ 0x09
+#define IRLAP_SREJ 0x0D
+
+
+/*
+ * irlap-connection-states
+ * -----------------------
+ * - negotation defines are also conn-states
+ */
+#define IRLAP_DISC 0x00 /* disconnected */
+#define IRLAP_NDM 0x01 /* normaldisconnect mode */
+#define IRLAP_NRM 0x02 /* normal response mode */
+
+/*
+ * negotation-defines
+ * ------------------
+ */
+/* negotation-states */
+#define NEG_SNRM_OK 0x01
+#define NEG_WAIT_FOR_UA 0x02
+#define NEG_UA_OK 0x03
+#define NEG_COMPLETE 0x04
+
+#define B576000 576000
+#define B1152000 1152000
+
+#define IRLAP_SNRM_SRC_ADR 0x00 /* src in SNRM */
+#define IRLAP_SNRM_DEST_ADR 0x04 /* dest in SNRM */
+#define IRLAP_SNRM_CONN_ADR 0x08 /* connection-adr in SNRM */
+#define IRLAP_UA_SRC_ADR 0x00 /* src in UA */
+#define IRLAP_UA_DEST_ADR 0x04 /* dest in UA */
+#define IRLAP_NEG_SNRM_PARAM_OFF 0x09 /* src(U32) dest(U32) adr(8) */
+#define IRLAP_NEG_UA_PARAM_OFF 0x08 /* src(U32) dest(U32) */
+#define IRLAP_NEG_BPS_PI 0x01 /* IrLAP page 39 */
+#define IRLAP_PI_LENGTH 1 /* no more longer used */
+#define IRLAP_PL_LENGTH 1 /* no more longer used */
+
+/*
+ * defines for decode xid-cmd
+ * --------------------------
+ */
+#define XID_C_FI_OFFSET 0x00 /* offset for format identifier (U8) */
+#define XID_C_SRC_ADR_OFF 0x01 /* offset for source address (U32) */
+#define XID_C_DEST_ADR_OFF 0x05 /* offset for dest address (U32) */
+#define XID_C_DISC_F_OFF 0x09 /* offset for discovery flags (U8) */
+#define XID_C_SLOT_NR_OFF 0x0A /* offset for slot number (U8) */
+#define XID_C_VERSION_OFF 0x0B /* offset for version (U8) */
+#define XID_C_DISC_I_OFF 0x0C /* offset for discovery information */
+#define XID_C_FLAG_TRUE 0x01 /* flags in cmd only if FI == 0x01 */
+#define XID_C_F_SLOT_MASK 0x03 /* mask for slot numbers in di-flag */
+#define XID_C_F_NEW_ADR_M 0x04 /* mask for new device-address-gen. */
+#define XID_C_LAST_SLOT 0xFF /* nr. for last slot in xid-cmd */
+#define XID_C_DISC_I_M_L 0x20 /* max length of discovery info */
+#define XID_C_DI_S_H_OFF 0x0C /* 1. service hint offset in disc-inf */
+#define XID_C_DI_S_H_EX_M 0x07 /* serv.hint extent. mask in disc_inf */
+
+/*
+ * defines for decode xid-rsp
+ * --------------------------
+ */
+#define XID_R_FI_OFFSET 0x00 /* offset for format identifier (U8) */
+#define XID_R_SRC_ADR_OFF 0x01 /* offset for source address (U32) */
+#define XID_R_DEST_ADR_OFF 0x05 /* offset for dest address (U32) */
+#define XID_R_DISC_F_OFF 0x09 /* offset for discovery flags (U8) */
+#define XID_R_SLOT_NR_OFF 0x0A /* offset for slot number (U8) */
+#define XID_R_VERSION_OFF 0x0B /* offset for version (U8) */
+#define XID_R_DISC_I_OFF 0x0C /* offset for discovery information */
+#define XID_R_FLAG_TRUE 0x01 /* flags in rsp only if FI == 0x01 */
+#define XID_R_F_SLOT_MASK 0x03 /* mask for slot numbers in di-flag */
+#define XID_R_F_NEW_ADR_M 0x04 /* mask for new device-address-gen. */
+#define XID_R_LAST_SLOT 0xFF /* nr. for last slot in xid-cmd/rsp */
+#define XID_R_DISC_I_M_L 0x20 /* max length of discovery info */
+#define XID_R_DI_S_H_OFF 0x0C /* 1. service hint offset in disc-inf */
+#define XID_R_DI_S_H_EX_M 0x07 /* serv.hint extent. mask in disc_inf */
+#define XID_R_SNIFF_FRAME 0xFFFFFFFF /* dest address for sniffing */
+
+/*
+ * defines for snrm-cmd
+ * --------------------
+ */
+#define SNRM_CMD_RESET_LEN 0x00 /* no i-field is present */
+#define SNRM_EST_CONNECT_ADR 0xFF /* conn.adr. in case con.establish */
+#define SNRM_C_SRC_ADR_OFF 0x00 /* offset for source address (U32) */
+#define SNRM_C_DEST_ADR_OFF 0x04 /* offset for dest address (U32) */
+#define SNRM_C_N_C_ADR_OFF 0x08 /* new conn. adr. offset (U8) */
+#define SNRM_C_NEG_OFF 0x09 /* negotation-fields offset */
+#define SNRM_BPS_PI 0x01 /* bps-pi */
+#define SNRM_MAX_TAT_PI 0x82 /* max. turn around time pi */
+#define SNRM_DATA_SIZE_PI 0x83 /* data size pi */
+#define SNRM_WIN_SIZE_PI 0x84 /* window size pi */
+#define SNRM_ADD_BOF_PI 0x85 /* addition BOFs pi */
+#define SNRM_MIN_TAT_PI 0x86 /* min. turn around time pi */
+#define SNRM_LD_TT_PI 0x08 /* link disc./threshold time pi */
+
+/*
+ * defines for ua-rsp-frame
+ * ------------------------
+ */
+#define UA_CONNECT_MIN_LENGTH 0x0E /* 14 are min length to use the frame
+ * for response to snrm used to
+ * establish a connection - look at
+ * page 39 - negotation: type 0 params
+ * must be negotiated at both stations
+ * bps and link disc/threshold time -
+ * in this case also src and dest are
+ * used ( 4 + 4 + 3 + 3), page 31 */
+#define UA_WITH_SRC_DST_LEN 0x08 /* ua len with src and dest */
+#define UA_SRC_ADR_OFF 0x00 /* offset for source address (U32) */
+#define UA_DEST_ADR_OFF 0x04 /* offset for dest address (U32) */
+#define UA_NEG_OFF 0x08 /* negotation-fields offset */
+#define UA_BPS_PI 0x01 /* bps-pi */
+#define UA_MAX_TAT_PI 0x82 /* max. turn around time pi */
+#define UA_DATA_SIZE_PI 0x83 /* data size pi */
+#define UA_WIN_SIZE_PI 0x84 /* window size pi */
+#define UA_ADD_BOF_PI 0x85 /* addition BOFs pi */
+#define UA_MIN_TAT_PI 0x86 /* min. turn around time pi */
+#define UA_LD_TT_PI 0x08 /* link disc./threshold time pi */
+
+
+#endif /* __IRLAP_H */
+
--- /dev/null
+#
+#/*********************************************************************
+# *
+# * Filename: Makefile
+# * Version:
+# * Description: Makefile for irda_intercept
+# * Status: Experimental.
+# * Author: Thomas Schneider
+# * Created at: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+# * Modified at: Sun Jul 18 12:03:03 1999
+# * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+# *
+# * Copyright (c) 1999 Thomas Schneider, All Rights Reserved.
+# *
+# * This program is free software; you can redistribute it and/or
+# * modify it under the terms of the GNU General Public License as
+# * published by the Free Software Foundation; either version 2 of
+# * the License, or (at your option) any later version.
+# *
+# * This program is distributed in the hope that it will be useful, but
+# * WITHOUT ANY WARRANTY; without even the implied warranty of
+# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# * General Public License for more details.
+# *
+# * You should have received a copy of the GNU General Public License
+# * along with this program; if not, write to the Free Software
+# * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# *
+# * IN NO EVENT SHALL THOMAS SCHNEIDER BE LIABLE TO ANY PARTY FOR
+# * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+# * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+# * IF THOMAS SCHNEIDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+# * DAMAGE.
+# *
+# * THOMAS SCHNEIDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+# * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER
+# * IS ON AN "AS IS" BASIS, AND THOMAS SCHNEIDER HAS NO OBLIGATION TO
+# * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+# * MODIFICATIONS.
+# *
+# * This material is provided "AS-IS" and at no charge.
+# *
+# ********************************************************************/
+
+#
+# Serial port for communication
+#
+
+MODEMDEVICE=-DMODEMDEVICE="\"/dev/ttyS1\""
+
+COMMON=-Wall -O2 \
+ ${MODEMDEVICE}
+
+all: irda_intercept
+
+
+irda_intercept: irda_intercept.o ../fcs/fcs.o
+ cc ${COMMON} \
+ `gtk-config --cflags` `gtk-config --libs`\
+ irda_intercept.o ../fcs/fcs.o\
+ -o irda_intercept
+
+irda_intercept.o: irda_intercept.c ../include/irda.h ../include/irlap.h
+ cc ${COMMON} \
+ `gtk-config --cflags` \
+ -c irda_intercept.c
+
+../fcs/fcs.o: ../fcs/fcs.c ../fcs/fcs.h
+ cc ${COMMON} \
+ `gtk-config --cflags` \
+ -c $*.c -o $@
--- /dev/null
+/*********************************************************************
+ *
+ * Filename: irda_intercept.c
+ * Version:
+ * Description: intercept irda-traffic incl. negotation and write
+ * output to a file
+ * Status: Experimental.
+ * Author: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ * Created at:
+ * Modified at:
+ * Modified by: Thomas Schneider <nok-trace-men@dev-thomynet.de>
+ *
+ * Copyright (c) 1999 Thomas Schneider, All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * IN NO EVENT SHALL THOMAS SCHNEIDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THOMAS SCHNEIDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THOMAS SCHNEIDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER
+ * IS ON AN "AS IS" BASIS, AND THOMAS SCHNEIDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+ * MODIFICATIONS.
+ *
+ * This material is provided "AS-IS" and at no charge.
+ *
+ ********************************************************************/
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <termios.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <signal.h>
+#include <glib.h>
+#include "../include/irda.h"
+#include "../include/irlap.h"
+#include "../fcs/fcs.h"
+
+#define INIT_BAUDRATE B9600
+
+#define _POSIX_SOURCE 1 /* POSIX compliant source */
+
+#define INITIAL_TIMEOUT 15
+#define DEFAULT_TIMEOUT 5
+
+#define OUTFILE_SUFFIX ".trc"
+#define DEFAULT_OUTFILE "out"OUTFILE_SUFFIX
+
+static int initfdflags = -1; /* Initial file descriptor flags */
+static struct termios old_port_sets; /* old port-termios for restore */
+
+int port_fd;
+
+NEGOTATION_PARAM negotation_param;
+CONNECTION connection;
+
+static speed_t speed_list[8] = { B2400, B9600, B19200, B38400,
+ B57600, B115200, B576000, B1152000 };
+static const char *speed_name[] = { "2400", "9600", "19200", "38400",
+ "57600", "115200", "576000", "1152000"};
+
+/*
+ * negotation
+ * ----------
+ * - in negotation set new device speed
+ */
+void negotation ( IRLAP_FRAME * irlap_frame )
+{
+ BYTE cmd = irlap_frame -> a & 0x01;
+ speed_t new_speed = 0;
+ int i = 0;
+ int m = 0;
+ struct termios set;
+ BYTE tmp = 0;
+
+ /*
+ * snrm-frame
+ * ----------
+ * - 4 src
+ * - 4 dest
+ * - 1 new connection address
+ * - 1 pi
+ * - 1 pl
+ * - [pl] pv
+ * ua-frame
+ * --------
+ * - 4 src
+ * - 4 dest
+ * - 1 pi
+ * - 1 pl
+ * - [pl] pv
+ */
+
+ if ( cmd ) {
+ /*
+ * SNRM - CMD
+ * ----------
+ * - in IrLAP (V. 1.1) page 27
+ * - U32 : src-dev-adr
+ * - U32 : dest-dev-adr
+ * - U8 : connection address
+ * - start of neg. params
+ */
+ if ( irlap_frame -> info_length < ( IRLAP_NEG_SNRM_PARAM_OFF +3 ) ) {
+ printf ("\t==> IrLAP: in SNRM-CMD no Info! <==\n");
+ } else {
+ memcpy ( &connection.p_src_adr,
+ &(irlap_frame -> info[IRLAP_SNRM_SRC_ADR]),
+ sizeof(connection.p_src_adr));
+ memcpy ( &connection.s_src_adr,
+ &(irlap_frame -> info[IRLAP_SNRM_DEST_ADR]),
+ sizeof(connection.s_src_adr));
+ connection.conn_adr = irlap_frame -> info[IRLAP_SNRM_CONN_ADR];
+ if ( irlap_frame -> info[IRLAP_NEG_SNRM_PARAM_OFF] ==
+ IRLAP_NEG_BPS_PI ) {
+ /* really bps-parameter-identifier */
+ if ( irlap_frame -> info[IRLAP_NEG_SNRM_PARAM_OFF + 1] == 1 ) {
+ negotation_param.baud_rate_master =
+ irlap_frame -> info [IRLAP_NEG_SNRM_PARAM_OFF + 2];
+ negotation_param.state = NEG_WAIT_FOR_UA;
+ } else {
+ printf ("\t==> IrLAP: SNRM-CMD: speed in 2 bytes! <==\n");
+ printf ("\t\t==> IrLAP: my max. speed is 115.2 kbps! <==\n");
+ negotation_param.baud_rate_master =
+ irlap_frame -> info [IRLAP_NEG_SNRM_PARAM_OFF + 3];
+ }
+ } else {
+ printf ("\t==> IrLAP: SNRM-CMD: "
+ "No baud rate dictate in 1. byte! <==\n");
+ }
+ }
+ } else {
+ /* UA -rsp */
+ negotation_param.baud_rate_client = irlap_frame -> info [10];
+ negotation_param.state = NEG_UA_OK;
+
+ /* now compute the new speed */
+ tmp =
+ negotation_param.baud_rate_master & negotation_param.baud_rate_client;
+ if ( tmp & 0x01 ) {
+ new_speed = speed_list[i];
+ m = 0;
+ }
+ for ( i=1; i < 7; i++) {
+ tmp = tmp >> 1;
+ if ( tmp & 0x01 ) {
+ new_speed = speed_list[i];
+ m = i;
+ }
+ }
+ if ( m > 5 ) {
+ /* not defined as B... on my system */
+ printf ("Sorry: Required speed (%s baud) not supported!\n",
+ speed_name[m]);
+ } else {
+ printf ("New speed is: %s\n", speed_name[m]);
+ /* now set the new speed */
+ tcgetattr (port_fd, &set);
+ cfsetospeed(&set, new_speed);
+ cfsetispeed(&set, new_speed);
+ tcsetattr(port_fd, TCSANOW, &set);
+ tcgetattr(port_fd, &set);
+ if ( (cfgetospeed(&set) != new_speed) ||
+ (cfgetispeed(&set) != new_speed) ) {
+ printf ("New speed is not set!\n");
+ }
+ }
+ }
+}
+
+/*
+ * decode_irlap_frame
+ * ------------------
+ * - decode the irlap-c-field
+ */
+void decode_irlap_frame ( IRLAP_FRAME * irlap_frame)
+{
+ BYTE cmd = irlap_frame -> a & 0x01;
+ BYTE poll = irlap_frame -> c & (IRLAP_PF_BIT_MASK);
+ BYTE adr = (irlap_frame -> a) >> 1;
+
+ switch ( irlap_frame -> c & IRLAP_C_MASK ) {
+ case IRLAP_U_FRAME:
+ printf ("U-Frame:\tAdr: %02X Nr: %02X ", adr,
+ (irlap_frame -> c & 0xE0) >> 5);
+ printf ("P/F: %X \t\t", poll >> 4);
+ switch (irlap_frame -> c & IRLAP_PF_BIT_CLR_MASK ) {
+ case IRLAP_SNRM_RNRM:
+ /* SNRM cmd/RNRM response */
+ if ( cmd ) {
+ printf ("SNRM cmd\n");
+ switch (connection.irlap_state) {
+ case IRLAP_DISC:
+ printf ("\t==> IrLAP in DISC but SNRM-CMD? <==\n");
+ break;
+ case IRLAP_NDM:
+ printf ("\t==> Start IrLAP - negotation <==\n");
+ negotation ( irlap_frame );
+ break;
+ case IRLAP_NRM:
+ printf ("\t==> IrLAP in NRM but SNRM-CMD? <==\n");
+ break;
+ default:
+ printf ("\t==> IrLAP in not defined state but SNRM-CMD? <==\n");
+ }
+ } else {
+ printf ("RNRM response\n");
+ }
+ break;
+ case IRLAP_DISC_RD:
+ /* DISC cmd/RD response */
+ if ( cmd ) {
+ printf ("DISC cmd\n");
+ } else {
+ printf ("RD response\n");
+ }
+ break;
+ case IRLAP_UI_UI:
+ /* UI cmd/UI response */
+ if ( cmd ) {
+ printf ("UI cmd\n");
+ } else {
+ printf ("UI response\n");
+ }
+ break;
+ case IRLAP_XID_CMD:
+ /* XID cmd */
+ printf ("XID cmd\n");
+ if ( connection.irlap_state == IRLAP_DISC ) {
+ connection.irlap_state = IRLAP_NDM;
+ printf ("\t==> Set IrLAP-state to:"
+ "NDM (normal disconnected mode) <==\n");
+ }
+ break;
+ case IRLAP_TEST_TEST:
+ /* Test cmd/response */
+ if ( cmd ) {
+ printf ("TEST cmd\n");
+ } else {
+ printf ("TEST response\n");
+ }
+ break;
+ case IRLAP_UA_RSP:
+ /* UA response */
+ printf ("UA response\n");
+ switch (connection.irlap_state) {
+ case IRLAP_DISC:
+ printf ("\t==> IrLAP in DISC but UA-RESPONSE? <==\n");
+ break;
+ case IRLAP_NDM:
+ if ( negotation_param.state == NEG_WAIT_FOR_UA ) {
+ printf ("\t==> Continue IrLAP - negotation! <==\n");
+ negotation ( irlap_frame );
+ } else {
+ printf ("\t==> IrLAP in NDM but not wait for negotation! <==\n");
+ }
+ break;
+ case IRLAP_NRM:
+ printf ("\t==> UA: IrLAP was/is in NRM ... <==\n");
+ break;
+ default:
+ printf ("\t==> IrLAP in not defined state but UA-RESPONSE? <==\n");
+ }
+ break;
+ case IRLAP_FRMR_RSP:
+ /* FRMR response */
+ printf ("FRMR response\n");
+ break;
+ case IRLAP_DM_RSP:
+ /* DM response */
+ printf ("DM response\n");
+ break;
+ case IRLAP_XID_RSP:
+ /* XID response */
+ printf ("XID response\n");
+ break;
+ default:
+ /* unknown cmd/response */
+ printf ("Unknown IrLAP-U-Frame\n");
+ } /* end of irlap-u-frames */
+ break;
+ case IRLAP_S_FRAME:
+ printf ("S-Frame:\tAdr: %02X Nr: %02X ", adr,
+ (irlap_frame -> c & 0xE0) >> 5);
+ printf ("P/F: %X \t\t", poll >> 4);
+ switch ( irlap_frame -> c &
+ (IRLAP_PF_BIT_CLR_MASK & IRLAP_Nr_CLR_MASK) ) {
+ case IRLAP_RR:
+ /* RR command/response */
+ if ( cmd ) {
+ printf ("RR cmd\n");
+ } else {
+ printf ("RR response\n");
+ }
+ break;
+ case IRLAP_RNR:
+ /* RNR cmd/response */
+ printf ("RNR cmd/response\n");
+ break;
+ case IRLAP_REJ:
+ /* REJ cmd/response */
+ printf ("REJ cmd/response\n");
+ break;
+ case IRLAP_SREJ:
+ /* SREJ cmd/response */
+ printf ("SREJ cmd/response\n");
+ break;
+ default:
+ /* unknown cmd/response */
+ printf ("Unknown IrLAP-S-Frame\n");
+ } /* end of irlap-s-frames */
+ break;
+ default:
+ printf ("I-Frame:\tAdr: %02X Nr: %02X ", adr,
+ (irlap_frame -> c & 0xE0) >> 5);
+ printf ("\tP/F: %X\t", poll >> 4);
+ printf ("Ns: %02X \t", (irlap_frame -> c & 0x0E) >> 1);
+ printf ("Information\n");
+ }
+}
+
+/* unwrap_raw_frame
+ * ----------------
+ * - put raw-frame-datas in irlap-frame
+ */
+void unwrap_raw_frame ( RAW_FRAME * raw_frame )
+{
+ IRLAP_FRAME irlap_frame;
+ BYTE * info_ptr;
+
+ bzero ( &irlap_frame, sizeof(irlap_frame) );
+
+ irlap_frame.a = raw_frame -> buf[IRLAP_A_OFF];
+ irlap_frame.c = raw_frame -> buf[IRLAP_C_OFF];
+ irlap_frame.fcs = raw_frame -> buf [(raw_frame -> length) -2] << 8;
+ irlap_frame.fcs |= raw_frame -> buf [(raw_frame -> length) -1];
+
+ irlap_frame.info_length = raw_frame -> length -
+ IRLAP_A_LENGTH - IRLAP_C_LENGTH - IRLAP_FCS_LENGTH;
+
+ info_ptr = g_malloc ( irlap_frame.info_length * sizeof (BYTE) );
+ memcpy ( info_ptr, &(raw_frame -> buf[IRLAP_I_OFF]),
+ irlap_frame.info_length);
+ irlap_frame.info = info_ptr;
+ decode_irlap_frame ( &irlap_frame );
+ g_free(info_ptr);
+
+ printf ("IrLAP: FCS: %04X \n\n", irlap_frame.fcs );
+
+}
+
+/*
+ * cleanup_termios
+ * ---------------
+ * - call on some signals from signalhandler
+ * - before end set the original setting
+ */
+void cleanup_termios ( int signal )
+{
+ tcsetattr(port_fd, TCSANOW, &old_port_sets);
+ exit (0);
+}
+
+/*
+ * init_port
+ * ---------
+ * - get original port-settings and store it
+ * - set new port-settings
+ */
+void init_port ( void )
+{
+ struct termios new_port_sets;
+
+ /* get the original settings and store it for restore */
+ tcgetattr( port_fd, &old_port_sets);
+
+ /* init new settings */
+ bzero(&new_port_sets, sizeof(new_port_sets));
+ new_port_sets.c_cflag = INIT_BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
+ new_port_sets.c_iflag = IGNBRK | IGNPAR;
+ new_port_sets.c_oflag = 0;
+
+ /* set input mode (non-canonical, no echo,...) */
+ new_port_sets.c_lflag = 0;
+
+ /* inter-character timer unused x0.1s */
+ new_port_sets.c_cc[VTIME] = 0;
+ /* blocking read until 5 chars received */
+ new_port_sets.c_cc[VMIN] = 1;
+
+ /* set the port now */
+ tcflush(port_fd, TCIFLUSH);
+ tcsetattr(port_fd, TCSANOW, &new_port_sets);
+}
+
+/*
+ * main
+ * ----
+ * - output-file and port open
+ * - get/set port settings
+ * - dataread-loop
+ */
+int main( int argc, char * argv[] )
+{
+ struct sigaction sact; /* signalhandle */
+ GString *outfile_name = g_string_new(DEFAULT_OUTFILE); /* outfile name */
+ FILE *outfile; /* outfile FILE */
+ fd_set ready; /* for select */
+ struct timeval timeout; /* select-timeout */
+ int no_timeout = 1; /* timeout reached */
+ int nr_read = 0; /* byte readed */
+ unsigned char in_buffer[255]; /* temp. buffer */
+ RAW_FRAME raw_frame; /* a raw frame */
+ int is_inframe = FALSE; /* loop in frame */
+ int frame_complete = FALSE; /* frame complete */
+ int done = 0; /* loop control */
+ int i = 0; /* for-index */
+ int nr_of_bytes = 0; /* total bytes */
+ int nr_of_frames = 0; /* total frames */
+ int irlap_bytes = 0; /* w/o BOF etc. */
+ BYTE must_escaped = FALSE; /* after CE = 0x07 */
+ U16 fcsrx = INIT_FCS; /* for fcs-comput. */
+ BYTE nr_esc = 0; /* nr of CE's */
+//CONNECT_STATISTIC statistic; /* statistic */
+//OUTPUT_PARAMS output_params; /* output-control */
+
+ /*
+ * Open the serial device
+ */
+ if ( (port_fd = open( MODEMDEVICE, O_NONBLOCK | O_RDWR)) < 0 ) {
+ printf ( "Failed to open %s!\n", MODEMDEVICE);
+ exit(1);
+ }
+
+ /*
+ * get/set device fd flags
+ */
+ if ( (initfdflags = fcntl( port_fd, F_GETFL)) == -1 ) {
+ printf ( "Couldn't get device fd flags for: %s!", MODEMDEVICE);
+ exit(1);
+ }
+ initfdflags &= ~O_NONBLOCK;
+ fcntl( port_fd, F_SETFL, initfdflags);
+
+ init_port();
+
+ /*
+ * set signal-handler
+ */
+ sact.sa_handler = cleanup_termios;
+ sigaction( SIGHUP, &sact, NULL);
+ sigaction( SIGINT, &sact, NULL);
+ sigaction( SIGPIPE, &sact, NULL);
+ sigaction( SIGTERM, &sact, NULL);
+
+ /*
+ * Set device for non-blocking reads.
+ */
+ if ( fcntl( port_fd, F_SETFL, initfdflags | O_NONBLOCK) == -1) {
+ printf ("Couldn't set device to non-blocking mode (%s)!\n", MODEMDEVICE);
+ exit(1);
+ }
+
+ /*
+ * output-file-handling
+ */
+ if ( argc < 2 ) {
+ printf ("Use default OutPutFile: %s\n", outfile_name -> str);
+ } else {
+ g_string_assign(outfile_name, argv[1]);
+ g_string_append(outfile_name, OUTFILE_SUFFIX);
+ printf ("Use OutPutFile: %s\n", outfile_name -> str);
+ }
+ if ( (outfile = fopen( outfile_name -> str, "wb")) == NULL ) {
+ printf ("Failed to open OutPutFile: %s\n", outfile_name -> str);
+ exit (1);
+ }
+
+ /*
+ * initial timeout
+ * ---------------
+ * - wait 15 seconds
+ */
+ timeout.tv_sec = INITIAL_TIMEOUT;
+ timeout.tv_usec = 0;
+
+ /*
+ * init raw-frame, negotation-struct, connection
+ */
+ bzero(&raw_frame, sizeof(raw_frame));
+ bzero(&negotation_param, sizeof(negotation_param));
+ bzero(&connection, sizeof(connection));
+
+ /* hope we have no irda traffic in moment */
+ connection.irlap_state = IRLAP_DISC;
+
+ /*
+ * now make the data-read-loop
+ */
+ do {
+ FD_ZERO(&ready);
+ FD_SET(port_fd, &ready);
+ no_timeout = select(port_fd + 1, &ready, NULL, NULL, &timeout);
+ if ( FD_ISSET(port_fd, &ready) ) {
+ /* data on port - returns after 16 chars have been input */
+ nr_read = read(port_fd, in_buffer, 16);
+ nr_of_bytes = nr_of_bytes + nr_read;
+ if ( nr_read >= 1 ) {
+ /* write all readed bytes to file */
+ fwrite( in_buffer, 1, nr_read, outfile);
+ /* process every single byte */
+ for (i=0; i < nr_read; i++) {
+ if (raw_frame.length < (4096-1) ) {
+ switch ( in_buffer[i] ) {
+ case IRLAP_XBOF:
+ if ( is_inframe ) {
+ /*
+ * no - its not a XBOF we are inside a frame
+ * broadcast in xid for example
+ */
+ irlap_bytes++;
+ fcsrx = IR_FCS(fcsrx, in_buffer[i]);
+ is_inframe = TRUE;
+ raw_frame.buf[raw_frame.length] = in_buffer[i];
+ }
+ break;
+ case IRLAP_BOF:
+ is_inframe = TRUE;
+ break;
+ case IRLAP_EOF:
+ frame_complete = TRUE;
+ is_inframe = FALSE;
+ break;
+ case IRLAP_CE:
+ must_escaped = TRUE;
+ is_inframe = TRUE;
+ nr_esc++;
+ break;
+ default:
+ is_inframe = TRUE;
+ if ( must_escaped ) {
+ fcsrx = IR_FCS(fcsrx, (in_buffer[i] ^ IRLAP_ESC_MASK) );
+ raw_frame.buf[raw_frame.length] =
+ (in_buffer[i]^IRLAP_ESC_MASK);
+ must_escaped = FALSE;
+ } else {
+ fcsrx = IR_FCS(fcsrx, in_buffer[i]);
+ raw_frame.buf[raw_frame.length] = in_buffer[i];
+ }
+ irlap_bytes++;
+ }
+ raw_frame.length = irlap_bytes;
+ if ( frame_complete ) {
+ /* now raw-frame is complete */
+ if ( fcsrx != GOOD_FCS ) {
+ printf (" **** !!! FCS-ERROR !!! ****\n");
+ } else {
+ unwrap_raw_frame ( &raw_frame );
+ }
+ nr_of_frames++;
+ /* reset all to defaults */
+ raw_frame.length = 0;
+ raw_frame.a_offset = 0;
+ frame_complete = FALSE;
+ fcsrx = INIT_FCS;
+ nr_esc = 0;
+ irlap_bytes = 0;
+ }
+ }
+ }
+ } else {
+ printf ("No data to read - why?\n");
+ done = 1;
+ }
+ }
+ /*
+ * reset timeout - wait 5 seconds
+ */
+ timeout.tv_sec = DEFAULT_TIMEOUT;
+ timeout.tv_usec = 0;
+ if ( ! no_timeout ) {
+ printf ("TimeOut!\nConnection summary:\n-------------------\n");
+ printf ("Total nr of received bytes : %i\n", nr_of_bytes);
+ printf ("Total nr of received frames: %i\n", nr_of_frames);
+ done = 1;
+ }
+ } while ( ! done );
+
+ g_string_free(outfile_name, TRUE);
+ fclose (outfile);
+ tcsetattr(port_fd, TCSANOW, &old_port_sets);
+ exit(0);
+}
--- /dev/null
+
+All this software was created from observating other programs - what they
+send to/from phone. There two methods to dump transmission:
+
+1.hardware
+
+ You have to connect RxD (or TxD) and GND pin from the COM port, you use with
+ phone, to the second COM port. Then you run soft, which will show, what is
+ received by second port (now in win32 with enabled debug it can be
+ "gnokii --sniff port")
+
+ TIP: if you want to sniff MBUS, connect RxD (everything, what goes from
+ TxD is repeated on RxD)
+
+2.software
+
+ You run emulator of OS, where program work. Then using emulator functions
+ see, what is send (emulator is between phone and program, isn't it ?).
+
+When you have transmission, try to find some identical sequences. If you will
+have them, try to find each frame format...
\ No newline at end of file
--- /dev/null
+\r
+Last update 06.02.2002\r
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+\r
+Assembled by\r
+ Balazs Nagy (js@lsc.hu)\r
+ Harri Yli-Torkko (hyt@surfeu.fi)\r
+ Alfred R. Nurnberger <arnu@flosys.com>\r
+ Hugh Blemings <Hugh.Blemings@vsb.com.au>\r
+ Mike Bradley <mike@trumpington.st>\r
+ Odinokov Serge <serge@takas.lt>\r
+ Pavel Janik <Pavel@Janik.cz>\r
+ Pawel Kot <pkot@linuxnews.pl>\r
+ Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)\r
+ ... and other members of gnokii mailing list\r
+ and authors of some WWW pages.\r
+\r
+The data provided is for information purposes only. \r
+Some of the frames might be hazardous to your phone. Be careful!!! \r
+We do not take any responsibility or liability for damages, etc.\r
+\r
+NOTE: this information isn't (and can't be) complete. If you know anything\r
+about features not listed here or you noticed a bug in this list, please\r
+notify us via e-mail. Thank you.\r
+\r
+Document describing frames used in\r
+GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150,\r
+5190, 3210, 3310)\r
+Correct format is FBUS version 2/Direct IRDA/MBUS version 2\r
+(see nokia.txt for protocol details):\r
+\r
+ List:\r
+\r
+0x00: Monitoring values\r
+ r monitoring value {+0x01, 0x01, block... }\r
+ where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO\r
+ Battery percent level\r
+ 0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO\r
+ Battery standby voltage\r
+ ............\r
+0x01: Call Information\r
+ s Make call { 0x0001, "number", type, block }\r
+ where type:\r
+ 0x01 - data call\r
+ 0x05 - voice call\r
+ block:\r
+ data call (non digital lines):\r
+ 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,\r
+ 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00\r
+ data call (digital lines):\r
+ 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a,\r
+ 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,\r
+ 0x88,0x90,0x21,0x48,0x40,0xbb\r
+ voice call:\r
+ 0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01\r
+ where:\r
+ sendnum (own number sending):\r
+ 0x01: preset (depends on network)\r
+ 0x03: on\r
+ 0x02: off\r
+ r Call going msg { 0x0002 }\r
+ r Call in progress { 0x0003, seqnr }\r
+ r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) }\r
+ r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" }\r
+ s Answer call part 2 { 0x0006, seqnr, 0x00 }\r
+ r answered call { 0x0007, seqnr }\r
+ s Hang up { 0x0008, seqnr, 0x85 }\r
+ r terminated call { 0x0009, seqnr }\r
+ r call msg { 0x000a, seqnr }\r
+ r Send DTMF/voice call { 0x0040}\r
+ s Answer call part 1 { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,\r
+ 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }\r
+ s Sent after issuing { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06,\r
+ data call 0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3,\r
+ (digital lines) 0xb8,0x81,0x20,0x15,0x63,0x80 }\r
+ s Sent after issuing { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00,\r
+ data call 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80,\r
+ (non digital lines) 0x01,0x60 }\r
+ s Send DTMF { 0x0050, length, {ascii codes for DTMF}, 0x01 }\r
+ \r
+ Note:\r
+ to make data call (non digital lines):\r
+ 1.send "Make call" for non digital lines\r
+ 2.send "Sent after issuing data call (non digital lines)"\r
+ to make data call (digital lines):\r
+ 1.send "Answer call part 1"\r
+ 2.send "Sent after issuing data call (digital lines)"\r
+ 3.send "Make call" for digital lines\r
+ to answer call:\r
+ 1.send "Answer call part 1"\r
+ 2.send "Answer call part 2"\r
+\r
+0x02: SMS handling\r
+ s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... }\r
+ r Message sent { 0x0002 }\r
+ r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} \r
+ s Get SMS message { 0x0007, 0x02, location, 0x01, 0x64 }\r
+ s Initiate connection { 0x000d, 0x00, 0x00, 0x02 }\r
+ r Initiate ACK { 0x000e, 0x01 }\r
+ r SMS message received { 0x0010, ...... } (whole message)\r
+ s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }\r
+ for enable cell broadcast ?\r
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }\r
+ for disable cell broadcast ?\r
+ r Set CellBroadcast OK { 0x0021, 0x01 }\r
+ r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ?\r
+ s Set SMS center { 0x0030, 0x64, priority, checksum? ,0?, format,\r
+ validity, {DefaultRecipient no.}[12], \r
+ {SMScenter no.}[12], {SMSC name}, 0x00}\r
+ where tel.no.[12]: {len, type, {number(BCD)}}\r
+ type: 0x81: normal\r
+ 0x91: + (international)\r
+ 0xd0: alphanumeric\r
+ format: 0x00: text\r
+ 0x22: fax\r
+ 0x24: voice\r
+ 0x25: ERMES\r
+ 0x26: paging\r
+ 0x31: X.400\r
+ 0x32: email\r
+ validity: 0x0b: 1 hour\r
+ 0x47: 6 hours\r
+ 0xa7: 24 hours\r
+ 0xa9: 72 hours\r
+ 0xad: 1 week\r
+ 0xff: max.time\r
+ r Set SMS center OK { 0x0031 }\r
+ r Set SMS center error { 0x0032, reason }\r
+ s Get SMS center { 0x0033, 0x64, priority }\r
+ r SMS center received { 0x0034, priority, checksum?, format, 0x00?,\r
+ validity, {DefaultRecipient no.}[12],\r
+ {SMScenter no.}[12], {SMSC name}, 0x00}\r
+ tel.no[12]: {len, type, {number(BCD)}} \r
+ where priority, checksum, type, validity,\r
+ tel.no.[12]: see 0x02/0x0030\r
+ r SMS center error recv { 0x0035, reason }\r
+0x03: Phonebook functions\r
+ s Get mem location { 0x0001, memtype, location, 0 }\r
+ where memory:\r
+ 0x01: telephone and SIM phonebook (in one)\r
+ 0x02: telephone phonebook\r
+ 0x03: SIM phonebook\r
+ 0x04: SIM fixdialling-phonebook (?)\r
+ 0x05: Own numbers\r
+ 0x07: Dialled numbers\r
+ 0x08: Missed calls\r
+ 0x09: Received calls\r
+ 0x0b: voice mailbox (location not important)\r
+ r mem location recvd { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. }\r
+ Note: in 3310 all entries have null name ("feature" of bug ?)\r
+ r mem loc error recvd { 0x0003, errtype }\r
+ where errtype: 0x7d: invalid memory type\r
+ s Set mem location { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID }\r
+ r mem set OK { 0x0005 }\r
+ r mem set error { 0x0006, errtype }\r
+ where errtype: 0x7d: name is too long\r
+ s Mem status request { 0x0007, memtype }\r
+ r Mem status recvd { 0x0008, memtype, free, used }\r
+ r Mem status error recv { 0x0009, errtype }\r
+ where errtype: 0x6f: mem status error\r
+ 0x7d: invalid memory type\r
+ 0x8d: waiting for pin\r
+ s Get caller group data { 0x0010, groupID }\r
+ r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }\r
+ r Get call.group error { 0x0012, reason }\r
+ where reason: 0x7d: invalid location\r
+ s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) }\r
+ r Set caller group OK { 0x0014 }\r
+ r Set call.group error { 0x0015, reason }\r
+ where reason: 0x7d: invalid location\r
+ s Get speed dial { 0x0016, index(1-9) }\r
+ r Get speed dial OK { 0x0017, mem.type, location }\r
+ where mem.type: 0x02: ME (== 0 if not stored)\r
+ 0x03: SIM\r
+ location: memory location (== 0 if not stored)\r
+ r Get speed dial error { 0x0018 }\r
+ s Set speed dial { 0x0019, index(1-9), mem.type, location }\r
+ r Set speed dial OK { 0x001a }\r
+ r Set speed dial error { 0x001b }\r
+0x04: Phone Status\r
+ s Phone status { 0x0001 }\r
+ r Phone status { 0x0002, mode, signal str, ???, pwr, batt.level }\r
+ where mode: 1: registered within the network\r
+ 2: call in progress\r
+ 3: waiting for pin\r
+ 4: powered off\r
+ pwr: 1: AC/DC\r
+ 2: battery\r
+ s Request Phone ID { 0x0003 }\r
+ r RequestPhone ID { 0x0004, 0x01, "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 }\r
+0x05: Profile settings\r
+ s Set profile feature { 0x0010, 1, nr, feature, a, 1 }\r
+ where nr: see 0x05/0x0013\r
+ feature: see 0x05/0x0014\r
+ a: see 0x05/0x0014\r
+ r Set profile feat. OK { 0x0011, 1 }\r
+ s Get profile feature { 0x0013, 1, nr, feature, 1 }\r
+ where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6)\r
+ feature: see 0x05/0x0014\r
+ r Get profile feature { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 }\r
+\r
+ Note: For Nokia 3330 settings num 0x00 .. 0x09 can be assigned\r
+ separately to each profile (0x00 .. 0x05), but rest are common\r
+ to all profiles.\r
+\r
+ Features and answers (in a, b, c, d form):\r
+ 0x00: keypad notes (in Nokia 33x0 feature 0x00)\r
+ xx, 1, 0, 2\r
+ xx: 0xff: off\r
+ 0x00: level 1\r
+ 0x01: level 2\r
+ 0x02: level 3\r
+ 0x01: lights (? only in car profile) (what number in Nokia 3310 ?)\r
+ xx, 0, 0, 1\r
+ xx: 0x00: off\r
+ 0x??: on (maybe 0x01)\r
+ 0x02: incoming call alert (in Nokia 33x0 feature 0x01)\r
+ xx, 1, 0, 7\r
+ xx: 1: ringing,\r
+ 2: beep once,\r
+ 3: unknown\r
+ 4: off\r
+ 5: ring once\r
+ 6: ascending\r
+ 7: caller groups (see feature #0x08)\r
+ 0x03: ringing tone (in Nokia 33x0 feature 0x02)\r
+ xx, 0, 0, 0\r
+ xx: 0x12: ring ring\r
+ 0x13: low\r
+ etc\r
+ 0x04: ringing volume (in Nokia 33x0 feature 0x03)\r
+ xx, 0, 0, 0\r
+ xx: level 1 (0x06) - level 5 (0x0a)\r
+ 0x05: message alert tone (in Nokia 33x0 feature 0x04)\r
+ xx, 1, 0, 4\r
+ xx: 0: no tone\r
+ 1: standard\r
+ 2: special\r
+ 3: beep once\r
+ 4: ascending\r
+ 0x06: vibration (in Nokia 33x0 feature 0x05)\r
+ xx: 0: off\r
+ 1: on\r
+ 2: Vibrate first\r
+ 0x07: warning and game tones (in Nokia 33x0 feature 0x06 called warning tones)\r
+ xx, 4, 0, 4\r
+ xx: 0xff: off\r
+ 0x04: on\r
+ 0x07: screen saver - Nokia 33x0\r
+ xx: 1: on\r
+ 0: off\r
+ 0x08: incoming caller groups (what number in Nokia 3310 ?)\r
+ xx, 0, 0, 0\r
+ xx: 1: family\r
+ 2: VIP\r
+ 4: friends\r
+ 8: collegues\r
+ 16: other\r
+ 0x08: Screen saver -> Timeout (Nokia 33xx):\r
+ 0x00 = 5 sec\r
+ 0x01 = 20 sec\r
+ ....\r
+\r
+ 0x09: automatic answer (what number in Nokia 3310 ?)\r
+ xx, 0, 0, 1\r
+ xx: 0x00: off\r
+ 0x01: on \r
+\r
+ 0x09: Screen saver -> Screen saver (Nokia 33xx):\r
+ 0x00 ... 0x0d = Number of picture image\r
+\r
+ 0x0a: ???:\r
+ ...: ???:\r
+ 0x15: ???: Read only?\r
+\r
+ 0x16: ???:\r
+ 0x00 = ???\r
+ 0x01 = ???\r
+\r
+ 0x17: Phone book -> Options -> Memory in use (Nokia 3330):\r
+ 0x00 = Phone\r
+ 0x01 = SIM card\r
+\r
+ 0x18: Settings -> Phone settings -> Network selection (Nokia 3330):\r
+ 0x00 = Automatic\r
+ 0x01 = Manual\r
+\r
+ 0x19 Settings -> Call settings -> Automatic redial(Nokia 3330):\r
+ 0x00 = Off\r
+ 0x01 = On\r
+\r
+ 0x1a: Settings -> Call settings -> Speed dialling (Nokia 3330):\r
+ 0x00 = Off\r
+ 0x01 = On\r
+\r
+ 0x1b: Settings -> Call settings -> Own number sending (Nokia 3330):\r
+ 0x00 = Set by network\r
+ 0x01 = On\r
+ 0x02 = Off\r
+\r
+ 0x1c: Settings -> Phone settings -> Cell info display (Nokia 3330):\r
+ 0x00 = Off\r
+\r
+ 0x1d: Phone book -> Options -> Type of view (Nokia 3330):\r
+ 0x00 = Name list\r
+ 0x01 = Name, number\r
+ 0x02 = Large font\r
+\r
+ 0x1e: Settings -> Phone settings -> Language (Nokia 3330):\r
+ 0x00 = English\r
+ 0x07 = Dansk\r
+ 0x08 = Svenska\r
+ 0x09 = Suomi\r
+ 0x0c = Turcke\r
+ 0x0e = Norsk\r
+ 0x10 = Automatic\r
+\r
+ 0x32 = Reboots ME (3330)\r
+\r
+ 0x1f: ???: Read only? (3330)\r
+\r
+ 0x20: Messages -> Message settings -> Common -> Reply via same centre (N3330):\r
+ 0x00 = No\r
+ 0x01 = Yes\r
+\r
+ 0x21: Messages -> Message settings -> Common -> Delivery reports (3330):\r
+ 0x00 = No\r
+ 0x01 = Yes\r
+ \r
+ 0x22: Clock -> Clock settings -> Show/Hide clock (3330):\r
+ 0x00 = Show\r
+ 0x01 = Hide\r
+\r
+ 0x23: Clock -> Clock settings -> Time format (N3330):\r
+ 0x00 = 24-hour\r
+ 0x01 = 12-hour\r
+\r
+ 0x24: Select profile (N3330):\r
+ 0x00 = General\r
+ 0x01 ... 0x05 = rest of them\r
+\r
+ 0x25: ???: Read only? (N3330)\r
+\r
+ 0x26: Settings -> Phone settings -> Confirm SIM service actions (N3330):\r
+ 0x00 = Not asked\r
+ 0x01 = Asked\r
+\r
+ 0x27: Messages -> Write messages -> Options -> Dictionary (N3330):\r
+ 0x00 = Off\r
+ 0x01 = English\r
+ 0x0a = Suomi\r
+\r
+ 0x28: Messages -> Message settings -> Common -> Character support (N3330):\r
+ 0x00 = Automatic\r
+ 0x01 = GSM alphabet\r
+ 0x02 = Unicode\r
+\r
+ 0x29: Startup logo settings (N33x0):\r
+ 0x00 = Your own uploaded logo\r
+ 0x01 = Nokia\r
+ 0x02 = Draft HUMAN technology(tm)\r
+ 0x03 = Itineris\r
+\r
+ 0x2a:???: 0x00 = ??? 0x01 = ??? (N3330)\r
+\r
+ 0x2b: ???: 0x00 = ??? 0x01 = ??? (N3330)\r
+\r
+ 0x2c: ???: Read only? (N3330)\r
+\r
+ 0x2d: Clock -> Auto update of date and time (N3330):\r
+ 0x00 = Off\r
+ 0x01 = Confirm first\r
+ 0x02 = On\r
+\r
+ s Get welcome message { 0x0016 }\r
+ r Get welcome message { 0x0017, no.of blocks, { block } * }\r
+ where block: { id, {blockspecific} }\r
+ id: 1: startup logo { y, x, picture (coding?) }\r
+ 2: welcome note { len, "message" }\r
+ 3: operator msg { len, "message" }\r
+ s Set welcome message { 0x0018, no.of blocks, { block } * }\r
+ where block: see 0x05/0x0017\r
+ r Set welcome OK { 0x0019, 0x01 }\r
+ s Get profile name { 0x001a, nr }\r
+ where nr: see 0x05/0x0013\r
+ r Profile name { 0x001b, 1, 1, 3, flen, nr, len, {text} }\r
+ where nr: see 0x05/0x0013\r
+ len: text length \r
+ flen len + len(nr, len) = len + 2\r
+ Note: in Nokia 3310 name is in Unicode\r
+ s ??? { 0x001c }\r
+ r ??? { 0x001d, 0x93 }\r
+ s Set oplogo { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }\r
+ r Set oplogo OK { 0x0031 }\r
+ r Set oplogo error { 0x0032, reason }\r
+ where reason: 0x7d invalid location\r
+ s Get oplogo { 0x0033, location }\r
+ where location: 1 (doesn't seem to matter)\r
+ r Get oplogo { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap }\r
+ r Get oplogo error { 0x0035, reason }\r
+ where reason: 0x7d invalid location\r
+ s Set ringtone { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0}\r
+ r Set ringtone OK { 0x0037 }\r
+ r Set ringtone error { 0x0038, reason }\r
+ where reason=0x7d, when not supported location\r
+ s Get services settings { 0x0080, setting (2 bytes) }\r
+ where: setting: 0x02,0x00=Nokia access number 1\r
+ 0x02,0x01=Operator access number 1\r
+ 0x01,0x00=Personal bookmark 1 settings (name only ?)\r
+ 0x01,0x01=?\r
+ 0x02,0x02=?\r
+ r Get services sett.OK { 0x0081, .... }\r
+ r Get services sett.err { 0x0082, 0x7b }\r
+0x06: Calling line restriction/Call forwarding etc\r
+ r Get call divert { 0x0001, 0x02, x, 0x00, divtype, 0x02, calltype, y, z, 0x0b, number, 0x00...0x00, timeout (byte 45) }
+ s Set call divert { 0x0001, 0x03, 0x00, divtype, calltype, 0x01, number(packed like in SMS), 0x00 ... 0x00,
+ length of number (byte 29), 0x00 ... 0x00, timeout (byte 52), 0x00, 0x00, 0x00}
+ NOTE: msglen=0x37\r
+ where timeout:\r
+ 0x00: not set ?\r
+ 0x05: 5 second\r
+ 0x0a: 10 second\r
+ 0x0f: 15 second\r
+ 0x1e: 20 second\r
+ 0x14: 25 second\r
+ 0x19: 30 second\r
+ where divtype:\r
+ 0x02: all diverts for all call types ?\r
+ Found only, when deactivate all diverts for all call types (with call type 0x00)\r
+ 0x15: all calls\r
+ 0x43: when busy\r
+ 0x3d: when not answered\r
+ 0x3e: if not reached\r
+ calltype:\r
+ 0x00: all calls (data, voice, fax)\r
+ 0x0b: voice calls\r
+ 0x0d: fax calla\r
+ 0x19: data calls\r
+ s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 }\r
+ where divtype, calltype: see above\r
+ s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }\r
+ where divtype, calltype: see above\r
+ r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)}\r
+0x07:\r
+ s ??? { 0x0022, ? (1&2 sounds OK) }\r
+ r ??? OK { 0x0023, ?,?,? }\r
+ r ??? error { 0x0024, reason }\r
+ s ??? { 0x0025, ??? }\r
+ r ??? OK { 0x0026, ??? }\r
+ r ??? error { 0x0027, reason }\r
+0x08: Security codes\r
+ s Change code { 0x0004, code, "current", 0x00, "new", 0x00 }\r
+ where code: 1: security code (5 chars)\r
+ 2: PIN (4 chars)\r
+ 3: PIN2 (4 chars)\r
+ 4: PUK (8 chars)\r
+ 5: PUK2 (8 chars)\r
+ s Status request { 0x0007, 0x01 }\r
+ r pin recvd { 0x0008, accepted }\r
+ where accepted: 0x0c (or 0x06): OK\r
+ code: waiting for (0x08/0x0004) code\r
+ s entering code { 0x000a, code, "code", 0x00 }\r
+ where code: see 0x08/0x0004\r
+0x09: SIM login\r
+ r login { 0x0080 }\r
+ r logout { 0x0081 }\r
+0x0a: Network status\r
+ s Key duplication on/off{ 0x0044, on? 0x01: 0x02 }\r
+ s get used network { 0x0070 }\r
+ r network registration { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode }\r
+0x0c: Keys\r
+ s Get key assignments { 0x0040, 0x01 }\r
+ r Get key assignments { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 }\r
+ where {key '0'} => ' ', '0'\r
+ s Press key { 0x0042, press: 0x01; release: 0x02, button, 0x01 }\r
+ where button: 0x01 - 0x09: 1-9\r
+ 0x0a: 0\r
+ 0x0b: #\r
+ 0x0c: *\r
+ 0x0d: Power\r
+ 0x0e: Pick up phone\r
+ 0x0f: Hang\r
+ 0x10: Volume +\r
+ 0x11: Volume -\r
+ 0x17: Up\r
+ 0x18: Down\r
+ 0x19: Menu\r
+ 0x1a: Names\r
+ 0x1B onwards: don't know but they do produce\r
+ a beep and light up the keypad as if\r
+ a key had been pressed. \r
+ r Press key ack { 0x0043, press/release/error(0x05) }\r
+ s ??? { 0x0044 }\r
+ r ??? ack { 0x0045, 0x01 }\r
+0x0d: Status\r
+ r Display { 0x0050, 0x01, y, x, len, "string"(unicode) }\r
+ s Status request { 0x0051 }\r
+ r Status { 0x0052, no. of byte pairs, {byte pair} }\r
+ where {byte pair}: {cmd, 1:off 2:on}\r
+ cmd: 1: call in progress\r
+ 2: ???\r
+ 3: have unread sms\r
+ 4: voice call active\r
+ 5: fax call active\r
+ 6: data call active\r
+ 7: key lock active\r
+ 8: is SMS storage full\r
+ s Display status { 0x0053, 1:on 2:off }\r
+ (will send displayed messages with x,y coordinates)\r
+ r Display status ack { 0x0054, 1 }\r
+0x11: Phone clock & alarm\r
+ s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 }\r
+ r date and time set { 0x0061 }\r
+ s get date and time { 0x0062 }\r
+ r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second }\r
+ where: date_set & time_set==0x01 - set\r
+ 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second\r
+ not available in frame\r
+ s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 }\r
+ r alarm set { 0x006c }\r
+ s get alarm { 0x006d }\r
+ r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min }\r
+0x12: Connect to NBS port (61xx only ?)\r
+ s Send {+0x0c, 0x01, UDH header, data}\r
+ (without 0,1 header -- for oplogo, cli, ringtone etc upload)\r
+ where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl\r
+0x13: Calendar notes\r
+ s Write calendar note { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone,\r
+ alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0),\r
+ textlen, "text" }\r
+ r Write cal.note report { 0x0065, return }\r
+ where return: 0x01: ok\r
+ 0x73: failure\r
+ 0x81: calendar functions busy. Exit Calendar menu and try again\r
+ s Calendar notes set { 0x0066... }\r
+ r Calendar note recvd { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" }\r
+ r Cal.note recvd error { 0x0067, err }\r
+ where err: 0x93: not available\r
+ (0x01: OK)\r
+ other: error\r
+ s Delete cal.note { 0x0068, location }\r
+ r Del. cal.note report { 0x0069, err }\r
+ where err: 0x01: OK\r
+ 0x93: cannot delete\r
+0x14: SMS funcs\r
+ s Write SMS to SIM { 0x0004, .... }\r
+ s Mark SMS as read { 0x0007, 0x02, location, 0x00, 0x64 }\r
+ r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status\r
+ where type: 0x06: delivery report \r
+ status: 0x00: delivered\r
+ 0x30: pending\r
+ 0x46: failed\r
+ 0x09: reading failed\r
+ subtype: 0x02: invalid mem type\r
+ 0x07: empty SMS location\r
+ 0x0c: no access to memory (no PIN in card, etc.)\r
+ s Delete SMS message { 0x000a, 0x02, location }\r
+ r Delete OK { 0x000b }\r
+ s SMS status request { 0x0036, 0x64 }\r
+ r SMS status { 0x0037,?,?,?,?,?,?,msgnumber,unread }\r
+ r SMS status error { 0x0038 }\r
+0x3f: WAP \r
+ s Enable WAP frames { 0x0000}\r
+ r Enable WAP frames { 0x0002, 0x01}\r
+\r
+ s ?? { 0x0003}\r
+ r ?? { 0x0004}\r
+\r
+ s Get WAP bookmark { 0x0006, 0x00, location}\r
+ where location: 0 - 14\r
+ r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode),\r
+ url_len, url(unicode), 0x01,0x80,0x00[7]}\r
+ r Get WAP bookmark err { 0x0008, error }\r
+ where error:\r
+ 0x00(?)invalid position\r
+ 0x01 user inside "Bookmarks" menu. Must leave it\r
+ 0x02 invalid/too high/empty location\r
+\r
+ s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode),\r
+ url_len, url(unicode), 0x01,0x80,0x00[7] }\r
+ Note: bookmark is added to the first free location.\r
+ r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block }\r
+ where block:\r
+ 0x0a, location_of_just_written_bookmark(?),\r
+ 0x00, next_free_location(?)\r
+ r Set WAP bookmark err {+0x01, 0x36, 0x0b, error }\r
+ where error:\r
+ 0x04 - memory is full\r
+ 0x01 - we are in the bookmark menu\r
+ 0x00 - unknown reason for now ;(\r
+\r
+? s Delete WAP bookmark { 0x000c, 0x00, location }\r
+ where: location = 0-14\r
+? r Delete WAR bookmark OK{ 0x000d }\r
+? r Delete WAPbookmark err{ 0x000e, 0x02 }\r
+\r
+ s ?? { 0x000F}\r
+ r ?? { 0x0010, 0x00}\r
+\r
+ s Get WAP settings 1 { 0x0015, location}\r
+ where location: 0x00 - 0x05\r
+ r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...}\r
+ where:\r
+ con_type: 0x00 - temporary\r
+ 0x01 - continuous\r
+ location: when use "Get WAP settings 2 frame", must give it\r
+ security: 0x00 = no, 0x01 = yes\r
+ r Get WAP settings 1 err{ 0x0017, error }\r
+ where error:\r
+ 0x01 user inside "Settings" menu. Must leave it\r
+ 0x02 invalid/too high/empty location\r
+\r
+ s Get WAP settings 2 { 0x001b, location}\r
+ where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame)\r
+ r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...}\r
+ where type : 0x00 - SMS bearer\r
+ frame:\r
+ service_num_len, service_num (Unicode), server_num_len, server_num(Unicode)\r
+ 0x01 - data bearer\r
+ frame:\r
+ auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode),\r
+ user len, user (Unicode), password len, password (Unicode)\r
+ where auth: 0x00 - normal, 0x01 - secure\r
+ call_type: 0x00 - analogue, 0x01 - ISDN\r
+ call_speed: 0x00 - 9600, 0x01 - 14400\r
+ 0x02 - USSD bearer\r
+ frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len,\r
+ service code (Unicode)\r
+ where type: 0x01 - service number, 0x00 - IP\r
+ r Get WAP settings 2 err{ 0x001d,error}\r
+ where: error=0x05 \r
+0x40: Security commands\r
+ s ??? {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00}\r
+ This frame hangs phone (N3310 4.02). Meaning unknown !\r
+ s Open simlock 1 { 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00}
+ r Open simlock 1 { 0x02 }
+ s ???(N6150) { 0x08, 0x00 }\r
+ r ???(N6150) { 0x08 }\r
+ s Enable extended cmds { 0x64, cmd }\r
+ where cmd: 0x00: off\r
+ 0x01: on\r
+ 0x02: enter service mode ?
+ 0x03: reset (doesn't ask for PIN again)\r
+ 0x04: reset (PIN is requested)\r
+ In 5110 makes reset without PIN\r
+ 0x06: CONTACT SERVICE!!! Don't try it!\r
+ s Reset phone settings { 0x65, value, 0x00 }
+ where value: 0x08 - reset UI (User Interface) settings
+ 0x38 - reset UI, SCM and call counters
+ r Reset phone settings { 0x65, 0x00 }
+ s Get IMEI { 0x66 }\r
+ r Get IMEI { 0x66, 0x01, IMEI, 0x00}\r
+ s (ACD Readings)?(N6150 { 0x68 }\r
+ r (ACD Readings)?(N6150 { 0x68, ... }\r
+ s Get Product Profile\r
+ Settings { 0x6a}\r
+ r Get Product Profile\r
+ Settings { 0x6a, 4bytes with Product Profile Settings }\r
+ s Set Product Profile\r
+ Settings { 0x6b, 4bytes with Product Profile Settings }\r
+ r Set Product Profile\r
+ Settings OK ? { 0x6b }\r
+ s Get code { 0x6e, code }\r
+ where code: see 0x08/0x0004 (only sec.code is allowed)\r
+ r Get code { 0x6e, code, allowed, allowed? (sec code (text)) }\r
+ where code: see 0x08/0x0004\r
+ allowed: 0: no\r
+ 1: yes\r
+ s Set code { 0x6f, code, sec code(text), 0x00 }
+ where code: see 0x08/0x0004\r
+ s Start monitoring { 0x70, block }\r
+ where block(N6150):\r
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,\r
+ 0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00,\r
+ 0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00,\r
+ 0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,\r
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80,\r
+ 0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20,\r
+ 0x20,0x20,0x20,0x20\r
+ This block enables probably all possible monitorred parameters.\r
+ After it phone sends 0x00 message type values\r
+ s Break monitoring { 0x71 }\r
+ r Break monitoring { 0x71 }\r
+ s Reset Permanent\r
+ Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e }\r
+ r Reset Permanent\r
+ Counters (nm->test36) { 0x74 }\r
+ s Call commands { 0x7c, block }\r
+ where where: command, (values)\r
+ command: 0x01\r
+ values: number(ASCII), 0x00 - makes voice call\r
+ command: 0x02 - answer call\r
+ command: 0x03 - release call\r
+ r Call commands { 0x7c, command }\r
+ s Netmonitor { 0x7e, field }\r
+ where: field: 00: next\r
+ F0: reset\r
+ F1: off\r
+ F2: field test menus\r
+ F3: developer menus\r
+ s Open simlock 2 { 0x81, 0x01, locknumber, 0x10, 0x10, 0x10, 0x10, 0x10 }
+ Note: sets simlock type to factory?
+ where locknumber: 1,2,4,8
+ 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
+ r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 }\r
+ where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock\r
+ locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed\r
+ counter1 - counter4: counters for locks\r
+ s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 }\r
+ r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 }\r
+ s Get downloaded OpName { 0x8c, 0x00 }\r
+ r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...}\r
+ s Buzzer pitch { 0x8f, volume, hzLO, hzHI }\r
+ if volume and hz is 0, it's off\r
+ r Buzzer pitch { 0x8f}\r
+ s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) }\r
+ r ACD Readings ? { 0x91, parameter?, value? }\r
+ s Sleep mode test { 0x92, 0x00, 0x00, howlong(2 bytes), enable }
+ where: enable == 0x01 - enable after test
+ 0x00 - don't enable after test
+ howlong (ms) = 0x07, 0xd0 = 2000
+ s ???(N6150) { 0x98, 0x00 }\r
+ r ???(N6150) { 0x98, 0x00, 0x04 }\r
+ s Get bin ringtone { 0x9e, location }\r
+ where: location=0,1,etc.\r
+ r Get bin ringtone { 0x9e, location, error, contents... }\r
+ where location=0,1,etc.\r
+ error=0x0a, ringtone NOT available\r
+ 0x00, OK\r
+ s Set bin ringtone { 0xa0, location, 0x00, contenst... }\r
+ where: location=0,1,etc.\r
+ r Set bin ringtone { 0xa0, location, error }\r
+ where location=0,1,etc.\r
+ error=0x0a, ringtone NOT set\r
+ 0x00, ringtone set OK\r
+ r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 }\r
+ s Get info about phone { 0xc8, 0x01 }\r
+ r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+ s Get MCU SW Checksum { 0xc8, 0x02 }\r
+ r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 }\r
+ s DPS External SW { 0xc7, 0x03 }\r
+ r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 }\r
+ s Get HW { 0xc8, 0x05 }\r
+ r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 }\r
+ s Get "Made" Date { 0xc8, 0x05 }\r
+ r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 }\r
+ s Get DSP Internal SW { 0xc8, 0x09 }\r
+ r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 }\r
+ s Get PCI version { 0xc8, 0x0b }\r
+ r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 }\r
+ s Get system ASIC { 0xc8, 0x0c }\r
+ r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 }\r
+ s Get COBBA { 0xc8, 0x0d }\r
+ r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 }\r
+ s Get PLUSSA { 0xc8, 0x0e }\r
+ r Get PLUSSA { 0xc8, 0x0e, available, 0x00 }\r
+ where available: 0x01: not available\r
+ s Get CCONT { 0xc8, 0x0f }\r
+ r Get CCONT { 0xc8, 0x0f, available, 0x00 }\r
+ where available: 0x01: not available\r
+ s Get PPM version { 0xc8, 0x10 }\r
+ r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+ s Get PPM info { 0xc8, 0x12 }\r
+ r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 }\r
+ s Set HW version { 0xc9, 0x05, version, 0x00 }\r
+ s Get Product Code { 0xca, 0x01 }\r
+ r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 }\r
+ s Get Order Number { 0xca, 0x02 }\r
+ r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 }\r
+ s Get Prod.Ser.Number { 0xca, 0x03 }\r
+ r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 }\r
+ s Get Basic Prod.Code { 0xca, 0x04 }\r
+ r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 }\r
+ s Set Product Code { 0xcb, 0x01, product code, 0x00 }\r
+ s Set Order Number { 0xcb, 0x02, number, 0x00 }\r
+ s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 }\r
+ s Get (original ?)IMEI { 0xcc, 0x01 }\r
+ r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 }\r
+ s Get Manufacture Month { 0xcc, 0x02 }\r
+ r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 }\r
+ s Get Purchare date { 0xcc, 0x04 }\r
+ r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 }\r
+ s Set "Made" date { 0xcd, 0x02, string, 0x00 }\r
+ s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00}\r
+ s Make one phone test { 0xce,0x1d,num1,num2,num3,num4}\r
+ Where num1-num4: 0x02,0x00,0x00,0x00;\r
+ 0x04,0x00,0x00,0x00;\r
+ 0x08,0x00,0x00,0x00;\r
+ 0x10,0x00,0x00,0x00;\r
+ 0x20,0x00,0x00,0x00;\r
+ 0x40,0x00,0x00,0x00;\r
+ 0x80,0x00,0x00,0x00;\r
+ 0x00,0x01,0x00,0x00;\r
+ 0x00,0x02,0x00,0x00;\r
+ 0x00,0x04,0x00,0x00; - "Power off"\r
+ No test for "Security data"\r
+ 0x00,0x10,0x00,0x00;\r
+ 0x00,0x20,0x00,0x00;\r
+ 0x00,0x40,0x00,0x00;\r
+ 0x00,0x80,0x00,0x00;\r
+ 0x00,0x00,0x01,0x00;\r
+ ....\r
+ 0x00,0x00,0x10,0x00;\r
+ s Result of phone tests { 0xcf }\r
+ r Result of phone tests { 0xcf, number of tests, results of next tests }\r
+ s ??? { 0xd1 }\r
+ r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 }\r
+ s LCD Test { 0xd3, value }\r
+ where value: 0x03, 0x02 - 1'st test\r
+ 0x03, 0x01 - 2'nd test\r
+ 0x02, 0x03 - clears screen\r
+ s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01}\r
+ r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?}\r
+ s Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes }
+ where: numofbytes - how many bytes to read
+ Note: Works ONLY in MBUS
+ r Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes, contest... }
+ where numofbytes - how many bytes available
+ contest - bytes with contests (if numofbytes != 0)
+0x41: Snake game ?\r
+0x47:\r
+ s Get Picture Image { 0x0001, location }\r
+ r Get Picture Image when contains sender number\r
+ { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap }\r
+ NOTE:\r
+ Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!)\r
+ in sender without sender number\r
+ { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap }\r
+ s Set Picture Image { 0x0003, frame...}\r
+ where frame: see 0x47/0x0002\r
+ r Get/Set PictureImageOK{ 0x0004 }\r
+ r Set Picture Image err { 0x0005, error? }\r
+ where error=0x74 - wrong location ?\r
+0x64:\r
+ s Phone ID request { 0x0010 }\r
+ r Phone ID recvd { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... }\r
+ s Accessory connection { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes)\r
+0x7f: Acknowledge(FBUS/IRDA){+type, seq }\r
+ Acknowledge(MBUS)...\r
+0xd0: \r
+ s Power on message seq1 {+04 }\r
+ r Power on message seq1 {+05 }\r
+0xd1:\r
+ s Get HW&SW version { 0x0003, 0x00 }\r
+0xd2:\r
+ r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n"\r
+ "model\n" "(c) NMP." }\r
+0xda: ? (during playing 2 player snake)\r
+0xf0:\r
+ s Send RLP frame {+0x00, 0xd9, ... }\r
+0xf4: Power on message seq 2\r
--- /dev/null
+\r
+Last update 16.02.2002
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+\r
+Assembled by\r
+ Balazs Nagy (js@lsc.hu)\r
+ Marcin Wiacek (Marcin-Wiacek@TOPNET.PL)\r
+ Jens Bennfors <jens.bennfors@ing.hj.se>\r
+ Michael Hund <michael@drhund.de>\r
+ Jay Bertrand <jay.bertrand@libertysurf.fr>\r
+ Gabriele Zappi <gzappi@inwind.it>\r
+ Markus Plail <plail@web.de>
+ Ralf Thelen <ralf@mythelen.de>
+ ... and other members of gnokii mailing list\r
+ and authors of some WWW pages.\r
+\r
+The data provided is for information purposes only. \r
+Some of the frames might be hazardous to your phone. Be careful!!! \r
+We do not take any responsibility or liability for damages, etc.\r
+\r
+NOTE: this information isn't (and can't be) complete. If you know anything\r
+about features not listed here or you noticed a bug in this list, please\r
+notify us via e-mail. Thank you.\r
+\r
+Document describing frames used in\r
+GSM Nokia 6210 and derivatives (7110)\r
+Correct format is FBUS version 2/Infrared/MBUS version 2\r
+(see nokia.txt for protocol details):\r
+\r
+ List:\r
+\r
+0x00: Connect to NBS port ?\r
+ r Set ringtone {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0}\r
+ Seems not to work in MBUS!\r
+0x01: Communication Status\r
+? r Call msg { 0x0002 }\r
+? r Call in progress { 0x0003, seqnr }\r
+? r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) }\r
+? r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" }\r
+? r answered call { 0x0007, seqnr }\r
+? r terminated call { 0x0009, seqnr }\r
+? r call msg { 0x000a, seqnr }\r
+ Note: in 6210 4.27 all msg from 0x01 seems to be unavailable\r
+0x02: SMS handling\r
+ s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... }\r
+ r Message sent { 0x0002 }\r
+ r Send failed { 0x0003, ?, ?, error (like in netmon in 65)}\r
+ s Incoming SMS info on { 0x000d, 0x00, 0x00, 0x02}\r
+ note: no info about Delivery Reports\r
+ r Incoming SMS info onOK{ 0x000e }\r
+ note: no info about Delivery Reports\r
+ r Incoming SMS infoonerr{ 0x000f, error }\r
+ where error: 0x0c - no PIN\r
+ r SMS message received { 0x0011, ...... } (whole message)\r
+ s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }\r
+ for enable cell broadcast ?\r
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }\r
+ for disable cell broadcast ?\r
+ r Set CellBroadcast OK { 0x0021, 0x01 }\r
+ r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ?\r
+ s Set SMS center { 0x0030, 0x64, priority, checksum?, format,\r
+ validity[2], {DefaultRecipient no.}[12],\r
+ {SMScenter no.}[12], {SMSC name}, 0x00}\r
+ where tel.no.[12]: {len, type, {number(BCD)}}\r
+ type: 0x81: normal\r
+ 0x91: + (international)\r
+ 0xd0: alphanumeric\r
+ format: 0x00: text\r
+ 0x22: fax\r
+ 0x24: voice\r
+ 0x25: ERMES\r
+ 0x26: paging\r
+ 0x31: X.400\r
+ 0x32: email\r
+ validity: 0x000b: 1 hour\r
+ 0x0047: 6 hours\r
+ 0x00a7: 24 hours\r
+ 0x00a9: 72 hours\r
+ 0x00ad: 1 week\r
+ 0x00ff: max.time\r
+ r Set SMS center OK { 0x0031 }\r
+ r Set SMS center error { 0x0032, reason }\r
+ s Get SMS center { 0x0033, 0x64, priority }\r
+ r SMS center received { 0x0034, priority, checksum?, type,\r
+ validity[2], {DefaultRecipient no.}[12],\r
+ {SMScenter no.}[12], {SMSC name}, 0x00 }\r
+ where priority, checksum, type, validity,\r
+ tel.no.[12]: see 0x02/0x0030\r
+ r SMS center error recv { 0x0035, reason }\r
+ s?? { 0x0074}\r
+ r?? { 0x0075, 0xFF, 0x11, 0x98}\r
+ s?? { 0x008C}\r
+ r?? { 0x008D, 0x00}\r
+0x03: Phonebook functions\r
+ s Get memory status { 0x0103, 0x02, memory type }\r
+ where: memory type - see 0x03/0x0107\r
+ r Get memory status { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10,\r
+ 0x00[2], z?, ymaxH, ymaxL, y2H, y2L,\r
+ 0x0d?, xH?, 0x00[2]? }\r
+ where y1: location (lowermost)\r
+ y2: no. of locations\r
+ ymax: maximum location no.\r
+ s Read memory { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL,\r
+ yH, yL, 0x00, 0x00}\r
+ where x: memory type\r
+ 0x01: (256) Dialled numbers\r
+ 0x02: (512) Missed calls\r
+ 0x03: (768) Received calls\r
+ 0x05: (500) telephone phonebook\r
+ 0x06: (160) SIM phonebook\r
+ 0x07: (10/0)\r
+ 0x08: (1/0)\r
+ 0x09: (4) voice mailbox\r
+ 0x0e: (10) speed dials\r
+ 0x10: (5) caller groups\r
+ y: location\r
+ r Read memory error { 0x0108, 0x00, 0x01,\r
+ code,0x00, 0x00, z, error}\r
+ where code==0x0f\r
+ error: 0x34 - phonebook location not found\r
+ 0x3b - speed dial not assigned\r
+ r Read memory OK { 0x0108, 0x00, 0x01,\r
+ code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * }\r
+ where code: != 0x0f\r
+ y: location\r
+ z: generic block size\r
+ block: {id, 0, 0, blocksize, block no.,\r
+ {contents}, 0x00}\r
+ id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] }\r
+ 0x07 name {len, (unicode)},\r
+ 0x08 email\r
+ 0x09 postal\r
+ 0x0a note {len, (unicode)}\r
+ 0x0b number {type, 0x00[3], len, (unicode)}\r
+ 0x0c ringtone {ringtone no., 0, 0}\r
+ 0x13 date for a called list (DC, RC, etc.)\r
+ 0x1b caller group graphic {width, height, 0, 0 {bitmap}}\r
+ 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0}\r
+ 0x1e caller group number {number, 0, 0}\r
+ type: 0x0a: General,\r
+ 0x03: Mobile (office ?),\r
+ 0x06: Work,\r
+ 0x04: Fax,\r
+ 0x02: Home (mobile ?)\r
+ s Set mem location { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z,\r
+ xH, xL, yH, yL, 0x00, 0x00, 0x00,\r
+ no.of blocks, { block }[no.of blocks] }\r
+ r Set mem location { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?,\r
+ yH, yL, xL }\r
+ where code:\r
+ 0x3d - wrong entry type\r
+ 0x3e - too much entries\r
+ 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
+ 0x1e: 20 second
+ 0x14: 25 second
+ 0x19: 30 second
+ where divtype:
+ 0x02: all diverts for all call types ?
+ Found only, when deactivate all diverts for all call types (with call type 0x00)
+ 0x15: all calls
+ 0x43: when busy
+ 0x3d: when not answered
+ 0x3e: if not reached
+ calltype:
+ 0x00: all calls (data, voice, fax)
+ 0x0b: voice calls
+ 0x0d: fax calla
+ 0x19: data calls
+ s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 }
+ where divtype, calltype: see above
+ s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 }
+ where divtype, calltype: see above
+0x0a: Network status\r
+ s get used network { 0x0070 }\r
+ r get used network { 0x0071, available,?,?,length,netstatus,netsel,cellIDH,\r
+ cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?,\r
+ len, xlen(78), ylen(21), 0, {bitmap} }\r
+ where {Opstr}: namelen, {operator name(unicode)}\r
+ len: {xlen, ylen, 0, {bitmap} + 2\r
+ {bitmap}: bitmaplen, 0, 0, {OTA bitmap}\r
+ available: 0x02 if the logo following is valid,\r
+ 0x01 for no operator logo following\r
+ s get network status { 0x0081 }\r
+ r get network status { 0x0082, network%, 0x14? }\r
+ s set operator logo { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len,\r
+ xlen(78),ylen(21), 0 (frames?),\r
+ {bitmap}*?, 0x00(padding) }\r
+ where len, {bitmap}: see 0x0a/0x0071\r
+ r set operator logo OK { 0x01a4 }\r
+ s clear operator logo { 0x00af, x}
+ where x==0 to 4
+ r clear operator logo { 0x00bf}
+0x13: Calendar notes\r
+ s Add meeting note { 0x0001, body like in subtype 0x001a...}\r
+ r Add meeting note { 0x0002, location (2 bytes), status (2 bytes)}\r
+ s Add call note { 0x0003, body like in subtype 0x001a...}\r
+ r Add call note { 0x0004, location (2 bytes), status (2 bytes)}\r
+ 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)}\r
+ s Add reminder note { 0x0007, body like in subtype 0x001a...}\r
+ r Add reminder note { 0x0008, location (2 bytes), status (2 bytes)}\r
+ s Delete calendar note { 0x000b, location (2 bytes) }\r
+ r Delete calendar note { 0x000c, location (2 bytes), ?, ?, ?, ? }\r
+ s Get calendar note { 0x0019, location (2 bytes) }\r
+ r Calendar note recvd { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block}\r
+ where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder\r
+ block: for Meeting:{hour,minute,alarm (two bytes),recurrance (two bytes),len,0x00,string(unicode)}\r
+ where alarm=Number of minutes before the time of the meeting\r
+ that the alarm should be triggered:\r
+ For meetings with "No alarm"=0xFFFF (-1).\r
+ For "On time"=0x0000\r
+ half an hour=0x001E, and so on.\r
+ Recurrance=in hours, between future occurances of this meeting.\r
+ If there is no repeat, this value is 0x0000. The special value 0xffff \r
+ means 1 Year!\r
+ for Call:{Hour,Minute,Alarm (as above),Recurrance (as above),namelen,numberlen,\r
+ name(unicode),number(unicode)}\r
+ for Reminder:{Recurrance (as above),len,0x00,string(unicode)}\r
+ for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)}\r
+ byte1 and byte2 may vary (???). Usually are 0x00 both (but not always)\r
+ In Birthday, the Year in the common part, usually contains a strange year.\r
+ So, don't consider it as Year of note, neither year of BirthDay (for Year of\r
+ Birthday use the value described below).\r
+ where alarm=32-bit integer that is the number of seconds between the desired\r
+ alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is\r
+ 0x0000FFFF (65535).\r
+ YearOfBirth=used instead of the one in the common part of the entry (see above)\r
+ but only when reading birthday entries. For storing entries, this field does\r
+ not exist.\r
+ AlarmType: 0x00 - Tone, 0x01 - Silent\r
+? s??? { 0x0021 }\r
+? r??? { 0x0022, 0x5A, 0x00 }\r
+? s??? { 0x0025 }\r
+? r??? { 0x0026, 0x04, 0x00 }\r
+? s { 0x0029 }\r
+? r { 0x002A, 0x04, 0x00 }\r
+ s Get first free pos { 0x0031 }\r
+ r Get first free pos { 0x0032, location (2bytes) }\r
+ s Get notes info { 0x003a, 0xFF, 0xFE}\r
+ r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *}\r
+? s Get calendar note?? { 0x003E, location (2 bytes) }\r
+? r Get calendar note?? { 0x003F, location (2bytes), ... }\r
+0x14:\r
+ s Get Picture Image { 0x0007, location, number[2 bytes], 0x00, 0x64 }\r
+ r Get Picture Image { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38],\r
+ width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...}\r
+ r Get SMS failed { 0x0009, 0x02 },
+ s Get SMS status { 0x0036, 0x64 }
+ r Get SMS Status { 0x0037, 0x05/0x03, 0x01, 0x00, 0x00,\r
+ a (2 octets), b (2 octets), c (2 octets),\r
+ d (2 octets), e (2 octets), 0x00\r
+ where:\r
+ a - according to P.Kot:\r
+ Number of locations in "fixed" memory. These are all\r
+ Templates entries in my Nokias 6210 (NPE-3 (c) NMP V05.36\r
+ 14-11-01, NPE-3 (c) NMP V05.27 01-08-01).\r
+ I can't remove any of Templates entries in my phone.\r
+ Marcin Wi¥cek: Rather not ! I don't agree.\r
+ I have 0x00, 0x0f and 10 templates and 3 SMS\r
+ and 10 Picture Images.\r
+ b - Number of used messages in phone memory. These\r
+ are messages manually moved from the other folders.\r
+ Picture messages are saved here.\r
+ c - Number of unread messages in phone memory. Probably\r
+ only smart messsages.\r
+ d - Number of used messages in SIM memory. These are\r
+ either received messages or saved into Outbox/Inbox.\r
+ Note that you *can't* save message into this memory\r
+ using 'Move' option. Picture messages are not here.\r
+ e - Number of unread messages in SIM memory\r
+\r
+ s Set Picture Image { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38], \r
+ width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...}\r
+ std. size: 72x28\r
+ r Set Picture Image { 0x0051, location, number[2 bytes], 0x07 }\r
+ s Set SMS name { 0x0083,folder,location(2bytes),name(Unicode),0x00 , 0x00}\r
+ r Set SMS name { 0x0084,folder,0x00, 0x00, name (Unicode),0x00,0x00}\r
+ s List Picture Images { 0x0096, location, 0x0f, 0x07 }\r
+ where location:\r
+ LM tries with 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39, 0x41, 0x49\r
+ Returned value with 0x21\r
+ r List Picture Images { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., }\r
+ 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}\r
+ where: folderID - see 0x14/0x017B\r
+ 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\r
+ s Delete SMS message { 0x010a, folderID, location(2 bytes), 0x01 }
+ r Delete SMS { 0x010b }
+ s Get folder status { 0x016b, folderID, 0x0F, 0x01}\r
+ where: folderID - see 0x14/0x017B\r
+ r Get folder status { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....}\r
+ s Get folder names { 0x017A, 0x00, 0x00}\r
+ r Get folder names { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...}\r
+ where: folderID=0x08 - Inbox\r
+ 0x10 - Outbox\r
+ 0x18 - Archive\r
+ 0x20 - Templates
+ 0x29 - first "My folders"
+ 0x31 - second "My folders"
+ 0x39 - third -"-
+ and so on\r
+0x17:\r
+ s Get Battery info { 0x0002 }\r
+ r Get Battery info { 0x0003, 0x0b, batt%, 0x14?, 0x01? }\r
+0x19: Phone clock & alarm\r
+\r
+ These frames are like the same frames subtypes in 0x11 in 6110\r
+\r
+ s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 }\r
+ r date and time set { 0x0061 }\r
+ s get date and time { 0x0062 }\r
+ r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second }\r
+ where: date_set & time_set==0x01 - set\r
+ 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second\r
+ not available in frame\r
+ s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 }\r
+ r alarm set { 0x006c }\r
+ s get alarm { 0x006d }\r
+ r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min }\r
+\r
+ These are new (?)\r
+\r
+? s ?? { 0x0083, id }\r
+? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 }\r
+? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 }\r
+? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 }\r
+ where: id=0x27,0x2a,0x32,0x28,0x40\r
+0x1b:\r
+ s Get IMEI { 0x0001 }\r
+ r Get IMEI { 0x0002, {IMEI(ASCII)}, 0x00 }\r
+ s get HW&SW version { 0x0003, 0x01, 0x32 }\r
+ r get HW&SW version { 0x0004, "V " "firmware\n" "firmware date\n"\r
+ "model\n" "(c) NMP." 0x00 0xff[14] }\r
+0x1f:\r
+ s ??? { 0x0010, 0x02, 0x00, 0xff, 0xff }\r
+ r ??? { 0x0011, length, 0x00, {block}[length] }\r
+ where block: { unicode letter[2], 0x0000,\r
+ 0x00, 0x55, ??, ?? }\r
+ s Set ringtone { 0x011f, 0x00, location, 0x00, name(Unicode),\r
+ ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) }\r
+ where: location: 0x87 to 0x8b on N6210\r
+ 0x74 to ... on N7110\r
+ s Get ringtone { 0x0122, 0x00, location}\r
+ r Get ringtone { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)}\r
+ r Get ringtone error { 0x0124, ...}\r
+0x39:\r
+ s get profile feature { 0x0101, 0x01, 0x01, 0x01, number1, number2}\r
+ where number1: from 0x00 to 0x07 (for each profile ?)\r
+ number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff\r
+ where 0x09: keypad tones\r 0x02: incoming call alert\r 0x03: ringtone number\r
+ 0x04: ringing volume\r
+ 0x05: message alert tone\r 0x06: vibra\r 0x07: warning tones\r 0x08: caller groups alert for\r 0x09: automatic answer
+ 0xff: name\r
+ r get profile feature { 0x0102, 0x01, 0x02, number2, block...}\r
+ for number2==0xff: (Profile Name)\r
+ block: 0x01, length, name(Unicode), 0x00, 0x00\r
+ for number2==0x00: (Keypad Tones)\r
+ block: 0x01, 0x01, 0x01, Type, 0x01\r
+ where: Type : 0x00 = Off\r
+ 0x01 to 0x03 = Level1 .. Level3\r
+ for number2==0x02: (Incoming Call Alert)\r
+ block: 0x01, 0x01, 0x01, Type, 0x01\r
+ where: Type : 0x00 = Ringing\r
+ 0x01 = Ascending\r
+ 0x02 = Ring Once\r
+ 0x03 = Beep Once\r
+ 0x05 = Off\r
+ for number2==0x03: (Ringtone Number)\r
+ block: 0x01, 0x01, 0x01, Number, 0x01\r
+ where: Number : 0x40 to 0x62 - gives number of factory ringtone. The number of menu is\r
+ obtained by doing (Number - 0x3f);\r
+ where: Number : 0x89 to 0x8d - gives number of uploaded ringtone. The number of menu is\r
+ obtained by doing (Number - 0x65),while the uploaded ringtone number is\r
+ obtained by doing (Number - 0x88).\r
+ for number2==0x04: (Ringing volume)\r
+ block: 0x01, 0x??, 0x??, Volume, 0x01\r
+ where: Volume : 0 = Level1 .. to 4 = Level5\r
+ for number2==0x05: (Message Alert Tone)\r
+ block: 0x01, 0x01, 0x??, Type, 0x01\r
+ where: Type : 0x00 = Off\r
+ 0x01 = Standard\r
+ 0x02 = Special\r
+ 0x03 = Beep Once\r
+ 0x04 = Ascending\r
+ for number2==0x06: (Vibration)\r
+ block: 0x01, 0x??, 0x??, Switch, 0x01\r
+ where: Switch : 0 = Off, 1 = On\r
+ for number2==0x07: (Warning Tones)\r
+ block: 0x01, 0x??, 0x??, Switch, 0x01\r
+ where: Switch : 0 = Off, 1 = On\r
+ for number2==0x08: (Caller groups Alert for)\r
+ block: 0x01, 0x??, 0x??, Callers, 0x01\r
+ where: Callers : 0xff = All calls alert (Read below *)\r
+ 0x01 = Family\r
+ 0x02 = VIP\r
+ 0x04 = Friends\r
+ 0x08 = Colleagues\r
+ 0x10 = Others\r
+ All logical OR among groups are valid, so if you select from one phone's profile\r
+ alert for Friends and Collegues, a 0x0c will return (because 0x04 OR 0x08 = 0x0c).\r
+ (*) If Callers==0xff, means "Alert for All calls". Then, in this case, you don't\r
+ need to read other groups selection.\r
+ for number2==0x09: (Automatic answer)\r
+ block: 0x01, 0x??, 0x??, Switch, 0x01\r
+ where: Switch : 0 = Off, 1 = On\r
+ N.B. This feature is valid for Handsfree and Headset profiles only!\r
+ s ??? { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 }\r
+ r ??? { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 }\r
+\r
+ s ? { 0x0105}\r
+ r ? { 0x0106, 0x01, 0x04}\r
+0x3f: WAP \r
+ s Enable WAP frames { 0x0000}\r
+ r Enable WAP frames { 0x0002, 0x01}\r
+\r
+ s ?? { 0x0003}\r
+ r ?? { 0x0004}\r
+\r
+ s Get WAP bookmark { 0x0006, 0x00, location}\r
+ where location: 0 - 14\r
+ r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode),\r
+ url_len, url(unicode), 0x01,0x80,0x00[7]}\r
+ r Get WAP bookmark err { 0x0008, error }\r
+ where error:\r
+ 0x00(?)invalid position\r
+ 0x01 user inside "Bookmarks" menu. Must leave it\r
+ 0x02 invalid/too high/empty location\r
+\r
+ s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode),\r
+ url_len, url(unicode), 0x01,0x80,0x00[7] }\r
+ Note: bookmark is added to the first free location.\r
+ r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block }\r
+ where block:\r
+ 0x0a, location_of_just_written_bookmark(?),\r
+ 0x00, next_free_location(?)\r
+ r Set WAP bookmark err {+0x01, 0x36, 0x0b, error }\r
+ where error:\r
+ 0x04 - memory is full\r
+ 0x01 - we are in the bookmark menu\r
+ 0x00 - unknown reason for now ;(\r
+
+? s Delete WAP bookmark { 0x000c, 0x00, location }\r
+ where: location = 0-14\r
+? r Delete WAR bookmark OK{ 0x000d }\r
+? r Delete WAPbookmark err{ 0x000e, 0x02 }\r
+\r
+ s ?? { 0x000F}\r
+ r ?? { 0x0010, 0x00}\r
+\r
+ s Get WAP settings 1 { 0x0015, location}\r
+ where location: 0x00 - 0x05\r
+ r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...}\r
+ where:\r
+ con_type: 0x00 - temporary\r
+ 0x01 - continuous\r
+ location: when use "Get WAP settings 2 frame", must give it\r
+ security: 0x00 = no, 0x01 = yes\r
+ r Get WAP settings 1 err{ 0x0017, error }\r
+ where error:\r
+ 0x01 user inside "Settings" menu. Must leave it\r
+ 0x02 invalid/too high/empty location\r\r
+ s Get WAP settings 2 { 0x001b, location}\r
+ where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame)\r
+ r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...}\r
+ where type : 0x00 - SMS bearer\r
+ frame:\r
+ service_num_len, service_num (Unicode), server_num_len, server_num(Unicode)\r
+ 0x01 - data bearer\r
+ frame:\r
+ auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode),\r
+ user len, user (Unicode), password len, password (Unicode)\r
+ where auth: 0x00 - normal, 0x01 - secure\r
+ call_type: 0x00 - analogue, 0x01 - ISDN\r
+ call_speed: 0x00 - 9600, 0x01 - 14400\r
+ 0x02 - USSD bearer
+ 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}\r
+ where: error=0x05 \r
+0x40: Security commands\r
+? s ???(N6150) { 0x08, 0x00 }\r
+? r ???(N6150) { 0x08 }\r
+ s Enable extended cmds { 0x64, cmd }\r
+ where cmd: 0x00: off\r
+ 0x01: on\r
+ 0x03: reset (doesn't ask for PIN again)\r
+ 0x04: reset (PIN is requested)\r
+ In 5110 makes reset without PIN\r
+ 0x06: CONTACT SERVICE!!! Don't try it!\r
+ s Get IMEI { 0x66 }\r
+ r Get IMEI { 0x66, 0x01, IMEI, 0x00}\r
+ s (ACD Readings)?(N6150 { 0x68 }\r
+ r (ACD Readings)?(N6150 { 0x68, ... }\r
+ s Get Product Profile\r
+ Settings { 0x6a}\r
+ r Get Product Profile\r
+ Settings { 0x6a, 4bytes with Product Profile Settings }\r
+ s Set Product Profile\r
+ Settings { 0x6b, 4bytes with Product Profile Settings }\r
+ r Set Product Profile\r
+ Settings OK ? { 0x6b }\r
+ s Get code { 0x6e, code }\r
+ where code: see 0x08/0x0004 (no allowed code !)\r
+ r Get code { 0x6e, code, allowed, allowed? (sec code (text)) }\r
+ where code: see 0x08/0x0004\r
+ allowed: 0: no\r
+ 1: yes\r
+? s Reset Permanent\r
+? Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e }\r
+? r Reset Permanent\r
+? Counters (nm->test36) { 0x74 }\r
+ s Call commands { 0x7c, block }\r
+ where where: command, (values)\r
+ command: 0x01\r
+ values: number(ASCII), 0x00 - makes voice call\r
+ command: 0x02 - answer call\r
+ command: 0x03 - release call\r
+ r Call commands { 0x7c, command }\r
+ s Netmonitor { 0x7e, field }\r
+ where: field: 00: next\r
+ F0: reset\r
+ F1: off\r
+ F2: field test menus\r
+ F3: developer menus\r
+ s Get simlock info { 0x8a, 0x00}\r
+ r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 }\r
+ where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock\r
+ locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed\r
+ counter1 - counter4: counters for locks\r
+ s Buzzer pitch { 0x8f, volume, hzLO, hzHI }\r
+ if volume and hz is 0, it's off\r
+ r Buzzer pitch { 0x8f}\r
+ s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) }\r
+ r ACD Readings ? { 0x91, parameter?, value? }\r
+? s ???(N6150) { 0x98, 0x00 }\r
+? r ???(N6150) { 0x98, 0x00, 0x04 }\r
+ s Get bin ringtone { 0x9e, location }\r
+ where: location=0,1,etc.\r
+ r Get bin ringtone { 0x9e, location, error, contents... }\r
+ where location=0,1,etc.\r
+ error=0x0a, ringtone NOT available\r
+ 0x00, OK\r
+ s Set bin ringtone { 0xa0, location, 0x00, contenst... }\r
+ where: location=0,1,etc.\r
+ r Set bin ringtone { 0xa0, location, error }\r
+ where location=0,1,etc.\r
+ error=0x0a, ringtone NOT set\r
+ 0x00, ringtone set OK\r
+? r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 }\r
+ s Get info about phone { 0xc8, 0x01 }\r
+ r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+ s Get MCU SW Checksum { 0xc8, 0x02 }\r
+ r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 }\r
+ s DPS External SW { 0xc7, 0x03 }\r
+ r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 }\r
+ s Get HW { 0xc8, 0x05 }\r
+ r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 }\r
+ s Get "Made" Date { 0xc8, 0x05 }\r
+ r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 }\r
+ s Get DSP Internal SW { 0xc8, 0x09 }\r
+ r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 }\r
+ s Get PCI version { 0xc8, 0x0b }\r
+ r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 }\r
+ s Get system ASIC { 0xc8, 0x0c }\r
+ r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 }\r
+ s Get COBBA { 0xc8, 0x0d }\r
+ r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 }\r
+ s Get PLUSSA { 0xc8, 0x0e }\r
+ r Get PLUSSA { 0xc8, 0x0e, available, 0x00 }\r
+ where available: 0x01: not available\r
+ s Get CCONT { 0xc8, 0x0f }\r
+ r Get CCONT { 0xc8, 0x0f, available, 0x00 }\r
+ where available: 0x01: not available\r
+ s Get PPM version { 0xc8, 0x10 }\r
+ r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 }\r
+ s Get PPM info { 0xc8, 0x12 }\r
+ r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 }\r
+ s Set HW version { 0xc9, 0x05, version, 0x00 }\r
+ s Get Product Code { 0xca, 0x01 }\r
+ r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 }\r
+ s Get Order Number { 0xca, 0x02 }\r
+ r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 }\r
+ s Get Prod.Ser.Number { 0xca, 0x03 }\r
+ r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 }\r
+ s Get Basic Prod.Code { 0xca, 0x04 }\r
+ r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 }\r
+ s Set Product Code { 0xcb, 0x01, product code, 0x00 }\r
+ s Set Order Number { 0xcb, 0x02, number, 0x00 }\r
+ s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 }\r
+ s Get (original ?)IMEI { 0xcc, 0x01 }\r
+ r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 }\r
+ s Get Manufacture Month { 0xcc, 0x02 }\r
+ r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 }\r
+ s Get Purchare date { 0xcc, 0x04 }\r
+ r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 }\r
+ s Set "Made" date { 0xcd, 0x02, string, 0x00 }\r
+ s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00}\r
+ s Make one phone test { 0xce,0x1d,num1,num2,num3,num4}\r
+ Where num1-num4: 0x02,0x00,0x00,0x00;\r
+ 0x04,0x00,0x00,0x00;\r
+ 0x08,0x00,0x00,0x00;\r