From 0484268a27be1ab830d087847d830bc0ec734016 Mon Sep 17 00:00:00 2001 From: jankratochvil <> Date: Sun, 17 Mar 2002 20:30:03 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'mygnokii2002_03_17_19_29'. Sprout from uc 2002-03-17 20:30:02 UTC jankratochvil 'This commit was manufactured by cvs2svn to create branch 'uc'.' Cherrypick from uc 2002-02-18 02:07:04 UTC jankratochvil 'This commit was manufactured by cvs2svn to create branch 'uc'.': Makefile Makefile.global.in common/data/at-emulator.c common/data/datapump.c common/data/rlp-common.c common/data/rlp-crc24.c common/data/virtmodem.c common/devices/unixserial.c common/gsm-calendar.c common/gsm-phonebook.c common/gsm-wap.c common/protocol/at.c common/protocol/fbusirda.c configure configure.in getopt/getopt.c getopt/getopt1.c gnokii/Makefile include/config.h.in.in include/data/at-emulator.h include/data/datapump.h include/data/rlp-common.h include/data/virtmodem.h include/devices/unixserial.h include/files/cfgreader.h include/gsm-coding.h include/gsm-networks.h include/gsm-sms.h include/protocol/fbus.h utils/Makefile Cherrypick from mygnokii 2002-03-17 20:30:01 UTC short 'http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz': Docs/developers/gnokii/gettext-howto Docs/developers/gnokii/gnokii.txt Docs/developers/gnokii/packaging-howto Docs/developers/gnokii/untitled.txt Docs/developers/other/RE RE.txt Docs/developers/other/dmcp/addsms Docs/developers/other/dmcp/readme Docs/developers/other/dmcp/removesms Docs/developers/other/sniffs/Telefonbucheditor7110.txt Docs/developers/other/sniffs/irda/info.txt Docs/developers/protocol/n6110.txt Docs/developers/protocol/n7110.txt Docs/developers/protocol/nokia.txt Docs/en_US/gnokii/config.htm Docs/en_US/gnokii/faq.htm Docs/en_US/gnokii/gnokii-6210-7110-IrDA Docs/en_US/gnokii/gnokii.htm Docs/en_US/gnokii/phones.htm Docs/en_US/gnokii/todologo Docs/en_US/gnokii/xgnokii/calendar/index.htm Docs/en_US/gnokii/xgnokii/contacts/index.htm Docs/en_US/gnokii/xgnokii/dtmf/index.htm Docs/en_US/gnokii/xgnokii/main/index.htm Docs/en_US/gnokii/xgnokii/netmon/index.htm Docs/en_US/gnokii/xgnokii/sms/index.htm Docs/en_US/gnokii/xgnokii/speeddial/index.htm Docs/en_US/gnokii/xgnokii/xkeyb/index.htm Docs/en_US/gsm/cables/cables.htm Docs/en_US/gsm/codes/codes.htm Docs/en_US/gsm/compare/1.htm Docs/en_US/gsm/compare/compare.htm Docs/en_US/gsm/compare/index.htm Docs/en_US/gsm/compare/null.htm Docs/en_US/gsm/firmware/firm12.htm Docs/en_US/gsm/firmware/firm3.htm Docs/en_US/gsm/firmware/firm5.htm Docs/en_US/gsm/firmware/firm6_1.htm Docs/en_US/gsm/firmware/firm6_2.htm Docs/en_US/gsm/firmware/firm7.htm Docs/en_US/gsm/firmware/firm8.htm Docs/en_US/gsm/firmware/firm9.htm Docs/en_US/gsm/firmware/firmware.htm Docs/en_US/gsm/irda/irda.htm Docs/en_US/gsm/logos/logos.htm Docs/en_US/gsm/netmon/faq_net0.htm Docs/en_US/gsm/netmon/faq_net1.htm Docs/en_US/gsm/netmon/faq_net2.htm Docs/en_US/gsm/netmon/faq_net3.htm Docs/en_US/gsm/netmon/faq_net4.htm Docs/en_US/gsm/netmon/faq_net5.htm Docs/en_US/gsm/netmon/faq_net6.htm Docs/en_US/gsm/netmon/net_spis.htm Docs/en_US/gsm/sms/sms.htm Docs/en_US/index.htm Docs/en_US/styl.css Docs/examples/gnokiirc Docs/examples/test.vcs Docs/pl_PL/mygnokii.htm Docs/pl_PL/styl.css common/devices/device.c common/files/cfgreader.c common/files/gsm-filetypes.c common/files/midifile.c common/gsm-coding.c common/gsm-datetime.c common/newmodules/n6110.c common/newmodules/n7110.c common/newmodules/newat.c common/newmodules/sniff/sniff.c common/protocol/fbus.c common/protocol/mbus.c gnokii/gnokii.h include/devices/device.h include/files/gsm-filetypes.h include/newmodules/n6110.h include/newmodules/n7110.h include/newmodules/sniff/sniff.h win32_makefile/dll_vc6/GnokiiAPI.def win32_makefile/dll_vc6/GnokiiAPI.dsp win32_makefile/dll_vc6/clean.bat win32_makefile/dll_vc6/gnokiiapi.c win32_makefile/dll_vc6/gnokiiapi.h win32_makefile/gnokii_vc6/gnokii.mak win32_makefile/gui_delphi/Calendar.dfm win32_makefile/gui_delphi/Calendar.pas win32_makefile/gui_delphi/GnokiiAPI.pas win32_makefile/gui_delphi/Project1.dof win32_makefile/gui_delphi/Project1.dpr win32_makefile/gui_delphi/mainunit.dfm win32_makefile/gui_delphi/mainunit.pas win32_makefile/gui_delphi/pbkedit.dfm win32_makefile/gui_delphi/pbkedit.pas win32_makefile/gui_delphi/smsedit.dfm win32_makefile/gui_delphi/smsedit.pas Cherrypick from ats 2002-03-17 20:29:24 UTC short 'http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz': COPYING Docs/CREDITS INSTALL VERSION common/Makefile common/gsm-api.c common/gsm-bitmaps.c common/gsm-networks.c common/gsm-ringtones.c common/gsm-sms.c common/misc.c gnokii/gnokii.c include/gsm-api.h include/gsm-bitmaps.h include/gsm-common.h include/gsm-ringtones.h xgnokii/xgnokii_contacts.c xgnokii/xgnokii_logos.c xgnokii/xgnokii_sms.c Delete: Docs/en_US/gsm/firmware/ftable1.htm Docs/en_US/gsm/firmware/ftable2.htm Docs/en_US/gsm/firmware/ftable3.htm acconfig.h bigfunc do gnokii/cleanup.c gnokii/hello.c include/uccompat.h readme win32_makefile/gui_delphi/Project1.dsk win32_makefile/gui_delphi/Project1.res --- COPYING | 356 +- Docs/CREDITS | 2 +- Docs/developers/gnokii/gettext-howto | 204 +- Docs/developers/gnokii/gnokii.txt | 134 +- Docs/developers/gnokii/packaging-howto | 118 +- Docs/developers/gnokii/untitled.txt | 84 +- Docs/developers/other/RE RE.txt | 130 +- Docs/developers/other/dmcp/addsms | 38 +- Docs/developers/other/dmcp/readme | 296 +- Docs/developers/other/dmcp/removesms | 10 +- .../other/sniffs/Telefonbucheditor7110.txt | 38 +- Docs/developers/other/sniffs/irda/info.txt | 21 +- Docs/developers/protocol/n6110.txt | 1657 +-- Docs/developers/protocol/n7110.txt | 1266 +-- Docs/developers/protocol/nokia.txt | 20 +- Docs/en_US/gnokii/config.htm | 1262 +-- Docs/en_US/gnokii/faq.htm | 712 +- Docs/en_US/gnokii/gnokii-6210-7110-IrDA | 14 +- Docs/en_US/gnokii/gnokii.htm | 3138 +++--- Docs/en_US/gnokii/phones.htm | 416 +- Docs/en_US/gnokii/todologo | 104 +- Docs/en_US/gnokii/xgnokii/calendar/index.htm | 36 +- Docs/en_US/gnokii/xgnokii/contacts/index.htm | 36 +- Docs/en_US/gnokii/xgnokii/dtmf/index.htm | 36 +- Docs/en_US/gnokii/xgnokii/main/index.htm | 36 +- Docs/en_US/gnokii/xgnokii/netmon/index.htm | 42 +- Docs/en_US/gnokii/xgnokii/sms/index.htm | 46 +- Docs/en_US/gnokii/xgnokii/speeddial/index.htm | 36 +- Docs/en_US/gnokii/xgnokii/xkeyb/index.htm | 36 +- Docs/en_US/gsm/cables/cables.htm | 260 +- Docs/en_US/gsm/codes/codes.htm | 272 +- Docs/en_US/gsm/compare/1.htm | 40 +- Docs/en_US/gsm/compare/compare.htm | 38 +- Docs/en_US/gsm/compare/index.htm | 420 +- Docs/en_US/gsm/compare/null.htm | 12 +- Docs/en_US/gsm/firmware/firm12.htm | 40 +- Docs/en_US/gsm/firmware/firm3.htm | 75 +- Docs/en_US/gsm/firmware/firm5.htm | 53 +- Docs/en_US/gsm/firmware/firm6_1.htm | 34 +- Docs/en_US/gsm/firmware/firm6_2.htm | 46 +- Docs/en_US/gsm/firmware/firm7.htm | 153 +- Docs/en_US/gsm/firmware/firm8.htm | 146 +- Docs/en_US/gsm/firmware/firm9.htm | 15 +- Docs/en_US/gsm/firmware/firmware.htm | 1404 +-- Docs/en_US/gsm/firmware/ftable1.htm | 2297 ---- Docs/en_US/gsm/firmware/ftable2.htm | 2017 ---- Docs/en_US/gsm/firmware/ftable3.htm | 2807 ----- Docs/en_US/gsm/irda/irda.htm | 50 +- Docs/en_US/gsm/logos/logos.htm | 76 +- Docs/en_US/gsm/netmon/faq_net0.htm | 1393 +-- Docs/en_US/gsm/netmon/faq_net1.htm | 1007 +- Docs/en_US/gsm/netmon/faq_net2.htm | 4813 ++++---- Docs/en_US/gsm/netmon/faq_net3.htm | 4991 +++++---- Docs/en_US/gsm/netmon/faq_net4.htm | 4469 ++++---- Docs/en_US/gsm/netmon/faq_net5.htm | 4780 ++++---- Docs/en_US/gsm/netmon/faq_net6.htm | 6077 ++++++----- Docs/en_US/gsm/netmon/net_spis.htm | 274 +- Docs/en_US/gsm/sms/sms.htm | 314 +- Docs/en_US/index.htm | 104 +- Docs/en_US/styl.css | 92 +- Docs/examples/gnokiirc | 9 + Docs/examples/test.vcs | 12 +- Docs/pl_PL/mygnokii.htm | 1948 ++-- Docs/pl_PL/styl.css | 92 +- INSTALL | 10 +- Makefile | 8 +- Makefile.global.in | 19 +- VERSION | 2 +- acconfig.h | 107 - bigfunc | 28 - common/Makefile | 51 +- common/data/at-emulator.c | 59 +- common/data/datapump.c | 35 +- common/data/rlp-common.c | 165 +- common/data/rlp-crc24.c | 4 +- common/data/virtmodem.c | 118 +- common/devices/device.c | 259 +- common/devices/unixserial.c | 29 +- common/files/cfgreader.c | 37 +- common/files/gsm-filetypes.c | 595 +- common/files/midifile.c | 18 +- common/gsm-api.c | 237 +- common/gsm-bitmaps.c | 28 +- common/gsm-calendar.c | 2 - common/gsm-coding.c | 57 +- common/gsm-datetime.c | 98 +- common/gsm-networks.c | 80 +- common/gsm-phonebook.c | 2 - common/gsm-ringtones.c | 161 +- common/gsm-sms.c | 33 +- common/gsm-wap.c | 2 - common/misc.c | 110 +- common/newmodules/n6110.c | 10882 +++++++++---------- common/newmodules/n7110.c | 480 +- common/newmodules/newat.c | 250 +- common/newmodules/sniff/sniff.c | 387 +- common/protocol/at.c | 4 +- common/protocol/fbus.c | 149 +- common/protocol/fbusirda.c | 2 - common/protocol/mbus.c | 6 +- configure | 6379 +++++++++++ configure.in | 40 +- do | 30 - getopt/getopt.c | 7 - getopt/getopt1.c | 4 - gnokii/Makefile | 23 +- gnokii/cleanup.c | 79 - gnokii/gnokii.c | 712 +- gnokii/gnokii.h | 39 +- gnokii/hello.c | 7 - include/config.h.in.in | 57 + include/data/at-emulator.h | 10 +- include/data/datapump.h | 1 + include/data/rlp-common.h | 3 + include/data/virtmodem.h | 14 +- include/devices/device.h | 17 +- include/devices/unixserial.h | 18 +- include/files/cfgreader.h | 10 +- include/files/gsm-filetypes.h | 1 + include/gsm-api.h | 257 +- include/gsm-bitmaps.h | 1 + include/gsm-coding.h | 4 - include/gsm-common.h | 9 +- include/gsm-networks.h | 2 - include/gsm-ringtones.h | 2 + include/gsm-sms.h | 34 +- include/newmodules/n6110.h | 244 +- include/newmodules/n7110.h | 4 +- include/newmodules/sniff/sniff.h | 60 +- include/protocol/fbus.h | 9 + include/uccompat.h | 43 - readme | 83 - utils/Makefile | 2 +- win32_makefile/dll_vc6/GnokiiAPI.def | 6 + win32_makefile/dll_vc6/GnokiiAPI.dsp | 108 +- win32_makefile/dll_vc6/clean.bat | 2 + win32_makefile/dll_vc6/gnokiiapi.c | 31 + win32_makefile/dll_vc6/gnokiiapi.h | 8 + win32_makefile/gnokii_vc6/gnokii.mak | 18 + win32_makefile/gui_delphi/Calendar.dfm | 30 +- win32_makefile/gui_delphi/Calendar.pas | 43 +- win32_makefile/gui_delphi/GnokiiAPI.pas | 72 +- win32_makefile/gui_delphi/Project1.dof | 8 +- win32_makefile/gui_delphi/Project1.dpr | 10 +- win32_makefile/gui_delphi/Project1.dsk | 218 - win32_makefile/gui_delphi/Project1.res | Bin 1536 -> 0 bytes win32_makefile/gui_delphi/mainunit.dfm | 495 +- win32_makefile/gui_delphi/mainunit.pas | 1336 ++- win32_makefile/gui_delphi/pbkedit.dfm | 25 +- win32_makefile/gui_delphi/pbkedit.pas | 2 +- win32_makefile/gui_delphi/smsedit.dfm | 55 +- win32_makefile/gui_delphi/smsedit.pas | 51 +- xgnokii/xgnokii_contacts.c | 30 +- xgnokii/xgnokii_logos.c | 2 +- xgnokii/xgnokii_sms.c | 8 +- 155 files changed, 38945 insertions(+), 37286 deletions(-) delete mode 100644 Docs/en_US/gsm/firmware/ftable1.htm delete mode 100644 Docs/en_US/gsm/firmware/ftable2.htm delete mode 100644 Docs/en_US/gsm/firmware/ftable3.htm delete mode 100644 acconfig.h delete mode 100755 bigfunc create mode 100755 configure delete mode 100755 do delete mode 100644 gnokii/cleanup.c delete mode 100644 gnokii/hello.c create mode 100644 include/config.h.in.in delete mode 100644 include/uccompat.h delete mode 100644 readme delete mode 100644 win32_makefile/gui_delphi/Project1.dsk delete mode 100644 win32_makefile/gui_delphi/Project1.res diff --git a/COPYING b/COPYING index 049061c..60549be 100644 --- a/COPYING +++ b/COPYING @@ -1,30 +1,340 @@ -GNOKII - A Linux/Unix toolset and driver for the Nokia 3x10/8110/51x0/61x0 - Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 -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. + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -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. + Preamble -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., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA. + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. -You can contact authors by mail at + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. -hugh@linuxcare.com Pavel.Janik@suse.cz -Hugh Blemings Mgr. Pavel Janík, SuSE CR, s.r.o. -PO Box 234 Pod Pekárnami 338/12 -Belconnen ACT 2616 190 00 Praha 9 -Australia Czech Republic + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. -We would be delighted to receive a postcard from you if you use gnokii but -this is not a requirement of these licence terms! :) + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. -Any trademarks in this or other gnokii documents/files are the property of -their respective owners. + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Docs/CREDITS b/Docs/CREDITS index 7193775..8232bd3 100644 --- a/Docs/CREDITS +++ b/Docs/CREDITS @@ -89,7 +89,7 @@ Thank you to, in no particular order... * Balazs Nagy for frames list and long hacker's work... -* Ladislav Michl & Manfred Jonsson for support for various AT phones... +* Ladislav Michl & Manfred Jonsson for support for various AT phones... * Manfred Jonsson for idea of programming, which looks for me good diff --git a/Docs/developers/gnokii/gettext-howto b/Docs/developers/gnokii/gettext-howto index c24e67d..b014220 100644 --- a/Docs/developers/gnokii/gettext-howto +++ b/Docs/developers/gnokii/gettext-howto @@ -1,102 +1,102 @@ -1. What do I need? - -- a reasonably recent version of GNU gettext (e.g. 0.10.35) - Check the version using e.g. msgfmt -V - -- autoconf - -- gnokii distribution :-) - -- if you have the variable LINGUAS in the environment - (most Red Hats have, no idea about other distributions), - unset it - - -2. How to make gnokii.pot file? - -gnokii.pot file is a collection of all localizable strings -in the gnokii package. It will be generated automagically -and is included in the standard distribution package. - -If you need to regenerate it, goto "po" directory, -remove gnokii.pot and say - - make gnokii.pot - - -3.1 How to start translating for a new language? - -First, you would like to contact the authors or write -to the mailing list - maybe there already is someone -working on this translation. - -If you get the OK from the maintainer, there are several -steps to do: - -- add the code of your language to the ALL_LINGUAS line - in the configure.in file - - Caution: the language code may differ from the country - code, e.g. czech language is cs, Czech Republic is cz - -- run autoconf to recreate configure script - -- reconfigure the package (./configure) - -- in the po directory, copy gnokii.pot to .po - -- start translating - - -3.2 How to merge existing translations with the updated gnokii.pot? - -This is simple. Rename the old file and use msgmerge to create -an updated one: - - mv cs.po cs.po.bak - msgmerge -o cs.po cs.po.bak gnokii.pot - - -4. How to generate a .mo file - -When you say make in the po directory, all existing -translations will be generated. The suffix will be .gmo. - -If you want to do this manually, use the msgfmt utility, e.g. - - msgfmt -o cs.mo -v cs.po - - -5. How to install the files - -Again, the makefile takes care of this. Simply use (as root) - - make install - -in the po directory. If you want to do this manually (and/or -for your language only), move the .mo file to -/usr/share/locale//LC_MESSAGES/gnokii.mo - - -I'm from Czech republic, so I did (well, I did not, but if you would -like to localize gnokii, you should :-): - - cd po - make gnokii.pot - cp gnokii.pot cs.po - - msgfmt -o cs.mo -v cs.po - make - make install - -And now: - -SnowWhite:/tmp/gnokii$ export LC_MESSAGES=cs_CZ -SnowWhite:/tmp/gnokii$ ./gnokii --version -GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. - Kompilace: 19:09:02 Mar 13 1999 pro model 6110 na portu /dev/ttyS0 -SnowWhite:/tmp/gnokii$ - -The second line is in czech language :-) There are some problems - for -example with "Mar" which is substitute by the C preprocessor. - +1. What do I need? + +- a reasonably recent version of GNU gettext (e.g. 0.10.35) + Check the version using e.g. msgfmt -V + +- autoconf + +- gnokii distribution :-) + +- if you have the variable LINGUAS in the environment + (most Red Hats have, no idea about other distributions), + unset it + + +2. How to make gnokii.pot file? + +gnokii.pot file is a collection of all localizable strings +in the gnokii package. It will be generated automagically +and is included in the standard distribution package. + +If you need to regenerate it, goto "po" directory, +remove gnokii.pot and say + + make gnokii.pot + + +3.1 How to start translating for a new language? + +First, you would like to contact the authors or write +to the mailing list - maybe there already is someone +working on this translation. + +If you get the OK from the maintainer, there are several +steps to do: + +- add the code of your language to the ALL_LINGUAS line + in the configure.in file + + Caution: the language code may differ from the country + code, e.g. czech language is cs, Czech Republic is cz + +- run autoconf to recreate configure script + +- reconfigure the package (./configure) + +- in the po directory, copy gnokii.pot to .po + +- start translating + + +3.2 How to merge existing translations with the updated gnokii.pot? + +This is simple. Rename the old file and use msgmerge to create +an updated one: + + mv cs.po cs.po.bak + msgmerge -o cs.po cs.po.bak gnokii.pot + + +4. How to generate a .mo file + +When you say make in the po directory, all existing +translations will be generated. The suffix will be .gmo. + +If you want to do this manually, use the msgfmt utility, e.g. + + msgfmt -o cs.mo -v cs.po + + +5. How to install the files + +Again, the makefile takes care of this. Simply use (as root) + + make install + +in the po directory. If you want to do this manually (and/or +for your language only), move the .mo file to +/usr/share/locale//LC_MESSAGES/gnokii.mo + + +I'm from Czech republic, so I did (well, I did not, but if you would +like to localize gnokii, you should :-): + + cd po + make gnokii.pot + cp gnokii.pot cs.po + + msgfmt -o cs.mo -v cs.po + make + make install + +And now: + +SnowWhite:/tmp/gnokii$ export LC_MESSAGES=cs_CZ +SnowWhite:/tmp/gnokii$ ./gnokii --version +GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. + Kompilace: 19:09:02 Mar 13 1999 pro model 6110 na portu /dev/ttyS0 +SnowWhite:/tmp/gnokii$ + +The second line is in czech language :-) There are some problems - for +example with "Mar" which is substitute by the C preprocessor. + diff --git a/Docs/developers/gnokii/gnokii.txt b/Docs/developers/gnokii/gnokii.txt index f24e690..0d265dd 100644 --- a/Docs/developers/gnokii/gnokii.txt +++ b/Docs/developers/gnokii/gnokii.txt @@ -1,69 +1,69 @@ NOTE for command line gnokii: ---netmonitordata - - we have used two data structure, defined in gnokii.h : - - PARAM_INFO_MON wich is a single linked recursive list of pointers, - each pointers contain the complete description of one netmonitor param. - - /////////////////////////////////////////////////////////////////////// - // start->next->next->next-> ...->next->NULL - // | | | | - // V V V V - // par0 par1 par2 parN - /////////////////////////////////////////////////////////////////////// - - OUT_INFO_MON, contains parameters as specified - from the command line and an array of data pointers requested by user, - each one point to a single PARAM_INFO_MON - for optimization reason, also we filled in one array of required screen. - - - this the block diagram of program: - - PARAM_INFO_MON *info: - OUT_INFO_MON *out: - - netmonitordata() - - check for -S option, assign filename - - check for -I option, assign filename - - autodetect_phonemodel_phone_version() This is TO DO - - info = get_min_param_info() // nedeed here, so later we can check args param - - // here we check command line arguments - if -I option - - for each line - do - parse_check(f_argc, f_argv, info, file, line) - done - else - parse_check(argc, argv, info, NULL, 0) - fi - - - // HERE, ALL IS CHECKED - - // here we make OUT_INFO_MON - if -I option - - for each line - do - out = parse_process(f_argc, f_argv, info, file, line) - - nmd_output(out) - - free(out) - done - else - out = parse_process(argc, argv, info, NULL, 0) - - nmd_output(out) - - free(out) - fi +--netmonitordata + + we have used two data structure, defined in gnokii.h : + + PARAM_INFO_MON wich is a single linked recursive list of pointers, + each pointers contain the complete description of one netmonitor param. + + /////////////////////////////////////////////////////////////////////// + // start->next->next->next-> ...->next->NULL + // | | | | + // V V V V + // par0 par1 par2 parN + /////////////////////////////////////////////////////////////////////// + + OUT_INFO_MON, contains parameters as specified + from the command line and an array of data pointers requested by user, + each one point to a single PARAM_INFO_MON + for optimization reason, also we filled in one array of required screen. + + + this the block diagram of program: + + PARAM_INFO_MON *info: + OUT_INFO_MON *out: + + netmonitordata() + + check for -S option, assign filename + + check for -I option, assign filename + + autodetect_phonemodel_phone_version() This is TO DO + + info = get_min_param_info() // nedeed here, so later we can check args param + + // here we check command line arguments + if -I option + + for each line + do + parse_check(f_argc, f_argv, info, file, line) + done + else + parse_check(argc, argv, info, NULL, 0) + fi + + + // HERE, ALL IS CHECKED + + // here we make OUT_INFO_MON + if -I option + + for each line + do + out = parse_process(f_argc, f_argv, info, file, line) + + nmd_output(out) + + free(out) + done + else + out = parse_process(argc, argv, info, NULL, 0) + + nmd_output(out) + + free(out) + fi diff --git a/Docs/developers/gnokii/packaging-howto b/Docs/developers/gnokii/packaging-howto index 988ee92..25a63b7 100644 --- a/Docs/developers/gnokii/packaging-howto +++ b/Docs/developers/gnokii/packaging-howto @@ -1,60 +1,60 @@ - - Common information: - - For more install/compilation information see the INSTALL file. - - (!) Makefiles support make install prefix= - for package building. You can use it example in for .spec: - - ./configure --prefix=/usr - make install prefix=$RPM_BUILD_ROOT/usr - - (You not need create any dirs - all make make install.) - - For a installation procedure is used 'make install' or - 'make install prefix=', and all outputs from this routine must be - correct. Please, not make any correction in your package specific - build system (example use 'cp' in package routines - .spec - - it is job for Makefiles). Write more different routines for - instalation is good way to hell... - - 'make install' not install documentation, because for this use - any distribution itself routines. If you want install docs via - Makefile you must type 'make install-docs' - - Debian: - - 1/ Add new lines to Debian/changelog and set corect verion in this - file. - - 2/ Check files: rules, menu, docs - - 3/ Well, because gnokii's debian directory is in subdirectory - 'packaging' and it is total non-standard for Debian package - building system, you must firstly type in top directory: - - # ln -s packaging/Debian debian - - 3/ In source type: - - # debian/rules binary - # debian/rules clean - - 4/ Delete symlink - - # rm debian - - - - FreeBSD: - - - - RedHat: - - - - - - Win32: + + Common information: + + For more install/compilation information see the INSTALL file. + + (!) Makefiles support make install prefix= + for package building. You can use it example in for .spec: + + ./configure --prefix=/usr + make install prefix=$RPM_BUILD_ROOT/usr + + (You not need create any dirs - all make make install.) + + For a installation procedure is used 'make install' or + 'make install prefix=', and all outputs from this routine must be + correct. Please, not make any correction in your package specific + build system (example use 'cp' in package routines - .spec - + it is job for Makefiles). Write more different routines for + instalation is good way to hell... + + 'make install' not install documentation, because for this use + any distribution itself routines. If you want install docs via + Makefile you must type 'make install-docs' + + Debian: + + 1/ Add new lines to Debian/changelog and set corect verion in this + file. + + 2/ Check files: rules, menu, docs + + 3/ Well, because gnokii's debian directory is in subdirectory + 'packaging' and it is total non-standard for Debian package + building system, you must firstly type in top directory: + + # ln -s packaging/Debian debian + + 3/ In source type: + + # debian/rules binary + # debian/rules clean + + 4/ Delete symlink + + # rm debian + + + + FreeBSD: + + + + RedHat: + + + + + + Win32: \ No newline at end of file diff --git a/Docs/developers/gnokii/untitled.txt b/Docs/developers/gnokii/untitled.txt index f06a8f6..200ab77 100644 --- a/Docs/developers/gnokii/untitled.txt +++ b/Docs/developers/gnokii/untitled.txt @@ -1,42 +1,42 @@ -Subject: RE: Xgnokii in win32 ? -Date: Mon, 29 Nov 1999 08:45:31 +0100 -From: Acquadro Daniele -To: marcinw0@poczta.onet.pl -CC: gnokii - -Hi , -gtk for windows can be donloaded from www.gtk.org. On the left there's a -link to GTK+ on win32 (on the bottom of the page). - -To compile xGnokii, using VC ide, you have to create a new win32 CONSOLE -application (NOT a win32 application) and then add the libraries. -TO COMPILE you need those libraries -gdk-1.3.lib -gtk-1.3.lib -glib-1.3.lib - - bye - Daniele -> -----Original Message----- -> From: Marcin Wiacek [SMTP:marcinw0@poczta.onet.pl] -> Sent: domenica 28 novembre 1999 22.50 -> To: GNU Nokia mailing List -> Subject: Xgnokii in win32 ? -> -> -> Hi, -> -> I want to know only, where can I get GTK libraries for win32 (they're -> required for compiling xgnokii) from ? -> -> Or maybe somebody will write on the list/some WWW page, what to do to -> compile xgnokii in win32 (how to replace GTK libraries with win procedures -> - -> I think, it will be better) ? -> -> ...maybe I shouldn't ask for it, but it isn't written in gnokii source... -> -> Regards, -> -> Marcin -> +Subject: RE: Xgnokii in win32 ? +Date: Mon, 29 Nov 1999 08:45:31 +0100 +From: Acquadro Daniele +To: marcinw0@poczta.onet.pl +CC: gnokii + +Hi , +gtk for windows can be donloaded from www.gtk.org. On the left there's a +link to GTK+ on win32 (on the bottom of the page). + +To compile xGnokii, using VC ide, you have to create a new win32 CONSOLE +application (NOT a win32 application) and then add the libraries. +TO COMPILE you need those libraries +gdk-1.3.lib +gtk-1.3.lib +glib-1.3.lib + + bye + Daniele +> -----Original Message----- +> From: Marcin Wiacek [SMTP:marcinw0@poczta.onet.pl] +> Sent: domenica 28 novembre 1999 22.50 +> To: GNU Nokia mailing List +> Subject: Xgnokii in win32 ? +> +> +> Hi, +> +> I want to know only, where can I get GTK libraries for win32 (they're +> required for compiling xgnokii) from ? +> +> Or maybe somebody will write on the list/some WWW page, what to do to +> compile xgnokii in win32 (how to replace GTK libraries with win procedures +> - +> I think, it will be better) ? +> +> ...maybe I shouldn't ask for it, but it isn't written in gnokii source... +> +> Regards, +> +> Marcin +> diff --git a/Docs/developers/other/RE RE.txt b/Docs/developers/other/RE RE.txt index aa25178..1652e4c 100644 --- a/Docs/developers/other/RE RE.txt +++ b/Docs/developers/other/RE RE.txt @@ -1,66 +1,66 @@ -Do: Markus Plail -Temat: RE: RE: - - -Hi, - -> Sorry for the confusion. I wrote the subject (getsms for 6210) in -> the CC field. -No problem :-) - -> So this is what I want to try, in linux btw. U wrote that u can -> give some information on that topic. -OK. Good. - -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. - -Example: N6110_NetMonitor for netmonitor function. - -If each function (let's say N6110_NetMonitor) you send frame for phone: ------------------------------ - unsigned char req[] = { 0x00, 0x01, 0x7e, 0x00 }; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - CurrentNetmonitor=Screen; - - req[3]=mode; - - return N6110_SendMessageSequence - (20, &CurrentNetmonitorError, 4, 0x40, req); ---------------------------- -In req you prepare it (see 6110.txt/7110.txt for frame for netmonitor and compare it with req). - -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. - -After it we set pointer to structure given by user (pointers are declared in gsm-api.c & gsm-api.h): CurrentNetmonitor=Screen; - -Prepare frame send to phone... - -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. - -That's all here. - -All answers are handled in N7110_DispatchMessage - -In example look for: - - fprintf(stdout, _("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]); - -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. --------------------- -If you understand, let's start: - -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). - -After it we will be able to make "real" getsms... - -Any questions ? - -Pozdrowienia/Best Regards --- -Marcin Wiacek -> mailto:marcinwiacek@topnet.pl http://marcin-wiacek.topnet.pl (http://www.fkn.pl/marcinw) -> netmonitor, firmware, mygnokii (GSM & Nokia) +Do: Markus Plail +Temat: RE: RE: + + +Hi, + +> Sorry for the confusion. I wrote the subject (getsms for 6210) in +> the CC field. +No problem :-) + +> So this is what I want to try, in linux btw. U wrote that u can +> give some information on that topic. +OK. Good. + +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. + +Example: N6110_NetMonitor for netmonitor function. + +If each function (let's say N6110_NetMonitor) you send frame for phone: +----------------------------- + unsigned char req[] = { 0x00, 0x01, 0x7e, 0x00 }; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + CurrentNetmonitor=Screen; + + req[3]=mode; + + return N6110_SendMessageSequence + (20, &CurrentNetmonitorError, 4, 0x40, req); +--------------------------- +In req you prepare it (see 6110.txt/7110.txt for frame for netmonitor and compare it with req). + +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. + +After it we set pointer to structure given by user (pointers are declared in gsm-api.c & gsm-api.h): CurrentNetmonitor=Screen; + +Prepare frame send to phone... + +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. + +That's all here. + +All answers are handled in N7110_DispatchMessage + +In example look for: + + fprintf(stdout, _("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]); + +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. +-------------------- +If you understand, let's start: + +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). + +After it we will be able to make "real" getsms... + +Any questions ? + +Pozdrowienia/Best Regards +-- +Marcin Wiacek -> mailto:marcinwiacek@topnet.pl http://marcin-wiacek.topnet.pl (http://www.fkn.pl/marcinw) -> netmonitor, firmware, mygnokii (GSM & Nokia) http://www.mds.mdh.se/~cel95eig/mygnokii/ & http://grumble.zereau.com/gnokii/ & http://reinhold.bachrain.de/ -> mygnokii mirrors \ No newline at end of file diff --git a/Docs/developers/other/dmcp/addsms b/Docs/developers/other/dmcp/addsms index bc4b0bf..d213649 100644 --- a/Docs/developers/other/dmcp/addsms +++ b/Docs/developers/other/dmcp/addsms @@ -1,19 +1,19 @@ -//SCKL1584 -BODY: -IA: -OPER ariel -Link up -N - -M SMS -+6421XXXXXX/+6421YYYYYY -6:LINKUP --- -IA: -OPER ariel -Link down -N - -M SMS -+6421XXXXXX/+6421YYYYYY -8:LINKDOWN +//SCKL1584 +BODY: +IA: +OPER ariel +Link up +N + +M SMS ++6421XXXXXX/+6421YYYYYY +6:LINKUP +-- +IA: +OPER ariel +Link down +N + +M SMS ++6421XXXXXX/+6421YYYYYY +8:LINKDOWN diff --git a/Docs/developers/other/dmcp/readme b/Docs/developers/other/dmcp/readme index 9d9aefe..fe34861 100644 --- a/Docs/developers/other/dmcp/readme +++ b/Docs/developers/other/dmcp/readme @@ -1,148 +1,148 @@ - -1.see Smart Messaging 2.0 for info, what the DMCP is - -2.I didn't have success in changing menus via cable (without sending SMS). - Here is example foogle funtion. You will see only "Nokia service update failed" ------------------------------------- -int foogle(char *argv[]) -{ - GSM_NetworkInfo NetworkInfo; - int i; - - char buffer[100]= { 0x0c, 0x01, - 0x06, /* User Data Header Length */ - 0x05, /* IEI: application port addressing scheme, 16 bit address */ - 0x04, /* IEDL (IED length ?) */ - 0x15, /* destination address: high byte */ - 0x84, /* destination address: low byte */ - 0x00, /* originator address: high byte */ - 0x00}; /* originator address: low byte */ - - int MSGLEN=9; - - /* Initialise the code for the GSM interface. */ - - fbusinit(NULL); - - buffer[MSGLEN++]='B'; - buffer[MSGLEN++]='O'; - buffer[MSGLEN++]='D'; - buffer[MSGLEN++]='Y'; - buffer[MSGLEN++]=':'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='I'; - buffer[MSGLEN++]='A'; - buffer[MSGLEN++]=':'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='O'; - buffer[MSGLEN++]='P'; - buffer[MSGLEN++]='E'; - buffer[MSGLEN++]='R'; - buffer[MSGLEN++]=' '; - buffer[MSGLEN++]='a'; - buffer[MSGLEN++]='l'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='L'; - buffer[MSGLEN++]='i'; - buffer[MSGLEN++]='n'; - buffer[MSGLEN++]='k'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='N'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='M'; - buffer[MSGLEN++]=' '; - buffer[MSGLEN++]='S'; - buffer[MSGLEN++]='M'; - buffer[MSGLEN++]='S'; - buffer[MSGLEN++]=10; - buffer[MSGLEN++]='+'; - buffer[MSGLEN++]='4'; - buffer[MSGLEN++]='8'; - buffer[MSGLEN++]='6'; - buffer[MSGLEN++]='0'; - buffer[MSGLEN++]='2'; - buffer[MSGLEN++]='9'; - buffer[MSGLEN++]='5'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='/'; - buffer[MSGLEN++]='+'; - buffer[MSGLEN++]='4'; - buffer[MSGLEN++]='8'; - buffer[MSGLEN++]='6'; - buffer[MSGLEN++]='0'; - buffer[MSGLEN++]='2'; - buffer[MSGLEN++]='9'; - buffer[MSGLEN++]='5'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - buffer[MSGLEN++]='1'; - - for (i=0;iSendMessage(MSGLEN, 0x12, buffer); - GSM->GetNetworkInfo(&NetworkInfo); //need to make something - - - GSM->Terminate(); - - return 0; -} ------------------------------------ -3.to change via SMS - read parts of email sent by Martin Lucina [mato@kotelna.sk] ------------------------------------ - -1. First of all, use the OPER (Operator) services rather than the Nokia - services. There's probably no reason why you couldn't use either but - there may be extra hooks in the phone firmware regarding Nokia - services that I don't know about. - -2. Make sure that "Operator access number 1" and "Operator access number - 2" are set correctly in the services menu. The former should be set - to the SMS centre the messages you send are going to come from - (important, send yourself a test message and check it's details, some - operators set the sending SMSC number to one different from the one - you originally sent the message to). The latter should be the number - of the MS you are sending the SMS from. - -3. Don't send the messages as binary NBS messsages using the UDH. I - haven't been able to get this method to work and besides, the //SCK - compatibility header works just fine. - - Also, while I haven't seen this, it's possible that if you send a - message in binary format, the destination MS will reply in binary - format. This makes the reply useless if you are sending from another - NBS-aware phone, since the NBS router will most likely silently - discard it (or try to forward it to the phones TTML/DMCP server, - which won't help either). - - If you send the messages as text, the replies I've seen also come - back as text so you can retrieve them from the phone in the normal - fashion. - -One caveat I've noticed with sending NBS messages using the //SCK -compatibility header is that the NBS grammar in the Nokia SM spec -version 2 contradicts the grammar in the original Intel NBS spec. Nokia -says you can using either a newline or space as the delimiter after -"//SCK", it turns out that you _must_ use a space (as stated in the -Intel spec). Of course you can still stick a newline in afterwards. - -I have attached a test file that will add two menu items that send SMS -messages to your services menu. I send this to the phone using - -$ sendsms +6421XXXXXX < addsms - -[...] - -Cheers, - --- -Martin Lucina http://www.kotelna.sk/mato/ Wellington, New Zealand -I've always been mad I know I've been mad like the most of us are -Pretty hard to explain why you're a madman even if you're not mad + +1.see Smart Messaging 2.0 for info, what the DMCP is + +2.I didn't have success in changing menus via cable (without sending SMS). + Here is example foogle funtion. You will see only "Nokia service update failed" +------------------------------------ +int foogle(char *argv[]) +{ + GSM_NetworkInfo NetworkInfo; + int i; + + char buffer[100]= { 0x0c, 0x01, + 0x06, /* User Data Header Length */ + 0x05, /* IEI: application port addressing scheme, 16 bit address */ + 0x04, /* IEDL (IED length ?) */ + 0x15, /* destination address: high byte */ + 0x84, /* destination address: low byte */ + 0x00, /* originator address: high byte */ + 0x00}; /* originator address: low byte */ + + int MSGLEN=9; + + /* Initialise the code for the GSM interface. */ + + fbusinit(NULL); + + buffer[MSGLEN++]='B'; + buffer[MSGLEN++]='O'; + buffer[MSGLEN++]='D'; + buffer[MSGLEN++]='Y'; + buffer[MSGLEN++]=':'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='I'; + buffer[MSGLEN++]='A'; + buffer[MSGLEN++]=':'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='O'; + buffer[MSGLEN++]='P'; + buffer[MSGLEN++]='E'; + buffer[MSGLEN++]='R'; + buffer[MSGLEN++]=' '; + buffer[MSGLEN++]='a'; + buffer[MSGLEN++]='l'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='L'; + buffer[MSGLEN++]='i'; + buffer[MSGLEN++]='n'; + buffer[MSGLEN++]='k'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='N'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='M'; + buffer[MSGLEN++]=' '; + buffer[MSGLEN++]='S'; + buffer[MSGLEN++]='M'; + buffer[MSGLEN++]='S'; + buffer[MSGLEN++]=10; + buffer[MSGLEN++]='+'; + buffer[MSGLEN++]='4'; + buffer[MSGLEN++]='8'; + buffer[MSGLEN++]='6'; + buffer[MSGLEN++]='0'; + buffer[MSGLEN++]='2'; + buffer[MSGLEN++]='9'; + buffer[MSGLEN++]='5'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='/'; + buffer[MSGLEN++]='+'; + buffer[MSGLEN++]='4'; + buffer[MSGLEN++]='8'; + buffer[MSGLEN++]='6'; + buffer[MSGLEN++]='0'; + buffer[MSGLEN++]='2'; + buffer[MSGLEN++]='9'; + buffer[MSGLEN++]='5'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + buffer[MSGLEN++]='1'; + + for (i=0;iSendMessage(MSGLEN, 0x12, buffer); + GSM->GetNetworkInfo(&NetworkInfo); //need to make something + + + GSM->Terminate(); + + return 0; +} +----------------------------------- +3.to change via SMS - read parts of email sent by Martin Lucina [mato@kotelna.sk] +----------------------------------- + +1. First of all, use the OPER (Operator) services rather than the Nokia + services. There's probably no reason why you couldn't use either but + there may be extra hooks in the phone firmware regarding Nokia + services that I don't know about. + +2. Make sure that "Operator access number 1" and "Operator access number + 2" are set correctly in the services menu. The former should be set + to the SMS centre the messages you send are going to come from + (important, send yourself a test message and check it's details, some + operators set the sending SMSC number to one different from the one + you originally sent the message to). The latter should be the number + of the MS you are sending the SMS from. + +3. Don't send the messages as binary NBS messsages using the UDH. I + haven't been able to get this method to work and besides, the //SCK + compatibility header works just fine. + + Also, while I haven't seen this, it's possible that if you send a + message in binary format, the destination MS will reply in binary + format. This makes the reply useless if you are sending from another + NBS-aware phone, since the NBS router will most likely silently + discard it (or try to forward it to the phones TTML/DMCP server, + which won't help either). + + If you send the messages as text, the replies I've seen also come + back as text so you can retrieve them from the phone in the normal + fashion. + +One caveat I've noticed with sending NBS messages using the //SCK +compatibility header is that the NBS grammar in the Nokia SM spec +version 2 contradicts the grammar in the original Intel NBS spec. Nokia +says you can using either a newline or space as the delimiter after +"//SCK", it turns out that you _must_ use a space (as stated in the +Intel spec). Of course you can still stick a newline in afterwards. + +I have attached a test file that will add two menu items that send SMS +messages to your services menu. I send this to the phone using + +$ sendsms +6421XXXXXX < addsms + +[...] + +Cheers, + +-- +Martin Lucina http://www.kotelna.sk/mato/ Wellington, New Zealand +I've always been mad I know I've been mad like the most of us are +Pretty hard to explain why you're a madman even if you're not mad diff --git a/Docs/developers/other/dmcp/removesms b/Docs/developers/other/dmcp/removesms index 06a47ab..36aac35 100644 --- a/Docs/developers/other/dmcp/removesms +++ b/Docs/developers/other/dmcp/removesms @@ -1,5 +1,5 @@ -//SCKL1584 -BODY: -IR: -OPER ariel -Link up +//SCKL1584 +BODY: +IR: +OPER ariel +Link up diff --git a/Docs/developers/other/sniffs/Telefonbucheditor7110.txt b/Docs/developers/other/sniffs/Telefonbucheditor7110.txt index 2ca658c..4c1d0ff 100644 --- a/Docs/developers/other/sniffs/Telefonbucheditor7110.txt +++ b/Docs/developers/other/sniffs/Telefonbucheditor7110.txt @@ -1,19 +1,19 @@ -Od: owner-gnokii@net.lut.ac.uk w imieniu Bernhard Mähr [Bernhard.Maehr@GMX.at] -Wysłano: 25 listopada 2000 17:06 -Do: gnokii@net.lut.ac.uk -Temat: Telefonbucheditor 7110 - -For everyone who trys to decode the 7110 FBUS protocol a tip: -If in the Windows-Registry HKEY_LOCAL_MACHINE\SOFTWARE\moosy.development\TBE7110 -the String Data is replaced with a Binary with the name Data the program shows a -error message at the begin but it also enables a option debug. This option -displays a second window showing the trace of the FBUS. So it should be easier -to decode the protocol. So it is possible to see the communiction while loading -the phone numbers, adresses,... and also syncronizing the calendar. - -I know it is a little bit unfair, don't tell me that. - -I hope this is useful for someone - -Bernhard Mähr - +Od: owner-gnokii@net.lut.ac.uk w imieniu Bernhard Mähr [Bernhard.Maehr@GMX.at] +Wysłano: 25 listopada 2000 17:06 +Do: gnokii@net.lut.ac.uk +Temat: Telefonbucheditor 7110 + +For everyone who trys to decode the 7110 FBUS protocol a tip: +If in the Windows-Registry HKEY_LOCAL_MACHINE\SOFTWARE\moosy.development\TBE7110 +the String Data is replaced with a Binary with the name Data the program shows a +error message at the begin but it also enables a option debug. This option +displays a second window showing the trace of the FBUS. So it should be easier +to decode the protocol. So it is possible to see the communiction while loading +the phone numbers, adresses,... and also syncronizing the calendar. + +I know it is a little bit unfair, don't tell me that. + +I hope this is useful for someone + +Bernhard Mähr + diff --git a/Docs/developers/other/sniffs/irda/info.txt b/Docs/developers/other/sniffs/irda/info.txt index ca030f9..a19e7c0 100644 --- a/Docs/developers/other/sniffs/irda/info.txt +++ b/Docs/developers/other/sniffs/irda/info.txt @@ -1,12 +1,13 @@ -To irda sniffs use irda_intercept.tgz -(http://www.dev-thomynet.de/nokworld/noktrace/index.html or tools directory +To irda sniffs use irda_intercept.tgz +(http://www.dev-thomynet.de/nokworld/noktrace/index.html or tools directory - unpacked source is there) from Thomas Schneider - -how to use it: -you MUST stop irda support ('rcirda stop' fur SUSE) -to free the infrared tty port. -just type irda_intercept and you should see -irda packages of port /dv/ttyS1 (hardcoded in source). -The tool writes also to file 'out.trc'. -Use this file to decode: 'gnokii --decodefile out.trc' + +how to use it: +you MUST stop irda support ('rcirda stop' fur SUSE) +to free the infrared tty port. +just type irda_intercept and you should see +irda packages of port /dv/ttyS1 (hardcoded in source). +The tool writes also to file 'out.trc'. +Use this file to decode: 'gnokii --decodefile out.trc' (mygnokii have to be compiled with debug) + \ No newline at end of file diff --git a/Docs/developers/protocol/n6110.txt b/Docs/developers/protocol/n6110.txt index 98c8303..7a04373 100644 --- a/Docs/developers/protocol/n6110.txt +++ b/Docs/developers/protocol/n6110.txt @@ -1,703 +1,706 @@ - -Last update 06.02.2002 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Assembled by - Balazs Nagy (js@lsc.hu) - Harri Yli-Torkko (hyt@surfeu.fi) - Alfred R. Nurnberger - Hugh Blemings - Mike Bradley - Odinokov Serge - Pavel Janik - Pawel Kot - Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) - ... and other members of gnokii mailing list - and authors of some WWW pages. - -The data provided is for information purposes only. -Some of the frames might be hazardous to your phone. Be careful!!! -We do not take any responsibility or liability for damages, etc. - -NOTE: this information isn't (and can't be) complete. If you know anything -about features not listed here or you noticed a bug in this list, please -notify us via e-mail. Thank you. - -Document describing frames used in -GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150, -5190, 3210, 3310) -Correct format is FBUS version 2/Direct IRDA/MBUS version 2 -(see nokia.txt for protocol details): - - List: - -0x00: Monitoring values - r monitoring value {+0x01, 0x01, block... } - where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO - Battery percent level - 0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO - Battery standby voltage - ............ -0x01: Call Information - s Make call { 0x0001, "number", type, block } - where type: - 0x01 - data call - 0x05 - voice call - block: - data call (non digital lines): - 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, - 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00 - data call (digital lines): - 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, - 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, - 0x88,0x90,0x21,0x48,0x40,0xbb - voice call: - 0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01 - where: - sendnum (own number sending): - 0x01: preset (depends on network) - 0x03: on - 0x02: off - r Call going msg { 0x0002 } - r Call in progress { 0x0003, seqnr } - r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } - r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } - s Answer call part 2 { 0x0006, seqnr, 0x00 } - r answered call { 0x0007, seqnr } - s Hang up { 0x0008, seqnr, 0x85 } - r terminated call { 0x0009, seqnr } - r call msg { 0x000a, seqnr } - r Send DTMF/voice call { 0x0040} - s Answer call part 1 { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, - 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 } - s Sent after issuing { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, - data call 0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3, - (digital lines) 0xb8,0x81,0x20,0x15,0x63,0x80 } - s Sent after issuing { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, - data call 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80, - (non digital lines) 0x01,0x60 } - s Send DTMF { 0x0050, length, {ascii codes for DTMF}, 0x01 } - - Note: - to make data call (non digital lines): - 1.send "Make call" for non digital lines - 2.send "Sent after issuing data call (non digital lines)" - to make data call (digital lines): - 1.send "Answer call part 1" - 2.send "Sent after issuing data call (digital lines)" - 3.send "Make call" for digital lines - to answer call: - 1.send "Answer call part 1" - 2.send "Answer call part 2" - -0x02: SMS handling - s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } - r Message sent { 0x0002 } - r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} - s Get SMS message { 0x0007, 0x02, location, 0x01, 0x64 } - s Initiate connection { 0x000d, 0x00, 0x00, 0x02 } - r Initiate ACK { 0x000e, 0x01 } - r SMS message received { 0x0010, ...... } (whole message) - s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } - for enable cell broadcast ? - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - for disable cell broadcast ? - r Set CellBroadcast OK { 0x0021, 0x01 } - r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? - s Set SMS center { 0x0030, 0x64, priority, checksum? ,0?, format, - validity, {DefaultRecipient no.}[12], - {SMScenter no.}[12], {SMSC name}, 0x00} - where tel.no.[12]: {len, type, {number(BCD)}} - type: 0x81: normal - 0x91: + (international) - 0xd0: alphanumeric - format: 0x00: text - 0x22: fax - 0x24: voice - 0x25: ERMES - 0x26: paging - 0x31: X.400 - 0x32: email - validity: 0x0b: 1 hour - 0x47: 6 hours - 0xa7: 24 hours - 0xa9: 72 hours - 0xad: 1 week - 0xff: max.time - r Set SMS center OK { 0x0031 } - r Set SMS center error { 0x0032, reason } - s Get SMS center { 0x0033, 0x64, priority } - r SMS center received { 0x0034, priority, checksum?, format, 0x00?, - validity, {DefaultRecipient no.}[12], - {SMScenter no.}[12], {SMSC name}, 0x00} - tel.no[12]: {len, type, {number(BCD)}} - where priority, checksum, type, validity, - tel.no.[12]: see 0x02/0x0030 - r SMS center error recv { 0x0035, reason } -0x03: Phonebook functions - s Get mem location { 0x0001, memtype, location, 0 } - where memory: - 0x01: telephone and SIM phonebook (in one) - 0x02: telephone phonebook - 0x03: SIM phonebook - 0x04: SIM fixdialling-phonebook (?) - 0x05: Own numbers - 0x07: Dialled numbers - 0x08: Missed calls - 0x09: Received calls - 0x0b: voice mailbox (location not important) - r mem location recvd { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. } - Note: in 3310 all entries have null name ("feature" of bug ?) - r mem loc error recvd { 0x0003, errtype } - where errtype: 0x7d: invalid memory type - s Set mem location { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID } - r mem set OK { 0x0005 } - r mem set error { 0x0006, errtype } - where errtype: 0x7d: name is too long - s Mem status request { 0x0007, memtype } - r Mem status recvd { 0x0008, memtype, free, used } - r Mem status error recv { 0x0009, errtype } - where errtype: 0x6f: mem status error - 0x7d: invalid memory type - 0x8d: waiting for pin - s Get caller group data { 0x0010, groupID } - r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } - r Get call.group error { 0x0012, reason } - where reason: 0x7d: invalid location - s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } - r Set caller group OK { 0x0014 } - r Set call.group error { 0x0015, reason } - where reason: 0x7d: invalid location - s Get speed dial { 0x0016, index(1-9) } - r Get speed dial OK { 0x0017, mem.type, location } - where mem.type: 0x02: ME (== 0 if not stored) - 0x03: SIM - location: memory location (== 0 if not stored) - r Get speed dial error { 0x0018 } - s Set speed dial { 0x0019, index(1-9), mem.type, location } - r Set speed dial OK { 0x001a } - r Set speed dial error { 0x001b } -0x04: Phone Status - s Phone status { 0x0001 } - r Phone status { 0x0002, mode, signal str, ???, pwr, batt.level } - where mode: 1: registered within the network - 2: call in progress - 3: waiting for pin - 4: powered off - pwr: 1: AC/DC - 2: battery - s Request Phone ID { 0x0003 } - r RequestPhone ID { 0x0004, 0x01, "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 } -0x05: Profile settings - s Set profile feature { 0x0010, 1, nr, feature, a, 1 } - where nr: see 0x05/0x0013 - feature: see 0x05/0x0014 - a: see 0x05/0x0014 - r Set profile feat. OK { 0x0011, 1 } - s Get profile feature { 0x0013, 1, nr, feature, 1 } - where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6) - feature: see 0x05/0x0014 - r Get profile feature { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 } - - Note: For Nokia 3330 settings num 0x00 .. 0x09 can be assigned - separately to each profile (0x00 .. 0x05), but rest are common - to all profiles. - - Features and answers (in a, b, c, d form): - 0x00: keypad notes (in Nokia 33x0 feature 0x00) - xx, 1, 0, 2 - xx: 0xff: off - 0x00: level 1 - 0x01: level 2 - 0x02: level 3 - 0x01: lights (? only in car profile) (what number in Nokia 3310 ?) - xx, 0, 0, 1 - xx: 0x00: off - 0x??: on (maybe 0x01) - 0x02: incoming call alert (in Nokia 33x0 feature 0x01) - xx, 1, 0, 7 - xx: 1: ringing, - 2: beep once, - 3: unknown - 4: off - 5: ring once - 6: ascending - 7: caller groups (see feature #0x08) - 0x03: ringing tone (in Nokia 33x0 feature 0x02) - xx, 0, 0, 0 - xx: 0x12: ring ring - 0x13: low - etc - 0x04: ringing volume (in Nokia 33x0 feature 0x03) - xx, 0, 0, 0 - xx: level 1 (0x06) - level 5 (0x0a) - 0x05: message alert tone (in Nokia 33x0 feature 0x04) - xx, 1, 0, 4 - xx: 0: no tone - 1: standard - 2: special - 3: beep once - 4: ascending - 0x06: vibration (in Nokia 33x0 feature 0x05) - xx: 0: off - 1: on - 2: Vibrate first - 0x07: warning and game tones (in Nokia 33x0 feature 0x06 called warning tones) - xx, 4, 0, 4 - xx: 0xff: off - 0x04: on - 0x07: screen saver - Nokia 33x0 - xx: 1: on - 0: off - 0x08: incoming caller groups (what number in Nokia 3310 ?) - xx, 0, 0, 0 - xx: 1: family - 2: VIP - 4: friends - 8: collegues - 16: other - 0x08: Screen saver -> Timeout (Nokia 33xx): - 0x00 = 5 sec - 0x01 = 20 sec - .... - - 0x09: automatic answer (what number in Nokia 3310 ?) - xx, 0, 0, 1 - xx: 0x00: off - 0x01: on - - 0x09: Screen saver -> Screen saver (Nokia 33xx): - 0x00 ... 0x0d = Number of picture image - - 0x0a: ???: - ...: ???: - 0x15: ???: Read only? - - 0x16: ???: - 0x00 = ??? - 0x01 = ??? - - 0x17: Phone book -> Options -> Memory in use (Nokia 3330): - 0x00 = Phone - 0x01 = SIM card - - 0x18: Settings -> Phone settings -> Network selection (Nokia 3330): - 0x00 = Automatic - 0x01 = Manual - - 0x19 Settings -> Call settings -> Automatic redial(Nokia 3330): - 0x00 = Off - 0x01 = On - - 0x1a: Settings -> Call settings -> Speed dialling (Nokia 3330): - 0x00 = Off - 0x01 = On - - 0x1b: Settings -> Call settings -> Own number sending (Nokia 3330): - 0x00 = Set by network - 0x01 = On - 0x02 = Off - - 0x1c: Settings -> Phone settings -> Cell info display (Nokia 3330): - 0x00 = Off - - 0x1d: Phone book -> Options -> Type of view (Nokia 3330): - 0x00 = Name list - 0x01 = Name, number - 0x02 = Large font - - 0x1e: Settings -> Phone settings -> Language (Nokia 3330): - 0x00 = English - 0x07 = Dansk - 0x08 = Svenska - 0x09 = Suomi - 0x0c = Turcke - 0x0e = Norsk - 0x10 = Automatic - - 0x32 = Reboots ME (3330) - - 0x1f: ???: Read only? (3330) - - 0x20: Messages -> Message settings -> Common -> Reply via same centre (N3330): - 0x00 = No - 0x01 = Yes - - 0x21: Messages -> Message settings -> Common -> Delivery reports (3330): - 0x00 = No - 0x01 = Yes - - 0x22: Clock -> Clock settings -> Show/Hide clock (3330): - 0x00 = Show - 0x01 = Hide - - 0x23: Clock -> Clock settings -> Time format (N3330): - 0x00 = 24-hour - 0x01 = 12-hour - - 0x24: Select profile (N3330): - 0x00 = General - 0x01 ... 0x05 = rest of them - - 0x25: ???: Read only? (N3330) - - 0x26: Settings -> Phone settings -> Confirm SIM service actions (N3330): - 0x00 = Not asked - 0x01 = Asked - - 0x27: Messages -> Write messages -> Options -> Dictionary (N3330): - 0x00 = Off - 0x01 = English - 0x0a = Suomi - - 0x28: Messages -> Message settings -> Common -> Character support (N3330): - 0x00 = Automatic - 0x01 = GSM alphabet - 0x02 = Unicode - - 0x29: Startup logo settings (N33x0): - 0x00 = Your own uploaded logo - 0x01 = Nokia - 0x02 = Draft HUMAN technology(tm) - 0x03 = Itineris - - 0x2a:???: 0x00 = ??? 0x01 = ??? (N3330) - - 0x2b: ???: 0x00 = ??? 0x01 = ??? (N3330) - - 0x2c: ???: Read only? (N3330) - - 0x2d: Clock -> Auto update of date and time (N3330): - 0x00 = Off - 0x01 = Confirm first - 0x02 = On - - s Get welcome message { 0x0016 } - r Get welcome message { 0x0017, no.of blocks, { block } * } - where block: { id, {blockspecific} } - id: 1: startup logo { y, x, picture (coding?) } - 2: welcome note { len, "message" } - 3: operator msg { len, "message" } - s Set welcome message { 0x0018, no.of blocks, { block } * } - where block: see 0x05/0x0017 - r Set welcome OK { 0x0019, 0x01 } - s Get profile name { 0x001a, nr } - where nr: see 0x05/0x0013 - r Profile name { 0x001b, 1, 1, 3, flen, nr, len, {text} } - where nr: see 0x05/0x0013 - len: text length - flen len + len(nr, len) = len + 2 - Note: in Nokia 3310 name is in Unicode - s ??? { 0x001c } - r ??? { 0x001d, 0x93 } - s Set oplogo { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } - r Set oplogo OK { 0x0031 } - r Set oplogo error { 0x0032, reason } - where reason: 0x7d invalid location - s Get oplogo { 0x0033, location } - where location: 1 (doesn't seem to matter) - r Get oplogo { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } - r Get oplogo error { 0x0035, reason } - where reason: 0x7d invalid location - s Set ringtone { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0} - r Set ringtone OK { 0x0037 } - r Set ringtone error { 0x0038, reason } - where reason=0x7d, when not supported location - s Get services settings { 0x0080, setting (2 bytes) } - where: setting: 0x02,0x00=Nokia access number 1 - 0x02,0x01=Operator access number 1 - 0x01,0x00=Personal bookmark 1 settings (name only ?) - 0x01,0x01=? - 0x02,0x02=? - r Get services sett.OK { 0x0081, .... } - r Get services sett.err { 0x0082, 0x7b } -0x06: Calling line restriction/Call forwarding etc + +Last update 23.02.2002 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Assembled by + Balazs Nagy (js@lsc.hu) + Harri Yli-Torkko (hyt@surfeu.fi) + Alfred R. Nurnberger + Hugh Blemings + Mike Bradley + Odinokov Serge + Pavel Janik + BORBELY Zoltan (bozo@andrews.hu) + Pawel Kot + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150, +5190, 3210, 3310) +Correct format is FBUS version 2/Direct IRDA/MBUS version 2 +(see nokia.txt for protocol details): + + List: + +0x00: Monitoring values + r monitoring value {+0x01, 0x01, block... } + where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO + Battery percent level + 0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO + Battery standby voltage + ............ +0x01: Call Information + s Make call { 0x0001, "number", type, block } + where type: + 0x01 - data call + 0x05 - voice call + block: + data call (non digital lines): + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00 + data call (digital lines): + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + 0x88,0x90,0x21,0x48,0x40,0xbb + voice call: + 0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01 + where: + sendnum (own number sending): + 0x01: preset (depends on network) + 0x03: on + 0x02: off + r Call going msg { 0x0002 } + r Call in progress { 0x0003, seqnr } + r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } + r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } + s Answer call part 2 { 0x0006, seqnr, 0x00 } + r answered call { 0x0007, seqnr } + s Hang up { 0x0008, seqnr, 0x85 } + r terminated call { 0x0009, seqnr } + r call msg { 0x000a, seqnr } + r call held { 0x0023, seqnr, 0x01 } + r call resumed { 0x0025, seqnr, 0x01 } + r Send DTMF/voice call { 0x0040} + s Answer call part 1 { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 } + s Sent after issuing { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + data call 0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3, + (digital lines) 0xb8,0x81,0x20,0x15,0x63,0x80 } + s Sent after issuing { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + data call 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80, + (non digital lines) 0x01,0x60 } + s Send DTMF { 0x0050, length, {ascii codes for DTMF}, 0x01 } + + Note: + to make data call (non digital lines): + 1.send "Make call" for non digital lines + 2.send "Sent after issuing data call (non digital lines)" + to make data call (digital lines): + 1.send "Answer call part 1" + 2.send "Sent after issuing data call (digital lines)" + 3.send "Make call" for digital lines + to answer call: + 1.send "Answer call part 1" + 2.send "Answer call part 2" + +0x02: SMS handling + s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } + r Message sent { 0x0002 } + r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} + s Get SMS message { 0x0007, 0x02, location, 0x01, 0x64 } + s Initiate connection { 0x000d, 0x00, 0x00, 0x02 } + r Initiate ACK { 0x000e, 0x01 } + r SMS message received { 0x0010, ...... } (whole message) + s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } + for enable cell broadcast ? + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + for disable cell broadcast ? + r Set CellBroadcast OK { 0x0021, 0x01 } + r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? + s Set SMS center { 0x0030, 0x64, priority, checksum? ,0?, format, + validity, {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + where tel.no.[12]: {len, type, {number(BCD)}} + type: 0x81: normal + 0x91: + (international) + 0xd0: alphanumeric + format: 0x00: text + 0x22: fax + 0x24: voice + 0x25: ERMES + 0x26: paging + 0x31: X.400 + 0x32: email + validity: 0x0b: 1 hour + 0x47: 6 hours + 0xa7: 24 hours + 0xa9: 72 hours + 0xad: 1 week + 0xff: max.time + r Set SMS center OK { 0x0031 } + r Set SMS center error { 0x0032, reason } + s Get SMS center { 0x0033, 0x64, priority } + r SMS center received { 0x0034, priority, checksum?, format, 0x00?, + validity, {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + tel.no[12]: {len, type, {number(BCD)}} + where priority, checksum, type, validity, + tel.no.[12]: see 0x02/0x0030 + r SMS center error recv { 0x0035, reason } +0x03: Phonebook functions + s Get mem location { 0x0001, memtype, location, 0 } + where memory: + 0x01: telephone and SIM phonebook (in one) + 0x02: telephone phonebook + 0x03: SIM phonebook + 0x04: SIM fixdialling-phonebook (?) + 0x05: Own numbers + 0x07: Dialled numbers + 0x08: Missed calls + 0x09: Received calls + 0x0b: voice mailbox (location not important) + r mem location recvd { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. } + Note: in 3310 all entries have null name ("feature" of bug ?) + r mem loc error recvd { 0x0003, errtype } + where errtype: 0x7d: invalid memory type + s Set mem location { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID } + r mem set OK { 0x0005 } + r mem set error { 0x0006, errtype } + where errtype: 0x7d: name is too long + s Mem status request { 0x0007, memtype } + r Mem status recvd { 0x0008, memtype, free, used } + r Mem status error recv { 0x0009, errtype } + where errtype: 0x6f: mem status error + 0x7d: invalid memory type + 0x8d: waiting for pin + s Get caller group data { 0x0010, groupID } + r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } + r Get call.group error { 0x0012, reason } + where reason: 0x7d: invalid location + s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } + r Set caller group OK { 0x0014 } + r Set call.group error { 0x0015, reason } + where reason: 0x7d: invalid location + s Get speed dial { 0x0016, index(1-9) } + r Get speed dial OK { 0x0017, mem.type, location } + where mem.type: 0x02: ME (== 0 if not stored) + 0x03: SIM + location: memory location (== 0 if not stored) + r Get speed dial error { 0x0018 } + s Set speed dial { 0x0019, index(1-9), mem.type, location } + r Set speed dial OK { 0x001a } + r Set speed dial error { 0x001b } +0x04: Phone Status + s Phone status { 0x0001 } + r Phone status { 0x0002, mode, signal str, ???, pwr, batt.level } + where mode: 1: registered within the network + 2: call in progress + 3: waiting for pin + 4: powered off + pwr: 1: AC/DC + 2: battery + s Request Phone ID { 0x0003 } + r RequestPhone ID { 0x0004, 0x01,"NOKIA""imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 } +0x05: Profile settings + s Set profile feature { 0x0010, 1, nr, feature, a, 1 } + where nr: see 0x05/0x0013 + feature: see 0x05/0x0014 + a: see 0x05/0x0014 + r Set profile feat. OK { 0x0011, 1 } + s Get profile feature { 0x0013, 1, nr, feature, 1 } + where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6) + feature: see 0x05/0x0014 + r Get profile feature { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 } + + Note: For Nokia 3330 settings num 0x00 .. 0x09 can be assigned + separately to each profile (0x00 .. 0x05), but rest are common + to all profiles. + + Features and answers (in a, b, c, d form): + 0x00: keypad notes (in Nokia 33x0 feature 0x00) + xx, 1, 0, 2 + xx: 0xff: off + 0x00: level 1 + 0x01: level 2 + 0x02: level 3 + 0x01: lights (? only in car profile) (what number in Nokia 3310 ?) + xx, 0, 0, 1 + xx: 0x00: off + 0x??: on (maybe 0x01) + 0x02: incoming call alert (in Nokia 33x0 feature 0x01) + xx, 1, 0, 7 + xx: 1: ringing, + 2: beep once, + 3: unknown + 4: off + 5: ring once + 6: ascending + 7: caller groups (see feature #0x08) + 0x03: ringing tone (in Nokia 33x0 feature 0x02) + xx, 0, 0, 0 + xx: 0x12: ring ring + 0x13: low + etc + 0x04: ringing volume (in Nokia 33x0 feature 0x03) + xx, 0, 0, 0 + xx: level 1 (0x06) - level 5 (0x0a) + 0x05: message alert tone (in Nokia 33x0 feature 0x04) + xx, 1, 0, 4 + xx: 0: no tone + 1: standard + 2: special + 3: beep once + 4: ascending + 0x06: vibration (in Nokia 33x0 feature 0x05) + xx: 0: off + 1: on + 2: Vibrate first + 0x07: warning and game tones (in Nokia 33x0 feature 0x06 called warning tones) + xx, 4, 0, 4 + xx: 0xff: off + 0x04: on + 0x07: screen saver - Nokia 33x0 + xx: 1: on + 0: off + 0x08: incoming caller groups (what number in Nokia 3310 ?) + xx, 0, 0, 0 + xx: 1: family + 2: VIP + 4: friends + 8: collegues + 16: other + 0x08: Screen saver -> Timeout (Nokia 33xx): + 0x00 = 5 sec + 0x01 = 20 sec + .... + + 0x09: automatic answer (what number in Nokia 3310 ?) + xx, 0, 0, 1 + xx: 0x00: off + 0x01: on + + 0x09: Screen saver -> Screen saver (Nokia 33xx): + 0x00 ... 0x0d = Number of picture image + + 0x0a: ???: + ...: ???: + 0x15: ???: Read only? + + 0x16: ???: + 0x00 = ??? + 0x01 = ??? + + 0x17: Phone book -> Options -> Memory in use (Nokia 3330): + 0x00 = Phone + 0x01 = SIM card + + 0x18: Settings -> Phone settings -> Network selection (Nokia 3330): + 0x00 = Automatic + 0x01 = Manual + + 0x19 Settings -> Call settings -> Automatic redial(Nokia 3330): + 0x00 = Off + 0x01 = On + + 0x1a: Settings -> Call settings -> Speed dialling (Nokia 3330): + 0x00 = Off + 0x01 = On + + 0x1b: Settings -> Call settings -> Own number sending (Nokia 3330): + 0x00 = Set by network + 0x01 = On + 0x02 = Off + + 0x1c: Settings -> Phone settings -> Cell info display (Nokia 3330): + 0x00 = Off + + 0x1d: Phone book -> Options -> Type of view (Nokia 3330): + 0x00 = Name list + 0x01 = Name, number + 0x02 = Large font + + 0x1e: Settings -> Phone settings -> Language (Nokia 3330): + 0x00 = English + 0x07 = Dansk + 0x08 = Svenska + 0x09 = Suomi + 0x0c = Turcke + 0x0e = Norsk + 0x10 = Automatic + + 0x32 = Reboots ME (3330) + + 0x1f: ???: Read only? (3330) + + 0x20: Messages -> Message settings -> Common -> Reply via same centre (N3330): + 0x00 = No + 0x01 = Yes + + 0x21: Messages -> Message settings -> Common -> Delivery reports (3330): + 0x00 = No + 0x01 = Yes + + 0x22: Clock -> Clock settings -> Show/Hide clock (3330): + 0x00 = Show + 0x01 = Hide + + 0x23: Clock -> Clock settings -> Time format (N3330): + 0x00 = 24-hour + 0x01 = 12-hour + + 0x24: Select profile (N3330): + 0x00 = General + 0x01 ... 0x05 = rest of them + + 0x25: ???: Read only? (N3330) + + 0x26: Settings -> Phone settings -> Confirm SIM service actions (N3330): + 0x00 = Not asked + 0x01 = Asked + + 0x27: Messages -> Write messages -> Options -> Dictionary (N3330): + 0x00 = Off + 0x01 = English + 0x0a = Suomi + + 0x28: Messages -> Message settings -> Common -> Character support (N3330): + 0x00 = Automatic + 0x01 = GSM alphabet + 0x02 = Unicode + + 0x29: Startup logo settings (N33x0): + 0x00 = Your own uploaded logo + 0x01 = Nokia + 0x02 = Draft HUMAN technology(tm) + 0x03 = Itineris + + 0x2a:???: 0x00 = ??? 0x01 = ??? (N3330) + + 0x2b: ???: 0x00 = ??? 0x01 = ??? (N3330) + + 0x2c: ???: Read only? (N3330) + + 0x2d: Clock -> Auto update of date and time (N3330): + 0x00 = Off + 0x01 = Confirm first + 0x02 = On + + s Get welcome message { 0x0016 } + r Get welcome message { 0x0017, no.of blocks, { block } * } + where block: { id, {blockspecific} } + id: 1: startup logo { y, x, picture (coding?) } + 2: welcome note { len, "message" } + 3: operator msg { len, "message" } + s Set welcome message { 0x0018, no.of blocks, { block } * } + where block: see 0x05/0x0017 + r Set welcome OK { 0x0019, 0x01 } + s Get profile name { 0x001a, nr } + where nr: see 0x05/0x0013 + r Profile name { 0x001b, 1, 1, 3, flen, nr, len, {text} } + where nr: see 0x05/0x0013 + len: text length + flen len + len(nr, len) = len + 2 + Note: in Nokia 3310 name is in Unicode + s ??? { 0x001c } + r ??? { 0x001d, 0x93 } + s Set oplogo { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } + r Set oplogo OK { 0x0031 } + r Set oplogo error { 0x0032, reason } + where reason: 0x7d invalid location + s Get oplogo { 0x0033, location } + where location: 1 (doesn't seem to matter) + r Get oplogo { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } + r Get oplogo error { 0x0035, reason } + where reason: 0x7d invalid location + s Set ringtone { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0} + r Set ringtone OK { 0x0037 } + r Set ringtone error { 0x0038, reason } + where reason=0x7d, when not supported location + s Get services settings { 0x0080, setting (2 bytes) } + where: setting: 0x02,0x00=Nokia access number 1 + 0x02,0x01=Operator access number 1 + 0x01,0x00=Personal bookmark 1 settings (name only ?) + 0x01,0x01=? + 0x02,0x02=? + r Get services sett.OK { 0x0081, .... } + r Get services sett.err { 0x0082, 0x7b } +0x06: Calling line restriction/Call forwarding etc r Get call divert { 0x0001, 0x02, x, 0x00, divtype, 0x02, calltype, y, z, 0x0b, number, 0x00...0x00, timeout (byte 45) } s Set call divert { 0x0001, 0x03, 0x00, divtype, calltype, 0x01, number(packed like in SMS), 0x00 ... 0x00, length of number (byte 29), 0x00 ... 0x00, timeout (byte 52), 0x00, 0x00, 0x00} - NOTE: msglen=0x37 - where timeout: - 0x00: not set ? - 0x05: 5 second - 0x0a: 10 second - 0x0f: 15 second - 0x1e: 20 second - 0x14: 25 second - 0x19: 30 second - where divtype: - 0x02: all diverts for all call types ? - Found only, when deactivate all diverts for all call types (with call type 0x00) - 0x15: all calls - 0x43: when busy - 0x3d: when not answered - 0x3e: if not reached - calltype: - 0x00: all calls (data, voice, fax) - 0x0b: voice calls - 0x0d: fax calla - 0x19: data calls - s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 } - where divtype, calltype: see above - s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 } - where divtype, calltype: see above - r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)} -0x07: - s ??? { 0x0022, ? (1&2 sounds OK) } - r ??? OK { 0x0023, ?,?,? } - r ??? error { 0x0024, reason } - s ??? { 0x0025, ??? } - r ??? OK { 0x0026, ??? } - r ??? error { 0x0027, reason } -0x08: Security codes - s Change code { 0x0004, code, "current", 0x00, "new", 0x00 } - where code: 1: security code (5 chars) - 2: PIN (4 chars) - 3: PIN2 (4 chars) - 4: PUK (8 chars) - 5: PUK2 (8 chars) - s Status request { 0x0007, 0x01 } - r pin recvd { 0x0008, accepted } - where accepted: 0x0c (or 0x06): OK - code: waiting for (0x08/0x0004) code - s entering code { 0x000a, code, "code", 0x00 } - where code: see 0x08/0x0004 -0x09: SIM login - r login { 0x0080 } - r logout { 0x0081 } -0x0a: Network status - s Key duplication on/off{ 0x0044, on? 0x01: 0x02 } - s get used network { 0x0070 } - r network registration { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode } -0x0c: Keys - s Get key assignments { 0x0040, 0x01 } - r Get key assignments { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 } - where {key '0'} => ' ', '0' - s Press key { 0x0042, press: 0x01; release: 0x02, button, 0x01 } - where button: 0x01 - 0x09: 1-9 - 0x0a: 0 - 0x0b: # - 0x0c: * - 0x0d: Power - 0x0e: Pick up phone - 0x0f: Hang - 0x10: Volume + - 0x11: Volume - - 0x17: Up - 0x18: Down - 0x19: Menu - 0x1a: Names - 0x1B onwards: don't know but they do produce - a beep and light up the keypad as if - a key had been pressed. - r Press key ack { 0x0043, press/release/error(0x05) } - s ??? { 0x0044 } - r ??? ack { 0x0045, 0x01 } -0x0d: Status - r Display { 0x0050, 0x01, y, x, len, "string"(unicode) } - s Status request { 0x0051 } - r Status { 0x0052, no. of byte pairs, {byte pair} } - where {byte pair}: {cmd, 1:off 2:on} - cmd: 1: call in progress - 2: ??? - 3: have unread sms - 4: voice call active - 5: fax call active - 6: data call active - 7: key lock active - 8: is SMS storage full - s Display status { 0x0053, 1:on 2:off } - (will send displayed messages with x,y coordinates) - r Display status ack { 0x0054, 1 } -0x11: Phone clock & alarm - s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 } - r date and time set { 0x0061 } - s get date and time { 0x0062 } - r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second } - where: date_set & time_set==0x01 - set - 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second - not available in frame - s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 } - r alarm set { 0x006c } - s get alarm { 0x006d } - r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min } -0x12: Connect to NBS port (61xx only ?) - s Send {+0x0c, 0x01, UDH header, data} - (without 0,1 header -- for oplogo, cli, ringtone etc upload) - where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl -0x13: Calendar notes - s Write calendar note { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone, - alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0), - textlen, "text" } - r Write cal.note report { 0x0065, return } - where return: 0x01: ok - 0x73: failure - 0x81: calendar functions busy. Exit Calendar menu and try again - s Calendar notes set { 0x0066... } - r Calendar note recvd { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" } - r Cal.note recvd error { 0x0067, err } - where err: 0x93: not available - (0x01: OK) - other: error - s Delete cal.note { 0x0068, location } - r Del. cal.note report { 0x0069, err } - where err: 0x01: OK - 0x93: cannot delete -0x14: SMS funcs - s Write SMS to SIM { 0x0004, .... } - s Mark SMS as read { 0x0007, 0x02, location, 0x00, 0x64 } - r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status - where type: 0x06: delivery report - status: 0x00: delivered - 0x30: pending - 0x46: failed - 0x09: reading failed - subtype: 0x02: invalid mem type - 0x07: empty SMS location - 0x0c: no access to memory (no PIN in card, etc.) - s Delete SMS message { 0x000a, 0x02, location } - r Delete OK { 0x000b } - s SMS status request { 0x0036, 0x64 } - r SMS status { 0x0037,?,?,?,?,?,?,msgnumber,unread } - r SMS status error { 0x0038 } -0x3f: WAP - s Enable WAP frames { 0x0000} - r Enable WAP frames { 0x0002, 0x01} - - s ?? { 0x0003} - r ?? { 0x0004} - - s Get WAP bookmark { 0x0006, 0x00, location} - where location: 0 - 14 - r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode), - url_len, url(unicode), 0x01,0x80,0x00[7]} - r Get WAP bookmark err { 0x0008, error } - where error: - 0x00(?)invalid position - 0x01 user inside "Bookmarks" menu. Must leave it - 0x02 invalid/too high/empty location - - s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode), - url_len, url(unicode), 0x01,0x80,0x00[7] } - Note: bookmark is added to the first free location. - r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block } - where block: - 0x0a, location_of_just_written_bookmark(?), - 0x00, next_free_location(?) - r Set WAP bookmark err {+0x01, 0x36, 0x0b, error } - where error: - 0x04 - memory is full - 0x01 - we are in the bookmark menu - 0x00 - unknown reason for now ;( - -? s Delete WAP bookmark { 0x000c, 0x00, location } - where: location = 0-14 -? r Delete WAR bookmark OK{ 0x000d } -? r Delete WAPbookmark err{ 0x000e, 0x02 } - - s ?? { 0x000F} - r ?? { 0x0010, 0x00} - - s Get WAP settings 1 { 0x0015, location} - where location: 0x00 - 0x05 - r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...} - where: - con_type: 0x00 - temporary - 0x01 - continuous - location: when use "Get WAP settings 2 frame", must give it - security: 0x00 = no, 0x01 = yes - r Get WAP settings 1 err{ 0x0017, error } - where error: - 0x01 user inside "Settings" menu. Must leave it - 0x02 invalid/too high/empty location - - s Get WAP settings 2 { 0x001b, location} - where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame) - r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...} - where type : 0x00 - SMS bearer - frame: - service_num_len, service_num (Unicode), server_num_len, server_num(Unicode) - 0x01 - data bearer - frame: - auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode), - user len, user (Unicode), password len, password (Unicode) - where auth: 0x00 - normal, 0x01 - secure - call_type: 0x00 - analogue, 0x01 - ISDN - call_speed: 0x00 - 9600, 0x01 - 14400 - 0x02 - USSD bearer - frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len, - service code (Unicode) - where type: 0x01 - service number, 0x00 - IP - r Get WAP settings 2 err{ 0x001d,error} - where: error=0x05 -0x40: Security commands - s ??? {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00} - This frame hangs phone (N3310 4.02). Meaning unknown ! + NOTE: msglen=0x37 + where timeout: + 0x00: not set ? + 0x05: 5 second + 0x0a: 10 second + 0x0f: 15 second + 0x14: 20 second + 0x19: 25 second + 0x1e: 30 second + where divtype: + 0x02: all diverts for all call types ? + Found only, when deactivate all diverts for all call types (with call type 0x00) + 0x15: all calls + 0x43: when busy + 0x3d: when not answered + 0x3e: if not reached + calltype: + 0x00: all calls (data, voice, fax) + 0x0b: voice calls + 0x0d: fax calla + 0x19: data calls + s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 } + where divtype, calltype: see above + s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 } + where divtype, calltype: see above + r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)} +0x07: + s ??? { 0x0022, ? (1&2 sounds OK) } + r ??? OK { 0x0023, ?,?,? } + r ??? error { 0x0024, reason } + s ??? { 0x0025, ??? } + r ??? OK { 0x0026, ??? } + r ??? error { 0x0027, reason } +0x08: Security codes + s Change code { 0x0004, code, "current", 0x00, "new", 0x00 } + where code: 1: security code (5 chars) + 2: PIN (4 chars) + 3: PIN2 (4 chars) + 4: PUK (8 chars) + 5: PUK2 (8 chars) + s Status request { 0x0007, 0x01 } + r pin recvd { 0x0008, accepted } + where accepted: 0x0c (or 0x06): OK + code: waiting for (0x08/0x0004) code + s entering code { 0x000a, code, "code", 0x00 } + where code: see 0x08/0x0004 +0x09: SIM login + r login { 0x0080 } + r logout { 0x0081 } +0x0a: Network status + s Key duplication on/off{ 0x0044, on? 0x01: 0x02 } + s get used network { 0x0070 } + r network registration { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode } +0x0c: Keys + s Get key assignments { 0x0040, 0x01 } + r Get key assignments { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 } + where {key '0'} => ' ', '0' + s Press key { 0x0042, press: 0x01; release: 0x02, button, 0x01 } + where button: 0x01 - 0x09: 1-9 + 0x0a: 0 + 0x0b: # + 0x0c: * + 0x0d: Power + 0x0e: Pick up phone + 0x0f: Hang + 0x10: Volume + + 0x11: Volume - + 0x17: Up + 0x18: Down + 0x19: Menu + 0x1a: Names + 0x1B onwards: don't know but they do produce + a beep and light up the keypad as if + a key had been pressed. + r Press key ack { 0x0043, press/release/error(0x05) } + s ??? { 0x0044 } + r ??? ack { 0x0045, 0x01 } +0x0d: Status + r Display { 0x0050, 0x01, y, x, len, "string"(unicode) } + s Status request { 0x0051 } + r Status { 0x0052, no. of byte pairs, {byte pair} } + where {byte pair}: {cmd, 1:off 2:on} + cmd: 1: call in progress + 2: ??? + 3: have unread sms + 4: voice call active + 5: fax call active + 6: data call active + 7: key lock active + 8: is SMS storage full + s Display status { 0x0053, 1:on 2:off } + (will send displayed messages with x,y coordinates) + r Display status ack { 0x0054, 1 } +0x11: Phone clock & alarm + s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 } + r date and time set { 0x0061 } + s get date and time { 0x0062 } + r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second } + where: date_set & time_set==0x01 - set + 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second + not available in frame + s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 } + r alarm set { 0x006c } + s get alarm { 0x006d } + r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min } +0x12: Connect to NBS port (61xx only ?) + s Send {+0x0c, 0x01, UDH header, data} + (without 0,1 header -- for oplogo, cli, ringtone etc upload) + where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl +0x13: Calendar notes + s Write calendar note { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone, + alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0), + textlen, "text" } + r Write cal.note report { 0x0065, return } + where return: 0x01: ok + 0x73: failure + 0x81: calendar functions busy. Exit Calendar menu and try again + s Calendar notes set { 0x0066... } + r Calendar note recvd { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" } + r Cal.note recvd error { 0x0067, err } + where err: 0x93: not available + (0x01: OK) + other: error + s Delete cal.note { 0x0068, location } + r Del. cal.note report { 0x0069, err } + where err: 0x01: OK + 0x93: cannot delete +0x14: SMS funcs + s Write SMS to SIM { 0x0004, .... } + s Mark SMS as read { 0x0007, 0x02, location, 0x00, 0x64 } + r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status + where type: 0x06: delivery report + status: 0x00: delivered + 0x30: pending + 0x46: failed + 0x09: reading failed + subtype: 0x02: invalid mem type + 0x07: empty SMS location + 0x0c: no access to memory (no PIN in card, etc.) + s Delete SMS message { 0x000a, 0x02, location } + r Delete OK { 0x000b } + s SMS status request { 0x0036, 0x64 } + r SMS status { 0x0037,?,?,?,?,?,?,msgnumber,unread } + r SMS status error { 0x0038 } +0x3f: WAP + s Enable WAP frames { 0x0000} + r Enable WAP frames { 0x0002, 0x01} + + s ?? { 0x0003} + r ?? { 0x0004} + + s Get WAP bookmark { 0x0006, 0x00, location} + where location: 0 - 14 + r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7]} + r Get WAP bookmark err { 0x0008, error } + where error: + 0x00(?)invalid position + 0x01 user inside "Bookmarks" menu. Must leave it + 0x02 invalid/too high/empty location + + s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7] } + Note: bookmark is added to the first free location. + r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block } + where block: + 0x0a, location_of_just_written_bookmark(?), + 0x00, next_free_location(?) + r Set WAP bookmark err {+0x01, 0x36, 0x0b, error } + where error: + 0x04 - memory is full + 0x01 - we are in the bookmark menu + 0x00 - unknown reason for now ;( + +? s Delete WAP bookmark { 0x000c, 0x00, location } + where: location = 0-14 +? r Delete WAR bookmark OK{ 0x000d } +? r Delete WAPbookmark err{ 0x000e, 0x02 } + + s ?? { 0x000F} + r ?? { 0x0010, 0x00} + + s Get WAP settings 1 { 0x0015, location} + where location: 0x00 - 0x05 + r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...} + where: + con_type: 0x00 - temporary + 0x01 - continuous + location: when use "Get WAP settings 2 frame", must give it + security: 0x00 = no, 0x01 = yes + r Get WAP settings 1 err{ 0x0017, error } + where error: + 0x01 user inside "Settings" menu. Must leave it + 0x02 invalid/too high/empty location + + s Get WAP settings 2 { 0x001b, location} + where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame) + r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...} + where type : 0x00 - SMS bearer + frame: + service_num_len, service_num (Unicode), server_num_len, server_num(Unicode) + 0x01 - data bearer + frame: + auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode), + user len, user (Unicode), password len, password (Unicode) + where auth: 0x00 - normal, 0x01 - secure + call_type: 0x00 - analogue, 0x01 - ISDN + call_speed: 0x00 - 9600, 0x01 - 14400 + 0x02 - USSD bearer + frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len, + service code (Unicode) + where type: 0x01 - service number, 0x00 - IP + r Get WAP settings 2 err{ 0x001d,error} + where: error=0x05 +0x40: Security commands + s ??? {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00} + This frame hangs phone (N3310 4.02). Meaning unknown ! s Open simlock 1 { 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00} r Open simlock 1 { 0x02 } - s ???(N6150) { 0x08, 0x00 } - r ???(N6150) { 0x08 } - s Enable extended cmds { 0x64, cmd } - where cmd: 0x00: off - 0x01: on + s ???(N6150) { 0x08, 0x00 } + r ???(N6150) { 0x08 } + s Enable extended cmds { 0x64, cmd } + where cmd: 0x00: off + 0x01: on 0x02: enter service mode ? - 0x03: reset (doesn't ask for PIN again) - 0x04: reset (PIN is requested) - In 5110 makes reset without PIN - 0x06: CONTACT SERVICE!!! Don't try it! + 0x03: reset (doesn't ask for PIN again) + 0x04: reset (PIN is requested) + In 5110 makes reset without PIN + 0x06: CONTACT SERVICE!!! Don't try it! s Reset phone settings { 0x65, value, 0x00 } where value: 0x08 - reset UI (User Interface) settings 0x38 - reset UI, SCM and call counters r Reset phone settings { 0x65, 0x00 } - s Get IMEI { 0x66 } - r Get IMEI { 0x66, 0x01, IMEI, 0x00} - s (ACD Readings)?(N6150 { 0x68 } - r (ACD Readings)?(N6150 { 0x68, ... } - s Get Product Profile - Settings { 0x6a} - r Get Product Profile - Settings { 0x6a, 4bytes with Product Profile Settings } - s Set Product Profile - Settings { 0x6b, 4bytes with Product Profile Settings } - r Set Product Profile - Settings OK ? { 0x6b } - s Get code { 0x6e, code } - where code: see 0x08/0x0004 (only sec.code is allowed) - r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } - where code: see 0x08/0x0004 - allowed: 0: no - 1: yes + s Get IMEI { 0x66 } + r Get IMEI { 0x66, 0x01, IMEI, 0x00} + s (ACD Readings)?(N6150 { 0x68 } + r (ACD Readings)?(N6150 { 0x68, ... } + s Get Product Profile + Settings { 0x6a} + r Get Product Profile + Settings { 0x6a, 4bytes with Product Profile Settings } + s Set Product Profile + Settings { 0x6b, 4bytes with Product Profile Settings } + r Set Product Profile + Settings OK ? { 0x6b } + s Get code { 0x6e, code } + where code: see 0x08/0x0004 (only sec.code is allowed) + r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } + where code: see 0x08/0x0004 + allowed: 0: no + 1: yes s Set code { 0x6f, code, sec code(text), 0x00 } - where code: see 0x08/0x0004 - s Start monitoring { 0x70, block } - where block(N6150): - 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00, - 0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00, - 0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80, - 0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20 - This block enables probably all possible monitorred parameters. - After it phone sends 0x00 message type values - s Break monitoring { 0x71 } - r Break monitoring { 0x71 } - s Reset Permanent - Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } - r Reset Permanent - Counters (nm->test36) { 0x74 } - s Call commands { 0x7c, block } - where where: command, (values) - command: 0x01 - values: number(ASCII), 0x00 - makes voice call - command: 0x02 - answer call - command: 0x03 - release call - r Call commands { 0x7c, command } - s Netmonitor { 0x7e, field } - where: field: 00: next - F0: reset - F1: off - F2: field test menus - F3: developer menus + where code: see 0x08/0x0004 + s Start monitoring { 0x70, block } + where block(N6150): + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00, + 0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00, + 0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80, + 0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20 + This block enables probably all possible monitorred parameters. + After it phone sends 0x00 message type values + s Break monitoring { 0x71 } + r Break monitoring { 0x71 } + s Reset Permanent + Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } + r Reset Permanent + Counters (nm->test36) { 0x74 } + s Call commands { 0x7c, block } + where where: command, (values) + command: 0x01 + values: number(ASCII), 0x00 - makes voice call + command: 0x02 - answer call + command: 0x03 - release call + r Call commands { 0x7c, command } + s Netmonitor { 0x7e, field } + where: field: 00: next + F0: reset + F1: off + F2: field test menus + F3: developer menus s Open simlock 2 { 0x81, 0x01, locknumber, 0x10, 0x10, 0x10, 0x10, 0x10 } Note: sets simlock type to factory? where locknumber: 1,2,4,8 @@ -706,151 +709,151 @@ Correct format is FBUS version 2/Direct IRDA/MBUS version 2 s Close simlock { 0x82, 0x01, locknumber, 0x00, 0x00, locksinfo(lock1,4,2,3), 0x00 } where locknumber: 1,2,4,8 r Close simlock { 0x82, the rest like in 0x40/0x8a } - s Get simlock info { 0x8a, 0x00} - r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } - where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock - locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed - counter1 - counter4: counters for locks - s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 } - r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 } - s Get downloaded OpName { 0x8c, 0x00 } - r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...} - s Buzzer pitch { 0x8f, volume, hzLO, hzHI } - if volume and hz is 0, it's off - r Buzzer pitch { 0x8f} - s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } - r ACD Readings ? { 0x91, parameter?, value? } + s Get simlock info { 0x8a, 0x00} + r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } + where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock + locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed + counter1 - counter4: counters for locks + s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 } + r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 } + s Get downloaded OpName { 0x8c, 0x00 } + r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...} + s Buzzer pitch { 0x8f, volume, hzLO, hzHI } + if volume and hz is 0, it's off + r Buzzer pitch { 0x8f} + s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } + r ACD Readings ? { 0x91, parameter?, value? } s Sleep mode test { 0x92, 0x00, 0x00, howlong(2 bytes), enable } where: enable == 0x01 - enable after test 0x00 - don't enable after test howlong (ms) = 0x07, 0xd0 = 2000 - s ???(N6150) { 0x98, 0x00 } - r ???(N6150) { 0x98, 0x00, 0x04 } - s Get bin ringtone { 0x9e, location } - where: location=0,1,etc. - r Get bin ringtone { 0x9e, location, error, contents... } - where location=0,1,etc. - error=0x0a, ringtone NOT available - 0x00, OK - s Set bin ringtone { 0xa0, location, 0x00, contenst... } - where: location=0,1,etc. - r Set bin ringtone { 0xa0, location, error } - where location=0,1,etc. - error=0x0a, ringtone NOT set - 0x00, ringtone set OK - r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } - s Get info about phone { 0xc8, 0x01 } - r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } - s Get MCU SW Checksum { 0xc8, 0x02 } - r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } - s DPS External SW { 0xc7, 0x03 } - r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } - s Get HW { 0xc8, 0x05 } - r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } - s Get "Made" Date { 0xc8, 0x05 } - r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } - s Get DSP Internal SW { 0xc8, 0x09 } - r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } - s Get PCI version { 0xc8, 0x0b } - r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } - s Get system ASIC { 0xc8, 0x0c } - r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } - s Get COBBA { 0xc8, 0x0d } - r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } - s Get PLUSSA { 0xc8, 0x0e } - r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } - where available: 0x01: not available - s Get CCONT { 0xc8, 0x0f } - r Get CCONT { 0xc8, 0x0f, available, 0x00 } - where available: 0x01: not available - s Get PPM version { 0xc8, 0x10 } - r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } - s Get PPM info { 0xc8, 0x12 } - r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } - s Set HW version { 0xc9, 0x05, version, 0x00 } - s Get Product Code { 0xca, 0x01 } - r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } - s Get Order Number { 0xca, 0x02 } - r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } - s Get Prod.Ser.Number { 0xca, 0x03 } - r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } - s Get Basic Prod.Code { 0xca, 0x04 } - r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } - s Set Product Code { 0xcb, 0x01, product code, 0x00 } - s Set Order Number { 0xcb, 0x02, number, 0x00 } - s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } - s Get (original ?)IMEI { 0xcc, 0x01 } - r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } - s Get Manufacture Month { 0xcc, 0x02 } - r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } - s Get Purchare date { 0xcc, 0x04 } - r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } - s Set "Made" date { 0xcd, 0x02, string, 0x00 } - s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} - s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} - Where num1-num4: 0x02,0x00,0x00,0x00; - 0x04,0x00,0x00,0x00; - 0x08,0x00,0x00,0x00; - 0x10,0x00,0x00,0x00; - 0x20,0x00,0x00,0x00; - 0x40,0x00,0x00,0x00; - 0x80,0x00,0x00,0x00; - 0x00,0x01,0x00,0x00; - 0x00,0x02,0x00,0x00; - 0x00,0x04,0x00,0x00; - "Power off" - No test for "Security data" - 0x00,0x10,0x00,0x00; - 0x00,0x20,0x00,0x00; - 0x00,0x40,0x00,0x00; - 0x00,0x80,0x00,0x00; - 0x00,0x00,0x01,0x00; - .... - 0x00,0x00,0x10,0x00; - s Result of phone tests { 0xcf } - r Result of phone tests { 0xcf, number of tests, results of next tests } - s ??? { 0xd1 } - r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } - s LCD Test { 0xd3, value } - where value: 0x03, 0x02 - 1'st test - 0x03, 0x01 - 2'nd test - 0x02, 0x03 - clears screen - s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} - r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} + s ???(N6150) { 0x98, 0x00 } + r ???(N6150) { 0x98, 0x00, 0x04 } + s Get bin ringtone { 0x9e, location } + where: location=0,1,etc. + r Get bin ringtone { 0x9e, location, error, contents... } + where location=0,1,etc. + error=0x0a, ringtone NOT available + 0x00, OK + s Set bin ringtone { 0xa0, location, 0x00, contenst... } + where: location=0,1,etc. + r Set bin ringtone { 0xa0, location, error } + where location=0,1,etc. + error=0x0a, ringtone NOT set + 0x00, ringtone set OK + r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } + s Get info about phone { 0xc8, 0x01 } + r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get MCU SW Checksum { 0xc8, 0x02 } + r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } + s DPS External SW { 0xc7, 0x03 } + r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } + s Get HW { 0xc8, 0x05 } + r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } + s Get "Made" Date { 0xc8, 0x05 } + r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } + s Get DSP Internal SW { 0xc8, 0x09 } + r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } + s Get PCI version { 0xc8, 0x0b } + r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } + s Get system ASIC { 0xc8, 0x0c } + r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } + s Get COBBA { 0xc8, 0x0d } + r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } + s Get PLUSSA { 0xc8, 0x0e } + r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } + where available: 0x01: not available + s Get CCONT { 0xc8, 0x0f } + r Get CCONT { 0xc8, 0x0f, available, 0x00 } + where available: 0x01: not available + s Get PPM version { 0xc8, 0x10 } + r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get PPM info { 0xc8, 0x12 } + r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } + s Set HW version { 0xc9, 0x05, version, 0x00 } + s Get Product Code { 0xca, 0x01 } + r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } + s Get Order Number { 0xca, 0x02 } + r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } + s Get Prod.Ser.Number { 0xca, 0x03 } + r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } + s Get Basic Prod.Code { 0xca, 0x04 } + r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } + s Set Product Code { 0xcb, 0x01, product code, 0x00 } + s Set Order Number { 0xcb, 0x02, number, 0x00 } + s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } + s Get (original ?)IMEI { 0xcc, 0x01 } + r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } + s Get Manufacture Month { 0xcc, 0x02 } + r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } + s Get Purchare date { 0xcc, 0x04 } + r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } + s Set "Made" date { 0xcd, 0x02, string, 0x00 } + s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} + s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} + Where num1-num4: 0x02,0x00,0x00,0x00; + 0x04,0x00,0x00,0x00; + 0x08,0x00,0x00,0x00; + 0x10,0x00,0x00,0x00; + 0x20,0x00,0x00,0x00; + 0x40,0x00,0x00,0x00; + 0x80,0x00,0x00,0x00; + 0x00,0x01,0x00,0x00; + 0x00,0x02,0x00,0x00; + 0x00,0x04,0x00,0x00; - "Power off" + No test for "Security data" + 0x00,0x10,0x00,0x00; + 0x00,0x20,0x00,0x00; + 0x00,0x40,0x00,0x00; + 0x00,0x80,0x00,0x00; + 0x00,0x00,0x01,0x00; + .... + 0x00,0x00,0x10,0x00; + s Result of phone tests { 0xcf } + r Result of phone tests { 0xcf, number of tests, results of next tests } + s ??? { 0xd1 } + r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } + s LCD Test { 0xd3, value } + where value: 0x03, 0x02 - 1'st test + 0x03, 0x01 - 2'nd test + 0x02, 0x03 - clears screen + s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} + r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} s Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes } where: numofbytes - how many bytes to read Note: Works ONLY in MBUS r Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes, contest... } where numofbytes - how many bytes available contest - bytes with contests (if numofbytes != 0) -0x41: Snake game ? -0x47: - s Get Picture Image { 0x0001, location } - r Get Picture Image when contains sender number - { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap } - NOTE: - Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!) - in sender without sender number - { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap } - s Set Picture Image { 0x0003, frame...} - where frame: see 0x47/0x0002 - r Get/Set PictureImageOK{ 0x0004 } - r Set Picture Image err { 0x0005, error? } - where error=0x74 - wrong location ? -0x64: - s Phone ID request { 0x0010 } - r Phone ID recvd { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... } - s Accessory connection { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes) -0x7f: Acknowledge(FBUS/IRDA){+type, seq } - Acknowledge(MBUS)... -0xd0: - s Power on message seq1 {+04 } - r Power on message seq1 {+05 } -0xd1: - s Get HW&SW version { 0x0003, 0x00 } -0xd2: - r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" - "model\n" "(c) NMP." } -0xda: ? (during playing 2 player snake) -0xf0: - s Send RLP frame {+0x00, 0xd9, ... } -0xf4: Power on message seq 2 +0x41: Snake game ? +0x47: + s Get Picture Image { 0x0001, location } + r Get Picture Image when contains sender number + { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap } + NOTE: + Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!) + in sender without sender number + { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap } + s Set Picture Image { 0x0003, frame...} + where frame: see 0x47/0x0002 + r Get/Set PictureImageOK{ 0x0004 } + r Set Picture Image err { 0x0005, error? } + where error=0x74 - wrong location ? +0x64: + s Phone ID request { 0x0010 } + r Phone ID recvd { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... } + s Accessory connection { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes) +0x7f: Acknowledge(FBUS/IRDA){+type, seq } + Acknowledge(MBUS)... +0xd0: + s Power on message seq1 {+04 } + r Power on message seq1 {+05 } +0xd1: + s Get HW&SW version { 0x0003, 0x00 } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } +0xda: ? (during playing 2 player snake) +0xf0: + s Send RLP frame {+0x00, 0xd9, ... } +0xf4: Power on message seq 2 diff --git a/Docs/developers/protocol/n7110.txt b/Docs/developers/protocol/n7110.txt index 2e051aa..a172f36 100644 --- a/Docs/developers/protocol/n7110.txt +++ b/Docs/developers/protocol/n7110.txt @@ -1,155 +1,155 @@ - + Last update 16.02.2002 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Assembled by - Balazs Nagy (js@lsc.hu) - Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) - Jens Bennfors - Michael Hund - Jay Bertrand - Gabriele Zappi +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Assembled by + Balazs Nagy (js@lsc.hu) + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + Jens Bennfors + Michael Hund + Jay Bertrand + Gabriele Zappi Markus Plail Ralf Thelen - ... and other members of gnokii mailing list - and authors of some WWW pages. - -The data provided is for information purposes only. -Some of the frames might be hazardous to your phone. Be careful!!! -We do not take any responsibility or liability for damages, etc. - -NOTE: this information isn't (and can't be) complete. If you know anything -about features not listed here or you noticed a bug in this list, please -notify us via e-mail. Thank you. - -Document describing frames used in -GSM Nokia 6210 and derivatives (7110) -Correct format is FBUS version 2/Infrared/MBUS version 2 -(see nokia.txt for protocol details): - - List: - -0x00: Connect to NBS port ? - r Set ringtone {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0} - Seems not to work in MBUS! -0x01: Communication Status -? r Call msg { 0x0002 } -? r Call in progress { 0x0003, seqnr } -? r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } -? r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } -? r answered call { 0x0007, seqnr } -? r terminated call { 0x0009, seqnr } -? r call msg { 0x000a, seqnr } - Note: in 6210 4.27 all msg from 0x01 seems to be unavailable -0x02: SMS handling - s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } - r Message sent { 0x0002 } - r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} - s Incoming SMS info on { 0x000d, 0x00, 0x00, 0x02} - note: no info about Delivery Reports - r Incoming SMS info onOK{ 0x000e } - note: no info about Delivery Reports - r Incoming SMS infoonerr{ 0x000f, error } - where error: 0x0c - no PIN - r SMS message received { 0x0011, ...... } (whole message) - s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } - for enable cell broadcast ? - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - for disable cell broadcast ? - r Set CellBroadcast OK { 0x0021, 0x01 } - r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? - s Set SMS center { 0x0030, 0x64, priority, checksum?, format, - validity[2], {DefaultRecipient no.}[12], - {SMScenter no.}[12], {SMSC name}, 0x00} - where tel.no.[12]: {len, type, {number(BCD)}} - type: 0x81: normal - 0x91: + (international) - 0xd0: alphanumeric - format: 0x00: text - 0x22: fax - 0x24: voice - 0x25: ERMES - 0x26: paging - 0x31: X.400 - 0x32: email - validity: 0x000b: 1 hour - 0x0047: 6 hours - 0x00a7: 24 hours - 0x00a9: 72 hours - 0x00ad: 1 week - 0x00ff: max.time - r Set SMS center OK { 0x0031 } - r Set SMS center error { 0x0032, reason } - s Get SMS center { 0x0033, 0x64, priority } - r SMS center received { 0x0034, priority, checksum?, type, - validity[2], {DefaultRecipient no.}[12], - {SMScenter no.}[12], {SMSC name}, 0x00 } - where priority, checksum, type, validity, - tel.no.[12]: see 0x02/0x0030 - r SMS center error recv { 0x0035, reason } - s?? { 0x0074} - r?? { 0x0075, 0xFF, 0x11, 0x98} - s?? { 0x008C} - r?? { 0x008D, 0x00} -0x03: Phonebook functions - s Get memory status { 0x0103, 0x02, memory type } - where: memory type - see 0x03/0x0107 - r Get memory status { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10, - 0x00[2], z?, ymaxH, ymaxL, y2H, y2L, - 0x0d?, xH?, 0x00[2]? } - where y1: location (lowermost) - y2: no. of locations - ymax: maximum location no. - s Read memory { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL, - yH, yL, 0x00, 0x00} - where x: memory type - 0x01: (256) Dialled numbers - 0x02: (512) Missed calls - 0x03: (768) Received calls - 0x05: (500) telephone phonebook - 0x06: (160) SIM phonebook - 0x07: (10/0) - 0x08: (1/0) - 0x09: (4) voice mailbox - 0x0e: (10) speed dials - 0x10: (5) caller groups - y: location - r Read memory error { 0x0108, 0x00, 0x01, - code,0x00, 0x00, z, error} - where code==0x0f - error: 0x34 - phonebook location not found - 0x3b - speed dial not assigned - r Read memory OK { 0x0108, 0x00, 0x01, - code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * } - where code: != 0x0f - y: location - z: generic block size - block: {id, 0, 0, blocksize, block no., - {contents}, 0x00} - id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] } - 0x07 name {len, (unicode)}, - 0x08 email - 0x09 postal - 0x0a note {len, (unicode)} - 0x0b number {type, 0x00[3], len, (unicode)} - 0x0c ringtone {ringtone no., 0, 0} - 0x13 date for a called list (DC, RC, etc.) - 0x1b caller group graphic {width, height, 0, 0 {bitmap}} - 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0} - 0x1e caller group number {number, 0, 0} - type: 0x0a: General, - 0x03: Mobile (office ?), - 0x06: Work, - 0x04: Fax, - 0x02: Home (mobile ?) - s Set mem location { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z, - xH, xL, yH, yL, 0x00, 0x00, 0x00, - no.of blocks, { block }[no.of blocks] } - r Set mem location { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?, - yH, yL, xL } - where code: - 0x3d - wrong entry type - 0x3e - too much entries + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +GSM Nokia 6210 and derivatives (7110) +Correct format is FBUS version 2/Infrared/MBUS version 2 +(see nokia.txt for protocol details): + + List: + +0x00: Connect to NBS port ? + r Set ringtone {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0} + Seems not to work in MBUS! +0x01: Communication Status +? r Call msg { 0x0002 } +? r Call in progress { 0x0003, seqnr } +? r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } +? r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } +? r answered call { 0x0007, seqnr } +? r terminated call { 0x0009, seqnr } +? r call msg { 0x000a, seqnr } + Note: in 6210 4.27 all msg from 0x01 seems to be unavailable +0x02: SMS handling + s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } + r Message sent { 0x0002 } + r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} + s Incoming SMS info on { 0x000d, 0x00, 0x00, 0x02} + note: no info about Delivery Reports + r Incoming SMS info onOK{ 0x000e } + note: no info about Delivery Reports + r Incoming SMS infoonerr{ 0x000f, error } + where error: 0x0c - no PIN + r SMS message received { 0x0011, ...... } (whole message) + s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } + for enable cell broadcast ? + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + for disable cell broadcast ? + r Set CellBroadcast OK { 0x0021, 0x01 } + r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? + s Set SMS center { 0x0030, 0x64, priority, checksum?, format, + validity[2], {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + where tel.no.[12]: {len, type, {number(BCD)}} + type: 0x81: normal + 0x91: + (international) + 0xd0: alphanumeric + format: 0x00: text + 0x22: fax + 0x24: voice + 0x25: ERMES + 0x26: paging + 0x31: X.400 + 0x32: email + validity: 0x000b: 1 hour + 0x0047: 6 hours + 0x00a7: 24 hours + 0x00a9: 72 hours + 0x00ad: 1 week + 0x00ff: max.time + r Set SMS center OK { 0x0031 } + r Set SMS center error { 0x0032, reason } + s Get SMS center { 0x0033, 0x64, priority } + r SMS center received { 0x0034, priority, checksum?, type, + validity[2], {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00 } + where priority, checksum, type, validity, + tel.no.[12]: see 0x02/0x0030 + r SMS center error recv { 0x0035, reason } + s?? { 0x0074} + r?? { 0x0075, 0xFF, 0x11, 0x98} + s?? { 0x008C} + r?? { 0x008D, 0x00} +0x03: Phonebook functions + s Get memory status { 0x0103, 0x02, memory type } + where: memory type - see 0x03/0x0107 + r Get memory status { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10, + 0x00[2], z?, ymaxH, ymaxL, y2H, y2L, + 0x0d?, xH?, 0x00[2]? } + where y1: location (lowermost) + y2: no. of locations + ymax: maximum location no. + s Read memory { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL, + yH, yL, 0x00, 0x00} + where x: memory type + 0x01: (256) Dialled numbers + 0x02: (512) Missed calls + 0x03: (768) Received calls + 0x05: (500) telephone phonebook + 0x06: (160) SIM phonebook + 0x07: (10/0) + 0x08: (1/0) + 0x09: (4) voice mailbox + 0x0e: (10) speed dials + 0x10: (5) caller groups + y: location + r Read memory error { 0x0108, 0x00, 0x01, + code,0x00, 0x00, z, error} + where code==0x0f + error: 0x34 - phonebook location not found + 0x3b - speed dial not assigned + r Read memory OK { 0x0108, 0x00, 0x01, + code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * } + where code: != 0x0f + y: location + z: generic block size + block: {id, 0, 0, blocksize, block no., + {contents}, 0x00} + id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] } + 0x07 name {len, (unicode)}, + 0x08 email + 0x09 postal + 0x0a note {len, (unicode)} + 0x0b number {type, 0x00[3], len, (unicode)} + 0x0c ringtone {ringtone no., 0, 0} + 0x13 date for a called list (DC, RC, etc.) + 0x1b caller group graphic {width, height, 0, 0 {bitmap}} + 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0} + 0x1e caller group number {number, 0, 0} + type: 0x0a: General, + 0x03: Mobile (office ?), + 0x06: Work, + 0x04: Fax, + 0x02: Home (mobile ?) + s Set mem location { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z, + xH, xL, yH, yL, 0x00, 0x00, 0x00, + no.of blocks, { block }[no.of blocks] } + r Set mem location { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?, + yH, yL, xL } + where code: + 0x3d - wrong entry type + 0x3e - too much entries s Delete mem location { 0x010f, 0x00, 0x01, 0x04, 0x00, 0x00, 0x0c, 0x01, 0xff, xH, xL, yH, yL, 0x00, 0x00} where x: location @@ -184,122 +184,122 @@ Correct format is FBUS version 2/Infrared/MBUS version 2 where divtype, calltype: see above s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 } where divtype, calltype: see above -0x0a: Network status - s get used network { 0x0070 } - r get used network { 0x0071, available,?,?,length,netstatus,netsel,cellIDH, - cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?, - len, xlen(78), ylen(21), 0, {bitmap} } - where {Opstr}: namelen, {operator name(unicode)} - len: {xlen, ylen, 0, {bitmap} + 2 - {bitmap}: bitmaplen, 0, 0, {OTA bitmap} - available: 0x02 if the logo following is valid, - 0x01 for no operator logo following - s get network status { 0x0081 } - r get network status { 0x0082, network%, 0x14? } - s set operator logo { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len, - xlen(78),ylen(21), 0 (frames?), - {bitmap}*?, 0x00(padding) } - where len, {bitmap}: see 0x0a/0x0071 - r set operator logo OK { 0x01a4 } +0x0a: Network status + s get used network { 0x0070 } + r get used network { 0x0071, available,?,?,length,netstatus,netsel,cellIDH, + cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?, + len, xlen(78), ylen(21), 0, {bitmap} } + where {Opstr}: namelen, {operator name(unicode)} + len: {xlen, ylen, 0, {bitmap} + 2 + {bitmap}: bitmaplen, 0, 0, {OTA bitmap} + available: 0x02 if the logo following is valid, + 0x01 for no operator logo following + s get network status { 0x0081 } + r get network status { 0x0082, network%, 0x14? } + s set operator logo { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len, + xlen(78),ylen(21), 0 (frames?), + {bitmap}*?, 0x00(padding) } + where len, {bitmap}: see 0x0a/0x0071 + r set operator logo OK { 0x01a4 } s clear operator logo { 0x00af, x} where x==0 to 4 r clear operator logo { 0x00bf} -0x13: Calendar notes - s Add meeting note { 0x0001, body like in subtype 0x001a...} - r Add meeting note { 0x0002, location (2 bytes), status (2 bytes)} - s Add call note { 0x0003, body like in subtype 0x001a...} - r Add call note { 0x0004, location (2 bytes), status (2 bytes)} +0x13: Calendar notes + s Add meeting note { 0x0001, body like in subtype 0x001a...} + r Add meeting note { 0x0002, location (2 bytes), status (2 bytes)} + s Add call note { 0x0003, body like in subtype 0x001a...} + r Add call note { 0x0004, location (2 bytes), status (2 bytes)} s Add birthday note { 0x0005, location (2 bytes), entry type, 0x00, year of birth(2 bytes), Month, Day, 0x00, 0x00, alarm (4 bytes), alarm type, length, text (Unicode)} - r Add birthday note { 0x0006, location (2 bytes), status (2 bytes)} - s Add reminder note { 0x0007, body like in subtype 0x001a...} - r Add reminder note { 0x0008, location (2 bytes), status (2 bytes)} - s Delete calendar note { 0x000b, location (2 bytes) } - r Delete calendar note { 0x000c, location (2 bytes), ?, ?, ?, ? } - s Get calendar note { 0x0019, location (2 bytes) } - r Calendar note recvd { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block} - where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder - block: for Meeting:{hour,minute,alarm (two bytes),recurrance (two bytes),len,0x00,string(unicode)} - where alarm=Number of minutes before the time of the meeting - that the alarm should be triggered: - For meetings with "No alarm"=0xFFFF (-1). - For "On time"=0x0000 - half an hour=0x001E, and so on. - Recurrance=in hours, between future occurances of this meeting. - If there is no repeat, this value is 0x0000. The special value 0xffff - means 1 Year! - for Call:{Hour,Minute,Alarm (as above),Recurrance (as above),namelen,numberlen, - name(unicode),number(unicode)} - for Reminder:{Recurrance (as above),len,0x00,string(unicode)} - for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)} - byte1 and byte2 may vary (???). Usually are 0x00 both (but not always) - In Birthday, the Year in the common part, usually contains a strange year. - So, don't consider it as Year of note, neither year of BirthDay (for Year of - Birthday use the value described below). - where alarm=32-bit integer that is the number of seconds between the desired - alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is - 0x0000FFFF (65535). - YearOfBirth=used instead of the one in the common part of the entry (see above) - but only when reading birthday entries. For storing entries, this field does - not exist. - AlarmType: 0x00 - Tone, 0x01 - Silent -? s??? { 0x0021 } -? r??? { 0x0022, 0x5A, 0x00 } -? s??? { 0x0025 } -? r??? { 0x0026, 0x04, 0x00 } -? s { 0x0029 } -? r { 0x002A, 0x04, 0x00 } - s Get first free pos { 0x0031 } - r Get first free pos { 0x0032, location (2bytes) } - s Get notes info { 0x003a, 0xFF, 0xFE} - r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *} -? s Get calendar note?? { 0x003E, location (2 bytes) } -? r Get calendar note?? { 0x003F, location (2bytes), ... } -0x14: - s Get Picture Image { 0x0007, location, number[2 bytes], 0x00, 0x64 } - r Get Picture Image { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38], - width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...} + r Add birthday note { 0x0006, location (2 bytes), status (2 bytes)} + s Add reminder note { 0x0007, body like in subtype 0x001a...} + r Add reminder note { 0x0008, location (2 bytes), status (2 bytes)} + s Delete calendar note { 0x000b, location (2 bytes) } + r Delete calendar note { 0x000c, location (2 bytes), ?, ?, ?, ? } + s Get calendar note { 0x0019, location (2 bytes) } + r Calendar note recvd { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block} + where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder + block: for Meeting:{hour,minute,alarm (two bytes),recurrance (two bytes),len,0x00,string(unicode)} + where alarm=Number of minutes before the time of the meeting + that the alarm should be triggered: + For meetings with "No alarm"=0xFFFF (-1). + For "On time"=0x0000 + half an hour=0x001E, and so on. + Recurrance=in hours, between future occurances of this meeting. + If there is no repeat, this value is 0x0000. The special value 0xffff + means 1 Year! + for Call:{Hour,Minute,Alarm (as above),Recurrance (as above),namelen,numberlen, + name(unicode),number(unicode)} + for Reminder:{Recurrance (as above),len,0x00,string(unicode)} + for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)} + byte1 and byte2 may vary (???). Usually are 0x00 both (but not always) + In Birthday, the Year in the common part, usually contains a strange year. + So, don't consider it as Year of note, neither year of BirthDay (for Year of + Birthday use the value described below). + where alarm=32-bit integer that is the number of seconds between the desired + alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is + 0x0000FFFF (65535). + YearOfBirth=used instead of the one in the common part of the entry (see above) + but only when reading birthday entries. For storing entries, this field does + not exist. + AlarmType: 0x00 - Tone, 0x01 - Silent +? s??? { 0x0021 } +? r??? { 0x0022, 0x5A, 0x00 } +? s??? { 0x0025 } +? r??? { 0x0026, 0x04, 0x00 } +? s { 0x0029 } +? r { 0x002A, 0x04, 0x00 } + s Get first free pos { 0x0031 } + r Get first free pos { 0x0032, location (2bytes) } + s Get notes info { 0x003a, 0xFF, 0xFE} + r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *} +? s Get calendar note?? { 0x003E, location (2 bytes) } +? r Get calendar note?? { 0x003F, location (2bytes), ... } +0x14: + s Get Picture Image { 0x0007, location, number[2 bytes], 0x00, 0x64 } + r Get Picture Image { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38], + width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...} r Get SMS failed { 0x0009, 0x02 }, s Get SMS status { 0x0036, 0x64 } - r Get SMS Status { 0x0037, 0x05/0x03, 0x01, 0x00, 0x00, - a (2 octets), b (2 octets), c (2 octets), - d (2 octets), e (2 octets), 0x00 - where: - a - according to P.Kot: - Number of locations in "fixed" memory. These are all - Templates entries in my Nokias 6210 (NPE-3 (c) NMP V05.36 - 14-11-01, NPE-3 (c) NMP V05.27 01-08-01). - I can't remove any of Templates entries in my phone. - Marcin Wi¥cek: Rather not ! I don't agree. - I have 0x00, 0x0f and 10 templates and 3 SMS - and 10 Picture Images. - b - Number of used messages in phone memory. These - are messages manually moved from the other folders. - Picture messages are saved here. - c - Number of unread messages in phone memory. Probably - only smart messsages. - d - Number of used messages in SIM memory. These are - either received messages or saved into Outbox/Inbox. - Note that you *can't* save message into this memory - using 'Move' option. Picture messages are not here. - e - Number of unread messages in SIM memory - - s Set Picture Image { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38], - width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...} - std. size: 72x28 - r Set Picture Image { 0x0051, location, number[2 bytes], 0x07 } - s Set SMS name { 0x0083,folder,location(2bytes),name(Unicode),0x00 , 0x00} - r Set SMS name { 0x0084,folder,0x00, 0x00, name (Unicode),0x00,0x00} - s List Picture Images { 0x0096, location, 0x0f, 0x07 } - where location: - LM tries with 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39, 0x41, 0x49 - Returned value with 0x21 - r List Picture Images { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., } + r Get SMS Status { 0x0037, 0x05/0x03, 0x01, 0x00, 0x00, + a (2 octets), b (2 octets), c (2 octets), + d (2 octets), e (2 octets), 0x00 + where: + a - according to P.Kot: + Number of locations in "fixed" memory. These are all + Templates entries in my Nokias 6210 (NPE-3 (c) NMP V05.36 + 14-11-01, NPE-3 (c) NMP V05.27 01-08-01). + I can't remove any of Templates entries in my phone. + Marcin Wi¥cek: Rather not ! I don't agree. + I have 0x00, 0x0f and 10 templates and 3 SMS + and 10 Picture Images. + b - Number of used messages in phone memory. These + are messages manually moved from the other folders. + Picture messages are saved here. + c - Number of unread messages in phone memory. Probably + only smart messsages. + d - Number of used messages in SIM memory. These are + either received messages or saved into Outbox/Inbox. + Note that you *can't* save message into this memory + using 'Move' option. Picture messages are not here. + e - Number of unread messages in SIM memory + + s Set Picture Image { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38], + width, height, lenH, lenL, {bitmap}, 0x00, 0x00, text len, text(coded like in SMS)...} + std. size: 72x28 + r Set Picture Image { 0x0051, location, number[2 bytes], 0x07 } + s Set SMS name { 0x0083,folder,location(2bytes),name(Unicode),0x00 , 0x00} + r Set SMS name { 0x0084,folder,0x00, 0x00, name (Unicode),0x00,0x00} + s List Picture Images { 0x0096, location, 0x0f, 0x07 } + where location: + LM tries with 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39, 0x41, 0x49 + Returned value with 0x21 + r List Picture Images { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., } s Write SMS to folder { 0x0104, status, folder ID, location(2 bytes), 0x02, 0x01, SMS stuff ... } r Write SMS to folder { 0x0105, folder ID, location(2 bytes), 0x00 } r Write SMS to folder { 0x0106, 0x02 (write failed errorcode ?) } - s Get SMS from folder { 0x0107, folderID, location(2 bytes), 0x01, 0x65, 0x01} - where: folderID - see 0x14/0x017B + s Get SMS from folder { 0x0107, folderID, location(2 bytes), 0x01, 0x65, 0x01} + where: folderID - see 0x14/0x017B r Get SMS from folder { 0x0108, status, folderID, 0x00, location, type, sender number,...} where: status=0x01 - reveived/read @@ -312,392 +312,392 @@ Correct format is FBUS version 2/Infrared/MBUS version 2 where: type=0x00 - received SMS 0x01 - delivery report 0x02 - stored SMS - 0x07 - picture message + 0x07 - picture message s Delete SMS message { 0x010a, folderID, location(2 bytes), 0x01 } r Delete SMS { 0x010b } - s Get folder status { 0x016b, folderID, 0x0F, 0x01} - where: folderID - see 0x14/0x017B - r Get folder status { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....} - s Get folder names { 0x017A, 0x00, 0x00} - r Get folder names { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...} - where: folderID=0x08 - Inbox - 0x10 - Outbox - 0x18 - Archive + s Get folder status { 0x016b, folderID, 0x0F, 0x01} + where: folderID - see 0x14/0x017B + r Get folder status { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....} + s Get folder names { 0x017A, 0x00, 0x00} + r Get folder names { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...} + where: folderID=0x08 - Inbox + 0x10 - Outbox + 0x18 - Archive 0x20 - Templates 0x29 - first "My folders" 0x31 - second "My folders" 0x39 - third -"- - and so on -0x17: - s Get Battery info { 0x0002 } - r Get Battery info { 0x0003, 0x0b, batt%, 0x14?, 0x01? } -0x19: Phone clock & alarm - - These frames are like the same frames subtypes in 0x11 in 6110 - - s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 } - r date and time set { 0x0061 } - s get date and time { 0x0062 } - r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second } - where: date_set & time_set==0x01 - set - 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second - not available in frame - s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 } - r alarm set { 0x006c } - s get alarm { 0x006d } - r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min } - - These are new (?) - -? s ?? { 0x0083, id } -? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 } -? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 } -? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 } - where: id=0x27,0x2a,0x32,0x28,0x40 -0x1b: - s Get IMEI { 0x0001 } - r Get IMEI { 0x0002, {IMEI(ASCII)}, 0x00 } - s get HW&SW version { 0x0003, 0x01, 0x32 } - r get HW&SW version { 0x0004, "V " "firmware\n" "firmware date\n" - "model\n" "(c) NMP." 0x00 0xff[14] } -0x1f: - s ??? { 0x0010, 0x02, 0x00, 0xff, 0xff } - r ??? { 0x0011, length, 0x00, {block}[length] } - where block: { unicode letter[2], 0x0000, - 0x00, 0x55, ??, ?? } - s Set ringtone { 0x011f, 0x00, location, 0x00, name(Unicode), - ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) } - where: location: 0x87 to 0x8b on N6210 - 0x74 to ... on N7110 - s Get ringtone { 0x0122, 0x00, location} - r Get ringtone { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)} - r Get ringtone error { 0x0124, ...} -0x39: - s get profile feature { 0x0101, 0x01, 0x01, 0x01, number1, number2} - where number1: from 0x00 to 0x07 (for each profile ?) - number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff - where 0x09: keypad tones 0x02: incoming call alert 0x03: ringtone number - 0x04: ringing volume - 0x05: message alert tone 0x06: vibra 0x07: warning tones 0x08: caller groups alert for 0x09: automatic answer - 0xff: name - r get profile feature { 0x0102, 0x01, 0x02, number2, block...} - for number2==0xff: (Profile Name) - block: 0x01, length, name(Unicode), 0x00, 0x00 - for number2==0x00: (Keypad Tones) - block: 0x01, 0x01, 0x01, Type, 0x01 - where: Type : 0x00 = Off - 0x01 to 0x03 = Level1 .. Level3 - for number2==0x02: (Incoming Call Alert) - block: 0x01, 0x01, 0x01, Type, 0x01 - where: Type : 0x00 = Ringing - 0x01 = Ascending - 0x02 = Ring Once - 0x03 = Beep Once - 0x05 = Off - for number2==0x03: (Ringtone Number) - block: 0x01, 0x01, 0x01, Number, 0x01 - where: Number : 0x40 to 0x62 - gives number of factory ringtone. The number of menu is - obtained by doing (Number - 0x3f); - where: Number : 0x89 to 0x8d - gives number of uploaded ringtone. The number of menu is - obtained by doing (Number - 0x65),while the uploaded ringtone number is - obtained by doing (Number - 0x88). - for number2==0x04: (Ringing volume) - block: 0x01, 0x??, 0x??, Volume, 0x01 - where: Volume : 0 = Level1 .. to 4 = Level5 - for number2==0x05: (Message Alert Tone) - block: 0x01, 0x01, 0x??, Type, 0x01 - where: Type : 0x00 = Off - 0x01 = Standard - 0x02 = Special - 0x03 = Beep Once - 0x04 = Ascending - for number2==0x06: (Vibration) - block: 0x01, 0x??, 0x??, Switch, 0x01 - where: Switch : 0 = Off, 1 = On - for number2==0x07: (Warning Tones) - block: 0x01, 0x??, 0x??, Switch, 0x01 - where: Switch : 0 = Off, 1 = On - for number2==0x08: (Caller groups Alert for) - block: 0x01, 0x??, 0x??, Callers, 0x01 - where: Callers : 0xff = All calls alert (Read below *) - 0x01 = Family - 0x02 = VIP - 0x04 = Friends - 0x08 = Colleagues - 0x10 = Others - All logical OR among groups are valid, so if you select from one phone's profile - alert for Friends and Collegues, a 0x0c will return (because 0x04 OR 0x08 = 0x0c). - (*) If Callers==0xff, means "Alert for All calls". Then, in this case, you don't - need to read other groups selection. - for number2==0x09: (Automatic answer) - block: 0x01, 0x??, 0x??, Switch, 0x01 - where: Switch : 0 = Off, 1 = On - N.B. This feature is valid for Handsfree and Headset profiles only! - s ??? { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 } - r ??? { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 } - - s ? { 0x0105} - r ? { 0x0106, 0x01, 0x04} -0x3f: WAP - s Enable WAP frames { 0x0000} - r Enable WAP frames { 0x0002, 0x01} - - s ?? { 0x0003} - r ?? { 0x0004} - - s Get WAP bookmark { 0x0006, 0x00, location} - where location: 0 - 14 - r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode), - url_len, url(unicode), 0x01,0x80,0x00[7]} - r Get WAP bookmark err { 0x0008, error } - where error: - 0x00(?)invalid position - 0x01 user inside "Bookmarks" menu. Must leave it - 0x02 invalid/too high/empty location - - s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode), - url_len, url(unicode), 0x01,0x80,0x00[7] } - Note: bookmark is added to the first free location. - r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block } - where block: - 0x0a, location_of_just_written_bookmark(?), - 0x00, next_free_location(?) - r Set WAP bookmark err {+0x01, 0x36, 0x0b, error } - where error: - 0x04 - memory is full - 0x01 - we are in the bookmark menu - 0x00 - unknown reason for now ;( + and so on +0x17: + s Get Battery info { 0x0002 } + r Get Battery info { 0x0003, 0x0b, batt%, 0x14?, 0x01? } +0x19: Phone clock & alarm + + These frames are like the same frames subtypes in 0x11 in 6110 + + s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 } + r date and time set { 0x0061 } + s get date and time { 0x0062 } + r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second } + where: date_set & time_set==0x01 - set + 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second + not available in frame + s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 } + r alarm set { 0x006c } + s get alarm { 0x006d } + r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min } + + These are new (?) + +? s ?? { 0x0083, id } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 } + where: id=0x27,0x2a,0x32,0x28,0x40 +0x1b: + s Get IMEI { 0x0001 } + r Get IMEI { 0x0002, {IMEI(ASCII)}, 0x00 } + s get HW&SW version { 0x0003, 0x01, 0x32 } + r get HW&SW version { 0x0004, "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." 0x00 0xff[14] } +0x1f: + s ??? { 0x0010, 0x02, 0x00, 0xff, 0xff } + r ??? { 0x0011, length, 0x00, {block}[length] } + where block: { unicode letter[2], 0x0000, + 0x00, 0x55, ??, ?? } + s Set ringtone { 0x011f, 0x00, location, 0x00, name(Unicode), + ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) } + where: location: 0x87 to 0x8b on N6210 + 0x74 to ... on N7110 + s Get ringtone { 0x0122, 0x00, location} + r Get ringtone { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)} + r Get ringtone error { 0x0124, ...} +0x39: + s get profile feature { 0x0101, 0x01, 0x01, 0x01, number1, number2} + where number1: from 0x00 to 0x07 (for each profile ?) + number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff + where 0x09: keypad tones 0x02: incoming call alert 0x03: ringtone number + 0x04: ringing volume + 0x05: message alert tone 0x06: vibra 0x07: warning tones 0x08: caller groups alert for 0x09: automatic answer + 0xff: name + r get profile feature { 0x0102, 0x01, 0x02, number2, block...} + for number2==0xff: (Profile Name) + block: 0x01, length, name(Unicode), 0x00, 0x00 + for number2==0x00: (Keypad Tones) + block: 0x01, 0x01, 0x01, Type, 0x01 + where: Type : 0x00 = Off + 0x01 to 0x03 = Level1 .. Level3 + for number2==0x02: (Incoming Call Alert) + block: 0x01, 0x01, 0x01, Type, 0x01 + where: Type : 0x00 = Ringing + 0x01 = Ascending + 0x02 = Ring Once + 0x03 = Beep Once + 0x05 = Off + for number2==0x03: (Ringtone Number) + block: 0x01, 0x01, 0x01, Number, 0x01 + where: Number : 0x40 to 0x62 - gives number of factory ringtone. The number of menu is + obtained by doing (Number - 0x3f); + where: Number : 0x89 to 0x8d - gives number of uploaded ringtone. The number of menu is + obtained by doing (Number - 0x65),while the uploaded ringtone number is + obtained by doing (Number - 0x88). + for number2==0x04: (Ringing volume) + block: 0x01, 0x??, 0x??, Volume, 0x01 + where: Volume : 0 = Level1 .. to 4 = Level5 + for number2==0x05: (Message Alert Tone) + block: 0x01, 0x01, 0x??, Type, 0x01 + where: Type : 0x00 = Off + 0x01 = Standard + 0x02 = Special + 0x03 = Beep Once + 0x04 = Ascending + for number2==0x06: (Vibration) + block: 0x01, 0x??, 0x??, Switch, 0x01 + where: Switch : 0 = Off, 1 = On + for number2==0x07: (Warning Tones) + block: 0x01, 0x??, 0x??, Switch, 0x01 + where: Switch : 0 = Off, 1 = On + for number2==0x08: (Caller groups Alert for) + block: 0x01, 0x??, 0x??, Callers, 0x01 + where: Callers : 0xff = All calls alert (Read below *) + 0x01 = Family + 0x02 = VIP + 0x04 = Friends + 0x08 = Colleagues + 0x10 = Others + All logical OR among groups are valid, so if you select from one phone's profile + alert for Friends and Collegues, a 0x0c will return (because 0x04 OR 0x08 = 0x0c). + (*) If Callers==0xff, means "Alert for All calls". Then, in this case, you don't + need to read other groups selection. + for number2==0x09: (Automatic answer) + block: 0x01, 0x??, 0x??, Switch, 0x01 + where: Switch : 0 = Off, 1 = On + N.B. This feature is valid for Handsfree and Headset profiles only! + s ??? { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 } + r ??? { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 } + + s ? { 0x0105} + r ? { 0x0106, 0x01, 0x04} +0x3f: WAP + s Enable WAP frames { 0x0000} + r Enable WAP frames { 0x0002, 0x01} + + s ?? { 0x0003} + r ?? { 0x0004} + + s Get WAP bookmark { 0x0006, 0x00, location} + where location: 0 - 14 + r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7]} + r Get WAP bookmark err { 0x0008, error } + where error: + 0x00(?)invalid position + 0x01 user inside "Bookmarks" menu. Must leave it + 0x02 invalid/too high/empty location + + s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7] } + Note: bookmark is added to the first free location. + r Set WAP bookmark OK {+0x01, 0x36, 0x0a, block } + where block: + 0x0a, location_of_just_written_bookmark(?), + 0x00, next_free_location(?) + r Set WAP bookmark err {+0x01, 0x36, 0x0b, error } + where error: + 0x04 - memory is full + 0x01 - we are in the bookmark menu + 0x00 - unknown reason for now ;( -? s Delete WAP bookmark { 0x000c, 0x00, location } - where: location = 0-14 -? r Delete WAR bookmark OK{ 0x000d } -? r Delete WAPbookmark err{ 0x000e, 0x02 } - - s ?? { 0x000F} - r ?? { 0x0010, 0x00} - - s Get WAP settings 1 { 0x0015, location} - where location: 0x00 - 0x05 - r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...} - where: - con_type: 0x00 - temporary - 0x01 - continuous - location: when use "Get WAP settings 2 frame", must give it - security: 0x00 = no, 0x01 = yes - r Get WAP settings 1 err{ 0x0017, error } - where error: - 0x01 user inside "Settings" menu. Must leave it - 0x02 invalid/too high/empty location - s Get WAP settings 2 { 0x001b, location} - where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame) - r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...} - where type : 0x00 - SMS bearer - frame: - service_num_len, service_num (Unicode), server_num_len, server_num(Unicode) - 0x01 - data bearer - frame: - auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode), - user len, user (Unicode), password len, password (Unicode) - where auth: 0x00 - normal, 0x01 - secure - call_type: 0x00 - analogue, 0x01 - ISDN - call_speed: 0x00 - 9600, 0x01 - 14400 +? s Delete WAP bookmark { 0x000c, 0x00, location } + where: location = 0-14 +? r Delete WAR bookmark OK{ 0x000d } +? r Delete WAPbookmark err{ 0x000e, 0x02 } + + s ?? { 0x000F} + r ?? { 0x0010, 0x00} + + s Get WAP settings 1 { 0x0015, location} + where location: 0x00 - 0x05 + r Get WAP settings 1 OK { 0x0016, title length, title (Unicode), URL length, URL(Unicode),con_type, ???[6 bytes],location, ???[5 bytes],security,...} + where: + con_type: 0x00 - temporary + 0x01 - continuous + location: when use "Get WAP settings 2 frame", must give it + security: 0x00 = no, 0x01 = yes + r Get WAP settings 1 err{ 0x0017, error } + where error: + 0x01 user inside "Settings" menu. Must leave it + 0x02 invalid/too high/empty location + s Get WAP settings 2 { 0x001b, location} + where location: 0x00 - 0x1d (you get it in "Get WAP settings 1" frame) + r Get WAP settings 2 OK { 0x001c, 0x01, type, frame...} + where type : 0x00 - SMS bearer + frame: + service_num_len, service_num (Unicode), server_num_len, server_num(Unicode) + 0x01 - data bearer + frame: + auth, call_type, call_speed, ?, IP len, IP (Unicode), dialup len, dialup (Unicode), + user len, user (Unicode), password len, password (Unicode) + where auth: 0x00 - normal, 0x01 - secure + call_type: 0x00 - analogue, 0x01 - ISDN + call_speed: 0x00 - 9600, 0x01 - 14400 0x02 - USSD bearer frame: type, service number len/IP len,service num (Unicode)/IP (Unicode),service code len, service code (Unicode) where type: 0x01 - service number, 0x00 - IP - r Get WAP settings 2 err{ 0x001d,error} - where: error=0x05 -0x40: Security commands -? s ???(N6150) { 0x08, 0x00 } -? r ???(N6150) { 0x08 } - s Enable extended cmds { 0x64, cmd } - where cmd: 0x00: off - 0x01: on - 0x03: reset (doesn't ask for PIN again) - 0x04: reset (PIN is requested) - In 5110 makes reset without PIN - 0x06: CONTACT SERVICE!!! Don't try it! - s Get IMEI { 0x66 } - r Get IMEI { 0x66, 0x01, IMEI, 0x00} - s (ACD Readings)?(N6150 { 0x68 } - r (ACD Readings)?(N6150 { 0x68, ... } - s Get Product Profile - Settings { 0x6a} - r Get Product Profile - Settings { 0x6a, 4bytes with Product Profile Settings } - s Set Product Profile - Settings { 0x6b, 4bytes with Product Profile Settings } - r Set Product Profile - Settings OK ? { 0x6b } - s Get code { 0x6e, code } - where code: see 0x08/0x0004 (no allowed code !) - r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } - where code: see 0x08/0x0004 - allowed: 0: no - 1: yes -? s Reset Permanent -? Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } -? r Reset Permanent -? Counters (nm->test36) { 0x74 } - s Call commands { 0x7c, block } - where where: command, (values) - command: 0x01 - values: number(ASCII), 0x00 - makes voice call - command: 0x02 - answer call - command: 0x03 - release call - r Call commands { 0x7c, command } - s Netmonitor { 0x7e, field } - where: field: 00: next - F0: reset - F1: off - F2: field test menus - F3: developer menus - s Get simlock info { 0x8a, 0x00} - r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } - where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock - locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed - counter1 - counter4: counters for locks - s Buzzer pitch { 0x8f, volume, hzLO, hzHI } - if volume and hz is 0, it's off - r Buzzer pitch { 0x8f} - s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } - r ACD Readings ? { 0x91, parameter?, value? } -? s ???(N6150) { 0x98, 0x00 } -? r ???(N6150) { 0x98, 0x00, 0x04 } - s Get bin ringtone { 0x9e, location } - where: location=0,1,etc. - r Get bin ringtone { 0x9e, location, error, contents... } - where location=0,1,etc. - error=0x0a, ringtone NOT available - 0x00, OK - s Set bin ringtone { 0xa0, location, 0x00, contenst... } - where: location=0,1,etc. - r Set bin ringtone { 0xa0, location, error } - where location=0,1,etc. - error=0x0a, ringtone NOT set - 0x00, ringtone set OK -? r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } - s Get info about phone { 0xc8, 0x01 } - r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } - s Get MCU SW Checksum { 0xc8, 0x02 } - r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } - s DPS External SW { 0xc7, 0x03 } - r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } - s Get HW { 0xc8, 0x05 } - r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } - s Get "Made" Date { 0xc8, 0x05 } - r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } - s Get DSP Internal SW { 0xc8, 0x09 } - r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } - s Get PCI version { 0xc8, 0x0b } - r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } - s Get system ASIC { 0xc8, 0x0c } - r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } - s Get COBBA { 0xc8, 0x0d } - r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } - s Get PLUSSA { 0xc8, 0x0e } - r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } - where available: 0x01: not available - s Get CCONT { 0xc8, 0x0f } - r Get CCONT { 0xc8, 0x0f, available, 0x00 } - where available: 0x01: not available - s Get PPM version { 0xc8, 0x10 } - r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } - s Get PPM info { 0xc8, 0x12 } - r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } - s Set HW version { 0xc9, 0x05, version, 0x00 } - s Get Product Code { 0xca, 0x01 } - r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } - s Get Order Number { 0xca, 0x02 } - r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } - s Get Prod.Ser.Number { 0xca, 0x03 } - r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } - s Get Basic Prod.Code { 0xca, 0x04 } - r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } - s Set Product Code { 0xcb, 0x01, product code, 0x00 } - s Set Order Number { 0xcb, 0x02, number, 0x00 } - s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } - s Get (original ?)IMEI { 0xcc, 0x01 } - r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } - s Get Manufacture Month { 0xcc, 0x02 } - r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } - s Get Purchare date { 0xcc, 0x04 } - r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } - s Set "Made" date { 0xcd, 0x02, string, 0x00 } - s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} - s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} - Where num1-num4: 0x02,0x00,0x00,0x00; - 0x04,0x00,0x00,0x00; - 0x08,0x00,0x00,0x00; - 0x10,0x00,0x00,0x00; - 0x20,0x00,0x00,0x00; - 0x40,0x00,0x00,0x00; - 0x80,0x00,0x00,0x00; - 0x00,0x01,0x00,0x00; - 0x00,0x02,0x00,0x00; - 0x00,0x04,0x00,0x00; - "Power off" - No test for "Security data" - 0x00,0x10,0x00,0x00; - 0x00,0x20,0x00,0x00; - 0x00,0x40,0x00,0x00; - 0x00,0x80,0x00,0x00; - 0x00,0x00,0x01,0x00; - .... - 0x00,0x00,0x10,0x00; - s Result of phone tests { 0xcf } - r Result of phone tests { 0xcf, number of tests, results of next tests } -? s ??? { 0xd1 } -? r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } - s LCD Test { 0xd3, value } - where value: 0x03, 0x02 - 1'st test - 0x03, 0x01 - 2'nd test - 0x02, 0x03 - clears screen - s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} - r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} - r Function of { 0xff, 0x8c } - 0x40 msgtype not - supported ? -0x78: - s Status confirm { 0x0201, 0x03 } - r Incoming call seq1 { 0x0102 0x0e 0x03 } - r Incoming call seq2 { 0x0102 0x7e 0x01 } -0x79: - s CarKit enable { 0x0201 0x01 0x62 0x00 } - r CarKit enabled { 0x0201 0x02 0x06 0x00 "V " {version} "\nHFU" - 0x00 } -0x7a: settings - r Set setting { 0x01eb, number, 0x00 } - s Set setting { 0x01ec, number, contents } - where for number: - 0x02 (startup text) : 0x00, text (Unicode) - 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, - 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, - 0xc0, 0x04, 0x03, 0x00, {bitmap} } - where width, height, {bitmap}: see 0x7a/0x01ed 0x15 - s Get setting { 0x01ee, number} - where number: 0x01 - 0x1e - 0x02: startup text - 0x15: startup logo - 0x1c: security code - r Get setting { 0x01ed,number, 0x00, contents} - where for number: - 0x02 (startup text) : 0x00, text (Unicode) - 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, - 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, - 0xc0, 0x04, 0x03, 0x00, {bitmap} } - where height: 60 (0x3c) or 65 - width: 96 (0x60) - {bitmap}: like other bitmaps but pixels - placed vertically. - 0x1c (security code): {code(ascii)}, 0x00 -0x7f: Acknowledge(FBUS/IRDA){+type, seq } - Acknowledge(MBUS)... -0xd0: - s Power on message seq1 {+04 } - r Power on message seq1 {+05 } -0xd1: - s Get HW&SW version { 0x0003, 0x00 } -0xd2: - r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" - "model\n" "(c) NMP." } -0xf4: Power on message seq 2 + r Get WAP settings 2 err{ 0x001d,error} + where: error=0x05 +0x40: Security commands +? s ???(N6150) { 0x08, 0x00 } +? r ???(N6150) { 0x08 } + s Enable extended cmds { 0x64, cmd } + where cmd: 0x00: off + 0x01: on + 0x03: reset (doesn't ask for PIN again) + 0x04: reset (PIN is requested) + In 5110 makes reset without PIN + 0x06: CONTACT SERVICE!!! Don't try it! + s Get IMEI { 0x66 } + r Get IMEI { 0x66, 0x01, IMEI, 0x00} + s (ACD Readings)?(N6150 { 0x68 } + r (ACD Readings)?(N6150 { 0x68, ... } + s Get Product Profile + Settings { 0x6a} + r Get Product Profile + Settings { 0x6a, 4bytes with Product Profile Settings } + s Set Product Profile + Settings { 0x6b, 4bytes with Product Profile Settings } + r Set Product Profile + Settings OK ? { 0x6b } + s Get code { 0x6e, code } + where code: see 0x08/0x0004 (no allowed code !) + r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } + where code: see 0x08/0x0004 + allowed: 0: no + 1: yes +? s Reset Permanent +? Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } +? r Reset Permanent +? Counters (nm->test36) { 0x74 } + s Call commands { 0x7c, block } + where where: command, (values) + command: 0x01 + values: number(ASCII), 0x00 - makes voice call + command: 0x02 - answer call + command: 0x03 - release call + r Call commands { 0x7c, command } + s Netmonitor { 0x7e, field } + where: field: 00: next + F0: reset + F1: off + F2: field test menus + F3: developer menus + s Get simlock info { 0x8a, 0x00} + r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } + where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock + locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed + counter1 - counter4: counters for locks + s Buzzer pitch { 0x8f, volume, hzLO, hzHI } + if volume and hz is 0, it's off + r Buzzer pitch { 0x8f} + s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } + r ACD Readings ? { 0x91, parameter?, value? } +? s ???(N6150) { 0x98, 0x00 } +? r ???(N6150) { 0x98, 0x00, 0x04 } + s Get bin ringtone { 0x9e, location } + where: location=0,1,etc. + r Get bin ringtone { 0x9e, location, error, contents... } + where location=0,1,etc. + error=0x0a, ringtone NOT available + 0x00, OK + s Set bin ringtone { 0xa0, location, 0x00, contenst... } + where: location=0,1,etc. + r Set bin ringtone { 0xa0, location, error } + where location=0,1,etc. + error=0x0a, ringtone NOT set + 0x00, ringtone set OK +? r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } + s Get info about phone { 0xc8, 0x01 } + r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get MCU SW Checksum { 0xc8, 0x02 } + r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } + s DPS External SW { 0xc7, 0x03 } + r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } + s Get HW { 0xc8, 0x05 } + r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } + s Get "Made" Date { 0xc8, 0x05 } + r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } + s Get DSP Internal SW { 0xc8, 0x09 } + r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } + s Get PCI version { 0xc8, 0x0b } + r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } + s Get system ASIC { 0xc8, 0x0c } + r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } + s Get COBBA { 0xc8, 0x0d } + r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } + s Get PLUSSA { 0xc8, 0x0e } + r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } + where available: 0x01: not available + s Get CCONT { 0xc8, 0x0f } + r Get CCONT { 0xc8, 0x0f, available, 0x00 } + where available: 0x01: not available + s Get PPM version { 0xc8, 0x10 } + r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get PPM info { 0xc8, 0x12 } + r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } + s Set HW version { 0xc9, 0x05, version, 0x00 } + s Get Product Code { 0xca, 0x01 } + r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } + s Get Order Number { 0xca, 0x02 } + r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } + s Get Prod.Ser.Number { 0xca, 0x03 } + r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } + s Get Basic Prod.Code { 0xca, 0x04 } + r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } + s Set Product Code { 0xcb, 0x01, product code, 0x00 } + s Set Order Number { 0xcb, 0x02, number, 0x00 } + s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } + s Get (original ?)IMEI { 0xcc, 0x01 } + r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } + s Get Manufacture Month { 0xcc, 0x02 } + r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } + s Get Purchare date { 0xcc, 0x04 } + r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } + s Set "Made" date { 0xcd, 0x02, string, 0x00 } + s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} + s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} + Where num1-num4: 0x02,0x00,0x00,0x00; + 0x04,0x00,0x00,0x00; + 0x08,0x00,0x00,0x00; + 0x10,0x00,0x00,0x00; + 0x20,0x00,0x00,0x00; + 0x40,0x00,0x00,0x00; + 0x80,0x00,0x00,0x00; + 0x00,0x01,0x00,0x00; + 0x00,0x02,0x00,0x00; + 0x00,0x04,0x00,0x00; - "Power off" + No test for "Security data" + 0x00,0x10,0x00,0x00; + 0x00,0x20,0x00,0x00; + 0x00,0x40,0x00,0x00; + 0x00,0x80,0x00,0x00; + 0x00,0x00,0x01,0x00; + .... + 0x00,0x00,0x10,0x00; + s Result of phone tests { 0xcf } + r Result of phone tests { 0xcf, number of tests, results of next tests } +? s ??? { 0xd1 } +? r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } + s LCD Test { 0xd3, value } + where value: 0x03, 0x02 - 1'st test + 0x03, 0x01 - 2'nd test + 0x02, 0x03 - clears screen + s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} + r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} + r Function of { 0xff, 0x8c } + 0x40 msgtype not + supported ? +0x78: + s Status confirm { 0x0201, 0x03 } + r Incoming call seq1 { 0x0102 0x0e 0x03 } + r Incoming call seq2 { 0x0102 0x7e 0x01 } +0x79: + s CarKit enable { 0x0201 0x01 0x62 0x00 } + r CarKit enabled { 0x0201 0x02 0x06 0x00 "V " {version} "\nHFU" + 0x00 } +0x7a: settings + r Set setting { 0x01eb, number, 0x00 } + s Set setting { 0x01ec, number, contents } + where for number: + 0x02 (startup text) : 0x00, text (Unicode) + 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, + 0xc0, 0x04, 0x03, 0x00, {bitmap} } + where width, height, {bitmap}: see 0x7a/0x01ed 0x15 + s Get setting { 0x01ee, number} + where number: 0x01 - 0x1e + 0x02: startup text + 0x15: startup logo + 0x1c: security code + r Get setting { 0x01ed,number, 0x00, contents} + where for number: + 0x02 (startup text) : 0x00, text (Unicode) + 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, + 0xc0, 0x04, 0x03, 0x00, {bitmap} } + where height: 60 (0x3c) or 65 + width: 96 (0x60) + {bitmap}: like other bitmaps but pixels + placed vertically. + 0x1c (security code): {code(ascii)}, 0x00 +0x7f: Acknowledge(FBUS/IRDA){+type, seq } + Acknowledge(MBUS)... +0xd0: + s Power on message seq1 {+04 } + r Power on message seq1 {+05 } +0xd1: + s Get HW&SW version { 0x0003, 0x00 } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } +0xf4: Power on message seq 2 diff --git a/Docs/developers/protocol/nokia.txt b/Docs/developers/protocol/nokia.txt index 965dc59..dc1c5d8 100644 --- a/Docs/developers/protocol/nokia.txt +++ b/Docs/developers/protocol/nokia.txt @@ -82,15 +82,15 @@ notify us via e-mail. Thank you. Port settings: Speed 9600 bps, Bits 8, ParityOdd, Stop Bits 1, DTR and RTS logic 0 - In the MBUS bus, the phone has only one connector for transmition and + In the MBUS bus, the phone has only one connector for transmition and reception. - Because of this characteristics of the phone connector, every time that the - PC writes into the phone it is writing as well into its own Rx. So every - time the PC sends info into the phone it finds that same information in its - own Rx buffers, like a mirror copy. This should be discarded. + Because of this characteristics of the phone connector, every time that the + PC writes into the phone it is writing as well into its own Rx. So every + time the PC sends info into the phone it finds that same information in its + own Rx buffers, like a mirror copy. This should be discarded. - The communications is made like an old cb radio, only one + The communications is made like an old cb radio, only one talking at a time. Many transmission are made this way: @@ -107,7 +107,7 @@ notify us via e-mail. Thank you. You should wait for bus to be free for 3 miliseconds before normal message, and for 2.5 miliseconds before acknowledge. You should wait for acknowledge for 200 miliseconds, then retransmit. - + Frame format for FBUS version 1: { FrameID, FrameLength, MsgType, {block}, SeqNo, ChkSum } @@ -172,10 +172,10 @@ notify us via e-mail. Thank you. Ack: - { FrameID, DestDEV, SrcDEV, 0x7f, Id_SeqNo, ChkSum } - + { FrameID, DestDEV, SrcDEV, 0x7f, Id_SeqNo, ChkSum } + where Id_SeqNo: Is the sequence number that you are - acknowleging (from the other part). + acknowleging (from the other part). Frame format for Infrared: diff --git a/Docs/en_US/gnokii/config.htm b/Docs/en_US/gnokii/config.htm index 7724082..d61eb40 100644 --- a/Docs/en_US/gnokii/config.htm +++ b/Docs/en_US/gnokii/config.htm @@ -1,632 +1,632 @@ - - - - - Configuration - - - - - -

Main page

-
Configuration
- -


- -

How to install it from the source ?
-


- -

If you get the sources you need to create script -configure. You do it by typing: -

tfuj:~/gnokii-0.3.3pre5$ autoconf
- -

If you get the sources from the tarball you don't need to do -this - configure is already made for you. For quick install do simply: -

tfuj:~/gnokii-0.3.3pre5$ ./configure
-tfuj:~/gnokii-0.3.3pre5$ make
-tfuj:~/gnokii-0.3.3pre5$ make install
-
- -

But configure has some options. Except obvious -parameters as --prefix which specifies a path to install GNOKII, you -can specify one of the following: - -

-
--help -
Shows you list of available options
-
-
--enable-debug -
Turns on debugging. It's usefull especially for developers. But if you - find a bug in GNOKII, please compile the sources with debugging enabled and - send this output to the GNOKII mailing list. This is used by gnokii - program.
-
-
--enable-xdebug -
The same as above but used by xgnokii.
-
-
--enable-rlpdebug -
This option turns on debugging specific to the RLP stuff. Note, that it's - very important at the moment as this part of GNOKII is under the hardest - development.
-
-
--without-x -
Don't include X Window system support - xgnokii.
-
-
--enable-security -
Turns on some security functions:.... Use them with caution.
-
-
--enable-win32 -
Include MS Windows support. Yes, it really exists. ;-)
-
-
--with-model=MODEL, --with-port=PORT -
Specify the model of the phone (eg. 6150) and the port it is connected to - (eg. /dev/ttyS1). These values can be overwritten with ones from the config - files. -
-
- -

The sample usage: -

tfuj:~/gnokii-0.3.3pre5$ ./configure --prefix=/usr2 --enable-debug --without-x \
---enable-security --with-model=6130 --with-port=/dev/ttyS1
-
- -

When the configure succeed, it shows options GNOKII -will be compiled with: -

    Host system:        linux-gnulibc1
-    Gnokii version:     0.3.3_pre5
-    Xgnokii version:    20000613
-    Phone model:        6130
-    Serial port:        /dev/ttyS1
-    X (GTK) support:    no
-    Debug:              yes
-    XDebug:             no
-    RLPDebug:           no
-    NLS:                yes
-    Security:           yes
-    Win32:               
-    Prefix:             /usr2
-
- -

Now, the only thing left to do is just ro run: -

tfuj:~/gnokii-0.3.3pre5$ make
-tfuj:~/gnokii-0.3.3pre5$ make install
-
- -

Finally, you have GNOKII installed in your system. And now REAL -FUN begins. :-) - -

How to install it from binaries ?
-


- -

If you downloaded gnokii as a pre-built binary you should install -it in the conventional manner for the package type in question. -For example if you downloaded a .rpm file you can install it by -running the following as root. - -

rpm -i gnokii-0.3.2-i386.rpm - -

If you are using a Debian based system, you can use dpackage -to do the installation (FIXME - is this correct ?) - -

How to make connection with phone ?
-


- -

There are three ways to make it: - -

    -
  • connecting phone with computer using cable. All phones allow to make it -(even 3210 - connector is inside). If you want to know more -about creating your own cable, read cables faq.
  • -
  • using IrDa port in phone and computer. Notice, that your computer -and phone must have it (only some series of Nokia phones has it - for example, -6110, 6150)
  • -
  • connecting to phone special device called "dongle" (it has IrDa port) -and making IrDa connection between it and phone. Current gnokii cas use -Tekram IRmate 210 - see patches
  • -
- -

How to configure gnokii ?
-


- -

First it to use --with-model and --with-port options for -configure script. But I do not recommend this. In my opinion these should be -removed from configure. Second disadvantage is that you can't use it when -you are installing a binary package. - -

So, will use better method :-). -You should copy the gnokiirc -file from the Docs/examples directory to your -home directory and name it gnokiirc or copy it into /etc directory -and name gnokiirc. - -

Using your favorite -editor ensure that the settings are correct for your system, -the sample file has details of the various options available. The most -difficult problem could be discovering model of your phone - go into -our firmware page -and try to use codes written in column -Firmware version code. If your phone will display something, -see model number on the third line, look on the -firmware page -again (for it) and read phone model then. - -

Note that you will need read/write permissions on whatever -serial port you specify in gnokiirc. You can now use gnokii -and xgnokii. - -

Of course, you don't have to make any config, if you will use -these config options. There are default: - -

-

-[global]
-port = /dev/ttyS0
-model = 6110
-connection = serial
-initlength = default
-bindir=/usr/local/sbin
-
- -

How to configure infrared connection ?
-


- -

-

    - -
  • Go into configuration of your IrDa port (the most often it's made in -BIOS, sometimes using program provided by computer's producer): - -

    -

      -
    • Enable it
    • -
    • Setup the COM-Port on which it should work. -Here are addresses: -
      ttyS0 (COM1): 3F8, IRQ: 4 -
      ttyS1 (COM2): 2F8, IRQ: 3 -
      ttyS2 (COM3): 3E8, IRQ: 4 -
      ttyS3 (COM4): 2E8, IRQ: 3 -
        -
    • -
    -
  • - -
  • Configure gnokii (see previous question) -setting type of connection to -infrared.
  • - -
  • If you are using linux, put linux-irda off (you can't use gnokii over infrared and -linux-irda at the same time - it means too, if you want use -linux-irda you must close all gnokii-applications what -use the infrared-port in moment). -
  • -
- -

How to configure gnokii driver for data connection ?
-


- -

After installing and configuring gnokii you should make another group -and allow mgnokiidev (it our virtual modem driver) -to use it. For example (if you have installed gnokii -into /usr/local): - -

-groupadd gnokii
-chown root:gnokii /usr/local/sbin/mgnokiidev
-chmod 4750 /usr/local/sbin/mgnokiidev
- -

And now connect (FIRST EXAMPLE): - -

Then connect your phone to your PC and then run gnokiid: - -

[ first console ]
-tfuj:/home/pawel/gnokii# ./gnokiid/gnokiid 
-
- -

If successful, you should see a message saying that mgnokiidev has been -run to create /dev/gnokii. If you're using a 5110/6110 series phone -you should hear a beep and see an "accessory connected" message on -the phone. If you're using a 3810 series phone you won't see anything -on the phones LCD. - -

And now: - -

-

-[ second console ]
-[- running minicom -]
-
-[ third console ]
-[- when connection is estabilished -]
-tfuj:/etc/ppp# /usr/sbin/pppd -d -detach /dev/gnokii 115200
-Using interface ppp0
-Connect: ppp0 <--> /dev/gnokii
-sent [LCP ConfReq id=0x1     ]
-rcvd [LCP ConfReq id=0x8e     < 11 04 05 f4> < 13 0d 01 70 69 65 6b 6e 61 2d 61 73 34>]
-sent [LCP ConfRej id=0x8e < 11 04 05 f4> < 13 0d 01 70 69 65 6b 6e 61 2d 61 73 34>]
-rcvd [LCP ConfNak id=0x1 ]
-sent [LCP ConfReq id=0x2    ]
-rcvd [LCP ConfReq id=0x8f    ]
-sent [LCP ConfAck id=0x8f    ]
-rcvd [LCP ConfAck id=0x2    ]
-sent [IPCP ConfReq id=0x1  ]
-sent [CCP ConfReq id=0x1   ]
-rcvd [IPCP ConfReq id=0x16  ]
-sent [IPCP ConfAck id=0x16  ]
-rcvd [IPCP ConfNak id=0x1 ]
-sent [IPCP ConfReq id=0x2  ]
-rcvd [LCP ProtRej id=0x90 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
-rcvd [IPCP ConfAck id=0x2  ]
-local  IP address 157.25.94.141
-remote IP address 157.25.75.129
-Terminating on signal 2.
-sent [LCP TermReq id=0x3 "User request"]
-rcvd [LCP TermAck id=0x3]
-Connection terminated.
-Connect time 5.6 minutes.
-Sent 30568 bytes, received 197133 bytes.
-tfuj:/etc/ppp# 
-
- -

SECOND EXAMPLE (I used such scripts): - -

/home/pawel/.gnokiirc
----------------------
-global]
-port = /dev/ttyS1
-model = 6110
-connection = serial
-initlength = 1
-
-/usr/sbin/ppp-gnokii
---------------------
-#!/bin/sh
-LOCAL_IP=0.0.0.0       
-REMOTE_IP=0.0.0.0     
-NETMASK=255.255.255.0   
-DIALER_SCRIPT=/etc/ppp/ppp-gnokii
-exec /usr/sbin/pppd debug /dev/gnokii 115200 \
-$LOCAL_IP:$REMOTE_IP \
-connect $DIALER_SCRIPT
-
-/etc/ppp/ppp-gnokii
--------------------
-#!/bin/sh
-/usr/sbin/chat -v                                       \
-        TIMEOUT         30                              \
-        ABORT           '\nBUSY\r'                      \
-        ABORT           '\nNO ANSWER\r'                 \
-        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
-        ABORT           '\nNO CARRIER\r'                \
-        ''              ATDT501808080                   \
-        CONNECT         ''
-
-/etc/ppp/options
-----------------
--detach
-modem
-crtscts
-defaultroute
-asyncmap 0
-mtu 552
-mru 552
-
-/etc/ppp/pap-secrets
---------------------
-ppp * ppp
-
- -

Number 501808080 is an Internet access number for all Idea -Centertel (Polish GSM operator) abonents. With these files the only thing to do -is to run gnokiid and /usr/sbin/ppp-gnokii. Note that both: -/usr/sbin/ppp-gnokii and /etc/ppp/ppp-gnokii must be -executable files. At the moment you have to run ppp-gnokii as the -superuser unless the simple user has a permission to write to a pty -device. gnokiid must be run as the user belinging to gnokii -group. - -

-[ first console ]
-tfuj:~S /usr/sbin/gnokiid
-Initialising GSM
-Slave pty is /dev/ttyp9, calling /usr/sbin/mgnokiidev to create /dev/gnokii.
-
-[ second console ]
-tfuj:~# /usr/sbin/ppp-gnokii
-Serial connection established.
-Using interface ppp0
-Connect: ppp0 <--> /dev/gnokii
-Warning - secret file /etc/ppp/pap-secrets has world and/or group access
-sent [LCP ConfReq id=0x1     ]
-rcvd [LCP ConfReq id=0xbb     ]
-sent [LCP ConfAck id=0xbb     ]
-rcvd [LCP ConfNak id=0x1 ]
-sent [LCP ConfReq id=0x2    ]
-rcvd [LCP ConfAck id=0x2    ]
-Warning - secret file /etc/ppp/pap-secrets has world and/or group access
-sent [PAP AuthReq id=0x1 user="ppp" password="ppp"]
-rcvd [PAP AuthAck id=0x1 ""]
-Remote message: ^F
-sent [IPCP ConfReq id=0x1  ]
-sent [CCP ConfReq id=0x1   ]
-rcvd [IPCP ConfReq id=0x49  ]
-sent [IPCP ConfAck id=0x49  ]
-rcvd [IPCP ConfNak id=0x1 ]
-sent [IPCP ConfReq id=0x2  ]
-rcvd [IPCP ConfAck id=0x2  ]
-local  IP address 192.168.23.55
-remote IP address 192.168.9.2
-
- -

THIRD EXAMPLE: - -

Use /dev/gnokii as a modem: - -

e.g. ppp session
---------------- /etc/ppp/peers/demon-gnokii ---------------------
-/dev/gnokii 115200
-modem crtscts defaultroute
-connect 'chat -v ABORT BUSY ABORT ERROR ABORT "NO CARRIER" "" AT OK-AT-OK ATD02083389666 CONNECT'
-user XXXX.demon.co.uk
-noauth
-mtu 296
-debug
-----------------------------------------------------------------
---------------- /etc/ppp/pap-secrets ---------------------------
-XXXX.demon.co.uk demon-gnokii
-----------------------------------------------------------------
-
- -

Then "pppd call demon-gnokii" should connect -
('tail -f /var/log/messages' to see what is happening) - -

If a call terminates you should get 'NO CARRIER' and gnokiid should -continue to work, but this is early code and you may find you have to -Ctrl-C and restart gnokiid (especially if the phone says the terminal -connection has been lost) - -

AND ANOTHER EXAMPLE PPP SCRIPT FROM Jon Wikne: - -

- -#!/bin/sh
-#
-# Script to launch PPP over a Nokia 5110 / 6110 mobile phone
-# 20-06-2000 -- Jon Wikne
-#
-### NOTE: "01234567" and "username" below must be replaced
-### with your actual ISP's phone number and your user name.
-#
-### NOTE 2: If you are calling an ISDN number or a digital
-### line you may also need ATS35=0 in the chat sequence.

-# Launch gnokiid....
-echo "Launching gnokiid... "
-/usr/local/sbin/gnokiid &

-# Wait for gnokiid to find the phone.
-sleep 7

-# Now, down to business!
-echo "Calling and starting pppd... "
-pppd /dev/gnokii 115200 debug connect \
-'chat -v ECHO ON ABORT BUSY ABORT ERROR ABORT "NO CARRIER" \
-"" AT OK ATDT01234567 CONNECT ""' \
-noipdefault ipcp-accept-local ipcp-accept-remote \
-user username

-# Some cleaning up to do....
-
-echo -n "Stopping gnokiid... "
-ps ax | awk 'BEGIN { prog="/usr/local/sbin/gnokiid"; ARGC=1 }
-{ if (prog == $5) { print $1 ; exit 0 } }' $1
-kill "$1"
-echo $1 -
- -

Permission problem...
-


- -
-> Now xgnokii want  to connecting.....  and some minutes later it's say:
->  Gnokii serial_open: open: Permission denied
-> Couldn't open FB61 device: Permission denied
-
-you should set your /dev/ttySx to:
-
-crw-rw----    1 root     dialout    4,  65 Jul  5  2000 /dev/ttyS1
-
-and add yourself to the group dialout. or make a new group gnokii 
-and do the same thing for this group. see the gnokii doc about 
-this, especialy if you want to use gnokiid.
-
- -

Xgnokii files missed...
-


- -
-> > I start to configure:
-> > 
-> > elwinx:/usr/src/gnokii# ./configure  --prefix=/usr/local/
-> > 
-> > checking for X... (cached) libraries /usr/X11R6/lib, headers
-> > /usr/X11R6/include
-> > checking for X11/xpm.h... (cached) no
-> > configure: warning: Cannot find include X11/xpm.h
-> > configure: warning: Disabling xgnokii.
-
- -

For Debian GNU/Linux 2.2 potato: - -

-

-> Do:
-> dpkg -S \*xpm.h
-> and show the result. You can't use xgnokii without libxpm.
-
-After I installed the xpm4g-dev_3.4k-5.deb xgnokii found my X
-
-My next Problem was the Program didn't find the gtk.h
-
-I installed this lib's
-libglib1.2-dev
-libgtk1.2-dev_1.2.7-1.deb
-
-and xgnokii are start up
-
- -

For Redhat: - -

-

-On Red Hat 6.2 (or derived?)
-
-sloth:danielm[12]% locate xpm.h
-/usr/X11R6/include/X11/xpm.h
-sloth:danielm[13]% rpm -qf /usr/X11R6/include/X11/xpm.h
-xpm-devel-3.4k-2
-
-On Red Hat 7 (or derived?)
-
-mouth:danielm[4]% locate xpm.h
-/usr/X11R6/include/X11/xpm.h
-mouth:danielm[5]% rpm -qf /usr/X11R6/include/X11/xpm.h
-XFree86-devel-4.0.1-1
-
- -

Infrared problem
-


- -
-> I'm having trouble getting Gnokii to work with my Nokia 6110 using the
-> infrared connection. It works perfectly with the cable. When I run gnokii
-> as non-root I get the following output:
-> 
-> Added new section global
-> Adding key/value port//dev/ttyS3
-> Adding key/value model/6110
-> Adding key/value initlength/default
-> Adding key/value connection/infrared
-> Adding key/value bindir//usr/local/sbin/
-> Entering monitor mode...
-> Initialising GSM interface...
-> Starting IR mode...!
-> Couldn't open FB61 infrared device: Device or resource busy
-> Hmmm... GSM_LinkOK never went true. Quitting.
-> 
-> And if I run it as root it looks like this:
-> 
-> Added new section global
-> Adding key/value port//dev/ttyS3
-> Adding key/value model/6110
-> Adding key/value initlength/default
-> Adding key/value connection/infrared
-> Adding key/value bindir//usr/local/sbin/
-> Entering monitor mode...
-> Initialising GSM interface...
-> Starting IR mode...!
-> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:40:00:52:06:
-> Timeout in IR-mode
-> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:41:00:53:06:
-> Timeout in IR-mode
-> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:42:00:50:06:
-> Timeout in IR-mode
-> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:43:00:51:06:
-> Timeout in IR-mode
-> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:44:00:56:06:
-> Timeout in IR-mode
-> Hmmm... GSM_LinkOK never went true. Quitting.
-> 
-> It makes no difference if IR-reception is activated or not (well maybe the
-> numbers are different, I haven't checked)
-> 
-> I have followed the Alessandro's beta-HOWTO which was posted June 22 2000
-> with the subject "Re: IR setup".
-> 
-> In /var/log/messages I have found the following:
-> 
-> Feb 18 23:34:16 bmw kernel: ircomm_tty: virtual tty driver for IrCOMM (
-> revision:Wed May 26 00:49:11 1999 ) 
-> Feb 18 23:34:16 bmw kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A 
-> Feb 18 23:34:16 bmw kernel: ttyS03 at 0x02e8 (irq = 3) is a 16550A 
-> 
-> I have tried both with and without the irda-module loaded (insmod
-> irda) but without luck.
-> 
-> I'm using a Fujitsu C325 Lifebook (labtop) and my Nokia 6110 is version
-> 4.33. Has anyone experienced problems like these and hopefully has found a
-> solution, or maybe just have some ideas for what I should try next.
-
-"I also had removed the Ethernet PCcard.
-That thing got assigned the _interrupt_ (irq 3) that the serial interface
-for the IR port needs. Without it gnokii works."
-
-Now I've got contact to my Nokia 6110 using the infrared port.
-
- -

Answering data calls problem...
-


- -
-> It seems like it's some sort of PacBell or Verizon thing, because I
-> get a ring when I try to dial a voice call, but when I dial from
-> minicom/gnokiid I get "NO CARRIER" ("Check Operator Services" on the
-> phone), and dialing in from the Palm still gets no ring.
-
-First we should know how operators manage data call services,
-is there any international standard (it would be, to make international data
-calls possible). I described, how it works with my operator (Plusgsm/PL)
-and I'm interesting if it's a worldwide standard for these services?
-Did somebody tried to make a cellular-to-cellular international data transfer ?
-
-In Plusgsm there are three kinds of data calls :
-1. OUTGOING CALLS. Service activation is free with no additional monthly charge.
+
+
+   
+   
+   Configuration
+   
+
+
+
+
+

Main page

+
Configuration
+ +


+ +

How to install it from the source ?
+


+ +

If you get the sources you need to create script +configure. You do it by typing: +

tfuj:~/gnokii-0.3.3pre5$ autoconf
+ +

If you get the sources from the tarball you don't need to do +this - configure is already made for you. For quick install do simply: +

tfuj:~/gnokii-0.3.3pre5$ ./configure
+tfuj:~/gnokii-0.3.3pre5$ make
+tfuj:~/gnokii-0.3.3pre5$ make install
+
+ +

But configure has some options. Except obvious +parameters as --prefix which specifies a path to install GNOKII, you +can specify one of the following: + +

+
--help +
Shows you list of available options
+
+
--enable-debug +
Turns on debugging. It's usefull especially for developers. But if you + find a bug in GNOKII, please compile the sources with debugging enabled and + send this output to the GNOKII mailing list. This is used by gnokii + program.
+
+
--enable-xdebug +
The same as above but used by xgnokii.
+
+
--enable-rlpdebug +
This option turns on debugging specific to the RLP stuff. Note, that it's + very important at the moment as this part of GNOKII is under the hardest + development.
+
+
--without-x +
Don't include X Window system support - xgnokii.
+
+
--enable-security +
Turns on some security functions:.... Use them with caution.
+
+
--enable-win32 +
Include MS Windows support. Yes, it really exists. ;-)
+
+
--with-model=MODEL, --with-port=PORT +
Specify the model of the phone (eg. 6150) and the port it is connected to + (eg. /dev/ttyS1). These values can be overwritten with ones from the config + files. +
+
+ +

The sample usage: +

tfuj:~/gnokii-0.3.3pre5$ ./configure --prefix=/usr2 --enable-debug --without-x \
+--enable-security --with-model=6130 --with-port=/dev/ttyS1
+
+ +

When the configure succeed, it shows options GNOKII +will be compiled with: +

    Host system:        linux-gnulibc1
+    Gnokii version:     0.3.3_pre5
+    Xgnokii version:    20000613
+    Phone model:        6130
+    Serial port:        /dev/ttyS1
+    X (GTK) support:    no
+    Debug:              yes
+    XDebug:             no
+    RLPDebug:           no
+    NLS:                yes
+    Security:           yes
+    Win32:               
+    Prefix:             /usr2
+
+ +

Now, the only thing left to do is just ro run: +

tfuj:~/gnokii-0.3.3pre5$ make
+tfuj:~/gnokii-0.3.3pre5$ make install
+
+ +

Finally, you have GNOKII installed in your system. And now REAL +FUN begins. :-) + +

How to install it from binaries ?
+


+ +

If you downloaded gnokii as a pre-built binary you should install +it in the conventional manner for the package type in question. +For example if you downloaded a .rpm file you can install it by +running the following as root. + +

rpm -i gnokii-0.3.2-i386.rpm + +

If you are using a Debian based system, you can use dpackage +to do the installation (FIXME - is this correct ?) + +

How to make connection with phone ?
+


+ +

There are three ways to make it: + +

    +
  • connecting phone with computer using cable. All phones allow to make it +(even 3210 - connector is inside). If you want to know more +about creating your own cable, read cables faq.
  • +
  • using IrDa port in phone and computer. Notice, that your computer +and phone must have it (only some series of Nokia phones has it - for example, +6110, 6150)
  • +
  • connecting to phone special device called "dongle" (it has IrDa port) +and making IrDa connection between it and phone. Current gnokii cas use +Tekram IRmate 210 - see patches
  • +
+ +

How to configure gnokii ?
+


+ +

First it to use --with-model and --with-port options for +configure script. But I do not recommend this. In my opinion these should be +removed from configure. Second disadvantage is that you can't use it when +you are installing a binary package. + +

So, will use better method :-). +You should copy the gnokiirc +file from the Docs/examples directory to your +home directory and name it gnokiirc or copy it into /etc directory +and name gnokiirc. + +

Using your favorite +editor ensure that the settings are correct for your system, +the sample file has details of the various options available. The most +difficult problem could be discovering model of your phone - go into +our firmware page +and try to use codes written in column +Firmware version code. If your phone will display something, +see model number on the third line, look on the +firmware page +again (for it) and read phone model then. + +

Note that you will need read/write permissions on whatever +serial port you specify in gnokiirc. You can now use gnokii +and xgnokii. + +

Of course, you don't have to make any config, if you will use +these config options. There are default: + +

+

+[global]
+port = /dev/ttyS0
+model = 6110
+connection = serial
+initlength = default
+bindir=/usr/local/sbin
+
+ +

How to configure infrared connection ?
+


+ +

+

    + +
  • Go into configuration of your IrDa port (the most often it's made in +BIOS, sometimes using program provided by computer's producer): + +

    +

      +
    • Enable it
    • +
    • Setup the COM-Port on which it should work. +Here are addresses: +
      ttyS0 (COM1): 3F8, IRQ: 4 +
      ttyS1 (COM2): 2F8, IRQ: 3 +
      ttyS2 (COM3): 3E8, IRQ: 4 +
      ttyS3 (COM4): 2E8, IRQ: 3 +
        +
    • +
    +
  • + +
  • Configure gnokii (see previous question) +setting type of connection to +infrared.
  • + +
  • If you are using linux, put linux-irda off (you can't use gnokii over infrared and +linux-irda at the same time - it means too, if you want use +linux-irda you must close all gnokii-applications what +use the infrared-port in moment). +
  • +
+ +

How to configure gnokii driver for data connection ?
+


+ +

After installing and configuring gnokii you should make another group +and allow mgnokiidev (it our virtual modem driver) +to use it. For example (if you have installed gnokii +into /usr/local): + +

+groupadd gnokii
+chown root:gnokii /usr/local/sbin/mgnokiidev
+chmod 4750 /usr/local/sbin/mgnokiidev
+ +

And now connect (FIRST EXAMPLE): + +

Then connect your phone to your PC and then run gnokiid: + +

[ first console ]
+tfuj:/home/pawel/gnokii# ./gnokiid/gnokiid 
+
+ +

If successful, you should see a message saying that mgnokiidev has been +run to create /dev/gnokii. If you're using a 5110/6110 series phone +you should hear a beep and see an "accessory connected" message on +the phone. If you're using a 3810 series phone you won't see anything +on the phones LCD. + +

And now: + +

+

+[ second console ]
+[- running minicom -]
+
+[ third console ]
+[- when connection is estabilished -]
+tfuj:/etc/ppp# /usr/sbin/pppd -d -detach /dev/gnokii 115200
+Using interface ppp0
+Connect: ppp0 <--> /dev/gnokii
+sent [LCP ConfReq id=0x1     ]
+rcvd [LCP ConfReq id=0x8e     < 11 04 05 f4> < 13 0d 01 70 69 65 6b 6e 61 2d 61 73 34>]
+sent [LCP ConfRej id=0x8e < 11 04 05 f4> < 13 0d 01 70 69 65 6b 6e 61 2d 61 73 34>]
+rcvd [LCP ConfNak id=0x1 ]
+sent [LCP ConfReq id=0x2    ]
+rcvd [LCP ConfReq id=0x8f    ]
+sent [LCP ConfAck id=0x8f    ]
+rcvd [LCP ConfAck id=0x2    ]
+sent [IPCP ConfReq id=0x1  ]
+sent [CCP ConfReq id=0x1   ]
+rcvd [IPCP ConfReq id=0x16  ]
+sent [IPCP ConfAck id=0x16  ]
+rcvd [IPCP ConfNak id=0x1 ]
+sent [IPCP ConfReq id=0x2  ]
+rcvd [LCP ProtRej id=0x90 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
+rcvd [IPCP ConfAck id=0x2  ]
+local  IP address 157.25.94.141
+remote IP address 157.25.75.129
+Terminating on signal 2.
+sent [LCP TermReq id=0x3 "User request"]
+rcvd [LCP TermAck id=0x3]
+Connection terminated.
+Connect time 5.6 minutes.
+Sent 30568 bytes, received 197133 bytes.
+tfuj:/etc/ppp# 
+
+ +

SECOND EXAMPLE (I used such scripts): + +

/home/pawel/.gnokiirc
+---------------------
+global]
+port = /dev/ttyS1
+model = 6110
+connection = serial
+initlength = 1
+
+/usr/sbin/ppp-gnokii
+--------------------
+#!/bin/sh
+LOCAL_IP=0.0.0.0       
+REMOTE_IP=0.0.0.0     
+NETMASK=255.255.255.0   
+DIALER_SCRIPT=/etc/ppp/ppp-gnokii
+exec /usr/sbin/pppd debug /dev/gnokii 115200 \
+$LOCAL_IP:$REMOTE_IP \
+connect $DIALER_SCRIPT
+
+/etc/ppp/ppp-gnokii
+-------------------
+#!/bin/sh
+/usr/sbin/chat -v                                       \
+        TIMEOUT         30                              \
+        ABORT           '\nBUSY\r'                      \
+        ABORT           '\nNO ANSWER\r'                 \
+        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
+        ABORT           '\nNO CARRIER\r'                \
+        ''              ATDT501808080                   \
+        CONNECT         ''
+
+/etc/ppp/options
+----------------
+-detach
+modem
+crtscts
+defaultroute
+asyncmap 0
+mtu 552
+mru 552
+
+/etc/ppp/pap-secrets
+--------------------
+ppp * ppp
+
+ +

Number 501808080 is an Internet access number for all Idea +Centertel (Polish GSM operator) abonents. With these files the only thing to do +is to run gnokiid and /usr/sbin/ppp-gnokii. Note that both: +/usr/sbin/ppp-gnokii and /etc/ppp/ppp-gnokii must be +executable files. At the moment you have to run ppp-gnokii as the +superuser unless the simple user has a permission to write to a pty +device. gnokiid must be run as the user belinging to gnokii +group. + +

+[ first console ]
+tfuj:~S /usr/sbin/gnokiid
+Initialising GSM
+Slave pty is /dev/ttyp9, calling /usr/sbin/mgnokiidev to create /dev/gnokii.
+
+[ second console ]
+tfuj:~# /usr/sbin/ppp-gnokii
+Serial connection established.
+Using interface ppp0
+Connect: ppp0 <--> /dev/gnokii
+Warning - secret file /etc/ppp/pap-secrets has world and/or group access
+sent [LCP ConfReq id=0x1     ]
+rcvd [LCP ConfReq id=0xbb     ]
+sent [LCP ConfAck id=0xbb     ]
+rcvd [LCP ConfNak id=0x1 ]
+sent [LCP ConfReq id=0x2    ]
+rcvd [LCP ConfAck id=0x2    ]
+Warning - secret file /etc/ppp/pap-secrets has world and/or group access
+sent [PAP AuthReq id=0x1 user="ppp" password="ppp"]
+rcvd [PAP AuthAck id=0x1 ""]
+Remote message: ^F
+sent [IPCP ConfReq id=0x1  ]
+sent [CCP ConfReq id=0x1   ]
+rcvd [IPCP ConfReq id=0x49  ]
+sent [IPCP ConfAck id=0x49  ]
+rcvd [IPCP ConfNak id=0x1 ]
+sent [IPCP ConfReq id=0x2  ]
+rcvd [IPCP ConfAck id=0x2  ]
+local  IP address 192.168.23.55
+remote IP address 192.168.9.2
+
+ +

THIRD EXAMPLE: + +

Use /dev/gnokii as a modem: + +

e.g. ppp session
+--------------- /etc/ppp/peers/demon-gnokii ---------------------
+/dev/gnokii 115200
+modem crtscts defaultroute
+connect 'chat -v ABORT BUSY ABORT ERROR ABORT "NO CARRIER" "" AT OK-AT-OK ATD02083389666 CONNECT'
+user XXXX.demon.co.uk
+noauth
+mtu 296
+debug
+----------------------------------------------------------------
+--------------- /etc/ppp/pap-secrets ---------------------------
+XXXX.demon.co.uk demon-gnokii
+----------------------------------------------------------------
+
+ +

Then "pppd call demon-gnokii" should connect +
('tail -f /var/log/messages' to see what is happening) + +

If a call terminates you should get 'NO CARRIER' and gnokiid should +continue to work, but this is early code and you may find you have to +Ctrl-C and restart gnokiid (especially if the phone says the terminal +connection has been lost) + +

AND ANOTHER EXAMPLE PPP SCRIPT FROM Jon Wikne: + +

+ +#!/bin/sh
+#
+# Script to launch PPP over a Nokia 5110 / 6110 mobile phone
+# 20-06-2000 -- Jon Wikne
+#
+### NOTE: "01234567" and "username" below must be replaced
+### with your actual ISP's phone number and your user name.
+#
+### NOTE 2: If you are calling an ISDN number or a digital
+### line you may also need ATS35=0 in the chat sequence.

+# Launch gnokiid....
+echo "Launching gnokiid... "
+/usr/local/sbin/gnokiid &

+# Wait for gnokiid to find the phone.
+sleep 7

+# Now, down to business!
+echo "Calling and starting pppd... "
+pppd /dev/gnokii 115200 debug connect \
+'chat -v ECHO ON ABORT BUSY ABORT ERROR ABORT "NO CARRIER" \
+"" AT OK ATDT01234567 CONNECT ""' \
+noipdefault ipcp-accept-local ipcp-accept-remote \
+user username

+# Some cleaning up to do....
+
+echo -n "Stopping gnokiid... "
+ps ax | awk 'BEGIN { prog="/usr/local/sbin/gnokiid"; ARGC=1 }
+{ if (prog == $5) { print $1 ; exit 0 } }' $1
+kill "$1"
+echo $1 +
+ +

Permission problem...
+


+ +
+> Now xgnokii want  to connecting.....  and some minutes later it's say:
+>  Gnokii serial_open: open: Permission denied
+> Couldn't open FB61 device: Permission denied
+
+you should set your /dev/ttySx to:
+
+crw-rw----    1 root     dialout    4,  65 Jul  5  2000 /dev/ttyS1
+
+and add yourself to the group dialout. or make a new group gnokii 
+and do the same thing for this group. see the gnokii doc about 
+this, especialy if you want to use gnokiid.
+
+ +

Xgnokii files missed...
+


+ +
+> > I start to configure:
+> > 
+> > elwinx:/usr/src/gnokii# ./configure  --prefix=/usr/local/
+> > 
+> > checking for X... (cached) libraries /usr/X11R6/lib, headers
+> > /usr/X11R6/include
+> > checking for X11/xpm.h... (cached) no
+> > configure: warning: Cannot find include X11/xpm.h
+> > configure: warning: Disabling xgnokii.
+
+ +

For Debian GNU/Linux 2.2 potato: + +

+

+> Do:
+> dpkg -S \*xpm.h
+> and show the result. You can't use xgnokii without libxpm.
+
+After I installed the xpm4g-dev_3.4k-5.deb xgnokii found my X
+
+My next Problem was the Program didn't find the gtk.h
+
+I installed this lib's
+libglib1.2-dev
+libgtk1.2-dev_1.2.7-1.deb
+
+and xgnokii are start up
+
+ +

For Redhat: + +

+

+On Red Hat 6.2 (or derived?)
+
+sloth:danielm[12]% locate xpm.h
+/usr/X11R6/include/X11/xpm.h
+sloth:danielm[13]% rpm -qf /usr/X11R6/include/X11/xpm.h
+xpm-devel-3.4k-2
+
+On Red Hat 7 (or derived?)
+
+mouth:danielm[4]% locate xpm.h
+/usr/X11R6/include/X11/xpm.h
+mouth:danielm[5]% rpm -qf /usr/X11R6/include/X11/xpm.h
+XFree86-devel-4.0.1-1
+
+ +

Infrared problem
+


+ +
+> I'm having trouble getting Gnokii to work with my Nokia 6110 using the
+> infrared connection. It works perfectly with the cable. When I run gnokii
+> as non-root I get the following output:
+> 
+> Added new section global
+> Adding key/value port//dev/ttyS3
+> Adding key/value model/6110
+> Adding key/value initlength/default
+> Adding key/value connection/infrared
+> Adding key/value bindir//usr/local/sbin/
+> Entering monitor mode...
+> Initialising GSM interface...
+> Starting IR mode...!
+> Couldn't open FB61 infrared device: Device or resource busy
+> Hmmm... GSM_LinkOK never went true. Quitting.
+> 
+> And if I run it as root it looks like this:
+> 
+> Added new section global
+> Adding key/value port//dev/ttyS3
+> Adding key/value model/6110
+> Adding key/value initlength/default
+> Adding key/value connection/infrared
+> Adding key/value bindir//usr/local/sbin/
+> Entering monitor mode...
+> Initialising GSM interface...
+> Starting IR mode...!
+> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:40:00:52:06:
+> Timeout in IR-mode
+> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:41:00:53:06:
+> Timeout in IR-mode
+> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:42:00:50:06:
+> Timeout in IR-mode
+> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:43:00:51:06:
+> Timeout in IR-mode
+> PC: 1c:00:0c:02:00:09:00:01:00:0d:00:00:02:01:44:00:56:06:
+> Timeout in IR-mode
+> Hmmm... GSM_LinkOK never went true. Quitting.
+> 
+> It makes no difference if IR-reception is activated or not (well maybe the
+> numbers are different, I haven't checked)
+> 
+> I have followed the Alessandro's beta-HOWTO which was posted June 22 2000
+> with the subject "Re: IR setup".
+> 
+> In /var/log/messages I have found the following:
+> 
+> Feb 18 23:34:16 bmw kernel: ircomm_tty: virtual tty driver for IrCOMM (
+> revision:Wed May 26 00:49:11 1999 ) 
+> Feb 18 23:34:16 bmw kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A 
+> Feb 18 23:34:16 bmw kernel: ttyS03 at 0x02e8 (irq = 3) is a 16550A 
+> 
+> I have tried both with and without the irda-module loaded (insmod
+> irda) but without luck.
+> 
+> I'm using a Fujitsu C325 Lifebook (labtop) and my Nokia 6110 is version
+> 4.33. Has anyone experienced problems like these and hopefully has found a
+> solution, or maybe just have some ideas for what I should try next.
+
+"I also had removed the Ethernet PCcard.
+That thing got assigned the _interrupt_ (irq 3) that the serial interface
+for the IR port needs. Without it gnokii works."
+
+Now I've got contact to my Nokia 6110 using the infrared port.
+
+ +

Answering data calls problem...
+


+ +
+> It seems like it's some sort of PacBell or Verizon thing, because I
+> get a ring when I try to dial a voice call, but when I dial from
+> minicom/gnokiid I get "NO CARRIER" ("Check Operator Services" on the
+> phone), and dialing in from the Palm still gets no ring.
+
+First we should know how operators manage data call services,
+is there any international standard (it would be, to make international data
+calls possible). I described, how it works with my operator (Plusgsm/PL)
+and I'm interesting if it's a worldwide standard for these services?
+Did somebody tried to make a cellular-to-cellular international data transfer ?
+
+In Plusgsm there are three kinds of data calls :
+1. OUTGOING CALLS. Service activation is free with no additional monthly charge.
    For default this service is disabled, you have to call operator's helpdesk
-   to enable. With this service is possible to call:
-      a) any internet gate
-      b) WAP gate
-      c) any "private" computer with own transfer protocol
-      d) ?? send a fax ?? (with special fax software for cellular modem
-         included in NCDS)
-   1 minute charge is similar to voice calls. It's not allowed by the operator
-   to answer incoming data call.
-2. INCOMING CALLS. You have to pay for service activation (5$) and additional
-   monthly charge (10$). Then you will get a new SIM card with 2 phone numbers:
-   one for voice/sms and second one - for incoming data calls only.
-   1 min charge depends on the network from the call was initiated,
-   generally 1...2 times x voice call.
-3. FAX CALLS. Another payable service, not covered by above mentioned.
-   There is a special trick for incoming fax: it's stored in "FAX mailbox",
-   you can call this mailbox with standard fax machine
-   (or cellular modem connected to PC) to receive it.
-
-I guess your operator have similar restrictions for incoming data calls and
-here is your problem. Incoming call is recognized as a data type and rejected.
-It would be nice to know if it's rejected on the operator's software level or
-by the phone software (acc. to informations stored in the SIM).
-In the second case it's easier to omit these restrictions. But be careful !
-You will be treated by the law in the same way as if you try to hack
-Bill Gates credit card number ;-)  .
-
- -

Xgnokii works, gnokii not...
-


- -
-> 1. Why is it that xgnokii communicates perfectly with my 3210, while the
-> only thing that the command line gnokii does is:
-> GSM/FBUS init failed! (Unknown model ?). Quitting.
-> [cvd@sirius gnokii]$ ./gnokii --monitor
-> Opened configuration file /home/cvd/.gnokiirc
-> Added new section global
-> Adding key/value port//dev/ttyS1
-> Adding key/value model/3210
-> Adding key/value initlength/default
-> Adding key/value connection/serial
-
-Look into latest gnokiirc from /docs/default. "serial" setting for connection
-is not used from long time. Change to other actual parameter ("fbus" ?)...
-
- - - - + to enable. With this service is possible to call: + a) any internet gate + b) WAP gate + c) any "private" computer with own transfer protocol + d) ?? send a fax ?? (with special fax software for cellular modem + included in NCDS) + 1 minute charge is similar to voice calls. It's not allowed by the operator + to answer incoming data call. +2. INCOMING CALLS. You have to pay for service activation (5$) and additional + monthly charge (10$). Then you will get a new SIM card with 2 phone numbers: + one for voice/sms and second one - for incoming data calls only. + 1 min charge depends on the network from the call was initiated, + generally 1...2 times x voice call. +3. FAX CALLS. Another payable service, not covered by above mentioned. + There is a special trick for incoming fax: it's stored in "FAX mailbox", + you can call this mailbox with standard fax machine + (or cellular modem connected to PC) to receive it. + +I guess your operator have similar restrictions for incoming data calls and +here is your problem. Incoming call is recognized as a data type and rejected. +It would be nice to know if it's rejected on the operator's software level or +by the phone software (acc. to informations stored in the SIM). +In the second case it's easier to omit these restrictions. But be careful ! +You will be treated by the law in the same way as if you try to hack +Bill Gates credit card number ;-) . +
+ +

Xgnokii works, gnokii not...
+


+ +
+> 1. Why is it that xgnokii communicates perfectly with my 3210, while the
+> only thing that the command line gnokii does is:
+> GSM/FBUS init failed! (Unknown model ?). Quitting.
+> [cvd@sirius gnokii]$ ./gnokii --monitor
+> Opened configuration file /home/cvd/.gnokiirc
+> Added new section global
+> Adding key/value port//dev/ttyS1
+> Adding key/value model/3210
+> Adding key/value initlength/default
+> Adding key/value connection/serial
+
+Look into latest gnokiirc from /docs/default. "serial" setting for connection
+is not used from long time. Change to other actual parameter ("fbus" ?)...
+
+ + + + diff --git a/Docs/en_US/gnokii/faq.htm b/Docs/en_US/gnokii/faq.htm index 35850bc..b839a2d 100644 --- a/Docs/en_US/gnokii/faq.htm +++ b/Docs/en_US/gnokii/faq.htm @@ -1,356 +1,356 @@ - - - - - GNOKII FAQ - - - - - -

Main page

-
GNOKII FAQ
- -


- -

What is gnokii ?
-


- -

Generally, what is gnokii (G from GNU, NOKII from Nokia) ? - -

It is a name of project. The aim of it is to develop tools and drivers -for Nokia mobile phones. Of course, I think in this moment about really -different tools - for example, modem drivers, console tools, etc. -All created here software is released under the GNU -General Public License. Please see COPYING -for more details on license/copying issues, -the lack of warranty and where to send a postcard if you like gnokii :). -Anyway, our software works on many software (Linux, Free BSD, etc.) -and hardware (Intel, etc.) platforms... - -

What software applications are created in gnokii project ?
-


- -
    - -
  • -The first application, gnokii, is a command line utility that was -originally provided to assist developers and interested users in -working with the low level API functions that were being developed. - -

    From these rather humble beginnings, it has evolved into a the main -command line tool of the suite. Many people now use it for -reading/writing phone book entries, sending and receiving SMS messages -etc. Ultimately it is intended that it will become a utility that -communicates with gnokiid to provide a command line interface to -the functionality provided by the gnokiid daemon. -
      -

  • - -
  • -The second application provided is xgnokii which as the name suggests -is a X-windows based application that provides a graphical interface -to your phone. Amongst other things, xgnokii allows you to read and -write phone book entries, read, write and send SMS messages, monitor -battery and received signal strength. - -

    At present xgnokii works directly with the phone, however in the -future it will more likely use the "side" interface of gnokiid. - -

    The main author of it is Jan Derfinak -
      -

  • - -
  • -The third part of the suite is gnokiid. gnokiid provides a -virtual modem interface, /dev/gnokii that looks like a regular -Hayes-AT compatible modem with the ETSI defined extensions for -GSM phones. What this means in practical terms is that you can -treat the /dev/gnokii device like an ordinary modem and use it -to make data calls from pppd or a terminal application like -minicom. - -

    -gnokiid is still under development, it's ultimate aim being to -act as a "master" daemon that interfaces with your phone on one -side and gnokii or xgnokii on the other. This "side" code is still -under discussion, particularly with respect to the most appropriate -choice of communication method (IPC, TCP/IP etc.) -
      -

  • - -
  • -The last application provided with the suite is mgnokiidev which is -used by gnokiid to create on demand a symbolic link between -/dev/gnokii and the pseudo tty used by gnokiid for the virtual -modem interface. It's operation is transparent under normal -usage as gnokiid takes care of calling it when required. -
  • - -
- -

This project also inspired some people to write other software for Nokia. -For example: - -

-

    -
  • -There is a perlmodule available for gnokii. It gives access to all -the routines that are defined in gsm-common.h from a perl-program. It -is intended for application developers who want to use their favorite -language in interfacing the phone data with databases, ldap-directories -and (in the future) different calendar applications. It is written by -Konstantin Agouros -and support starts with revision 0.2.6-pre3 of gnokii. - -

    The homepage of this module is -http://www.agouros.de/gnokii -
      -

  • - -
  • -http://anders.fix.no/software/gnokline-1.0.tgz -and http://alamin.sourceforge.net - -software, which interprets received by connected Nokia phone SMSes and makes some things -
  • - -
-

Which phones are supported ?
-


- -

You can also ask, what phones are supported ? All, you want :-) Really ! - -

At first, we were making in gnokii project modules -for Nokia 3810/8110 and 51x0/61x0 phones. Later users started to -write parts for other Nokia phones. And we hope to extend it to another -models: 7110, etc. Remember: it's even possible to write modules -for other than Nokia phones -too (just imagine: support for the most popular phones in one software !)... - -

Here is more detailed table with supported phones info... - -

You can also look into -registered gnokii users database -too see used by them phones... - -

What is compatibility with hardware ?
-


- -

Generally, gnokii can work with all computers, which have serial port -(over cable). - -

If you want to use infrared, sometimes are small problems, because some -IrDa connectors are not compatible with some standards... - -

How can I get support for it ?
-


- -

We our only people and we sometimes make mistakes. But don't worry: -support for gnokii is really great. At first, you can tell your problem -to all gnokii users (in May 2000 on the list there were subscribed about -1000 people). - -

The most often it's enough. If not, contact with authors: - -

When problem is connected with module for concrete phone, write to people -listed in answer for question Which phones are supported ?. -For other parts: Jan Derfinak -is responsible for xgnokii. - -

How to contact with gnokii users ?
-


- -

Thanks to the efforts of -Martin Hamilton we have a Majordomo based mailing -list gnokii@net.lut.ac.uk. - -

You can subscribe by sending email to -gnokii-request@net.lut.ac.uk with the word subscribe in the body of the text. - -

-Note that the list is not a forum for discussion on how to obtain copies of -Nokia's proprietary software. -It is the primary discussion forum for the project. - -

Archive of the list - -

Does Nokia sponsors/supports this work ?
-


- -

In the early stages of the project there were indications that -Nokia would provide some support for the project. Regrettably, these -negotiations stalled over the issue of binary versus open source -releases and the project has proceeded without official or unofficial -assistance. - -

How can I help with creating it ?
-


- -

There are some things, you can do you gnokii: - -

-

    -
  • Tell us that you're interested, or that you would use the resulting -software or that you would be happy to test it out. - -

    The best method to make it is to adding yourself to the user database -at http://gnokii.org/users. -
      -

  • - -
  • -Give your input in discussions about the design and development of the suite -now that we are at that stage. In particular the best model of driver -interface will need to be discussed broadly to get the best result. -We've only had limited driver writing experience so if you've more, let us know! -
      -
  • - -
  • -Help examining the protocol and its differences between phone models. -
      -
  • - -
  • -Port the software to a new platform. Please tell us before you do so to ensure -that the port will integrate nicely into the source code tree. -
      -
  • - -
  • -Help us in writing our software or preparing help into it. -
  • -
- -

Where to get latest versions ?
-


- -

The source of gnokii aplications is in the CSV server. - -

We want to thank to Andrew Tridgell, Samba team for it... -and Czech Linux Users Group for hosting the original -CVS repository at cvs.linux.cz. - -

The server's address is pserver.samba.org. If you -are already familiar with CVS, set the CVSROOT to - -

:pserver:cvs@pserver.samba.org:/cvsroot - -

and use the password cvs for checking out the repository with the name -gnokii. - -

If you are not familiar with cvs, don't worry. It's very simple. -First, you need some of older gnokii releases (sources) - see for example -links in the end of this question. Unpack them to some directory. Then: - -

-

    - -
  • -For Unix/Linux -just install the cvs package for your distribution and follow these steps: - -

    -

      -
    • set your environmental variable CVSROOT. If you have bash (Bourne -Again Shell): - -

      export CVSROOT=:pserver:cvs@pserver.samba.org:/cvsroot - -

      If you have different shell, use different command (e.g. setenv). - -

        -

    • - -
    • Log in to the CVS server as anonymous reader by typing - -

      cvs login - -

      Use cvs as your password. - -

        -

    • - -
    • If you are logged in you are ready to checkout the latest sources: - -

      cvs co gnokii -

      -

    • -
    - -
  • - -
  • -for win32 and (WinCVS): - -

    -

      - -
    • -Go to the Admin/Preferences window -
    • - -
    • -In the "general" tab set CVSROOT to the cvs@pserver.samba.org:/cvsroot -and local mounted directory to the "passwd" file on the server -

      -

    • - -
    • Go to the Admin/Login window
    • - -
    • Enter cvs as the password

    • - -
    • Go to the Admin/Create/Checkout module
    • - -
    • Enter gnokii as module name and directory where have gnokii source -(WinCVS will - create a directory called gnokii under the one you specify)
    • -
    - -

    -

  • -
- -

If you prefer, there is a WWW interface to the CVS server at -http://samba.org/cgi-bin/cvsweb/gnokii/. - -

Now you are on your own - you have the current sources on your disk -in the directory gnokii. If you are going to make substantial changes -and feel that they should be included into gnokii please mention it -on the list first to avoid duplicated effort. - -

If you would like to receive email when updates are made to the CVS -repository, just send email to -Hugh Blemings email to that effect -and you'll be added to the recipients list. - -

Another way to get almost latest (x)gnokii tools is to download it from -pages of authors: - -

-

- -

Remember: it's still work in progress. It means, that we very often change it, -add new functions and correct our bugs (sometimes once a day :-))... So, -it's good to check it often... - - - - + + + + + GNOKII FAQ + + + + + +

Main page

+
GNOKII FAQ
+ +


+ +

What is gnokii ?
+


+ +

Generally, what is gnokii (G from GNU, NOKII from Nokia) ? + +

It is a name of project. The aim of it is to develop tools and drivers +for Nokia mobile phones. Of course, I think in this moment about really +different tools - for example, modem drivers, console tools, etc. +All created here software is released under the GNU +General Public License. Please see COPYING +for more details on license/copying issues, +the lack of warranty and where to send a postcard if you like gnokii :). +Anyway, our software works on many software (Linux, Free BSD, etc.) +and hardware (Intel, etc.) platforms... + +

What software applications are created in gnokii project ?
+


+ +
    + +
  • +The first application, gnokii, is a command line utility that was +originally provided to assist developers and interested users in +working with the low level API functions that were being developed. + +

    From these rather humble beginnings, it has evolved into a the main +command line tool of the suite. Many people now use it for +reading/writing phone book entries, sending and receiving SMS messages +etc. Ultimately it is intended that it will become a utility that +communicates with gnokiid to provide a command line interface to +the functionality provided by the gnokiid daemon. +
      +

  • + +
  • +The second application provided is xgnokii which as the name suggests +is a X-windows based application that provides a graphical interface +to your phone. Amongst other things, xgnokii allows you to read and +write phone book entries, read, write and send SMS messages, monitor +battery and received signal strength. + +

    At present xgnokii works directly with the phone, however in the +future it will more likely use the "side" interface of gnokiid. + +

    The main author of it is Jan Derfinak +
      +

  • + +
  • +The third part of the suite is gnokiid. gnokiid provides a +virtual modem interface, /dev/gnokii that looks like a regular +Hayes-AT compatible modem with the ETSI defined extensions for +GSM phones. What this means in practical terms is that you can +treat the /dev/gnokii device like an ordinary modem and use it +to make data calls from pppd or a terminal application like +minicom. + +

    +gnokiid is still under development, it's ultimate aim being to +act as a "master" daemon that interfaces with your phone on one +side and gnokii or xgnokii on the other. This "side" code is still +under discussion, particularly with respect to the most appropriate +choice of communication method (IPC, TCP/IP etc.) +
      +

  • + +
  • +The last application provided with the suite is mgnokiidev which is +used by gnokiid to create on demand a symbolic link between +/dev/gnokii and the pseudo tty used by gnokiid for the virtual +modem interface. It's operation is transparent under normal +usage as gnokiid takes care of calling it when required. +
  • + +
+ +

This project also inspired some people to write other software for Nokia. +For example: + +

+

    +
  • +There is a perlmodule available for gnokii. It gives access to all +the routines that are defined in gsm-common.h from a perl-program. It +is intended for application developers who want to use their favorite +language in interfacing the phone data with databases, ldap-directories +and (in the future) different calendar applications. It is written by +Konstantin Agouros +and support starts with revision 0.2.6-pre3 of gnokii. + +

    The homepage of this module is +http://www.agouros.de/gnokii +
      +

  • + +
  • +http://anders.fix.no/software/gnokline-1.0.tgz +and http://alamin.sourceforge.net - +software, which interprets received by connected Nokia phone SMSes and makes some things +
  • + +
+

Which phones are supported ?
+


+ +

You can also ask, what phones are supported ? All, you want :-) Really ! + +

At first, we were making in gnokii project modules +for Nokia 3810/8110 and 51x0/61x0 phones. Later users started to +write parts for other Nokia phones. And we hope to extend it to another +models: 7110, etc. Remember: it's even possible to write modules +for other than Nokia phones +too (just imagine: support for the most popular phones in one software !)... + +

Here is more detailed table with supported phones info... + +

You can also look into +registered gnokii users database +too see used by them phones... + +

What is compatibility with hardware ?
+


+ +

Generally, gnokii can work with all computers, which have serial port +(over cable). + +

If you want to use infrared, sometimes are small problems, because some +IrDa connectors are not compatible with some standards... + +

How can I get support for it ?
+


+ +

We our only people and we sometimes make mistakes. But don't worry: +support for gnokii is really great. At first, you can tell your problem +to all gnokii users (in May 2000 on the list there were subscribed about +1000 people). + +

The most often it's enough. If not, contact with authors: + +

When problem is connected with module for concrete phone, write to people +listed in answer for question Which phones are supported ?. +For other parts: Jan Derfinak +is responsible for xgnokii. + +

How to contact with gnokii users ?
+


+ +

Thanks to the efforts of +Martin Hamilton we have a Majordomo based mailing +list gnokii@net.lut.ac.uk. + +

You can subscribe by sending email to +gnokii-request@net.lut.ac.uk with the word subscribe in the body of the text. + +

+Note that the list is not a forum for discussion on how to obtain copies of +Nokia's proprietary software. +It is the primary discussion forum for the project. + +

Archive of the list + +

Does Nokia sponsors/supports this work ?
+


+ +

In the early stages of the project there were indications that +Nokia would provide some support for the project. Regrettably, these +negotiations stalled over the issue of binary versus open source +releases and the project has proceeded without official or unofficial +assistance. + +

How can I help with creating it ?
+


+ +

There are some things, you can do you gnokii: + +

+

    +
  • Tell us that you're interested, or that you would use the resulting +software or that you would be happy to test it out. + +

    The best method to make it is to adding yourself to the user database +at http://gnokii.org/users. +
      +

  • + +
  • +Give your input in discussions about the design and development of the suite +now that we are at that stage. In particular the best model of driver +interface will need to be discussed broadly to get the best result. +We've only had limited driver writing experience so if you've more, let us know! +
      +
  • + +
  • +Help examining the protocol and its differences between phone models. +
      +
  • + +
  • +Port the software to a new platform. Please tell us before you do so to ensure +that the port will integrate nicely into the source code tree. +
      +
  • + +
  • +Help us in writing our software or preparing help into it. +
  • +
+ +

Where to get latest versions ?
+


+ +

The source of gnokii aplications is in the CSV server. + +

We want to thank to Andrew Tridgell, Samba team for it... +and Czech Linux Users Group for hosting the original +CVS repository at cvs.linux.cz. + +

The server's address is pserver.samba.org. If you +are already familiar with CVS, set the CVSROOT to + +

:pserver:cvs@pserver.samba.org:/cvsroot + +

and use the password cvs for checking out the repository with the name +gnokii. + +

If you are not familiar with cvs, don't worry. It's very simple. +First, you need some of older gnokii releases (sources) - see for example +links in the end of this question. Unpack them to some directory. Then: + +

+

    + +
  • +For Unix/Linux +just install the cvs package for your distribution and follow these steps: + +

    +

      +
    • set your environmental variable CVSROOT. If you have bash (Bourne +Again Shell): + +

      export CVSROOT=:pserver:cvs@pserver.samba.org:/cvsroot + +

      If you have different shell, use different command (e.g. setenv). + +

        +

    • + +
    • Log in to the CVS server as anonymous reader by typing + +

      cvs login + +

      Use cvs as your password. + +

        +

    • + +
    • If you are logged in you are ready to checkout the latest sources: + +

      cvs co gnokii +

      +

    • +
    + +
  • + +
  • +for win32 and (WinCVS): + +

    +

      + +
    • +Go to the Admin/Preferences window +
    • + +
    • +In the "general" tab set CVSROOT to the cvs@pserver.samba.org:/cvsroot +and local mounted directory to the "passwd" file on the server +

      +

    • + +
    • Go to the Admin/Login window
    • + +
    • Enter cvs as the password

    • + +
    • Go to the Admin/Create/Checkout module
    • + +
    • Enter gnokii as module name and directory where have gnokii source +(WinCVS will + create a directory called gnokii under the one you specify)
    • +
    + +

    +

  • +
+ +

If you prefer, there is a WWW interface to the CVS server at +http://samba.org/cgi-bin/cvsweb/gnokii/. + +

Now you are on your own - you have the current sources on your disk +in the directory gnokii. If you are going to make substantial changes +and feel that they should be included into gnokii please mention it +on the list first to avoid duplicated effort. + +

If you would like to receive email when updates are made to the CVS +repository, just send email to +Hugh Blemings email to that effect +and you'll be added to the recipients list. + +

Another way to get almost latest (x)gnokii tools is to download it from +pages of authors: + +

+

+ +

Remember: it's still work in progress. It means, that we very often change it, +add new functions and correct our bugs (sometimes once a day :-))... So, +it's good to check it often... + + + + diff --git a/Docs/en_US/gnokii/gnokii-6210-7110-IrDA b/Docs/en_US/gnokii/gnokii-6210-7110-IrDA index 65e879d..9da5310 100644 --- a/Docs/en_US/gnokii/gnokii-6210-7110-IrDA +++ b/Docs/en_US/gnokii/gnokii-6210-7110-IrDA @@ -86,11 +86,11 @@ alias char-major-161 ircomm-tty Simon Huggins ------------------------------------------------------------------------------ -big performance boost !! -I kompile my kernel (linux 2.4.7) with: -CONFIG_IRDA_OPTIONS=y -CONFIG_IRDA_CACHE_LAST_LSAP=y -CONFIG_IRDA_FAST_RR=y -this reduce reading phonebook from 150 to 20 seconds !!! +big performance boost !! +I kompile my kernel (linux 2.4.7) with: +CONFIG_IRDA_OPTIONS=y +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +this reduce reading phonebook from 150 to 20 seconds !!! -Ralf Thelen [ralf@mythelen.de] +Ralf Thelen [ralf@mythelen.de] diff --git a/Docs/en_US/gnokii/gnokii.htm b/Docs/en_US/gnokii/gnokii.htm index 2e00fd1..1dd173f 100644 --- a/Docs/en_US/gnokii/gnokii.htm +++ b/Docs/en_US/gnokii/gnokii.htm @@ -1,1571 +1,1571 @@ - - - - - Command line gnokii FAQ - - - - - -

Main page

-
Command line gnokii FAQ
- -


- -

What is command line gnokii ?
-


- -

It was first our testing tool. Now it can be used for making almost all things -possible with gnokii package (and this is the only available tool for win32). - -

Some general commands...
-


- -
-
gnokii --help -
Displays GNOKII list of parameters: -
c:\> gnokii --help
-   usage: gnokii [--help|--monitor|--version]
-          gnokii --getmemory memory_type start [end] [-d]
-          gnokii --writephonebook [-i]
-          gnokii --getspeeddial number
-          gnokii --setspeeddial number memory_type location
-          gnokii --getsms memory_type start [end] [-f file]
-          gnokii --deletesms memory_type start [end]
-          gnokii --sendsms destination [--smsc message_center_number |
-                 --smscno message_center_index] [--long n] [-s] [-C n]
-                 [-8] [-v n] [-d]
-          ........
-
-
- -
-
gnokii --version -
Displays GNOKII version and copyright information: -
c:\> gnokii --version      
-GNOKII Version 0.3.3-pre8-gold
-Copyright (C) Hugh Blemings , 1999, 2000
-Copyright (C) Pavel Janík ml. , 1999, 2000
-Built 10:36:05 Dec 10 2000 for 6110 on com2: 
-
-
- -

Managing phonebook and other (dialed, misssed, answered, own, etc.) memories
-


- -
-
gnokii --getmemory memory_type start [end] [-d] -
Reads specificed memory location from phone.. -

You can specify such memories: - -

-

    -
  • ME - Phone phonebook memory
  • -
  • SM - SIM card phonebook memory,
  • -
  • FD - Fixed dial numbers,
  • -
  • ON - Own numbers,
  • -
  • EN - Emergency numbers,
  • -
  • DC - Dialled numbers,
  • -
  • RC - Received numbers,
  • -
  • MC - Missed numbers,
  • -
  • LD - Last dialed
  • -
- -

-With memories DC, EC, MC you will see assigned date (yes, with all Dialled, -Received, Missed numbers phone saves date and time too !). If you don't want -it, use -d option - -

Note: Locations start from 0 ! - -

Usage examples: - -

tfuj:~$ gnokii --getmemory SM 1 5
-Maja ERA;+48604xxxxxx;SM;1;1
-Dom;+4822xxxxxxx;SM;2;5
-Maja;+4822xxxxxxx;SM;3;1
-Iza;+48601xxxxxx;SM;4;5
-Ania;+48501xxxxxx;SM;5;0
-
-tfuj:~$ gnokii --getmemory ON 1 5
-DOM;+4822xxxxxxx;ON;1;5
-;;ON;2;5
-;;ON;3;5
-;;ON;4;5
-ON|5|Bad location or other error!(22)
-
-tfuj:~$ gnokii --getmemory EN 1 5
-Memory type EN not supported!
-
-tfuj:~$ gnokii --getmemory MC 1 5
-Maja IDEA;501xxxxxx;MC;1;5
-21.06.2000 21:32:52
-Maja IDEA;0501xxxxxx;MC;2;5
-21.06.2000 18:06:02
-;;MC;3;5
-11.06.2000 15:09:33
-;;MC;4;5
-11.06.2000 12:44:55
-;;MC;5;5
-10.06.2000 16:59:13
-
- -

The meaning of the fields in the output: -

    -
  • - ME/SM/ON/FD/EN/LD: -
      -
    1. Name
    2. -
    3. Number
    4. -
    5. Memory type
    6. -
    7. Location in the memory
    8. -
    9. Group number
    10. -
    -
  • - DN/RC/MC: -
      -
    1. Name
    2. -
    3. Number
    4. -
    5. Memory type
    6. -
    7. Location in the memory
    8. -
    9. Group number
    10. -
    11. Date and time of the call
    12. -
    -
  • -
- -

Possible errors: -

    -
  1. Bad location or other error!(22)
  2. -
  3. Memory type XX not supported!
  4. -
- -
- -
-
gnokii --writephonebook [-i] -
-Reads the data from the standard input and saves it in the SIM Card/phone -memory. The input data is in the format as described above (in desciption -for --getmemory parameter). - -

Usage examples: - -

-tfuj:~$ gnokii --writephonebook
-
-Girlfriend;+48501000000;ME;1;1
-Write Succeeded: memory type: int, loc: 1, name: Girlfriend, number: +48501000000
-
-tfuj:~$ echo "Very_long_name_longer_then_the_phone_can_save;some_string;ME;2;1" | gnokii --writephonebook
-Write Succeeded: memory type: int, loc: 2, name: Very_long_name_longer_then_the_phone_can_some_string, number: some_string
-
-tfuj:~$ echo "Girlfriend;+48501000000;ME;200;1" | gnokii --writephonebook
-Write FAILED(22): memory type: int, loc: 200, name: Girlfriend, number: +48501000000
-
-tfuj:~$ echo "Girlfriend;+48501000000;ME;3;10" | gnokii --writephonebook
-Write Succeeded: memory type: int, loc: 3, name: Girlfriend, number: +48501000000
-
-tfuj:~$ gnokii --getmemory ME 1 5
-Girlfriend;+48501000000;ME;1;1
-Very_long_name_l;//3/////2#4;ME;2;1
-Girlfriend;+48501000000;ME;3;10
-;;ME;4;5
-;;ME;5;5
-
-tfuj:~$ echo "Girlfriend;+48501000000;PP;3;10" | gnokii --writephonebook
-Format problem on line 1 [Girlfriend;+48501000000;PP;3;10]
-
-tfuj:~$ echo "some_nonsense_string" | gnokii --writephonebook
-tfuj:~$ 
-
- -

Some notes: -

    -
  1. Remember that any existent entries in the phonebook will be overwritten - (must use [-i] option, if you don't want it - you will be asked then, if - you want overwrite or not)
  2. -
  3. Names and numbers are truncated by the phone when saving.
  4. -
- -

Possible errors: -

    -
  1. Wrong location: Write FAILED(22)
  2. -
  3. Wring memoty type: Format problem on line n
  4. -
  5. Other errors: [no output] - this should be changed
  6. -
- -
- -
-
gnokii --getvoicemailbox -
Get voice mailbox number - -

Example: -

-
-
-
- -

Speed dials
-


- -
-
gnokii --getspeeddial number -
Reads from the phone a number assigned to a shotrcut key - -

Example: -

-tfuj:~$ gnokii --getspeeddial 1
-SpeedDial nr. 1: 3:0
-
-The output format: SpeedDial nr. key_number: memory_type:location. - -

On error output is empty. -

- -
-
gnokii --setspeeddial number memory_type location -
Writes to the phone a number assigned to a shotrcut key. -You can use memory SM or ME. - -

Example: - -

-tfuj:~$ gnokii --setspeeddial 1 SM 1
-Succesfully written!
-
-tfuj:~$ gnokii --setspeeddial 1 PP 1    
-Unknown memory type PP!
-
- -

...but there are still some bugs: - -

-tfuj:~$ gnokii --setspeeddial 1 SM 10000
-Succesfully written!
-
-tfuj:~$ gnokii --getspeeddial 1
-SpeedDial nr. 1: 3:16
-
-
- -

SMS (Smart Messaging System)
-


- -

If you don't know anything about SMS, please read our SMS FAQ. - -

-
gnokii --getsms memory_type start [end] [-f file] -
Reads SMS messages from the specified memory_type (it can -be phone's internal memory - ME - or SIM card - SM memory) starting at -start and ending at end. If end argument is not -present only one location - start - is read. - -

Examples: - -

tfuj:~$ gnokii --getsms SM 11
-11. Inbox Message (read)
-Date/time: 29/6/0 13:41:22 +0100
-Sender: 102 Msg Center: +48501200777
-Text:
-SMS OD: Mariusz, Wszystkiego najlepszego z okazji imienin! Mariusz
-
-tfuj:~$ gnokii --getsms SM 3
-3. Delivery Report (read)
-Sending date/time: 25/5/0 13:58:24 +0100
-Response date/time: 25/5/0 13:58:32 +0100
-Receiver: +48605000000 Msg Center: +48501200777
-Text: Delivered
-
-tfuj:~$ gnokii --getsms SM 5
-5. Outbox Message (not sent)
-Text: UU0i7eec
-
-tfuj:~$ gnokii --getsms SM 12
-GetSMS SM 12 failed!(4)
-
-tfuj:~$ gnokii --getsms SM 15
-15. Delivery Report (read)
-Sending date/time: 3/1/0 10:49:51 +0100
-Response date/time: 6/1/0 10:51:06 +0100
-Receiver: 1921681052342802 Msg Center: +48501200777
-Text: Failed
-
-tfuj:~$ gnokii --getsms SM 28
-SMS location SM 28 empty.
-
-tfuj:~$ gnokii --getsms SM 25 28
-25. Inbox Message (read)
-Date/time: 18/6/0 12:17:30 +0100
-Sender: 501 Msg Center: +48501200777
-Text:
-Liczba wiadomosci:1,nowych:1,faksow:0
-
-SMS location SM 26 empty.
-27. Inbox Message (read)
-Date/time: 21/6/0 19:45:11 +0100
-Sender: 123 Msg Center: +48501200777
-Text:
-Informujemy, ze wyslalismy do Panstwa fakture z terminem platnosci do 28.06.00. Dziekujemy za wybranie sieci Idea.
-
-SMS location SM 28 empty.
-
-tfuj:~$ gnokii --getsms SM 31
-Invalid location: SM 31
-
-
-
- -
-
gnokii --deletesms memory_type start [end] -
-Deletes SMS messages from specified memory type (SM or ME) -starting at entry start and ending at end - -

Examples: - -

-
-
- -
-
-gnokii --sendsms destination [--smsc message_center_number | ---smscno message_center_index] [--long n] [-s] [-C n] -[-8] [-v n] [-d] -[--enablevoice|--disablevoice|--enablefax|--disablefax| ---enableemail|--disableemail|--void] [--unicode] -
-Sends an SMS message to destination -via SMSC number given in message_center_number or SMSC number taken from -phone memory from address message_center_index. -If arguments --smsc and --smscno is ommited SMSC number is taken -from phone memory from location 1. Message text -is taken from standard input. - -

Meaning of optional parameters: -

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • --long - reads n bytes and cut into Linked SMS -(only when contenst is longer than size of 1 SMS)
  • -
  • -s - set replying via the same centre
  • -
  • -C - specify SMS class
  • -
  • -8 - send as 8-bit SMS
  • -
  • -v - set validity
  • -
  • -d - you will receive delivery report
  • -
  • --enablevoice, --disablevoice, --enablefax, ---disablefax, --enableemail, --disableemail - -These switches makes, that SMS has different meaning and in some phones -will enable/disable voice/fax/email signs on phone's screen
  • -
  • --voidsms - -These switches makes, that SMS has different meaning and some phones -after receiving it won't -display anything on the screen, but it will make sound/enable vibra
  • -
  • --unicode - codes SMS as Unicode SMS. When put -'~' (tilde) char inside, phone will start/end -blinking text. When will put "{" char, -contents of SMS will be invisible in some phones.
  • -
- -

Examples: - -

-gnokii --sendsms "+48601601601" < file
-
-
-Saves an SMS message in SIM. Message text is taken from stdin. - -
-
-gnokii --savesms destination|\"\" [--smsc -message_center_number] [--smscno message_center_index] -[--long n] [-r] [-i] [-s] [-C n] [-8] [-a] [-l] -[--enablevoice|--disablevoice|--enablefax|--disablefax| ---enableemail|--disableemail|--void|--hang|--bug] [--unicode] - -
- -

Meaning of optional parameters: -

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • --long - reads n bytes and cut into Linked SMS -(only when contenst is longer than size of 1 SMS)
  • -
  • -r - mark SMS as read/sent
  • -
  • -i - saves SMS to inbox
  • -
  • -s - set replying via the same centre
  • -
  • -C - specify SMS class
  • -
  • -8 - send as 8-bit SMS
  • -
  • -a - ask, when specify location and sms is already there
  • -
  • -l - specify location
  • -
  • --enablevoice, --disablevoice, --enablefax, ---disablefax, --enableemail, --disableemail - -These switches makes, that SMS has different meaning and in some phones -will enable/disable voice/fax/email signs on phone's screen
  • -
  • --voidsms - -These switches makes, that SMS has different meaning and some phones -after receiving it won't -display anything on the screen, but it will make sound/enable vibra
  • -
  • --hangsms - -This switch makes, that SMS has different meaning and in some phones -(like Nokia 5110) it will hang phone, when saved to Outbox and -you try to read it from phone's menu
  • -
  • --bug - -This switch makes, that SMS has different meaning and in some phones -(like Nokia 5110, 6150) has problems with this SMS, when try to read it -from phone's menu. It seems to be its firmware bug... -
  • -
  • --unicode - codes SMS as Unicode SMS. When put -'~' (tilde) char inside, phone will start/end -blinking text. When will put "{" char, -contents of SMS will be invisible in some phones.
  • -
- -

Examples: - -

-gnokii --savesms "SavedSMS" -i < file
-
-
- -
-
gnokii --getsmsc message_center_number -
show the SMSC number from location message_center_number. - -

Usage examples: - -

-tfuj:~$ gnokii --getsmsc 1
-1. SMS center (CENTERTEL) number is +48501200777
-Messages sent as Text
-Message validity is 72 hours
-
-tfuj:~$ gnokii --getsmsc 2
-2. SMS center () number is 
-Messages sent as Text
-Message validity is Unknown
-
-
- -

Date/time and alarm
-


- -
-
gnokii --getdatetime -
-Shows current date and time in the phone. - -

Example: - -

-tfuj:~$ gnokii --getdatetime
-Date: 2000/07/06
-Time: 23:50:43
-
-
- -
-
gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]] -
-Set the date and the time of the phone. - -

Example: - -

-
-
- -
-
gnokii --getalarm -
-Shows current alarm set in phone. - -

Example: - -

-
-
- -
-
gnokii --setalarm HH MM -
-Set the alarm of the phone. - -

Example: - -

-
-
- -

Calendar
-


- -
-
gnokii --getcalendarnote index [-v] -
-Get the note with number index from calendar. It will be written in -vCalendar 1.0 format, when use -v option. - -

Example: - -

-tfuj:~$ gnokii --getcalendarnote 1
-   Type of the note: Reminder
-   Date: 2000-06-26
-   Time: 23:59:59
-   Text: GNOKII TEST
-
-tfuj:~$ gnokii --getcalendarnote 2
-The calendar note can not be read
-
-tfuj:~$ gnokii --getcalendarnote 1 -v
-BEGIN:VCALENDAR
-VERSION:1.0
-BEGIN:VEVENT
-CATEGORIES:MISCELLANEOUS
-SUMMARY:GNOKII TEST
-DTSTART:20000626T235959
-END:VEVENT
-END:VCALENDAR
-
-
- -
-
gnokii --writecalendarnote vcardfile number -
-Write the note to calendar. - -

Example: - -

-
-
- -
-
gnokii --deletecalendarnote index -
-Delete the note with number index from calendar. - -

Example: - -

-
-
- -

- -Netmonitor
-


- -

If you don't know, what is this or how to use it, please read first -our Netmonitor manual. - -

-
gnokii --netmonitor {reset|off|field|devel|next|nr} -
-Setting/querying netmonitor mode. - -

Example: - -

-tfuj:~$ gnokii --netmonitor 0
-TMSI46963A06
-T321:  2/ 20
-PRP:5   0  0
-     0   784
-
-tfuj:~$ gnokii --netmonitor 1    
- 784 -72 xxx
- 0  0 x xxxx
-  29      29
-    CBCH
-
-tfuj:~$ gnokii --netmonitor 2
- NO 2    B35
- 16   x
-
-tfuj:~$ gnokii --netmonitor 3
-784 28-73 28
-781 19-82 19
-809 19-82 19
-     N  N
-
-tfuj:~$ gnokii --netmonitor 4
-778 12-89 12
-794 11-90 11
-774  8-93  8
-   N  N  N
-
-tfuj:~$ gnokii --netmonitor 5
-800-99-99-99
-xxxxxxxxxxxx
-xxxxxxxxxxxx
-   N xx xx
-
-tfuj:~$ gnokii --netmonitor 6
-26003  26002
-20420  26001
-26207  20810
-26203  20416
-
-tfuj:~$ gnokii --netmonitor 7
-E A H C I BR
-1 1 0 0 0 10
-
-tfuj:~$ gnokii --netmonitor 1000
-
-  NO TEST
-
-
- -
-
gnokii --nm_collect [screen x] [screen y] [screen z] -
-This function is like --netmonitor, but: - -

-

    -
  • each screen is printed on one single line
  • -
  • it loop until user press CTRL-C, (like --monitor)
  • -
  • it output simultaneously 1, 2 or 3 netmonitor screen
  • -
- -

Was originally developed for: - -

-

    -
  • comparing of data from differents screen.
  • -
  • log of netmonitor screen
  • -
- -

It's easier and has less options than --netmonitordata, but -should work with every phone that has netmonitor enabled and -don't need any parameter specifications (like --netmonitordata, -which requires external file with info about parameters). - -

Author: Andrea Scopece - -

Example: - -

-
-
- -
-
-gnokii --netmonitordata [-S file] [-I file] [-h] [-n n] [-ts n] [-tm n] -[-fs str] [-ls str] FLD1:FLD2:FLDn:... -
- -

Meaning of parameters is: -

-

    -
  • -fs string - field separator, default " "
  • -
  • -ls string - line separator, default LF (CRLF for win32)
  • -
  • -ts seconds - seconds before of next output of data (min 1 s, -max 3600 s)
  • -
  • -tm milliseconds - milliseconds before of next output of data -(default 200 ms, min 200 ms, max 10000 ms)
  • -
  • -n times - stop data output after "times" cycle. - -ts and -tm are mutually exclusive
  • -
  • -h - no header output, (default yes)
  • -
  • DATE - output date, may be as normal YY-MM-DD
  • -
  • DATE-S - output date, may be as short MM-DD
  • -
  • DATE-L - output date, may be as long yyyy-mm-dd
  • -
  • TIME - output time, may be as normal hh:mm:ss
  • -
  • TIME-S - output time, may be as short hh:mm
  • -
  • TIME-L - output time, may be as long hh:mm:ss:cc
  • -
  •   - - - -
    PARAM1 -
    PARAM2 -
    PARAM3 -
    .... -
    PARAMn -
    -This is the name of a param as specified in file -info-mon/model/version -parameter names must be in this file, and are case sensitive. - -

    You can specify max 512 params at once. -

    -
  • - -
  • -S file - parameters of netmonitor screen -you can override the default specification -of netmonitor parameters, suppling a file here.
  • -
  • -I file - sequence of command line's argument -this is useful execute a series of different -operation, like calling: -
    gnokii --netmonitordata args_set_1 -
    gnokii --netmonitordata args_set_2 -
    gnokii --netmonitordata args_set_3 -
    gnokii --netmonitordata args_set_n -
    - -

    file contains arguments as normally specified -on command line, but: - -

    on every line you should specify -n n option -so processing can stop without user intervent, -and continue with next line args_set. - -

    May be useful to make some pre-made collection, -as one made for battery check poupose, as -anothor to monitor neighbor cells, and so on. - -

    Inside this file options -I and option -S -are silently ignored - -

    Line in this file may be max length 1024 -

  • -
- -

Here is also note from author: - -

Checks of all arguments, and eventually files contents, are made -before start of data output. - -

Because of complexity of command line, phone spec, and eventually -command file, on error, you have datailed description of any error, - -

Also I attached here an examples of commands-file (see /Docs/examples) -that can run with: -mygnokii --netmonitordata -S netmonitordata_6150_413 -I nmd_commands - -

Users of same model but with other firmware version probably -should do very little work for an exact parameters specifications -of theirs phones. - -

Users of 5110 and 6110 probably should remove some parameters not -available, like parameters related to dual band. - -

Users of other phone models should write a new parameters-file: -some hints are available in file netmonitordata_6150_413. - -

If help is needed, please dump the screen, -(mygnokii --netmonitor 20 > screen_20.txt), -and send an e-mail to my address. - -

If available, check help screen by pressing '*' on phone -(during netmonitor session). - -

Scope of this work is monitoring some "user-interesting" -parameters, coming from differents screen, like battery charging -vs. time, cell ID and channel changes vs. signal strenght, ... - -

This is work in progress, so any input would be appreciated. - -

Author: Andrea Scopece - -

Example: - -

-gnokii --netmonitordata -S file RxL:LAC:CID
-
-gnokii --netmonitordata -S file -fs ";" RxL:LAC:CID
-
-
- -

Logos and startup texts
-


- -

If you don't know, what is logo, please read first our logos FAQ. - -

-
-gnokii --bitmapconvert source destination -
gnokii --bitmapconvert source destination op [network code] -
gnokii --bitmapconvert source destination caller [caller group number] -
gnokii --bitmapconvert source destination startup -
-
-Converts logo files. Supported formats: -NOL, NGG, NSL, NLM, BMP, OTA, XPM. -3'rd parameter allow to specify, what type should be destination -logo (when format allows for it). - -

Usage examples: - -

-
-
- -
-
-gnokii --sendlogo op destination logofile network_code -[--smsc message_center_number] [--smscno message_center_index] -[-s] [-v n] [-d] -
gnokii --sendlogo caller destination logofile -[--smsc message_center_number] [--smscno message_center_index] -[-s] [-v n] [-d] -
-
-Send the logofile to destination as operator -or CLI logo. Optional parameters: - -

-

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • -s - set replying via the same centre
  • -
  • -v - set validity
  • -
  • -d - you will receive delivery report
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --savelogo op logofile network_code -[--smsc message_center_number] [--smscno message_center_index] -[-r] [-i] [-s] [-a] [-l] [--name name] -
gnokii --savelogo caller logofile -[--smsc message_center_number] [--smscno message_center_index] -[-r] [-i] [-s] [-a] [-l] [--name name] -
-
-Saves the logofile on SIM as operator -or CLI logo. Optional parameters: - -

-

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • -r - mark as read
  • -
  • -i - save to inbox
  • -
  • -s - set replying via the same centre
  • -
  • -a - ask, when specify location and sms is already there
  • -
  • -l - specify location
  • -
  • --name - specify recipient/sender name instead of default
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --setlogo op [logofile] [network code] -
gnokii --setlogo startup [logofile] -
gnokii --setlogo caller [logofile] [caller group number] [group name] -
gnokii --setlogo {dealer|text} [text] -
-
-Set caller, startup or operator logo or set (Dealer) welcome note. - -

In Nokia 6110/6130/6150 you will see menu in phone after using it... - -

Usage examples: - -

-
-
- -
-
-gnokii --getlogo op [logofile] [network code] -
gnokii --getlogo startup [logofile] [network code] -
gnokii --getlogo caller [logofile][caller group number][network code] -
gnokii --getlogo {dealer|text} -
-
-Get caller, startup or operator logo or get (Dealer) welcome note. - -

Usage examples: - -

-
-
- -

Ringtones
-


- -
-
-gnokii --sendringtone destination ringtonefile -[--smsc message_center_number] [--smscno message_center_index] -[-s] [-v n] [-d] [--scale] - -
-Send the RTTL/OTT file to destination as ringtone. - -

-

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • -s - set replying via the same centre
  • -
  • -v - set validity
  • -
  • -d - allow to receive delivery report, when send
  • -
  • --scale - saves scale info with all tones. It allow -to eliminate firmware bug in some Nokia phones.
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --saveringtone ringtonefile -[--smsc message_center_number] [--smscno message_center_index] -[-r] [-i] [-s] [-a] [-l] [--name name] [--scale] - -
-Saves ringtone on SIM. - -

-

    -
  • --smsc - specify SMSC set
  • -
  • --smscno - specify SMSC number
  • -
  • -r - mark as read
  • -
  • -i - save to inbox
  • -
  • -s - set replying via the same centre
  • -
  • -s - set replying via the same centre
  • -
  • -a - ask, when specify location and sms is already there
  • -
  • -l - specify location
  • -
  • --name - specify recipient/sender name instead of default
  • -
  • --scale - saves scale info with all tones. It allow -to eliminate firmware bug in some Nokia phones.
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --setringtone ringtonefile - [location] - -
-Set the RTTL/OTT as ringtone - -

In Nokia 6110/6130/6150 you will see menu in phone after using it... - -

Usage examples: - -

-
-
- -
-
-gnokii --getbinringtone ringtonefile - [location] - -
-Gets downloadable ringtone and writes it in the special binary format -(it's not yes decoded - after making it this function can be unavailable). - -

Usage examples: - -

-
-
- -
-
-gnokii --setbinringtone ringtonefile - [location] - -
-Sets downloadable ringtone. Ringtonefile is in format used by ---getbinringtone. Mygnokii contains some default Nokia phones -ringtones saved in this format. - -

Usage examples: - -

-
-
- - -
-
-gnokii --ringtoneconvert source destination - -
-Converts ringtone files (RTTL, OTT) - -

Usage examples: - -

-
-
- -
-
-gnokii --playringtone file - -
-Plays ringtone in phone - -

Usage examples: - -

-
-
- -
-
-gnokii --composer ringtonefile - -
-Shows, how ringtone will look in Composer in phone...and how to enter it there... - -

Usage examples: - -

-
-
- -
-
-gnokii --allringtones - -
-Shows names of ringtones in your phone (to test, if they're put into source) - -

Usage examples: - -

-
-
- -

Backup/restore tool
-


- -
-
-gnokii --backupsettings file [subformat] - -
-Writes various settings into one file - -

Supported formats: LMB (Logo Manager Backup - full support for -N61xx/51xx features; for N7110/6210 some things can be missed, when compare -to files saved by LM), -CSS (NCDS3 - only phonebook part), -CSV (subformats: ncds2, lm, ncds3_pl - some things missed for N7110/6210), -SCM (WinTesla) - - - -

Usage examples: - -

-
-
- -
-
-gnokii --restoresettings file - -
- -

-

    -
  1. restores various settings from one file
  2. -
  3. allow to write phonebooks and logos into separate files.
  4. -
- -

Supported formats: LMB (Logo Manager Backup - full support for -N61xx/51xx features; for N7110/6210 some things can be missed, when compare -to files saved by LM), -CSS (NCDS3 - only phonebook part), -CSV (subformats: ncds2, lm, ncds3_pl - some things missed for N7110/6210), -SCM (WinTesla) - - - - -

Usage examples: - -

-
-
- -

Profiles
-


- -
-
-gnokii --getprofile [number] - -
-Show settings for selected(all) profile(s) - -

Usage examples: - -

-tfuj:~$ gnokii --getprofile 1
-1. "General"
-Incoming call alert: Ringing
-Ringtone number: 19
-Ringing volume: Level 3
-Message alert tone: Standard
-Keypad tones: Off
-Warning and game tones: On
-Vibration: On
-Caller groups: 0x00
-
-
- -
-
-gnokii --setprofile number feature value - -
-Set profile feature - -

Possible features are: -

    -
  • callalert (Incoming call alert) -
    possible values are: -
      -
    • ringing (Ringing)
    • -
    • ascending (Ascending)
    • -
    • ringonce (Ring once)
    • -
    • beeponce (Beep once)
    • -
    • ringing (Ringing)
    • -
    • groups (Caller groups - not in N5110)
    • -
    • off,0 (Off)
    • -
    -
  • -
  • volume (Ringing volume) -
    possible values are: 1|2|3|4|5 -
  • -
  • keypad,keypadtone (Keypad tones) -
    possible values are: -
      -
    • 0,off (Off)
    • -
    • 1 (Level 1)
    • -
    • 2 (Level 2)
    • -
    • 3 (Level 3)
    • -
    -
  • -
  • smstone,messagetone,sms,message (Message alert tone) -
    possible values are: -
      -
    • 0,off (No tone)
    • -
    • standard (Standard)
    • -
    • special (Special)
    • -
    • beeponce,once (Beep once)
    • -
    • ascending (Ascending)
    • -
    -
  • -
  • warningtone,warning (Warning and game tones) -
    possible values are: 0|off|1|on -
  • -
  • vibra,vibration (Vibration) -
    possible values are: 0|off|1|on -
  • -
  • lights (Lights) -
    possible values are: -
      -
    • 0,off (Automatic)
    • -
    • 1,on (On)
    • -
    -
  • -
  • answer (Automatic answer) -
    possible values are: 0|off|1|on -
  • -
  • name - profile name (doesn't work in N5110) -
    value is new profile name -
  • -
  • ringtone (Ringing tone) -
    value is new ringing tone number -
  • -
  • groups - caller group name for profile -
    value is new caller group number -
  • -
- -

Usage examples: - -

-
-
- -

Security features
-


- -

This functions are available ONLY, if gnokii was compiled with them ! - -

-
-gnokii --entersecuritycode PIN|PIN2|PUK|PUK2 - -
-Asks for the code and sends it to the phone - -

Usage examples: - -

-
-
- -
-
-gnokii --getsecuritycodestatus - -
-Show if a security code is needed - -

Usage examples: - -

-
-
- -
-
-gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode - -
-Gets security code (only SecurityCode allowed !) - -

Usage examples: - -

-
-
- -

Other functions
-


- -
-
gnokii --monitor -
Runs gnokii in persistent communication state - displays all data -received from the phone to the stderr. Example session: - -
tfuj:~$ gnokii --monitor
-Entering monitor mode...
-Initialising GSM interface...
-RFLevel: 4
-Battery: 3
-Power Source: battery
-SIM: Used 42, Free 188
-Phone: Used 4, Free 46
-FD: Used 0, Free 20
-ON: Used 2, Free 3
-SMS Messages: UnRead 0, Number 26
-Network: IDEA Centertel (Poland), LAC: 00c8, CellID: 1024
-[...]
-
-
- -
-
-gnokii --dialvoice number - -
-Initiate voice call from first number on SIM card. - -

Usage examples: - -

-
-
- -
-
-gnokii --getdisplaystatus - -
-Shows what icons are displayed in phone's screen. - -

Usage examples: - -

-tfuj:~$ gnokii --getdisplaystatus    
-Call in progress: off
-Unknown: off
-Unread SMS: off
-Voice call: off
-Fax call active: off
-Data call active: off
-Keyboard lock: off
-SMS storage full: off
-
-
- -
-
-gnokii --identify - -
-Get IMEI, model and revision -. In this moment doesn't work with MBUS connection -and Unix... - -

Usage examples: - -

-tfuj:~$ gnokii --identify    
-IMEI:     495502202470000
-Model:    NSK-3
-Revision: SW 4.11, HW2460
-
-
- -
-
-gnokii --senddtmf string - -
-Sends DTMF sequence -. If you will start from "p" (Pause), phone will display -menu before sending it... - -

Usage examples: - -

-
-
- -
-
-gnokii --presskeysequence sequence - -
-presses some keys in phone keyboard - -

Available keys: -

    -
  • 0..9
  • -
  • #
  • -
  • *
  • -
  • m (Menu)
  • -
  • n (Names)
  • -
  • p (Power)
  • -
  • g (Green)
  • -
  • r (Red)
  • -
  • +, - (Volume up or down)
  • -
  • u (Up arrow)
  • -
  • d (Down arrow)
  • -
  • w - 2 sec. pause (useful, when you simulate writing SMS)
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --reset [soft|hard] - -
-Resets the phone. - You can use "soft" parameter (no question for PIN code - it's default) -or "hard" (phone will ask for PIN - of course, if you have it enabled in your card; -in some phones - for example N5110 - this type of reset will be like "soft") - -

Usage examples: - -

-
-
- -
-
-gnokii --getphoneprofile - -
-Gets profile set normally with Product Profile Settings - -

Usage examples: - -

-
-
- -
-
-gnokii --setphoneprofile feature value - -
-Set profile set normally with Product Profile Settings: - -

Features can be: - -

-

    -
  • "ALS" (Alternative Line Service) - values "0" or "1"
  • -
  • "HRData" (data transmission using Half Rate channels) - values "0" or "1"
  • -
- -

Usage examples: - -

-
-
- -
-
-gnokii --displayoutput - -
-Show texts displayed in phone's screen - -

Usage examples: - -

-tfuj:~$ gnokii --displayoutput
-Entering display monitoring mode...
-Accessory
-connected
-Names
-Menu
-23:59
-Messages
-Exit
-Select
-_
-Messages
-Exit
-Select
-_
-Call register
-Exit
-Select
-2
-Missed
-calls
-Back
-Select
-2-1
-Received
-calls
-Back
-Select
-2-2
-Dialled
-numbers
-Back
-Select
-2-3
-Erase recent
-call lists
-Back
-Select
-2-4
-Show call
-duration
-Back
-Select
-2-5
-Last call
-duration
-00:01:33
-Back
-2-5-1
-All calls'
-duration
-06:45:02
-Back
-2-5-2
-Received calls'
-duration
-02:49:38
-Back
-2-5-3
-Names
-Menu
-23:59
-...WAW... 
-POCZTA ELE
-...WAW... 
-Leaving display monitor mode...
-
-
- -
-
-gnokii --getphoneprofile - -
-Gets Product Profile Settings from phone - -

Usage examples: - -

-
-
- -
-
-gnokii --getoperatorname - -
-Get info about downloaded operator name - -

Usage examples: - -

-
-
- -
-
-gnokii --setoperatorname code name - -
-Set downloaded operator name - -

Usage examples: - -

-
-
- -

How to send SMS to multiple recipients using gnokii ?
-


- -

- -#!/bin/tcsh

-if ( $# == 0 ) then
-  echo "You must specify at least one recipient's number!"
-  exit 1
-endif

-echo -n "Enter SMS:"
-set sms="$<"

-foreach i ( $* )
-  echo "$sms" | gnokii --sendsms "$i"
-end -
- - - - -

Sending script...
-


+ + + + + Command line gnokii FAQ + + + + + +

Main page

+
Command line gnokii FAQ
+ +


+ +

What is command line gnokii ?
+


+ +

It was first our testing tool. Now it can be used for making almost all things +possible with gnokii package (and this is the only available tool for win32). + +

Some general commands...
+


+ +
+
gnokii --help +
Displays GNOKII list of parameters: +
c:\> gnokii --help
+   usage: gnokii [--help|--monitor|--version]
+          gnokii --getmemory memory_type start [end] [-d]
+          gnokii --writephonebook [-i]
+          gnokii --getspeeddial number
+          gnokii --setspeeddial number memory_type location
+          gnokii --getsms memory_type start [end] [-f file]
+          gnokii --deletesms memory_type start [end]
+          gnokii --sendsms destination [--smsc message_center_number |
+                 --smscno message_center_index] [--long n] [-s] [-C n]
+                 [-8] [-v n] [-d]
+          ........
+
+
+ +
+
gnokii --version +
Displays GNOKII version and copyright information: +
c:\> gnokii --version      
+GNOKII Version 0.3.3-pre8-gold
+Copyright (C) Hugh Blemings , 1999, 2000
+Copyright (C) Pavel Janík ml. , 1999, 2000
+Built 10:36:05 Dec 10 2000 for 6110 on com2: 
+
+
+ +

Managing phonebook and other (dialed, misssed, answered, own, etc.) memories
+


+ +
+
gnokii --getmemory memory_type start [end] [-d] +
Reads specificed memory location from phone.. +

You can specify such memories: + +

+

    +
  • ME - Phone phonebook memory
  • +
  • SM - SIM card phonebook memory,
  • +
  • FD - Fixed dial numbers,
  • +
  • ON - Own numbers,
  • +
  • EN - Emergency numbers,
  • +
  • DC - Dialled numbers,
  • +
  • RC - Received numbers,
  • +
  • MC - Missed numbers,
  • +
  • LD - Last dialed
  • +
+ +

+With memories DC, EC, MC you will see assigned date (yes, with all Dialled, +Received, Missed numbers phone saves date and time too !). If you don't want +it, use -d option + +

Note: Locations start from 0 ! + +

Usage examples: + +

tfuj:~$ gnokii --getmemory SM 1 5
+Maja ERA;+48604xxxxxx;SM;1;1
+Dom;+4822xxxxxxx;SM;2;5
+Maja;+4822xxxxxxx;SM;3;1
+Iza;+48601xxxxxx;SM;4;5
+Ania;+48501xxxxxx;SM;5;0
+
+tfuj:~$ gnokii --getmemory ON 1 5
+DOM;+4822xxxxxxx;ON;1;5
+;;ON;2;5
+;;ON;3;5
+;;ON;4;5
+ON|5|Bad location or other error!(22)
+
+tfuj:~$ gnokii --getmemory EN 1 5
+Memory type EN not supported!
+
+tfuj:~$ gnokii --getmemory MC 1 5
+Maja IDEA;501xxxxxx;MC;1;5
+21.06.2000 21:32:52
+Maja IDEA;0501xxxxxx;MC;2;5
+21.06.2000 18:06:02
+;;MC;3;5
+11.06.2000 15:09:33
+;;MC;4;5
+11.06.2000 12:44:55
+;;MC;5;5
+10.06.2000 16:59:13
+
+ +

The meaning of the fields in the output: +

    +
  • + ME/SM/ON/FD/EN/LD: +
      +
    1. Name
    2. +
    3. Number
    4. +
    5. Memory type
    6. +
    7. Location in the memory
    8. +
    9. Group number
    10. +
    +
  • + DN/RC/MC: +
      +
    1. Name
    2. +
    3. Number
    4. +
    5. Memory type
    6. +
    7. Location in the memory
    8. +
    9. Group number
    10. +
    11. Date and time of the call
    12. +
    +
  • +
+ +

Possible errors: +

    +
  1. Bad location or other error!(22)
  2. +
  3. Memory type XX not supported!
  4. +
+ +
+ +
+
gnokii --writephonebook [-i] +
+Reads the data from the standard input and saves it in the SIM Card/phone +memory. The input data is in the format as described above (in desciption +for --getmemory parameter). + +

Usage examples: + +

+tfuj:~$ gnokii --writephonebook
+
+Girlfriend;+48501000000;ME;1;1
+Write Succeeded: memory type: int, loc: 1, name: Girlfriend, number: +48501000000
+
+tfuj:~$ echo "Very_long_name_longer_then_the_phone_can_save;some_string;ME;2;1" | gnokii --writephonebook
+Write Succeeded: memory type: int, loc: 2, name: Very_long_name_longer_then_the_phone_can_some_string, number: some_string
+
+tfuj:~$ echo "Girlfriend;+48501000000;ME;200;1" | gnokii --writephonebook
+Write FAILED(22): memory type: int, loc: 200, name: Girlfriend, number: +48501000000
+
+tfuj:~$ echo "Girlfriend;+48501000000;ME;3;10" | gnokii --writephonebook
+Write Succeeded: memory type: int, loc: 3, name: Girlfriend, number: +48501000000
+
+tfuj:~$ gnokii --getmemory ME 1 5
+Girlfriend;+48501000000;ME;1;1
+Very_long_name_l;//3/////2#4;ME;2;1
+Girlfriend;+48501000000;ME;3;10
+;;ME;4;5
+;;ME;5;5
+
+tfuj:~$ echo "Girlfriend;+48501000000;PP;3;10" | gnokii --writephonebook
+Format problem on line 1 [Girlfriend;+48501000000;PP;3;10]
+
+tfuj:~$ echo "some_nonsense_string" | gnokii --writephonebook
+tfuj:~$ 
+
+ +

Some notes: +

    +
  1. Remember that any existent entries in the phonebook will be overwritten + (must use [-i] option, if you don't want it - you will be asked then, if + you want overwrite or not)
  2. +
  3. Names and numbers are truncated by the phone when saving.
  4. +
+ +

Possible errors: +

    +
  1. Wrong location: Write FAILED(22)
  2. +
  3. Wring memoty type: Format problem on line n
  4. +
  5. Other errors: [no output] - this should be changed
  6. +
+ +
+ +
+
gnokii --getvoicemailbox +
Get voice mailbox number + +

Example: +

+
+
+
+ +

Speed dials
+


+ +
+
gnokii --getspeeddial number +
Reads from the phone a number assigned to a shotrcut key + +

Example: +

+tfuj:~$ gnokii --getspeeddial 1
+SpeedDial nr. 1: 3:0
+
+The output format: SpeedDial nr. key_number: memory_type:location. + +

On error output is empty. +

+ +
+
gnokii --setspeeddial number memory_type location +
Writes to the phone a number assigned to a shotrcut key. +You can use memory SM or ME. + +

Example: + +

+tfuj:~$ gnokii --setspeeddial 1 SM 1
+Succesfully written!
+
+tfuj:~$ gnokii --setspeeddial 1 PP 1    
+Unknown memory type PP!
+
+ +

...but there are still some bugs: + +

+tfuj:~$ gnokii --setspeeddial 1 SM 10000
+Succesfully written!
+
+tfuj:~$ gnokii --getspeeddial 1
+SpeedDial nr. 1: 3:16
+
+
+ +

SMS (Smart Messaging System)
+


+ +

If you don't know anything about SMS, please read our SMS FAQ. + +

+
gnokii --getsms memory_type start [end] [-f file] +
Reads SMS messages from the specified memory_type (it can +be phone's internal memory - ME - or SIM card - SM memory) starting at +start and ending at end. If end argument is not +present only one location - start - is read. + +

Examples: + +

tfuj:~$ gnokii --getsms SM 11
+11. Inbox Message (read)
+Date/time: 29/6/0 13:41:22 +0100
+Sender: 102 Msg Center: +48501200777
+Text:
+SMS OD: Mariusz, Wszystkiego najlepszego z okazji imienin! Mariusz
+
+tfuj:~$ gnokii --getsms SM 3
+3. Delivery Report (read)
+Sending date/time: 25/5/0 13:58:24 +0100
+Response date/time: 25/5/0 13:58:32 +0100
+Receiver: +48605000000 Msg Center: +48501200777
+Text: Delivered
+
+tfuj:~$ gnokii --getsms SM 5
+5. Outbox Message (not sent)
+Text: UU0i7eec
+
+tfuj:~$ gnokii --getsms SM 12
+GetSMS SM 12 failed!(4)
+
+tfuj:~$ gnokii --getsms SM 15
+15. Delivery Report (read)
+Sending date/time: 3/1/0 10:49:51 +0100
+Response date/time: 6/1/0 10:51:06 +0100
+Receiver: 1921681052342802 Msg Center: +48501200777
+Text: Failed
+
+tfuj:~$ gnokii --getsms SM 28
+SMS location SM 28 empty.
+
+tfuj:~$ gnokii --getsms SM 25 28
+25. Inbox Message (read)
+Date/time: 18/6/0 12:17:30 +0100
+Sender: 501 Msg Center: +48501200777
+Text:
+Liczba wiadomosci:1,nowych:1,faksow:0
+
+SMS location SM 26 empty.
+27. Inbox Message (read)
+Date/time: 21/6/0 19:45:11 +0100
+Sender: 123 Msg Center: +48501200777
+Text:
+Informujemy, ze wyslalismy do Panstwa fakture z terminem platnosci do 28.06.00. Dziekujemy za wybranie sieci Idea.
+
+SMS location SM 28 empty.
+
+tfuj:~$ gnokii --getsms SM 31
+Invalid location: SM 31
+
+
+
+ +
+
gnokii --deletesms memory_type start [end] +
+Deletes SMS messages from specified memory type (SM or ME) +starting at entry start and ending at end + +

Examples: + +

+
+
+ +
+
+gnokii --sendsms destination [--smsc message_center_number | +--smscno message_center_index] [--long n] [-s] [-C n] +[-8] [-v n] [-d] +[--enablevoice|--disablevoice|--enablefax|--disablefax| +--enableemail|--disableemail|--void] [--unicode] +
+Sends an SMS message to destination +via SMSC number given in message_center_number or SMSC number taken from +phone memory from address message_center_index. +If arguments --smsc and --smscno is ommited SMSC number is taken +from phone memory from location 1. Message text +is taken from standard input. + +

Meaning of optional parameters: +

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • --long - reads n bytes and cut into Linked SMS +(only when contenst is longer than size of 1 SMS)
  • +
  • -s - set replying via the same centre
  • +
  • -C - specify SMS class
  • +
  • -8 - send as 8-bit SMS
  • +
  • -v - set validity
  • +
  • -d - you will receive delivery report
  • +
  • --enablevoice, --disablevoice, --enablefax, +--disablefax, --enableemail, --disableemail - +These switches makes, that SMS has different meaning and in some phones +will enable/disable voice/fax/email signs on phone's screen
  • +
  • --voidsms - +These switches makes, that SMS has different meaning and some phones +after receiving it won't +display anything on the screen, but it will make sound/enable vibra
  • +
  • --unicode - codes SMS as Unicode SMS. When put +'~' (tilde) char inside, phone will start/end +blinking text. When will put "{" char, +contents of SMS will be invisible in some phones.
  • +
+ +

Examples: + +

+gnokii --sendsms "+48601601601" < file
+
+
+Saves an SMS message in SIM. Message text is taken from stdin. + +
+
+gnokii --savesms destination|\"\" [--smsc +message_center_number] [--smscno message_center_index] +[--long n] [-r] [-i] [-s] [-C n] [-8] [-a] [-l] +[--enablevoice|--disablevoice|--enablefax|--disablefax| +--enableemail|--disableemail|--void|--hang|--bug] [--unicode] + +
+ +

Meaning of optional parameters: +

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • --long - reads n bytes and cut into Linked SMS +(only when contenst is longer than size of 1 SMS)
  • +
  • -r - mark SMS as read/sent
  • +
  • -i - saves SMS to inbox
  • +
  • -s - set replying via the same centre
  • +
  • -C - specify SMS class
  • +
  • -8 - send as 8-bit SMS
  • +
  • -a - ask, when specify location and sms is already there
  • +
  • -l - specify location
  • +
  • --enablevoice, --disablevoice, --enablefax, +--disablefax, --enableemail, --disableemail - +These switches makes, that SMS has different meaning and in some phones +will enable/disable voice/fax/email signs on phone's screen
  • +
  • --voidsms - +These switches makes, that SMS has different meaning and some phones +after receiving it won't +display anything on the screen, but it will make sound/enable vibra
  • +
  • --hangsms - +This switch makes, that SMS has different meaning and in some phones +(like Nokia 5110) it will hang phone, when saved to Outbox and +you try to read it from phone's menu
  • +
  • --bug - +This switch makes, that SMS has different meaning and in some phones +(like Nokia 5110, 6150) has problems with this SMS, when try to read it +from phone's menu. It seems to be its firmware bug... +
  • +
  • --unicode - codes SMS as Unicode SMS. When put +'~' (tilde) char inside, phone will start/end +blinking text. When will put "{" char, +contents of SMS will be invisible in some phones.
  • +
+ +

Examples: + +

+gnokii --savesms "SavedSMS" -i < file
+
+
+ +
+
gnokii --getsmsc message_center_number +
show the SMSC number from location message_center_number. + +

Usage examples: + +

+tfuj:~$ gnokii --getsmsc 1
+1. SMS center (CENTERTEL) number is +48501200777
+Messages sent as Text
+Message validity is 72 hours
+
+tfuj:~$ gnokii --getsmsc 2
+2. SMS center () number is 
+Messages sent as Text
+Message validity is Unknown
+
+
+ +

Date/time and alarm
+


+ +
+
gnokii --getdatetime +
+Shows current date and time in the phone. + +

Example: + +

+tfuj:~$ gnokii --getdatetime
+Date: 2000/07/06
+Time: 23:50:43
+
+
+ +
+
gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]] +
+Set the date and the time of the phone. + +

Example: + +

+
+
+ +
+
gnokii --getalarm +
+Shows current alarm set in phone. + +

Example: + +

+
+
+ +
+
gnokii --setalarm HH MM +
+Set the alarm of the phone. + +

Example: + +

+
+
+ +

Calendar
+


+ +
+
gnokii --getcalendarnote index [-v] +
+Get the note with number index from calendar. It will be written in +vCalendar 1.0 format, when use -v option. + +

Example: + +

+tfuj:~$ gnokii --getcalendarnote 1
+   Type of the note: Reminder
+   Date: 2000-06-26
+   Time: 23:59:59
+   Text: GNOKII TEST
+
+tfuj:~$ gnokii --getcalendarnote 2
+The calendar note can not be read
+
+tfuj:~$ gnokii --getcalendarnote 1 -v
+BEGIN:VCALENDAR
+VERSION:1.0
+BEGIN:VEVENT
+CATEGORIES:MISCELLANEOUS
+SUMMARY:GNOKII TEST
+DTSTART:20000626T235959
+END:VEVENT
+END:VCALENDAR
+
+
+ +
+
gnokii --writecalendarnote vcardfile number +
+Write the note to calendar. + +

Example: + +

+
+
+ +
+
gnokii --deletecalendarnote index +
+Delete the note with number index from calendar. + +

Example: + +

+
+
+ +

+ +Netmonitor
+


+ +

If you don't know, what is this or how to use it, please read first +our Netmonitor manual. + +

+
gnokii --netmonitor {reset|off|field|devel|next|nr} +
+Setting/querying netmonitor mode. + +

Example: + +

+tfuj:~$ gnokii --netmonitor 0
+TMSI46963A06
+T321:  2/ 20
+PRP:5   0  0
+     0   784
+
+tfuj:~$ gnokii --netmonitor 1    
+ 784 -72 xxx
+ 0  0 x xxxx
+  29      29
+    CBCH
+
+tfuj:~$ gnokii --netmonitor 2
+ NO 2    B35
+ 16   x
+
+tfuj:~$ gnokii --netmonitor 3
+784 28-73 28
+781 19-82 19
+809 19-82 19
+     N  N
+
+tfuj:~$ gnokii --netmonitor 4
+778 12-89 12
+794 11-90 11
+774  8-93  8
+   N  N  N
+
+tfuj:~$ gnokii --netmonitor 5
+800-99-99-99
+xxxxxxxxxxxx
+xxxxxxxxxxxx
+   N xx xx
+
+tfuj:~$ gnokii --netmonitor 6
+26003  26002
+20420  26001
+26207  20810
+26203  20416
+
+tfuj:~$ gnokii --netmonitor 7
+E A H C I BR
+1 1 0 0 0 10
+
+tfuj:~$ gnokii --netmonitor 1000
+
+  NO TEST
+
+
+ +
+
gnokii --nm_collect [screen x] [screen y] [screen z] +
+This function is like --netmonitor, but: + +

+

    +
  • each screen is printed on one single line
  • +
  • it loop until user press CTRL-C, (like --monitor)
  • +
  • it output simultaneously 1, 2 or 3 netmonitor screen
  • +
+ +

Was originally developed for: + +

+

    +
  • comparing of data from differents screen.
  • +
  • log of netmonitor screen
  • +
+ +

It's easier and has less options than --netmonitordata, but +should work with every phone that has netmonitor enabled and +don't need any parameter specifications (like --netmonitordata, +which requires external file with info about parameters). + +

Author: Andrea Scopece + +

Example: + +

+
+
+ +
+
+gnokii --netmonitordata [-S file] [-I file] [-h] [-n n] [-ts n] [-tm n] +[-fs str] [-ls str] FLD1:FLD2:FLDn:... +
+ +

Meaning of parameters is: +

+

    +
  • -fs string - field separator, default " "
  • +
  • -ls string - line separator, default LF (CRLF for win32)
  • +
  • -ts seconds - seconds before of next output of data (min 1 s, +max 3600 s)
  • +
  • -tm milliseconds - milliseconds before of next output of data +(default 200 ms, min 200 ms, max 10000 ms)
  • +
  • -n times - stop data output after "times" cycle. + -ts and -tm are mutually exclusive
  • +
  • -h - no header output, (default yes)
  • +
  • DATE - output date, may be as normal YY-MM-DD
  • +
  • DATE-S - output date, may be as short MM-DD
  • +
  • DATE-L - output date, may be as long yyyy-mm-dd
  • +
  • TIME - output time, may be as normal hh:mm:ss
  • +
  • TIME-S - output time, may be as short hh:mm
  • +
  • TIME-L - output time, may be as long hh:mm:ss:cc
  • +
  •   + + + +
    PARAM1 +
    PARAM2 +
    PARAM3 +
    .... +
    PARAMn +
    +This is the name of a param as specified in file +info-mon/model/version +parameter names must be in this file, and are case sensitive. + +

    You can specify max 512 params at once. +

    +
  • + +
  • -S file - parameters of netmonitor screen +you can override the default specification +of netmonitor parameters, suppling a file here.
  • +
  • -I file - sequence of command line's argument +this is useful execute a series of different +operation, like calling: +
    gnokii --netmonitordata args_set_1 +
    gnokii --netmonitordata args_set_2 +
    gnokii --netmonitordata args_set_3 +
    gnokii --netmonitordata args_set_n +
    + +

    file contains arguments as normally specified +on command line, but: + +

    on every line you should specify -n n option +so processing can stop without user intervent, +and continue with next line args_set. + +

    May be useful to make some pre-made collection, +as one made for battery check poupose, as +anothor to monitor neighbor cells, and so on. + +

    Inside this file options -I and option -S +are silently ignored + +

    Line in this file may be max length 1024 +

  • +
+ +

Here is also note from author: + +

Checks of all arguments, and eventually files contents, are made +before start of data output. + +

Because of complexity of command line, phone spec, and eventually +command file, on error, you have datailed description of any error, + +

Also I attached here an examples of commands-file (see /Docs/examples) +that can run with: +mygnokii --netmonitordata -S netmonitordata_6150_413 -I nmd_commands + +

Users of same model but with other firmware version probably +should do very little work for an exact parameters specifications +of theirs phones. + +

Users of 5110 and 6110 probably should remove some parameters not +available, like parameters related to dual band. + +

Users of other phone models should write a new parameters-file: +some hints are available in file netmonitordata_6150_413. + +

If help is needed, please dump the screen, +(mygnokii --netmonitor 20 > screen_20.txt), +and send an e-mail to my address. + +

If available, check help screen by pressing '*' on phone +(during netmonitor session). + +

Scope of this work is monitoring some "user-interesting" +parameters, coming from differents screen, like battery charging +vs. time, cell ID and channel changes vs. signal strenght, ... + +

This is work in progress, so any input would be appreciated. + +

Author: Andrea Scopece + +

Example: + +

+gnokii --netmonitordata -S file RxL:LAC:CID
+
+gnokii --netmonitordata -S file -fs ";" RxL:LAC:CID
+
+
+ +

Logos and startup texts
+


+ +

If you don't know, what is logo, please read first our logos FAQ. + +

+
+gnokii --bitmapconvert source destination +
gnokii --bitmapconvert source destination op [network code] +
gnokii --bitmapconvert source destination caller [caller group number] +
gnokii --bitmapconvert source destination startup +
+
+Converts logo files. Supported formats: +NOL, NGG, NSL, NLM, BMP, OTA, XPM. +3'rd parameter allow to specify, what type should be destination +logo (when format allows for it). + +

Usage examples: + +

+
+
+ +
+
+gnokii --sendlogo op destination logofile network_code +[--smsc message_center_number] [--smscno message_center_index] +[-s] [-v n] [-d] +
gnokii --sendlogo caller destination logofile +[--smsc message_center_number] [--smscno message_center_index] +[-s] [-v n] [-d] +
+
+Send the logofile to destination as operator +or CLI logo. Optional parameters: + +

+

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • -s - set replying via the same centre
  • +
  • -v - set validity
  • +
  • -d - you will receive delivery report
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --savelogo op logofile network_code +[--smsc message_center_number] [--smscno message_center_index] +[-r] [-i] [-s] [-a] [-l] [--name name] +
gnokii --savelogo caller logofile +[--smsc message_center_number] [--smscno message_center_index] +[-r] [-i] [-s] [-a] [-l] [--name name] +
+
+Saves the logofile on SIM as operator +or CLI logo. Optional parameters: + +

+

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • -r - mark as read
  • +
  • -i - save to inbox
  • +
  • -s - set replying via the same centre
  • +
  • -a - ask, when specify location and sms is already there
  • +
  • -l - specify location
  • +
  • --name - specify recipient/sender name instead of default
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --setlogo op [logofile] [network code] +
gnokii --setlogo startup [logofile] +
gnokii --setlogo caller [logofile] [caller group number] [group name] +
gnokii --setlogo {dealer|text} [text] +
+
+Set caller, startup or operator logo or set (Dealer) welcome note. + +

In Nokia 6110/6130/6150 you will see menu in phone after using it... + +

Usage examples: + +

+
+
+ +
+
+gnokii --getlogo op [logofile] [network code] +
gnokii --getlogo startup [logofile] [network code] +
gnokii --getlogo caller [logofile][caller group number][network code] +
gnokii --getlogo {dealer|text} +
+
+Get caller, startup or operator logo or get (Dealer) welcome note. + +

Usage examples: + +

+
+
+ +

Ringtones
+


+ +
+
+gnokii --sendringtone destination ringtonefile +[--smsc message_center_number] [--smscno message_center_index] +[-s] [-v n] [-d] [--scale] + +
+Send the RTTL/OTT file to destination as ringtone. + +

+

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • -s - set replying via the same centre
  • +
  • -v - set validity
  • +
  • -d - allow to receive delivery report, when send
  • +
  • --scale - saves scale info with all tones. It allow +to eliminate firmware bug in some Nokia phones.
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --saveringtone ringtonefile +[--smsc message_center_number] [--smscno message_center_index] +[-r] [-i] [-s] [-a] [-l] [--name name] [--scale] + +
+Saves ringtone on SIM. + +

+

    +
  • --smsc - specify SMSC set
  • +
  • --smscno - specify SMSC number
  • +
  • -r - mark as read
  • +
  • -i - save to inbox
  • +
  • -s - set replying via the same centre
  • +
  • -s - set replying via the same centre
  • +
  • -a - ask, when specify location and sms is already there
  • +
  • -l - specify location
  • +
  • --name - specify recipient/sender name instead of default
  • +
  • --scale - saves scale info with all tones. It allow +to eliminate firmware bug in some Nokia phones.
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --setringtone ringtonefile + [location] + +
+Set the RTTL/OTT as ringtone + +

In Nokia 6110/6130/6150 you will see menu in phone after using it... + +

Usage examples: + +

+
+
+ +
+
+gnokii --getbinringtone ringtonefile + [location] + +
+Gets downloadable ringtone and writes it in the special binary format +(it's not yes decoded - after making it this function can be unavailable). + +

Usage examples: + +

+
+
+ +
+
+gnokii --setbinringtone ringtonefile + [location] + +
+Sets downloadable ringtone. Ringtonefile is in format used by +--getbinringtone. Mygnokii contains some default Nokia phones +ringtones saved in this format. + +

Usage examples: + +

+
+
+ + +
+
+gnokii --ringtoneconvert source destination + +
+Converts ringtone files (RTTL, OTT) + +

Usage examples: + +

+
+
+ +
+
+gnokii --playringtone file + +
+Plays ringtone in phone + +

Usage examples: + +

+
+
+ +
+
+gnokii --composer ringtonefile + +
+Shows, how ringtone will look in Composer in phone...and how to enter it there... + +

Usage examples: + +

+
+
+ +
+
+gnokii --allringtones + +
+Shows names of ringtones in your phone (to test, if they're put into source) + +

Usage examples: + +

+
+
+ +

Backup/restore tool
+


+ +
+
+gnokii --backupsettings file [subformat] + +
+Writes various settings into one file + +

Supported formats: LMB (Logo Manager Backup - full support for +N61xx/51xx features; for N7110/6210 some things can be missed, when compare +to files saved by LM), +CSS (NCDS3 - only phonebook part), +CSV (subformats: ncds2, lm, ncds3_pl - some things missed for N7110/6210), +SCM (WinTesla) + + + +

Usage examples: + +

+
+
+ +
+
+gnokii --restoresettings file + +
+ +

+

    +
  1. restores various settings from one file
  2. +
  3. allow to write phonebooks and logos into separate files.
  4. +
+ +

Supported formats: LMB (Logo Manager Backup - full support for +N61xx/51xx features; for N7110/6210 some things can be missed, when compare +to files saved by LM), +CSS (NCDS3 - only phonebook part), +CSV (subformats: ncds2, lm, ncds3_pl - some things missed for N7110/6210), +SCM (WinTesla) + + + + +

Usage examples: + +

+
+
+ +

Profiles
+


+ +
+
+gnokii --getprofile [number] + +
+Show settings for selected(all) profile(s) + +

Usage examples: + +

+tfuj:~$ gnokii --getprofile 1
+1. "General"
+Incoming call alert: Ringing
+Ringtone number: 19
+Ringing volume: Level 3
+Message alert tone: Standard
+Keypad tones: Off
+Warning and game tones: On
+Vibration: On
+Caller groups: 0x00
+
+
+ +
+
+gnokii --setprofile number feature value + +
+Set profile feature + +

Possible features are: +

    +
  • callalert (Incoming call alert) +
    possible values are: +
      +
    • ringing (Ringing)
    • +
    • ascending (Ascending)
    • +
    • ringonce (Ring once)
    • +
    • beeponce (Beep once)
    • +
    • ringing (Ringing)
    • +
    • groups (Caller groups - not in N5110)
    • +
    • off,0 (Off)
    • +
    +
  • +
  • volume (Ringing volume) +
    possible values are: 1|2|3|4|5 +
  • +
  • keypad,keypadtone (Keypad tones) +
    possible values are: +
      +
    • 0,off (Off)
    • +
    • 1 (Level 1)
    • +
    • 2 (Level 2)
    • +
    • 3 (Level 3)
    • +
    +
  • +
  • smstone,messagetone,sms,message (Message alert tone) +
    possible values are: +
      +
    • 0,off (No tone)
    • +
    • standard (Standard)
    • +
    • special (Special)
    • +
    • beeponce,once (Beep once)
    • +
    • ascending (Ascending)
    • +
    +
  • +
  • warningtone,warning (Warning and game tones) +
    possible values are: 0|off|1|on +
  • +
  • vibra,vibration (Vibration) +
    possible values are: 0|off|1|on +
  • +
  • lights (Lights) +
    possible values are: +
      +
    • 0,off (Automatic)
    • +
    • 1,on (On)
    • +
    +
  • +
  • answer (Automatic answer) +
    possible values are: 0|off|1|on +
  • +
  • name - profile name (doesn't work in N5110) +
    value is new profile name +
  • +
  • ringtone (Ringing tone) +
    value is new ringing tone number +
  • +
  • groups - caller group name for profile +
    value is new caller group number +
  • +
+ +

Usage examples: + +

+
+
+ +

Security features
+


+ +

This functions are available ONLY, if gnokii was compiled with them ! + +

+
+gnokii --entersecuritycode PIN|PIN2|PUK|PUK2 + +
+Asks for the code and sends it to the phone + +

Usage examples: + +

+
+
+ +
+
+gnokii --getsecuritycodestatus + +
+Show if a security code is needed + +

Usage examples: + +

+
+
+ +
+
+gnokii --getsecuritycode PIN|PIN2|PUK|PUK2|SecurityCode + +
+Gets security code (only SecurityCode allowed !) + +

Usage examples: + +

+
+
+ +

Other functions
+


+ +
+
gnokii --monitor +
Runs gnokii in persistent communication state - displays all data +received from the phone to the stderr. Example session: + +
tfuj:~$ gnokii --monitor
+Entering monitor mode...
+Initialising GSM interface...
+RFLevel: 4
+Battery: 3
+Power Source: battery
+SIM: Used 42, Free 188
+Phone: Used 4, Free 46
+FD: Used 0, Free 20
+ON: Used 2, Free 3
+SMS Messages: UnRead 0, Number 26
+Network: IDEA Centertel (Poland), LAC: 00c8, CellID: 1024
+[...]
+
+
+ +
+
+gnokii --dialvoice number + +
+Initiate voice call from first number on SIM card. + +

Usage examples: + +

+
+
+ +
+
+gnokii --getdisplaystatus + +
+Shows what icons are displayed in phone's screen. + +

Usage examples: + +

+tfuj:~$ gnokii --getdisplaystatus    
+Call in progress: off
+Unknown: off
+Unread SMS: off
+Voice call: off
+Fax call active: off
+Data call active: off
+Keyboard lock: off
+SMS storage full: off
+
+
+ +
+
+gnokii --identify + +
+Get IMEI, model and revision +. In this moment doesn't work with MBUS connection +and Unix... + +

Usage examples: + +

+tfuj:~$ gnokii --identify    
+IMEI:     495502202470000
+Model:    NSK-3
+Revision: SW 4.11, HW2460
+
+
+ +
+
+gnokii --senddtmf string + +
+Sends DTMF sequence +. If you will start from "p" (Pause), phone will display +menu before sending it... + +

Usage examples: + +

+
+
+ +
+
+gnokii --presskeysequence sequence + +
+presses some keys in phone keyboard + +

Available keys: +

    +
  • 0..9
  • +
  • #
  • +
  • *
  • +
  • m (Menu)
  • +
  • n (Names)
  • +
  • p (Power)
  • +
  • g (Green)
  • +
  • r (Red)
  • +
  • +, - (Volume up or down)
  • +
  • u (Up arrow)
  • +
  • d (Down arrow)
  • +
  • w - 2 sec. pause (useful, when you simulate writing SMS)
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --reset [soft|hard] + +
+Resets the phone. + You can use "soft" parameter (no question for PIN code - it's default) +or "hard" (phone will ask for PIN - of course, if you have it enabled in your card; +in some phones - for example N5110 - this type of reset will be like "soft") + +

Usage examples: + +

+
+
+ +
+
+gnokii --getphoneprofile + +
+Gets profile set normally with Product Profile Settings + +

Usage examples: + +

+
+
+ +
+
+gnokii --setphoneprofile feature value + +
+Set profile set normally with Product Profile Settings: + +

Features can be: + +

+

    +
  • "ALS" (Alternative Line Service) - values "0" or "1"
  • +
  • "HRData" (data transmission using Half Rate channels) - values "0" or "1"
  • +
+ +

Usage examples: + +

+
+
+ +
+
+gnokii --displayoutput + +
+Show texts displayed in phone's screen + +

Usage examples: + +

+tfuj:~$ gnokii --displayoutput
+Entering display monitoring mode...
+Accessory
+connected
+Names
+Menu
+23:59
+Messages
+Exit
+Select
+_
+Messages
+Exit
+Select
+_
+Call register
+Exit
+Select
+2
+Missed
+calls
+Back
+Select
+2-1
+Received
+calls
+Back
+Select
+2-2
+Dialled
+numbers
+Back
+Select
+2-3
+Erase recent
+call lists
+Back
+Select
+2-4
+Show call
+duration
+Back
+Select
+2-5
+Last call
+duration
+00:01:33
+Back
+2-5-1
+All calls'
+duration
+06:45:02
+Back
+2-5-2
+Received calls'
+duration
+02:49:38
+Back
+2-5-3
+Names
+Menu
+23:59
+...WAW... 
+POCZTA ELE
+...WAW... 
+Leaving display monitor mode...
+
+
+ +
+
+gnokii --getphoneprofile + +
+Gets Product Profile Settings from phone + +

Usage examples: + +

+
+
+ +
+
+gnokii --getoperatorname + +
+Get info about downloaded operator name + +

Usage examples: + +

+
+
+ +
+
+gnokii --setoperatorname code name + +
+Set downloaded operator name + +

Usage examples: + +

+
+
+ +

How to send SMS to multiple recipients using gnokii ?
+


+ +

+ +#!/bin/tcsh

+if ( $# == 0 ) then
+  echo "You must specify at least one recipient's number!"
+  exit 1
+endif

+echo -n "Enter SMS:"
+set sms="$<"

+foreach i ( $* )
+  echo "$sms" | gnokii --sendsms "$i"
+end +
+ + + + +

Sending script...
+


Author: oxana [rasqua@t-online.de] -

+

I use a simple perlscript to send sms from a daily generated file. The file is generated by another script. @@ -1647,8 +1647,8 @@ select(undef,undef,undef,$timeout); } exit(0); # exit program - - - - + + + + diff --git a/Docs/en_US/gnokii/phones.htm b/Docs/en_US/gnokii/phones.htm index 69d7dfb..8cbb86d 100644 --- a/Docs/en_US/gnokii/phones.htm +++ b/Docs/en_US/gnokii/phones.htm @@ -1,208 +1,208 @@ - - - - - Supported phones - - - - - -

Main page

-
Supported phones
- -


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelConnectionLogosRingtonesData callsNotes
640(mbus)???
3110serial?-?
3210serial/mbusstartup (static)/operator/pictureuploading-
3310serial/mbusstartup (static)/operator/pictureuploading only-Each memory note has null name
3810serial?-?
5110serial/mbus or ATGSM (with NCDS)operator-yes
5130serial/mbus or ATGSM (with NCDS)operator-yes
5160(mbus)?-?
6110serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6130serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6150serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6160(mbus)???
6185(mbus)???
6210serial/mbus/dlr3 or ATGSMstartup/operator/callernono
7110serial/mbus/dlr3 or ATGSMstartup/operator/callernono
8110serial?-?
8110iserial?incoming?
9000i??incoming?
- -

Note: - -

-

    -
  • ? - not tested
  • -
  • incoming - you have to find another phone supported by mygnokii and -send ringtone/logo/etc. to this one
  • -
  • no - feature not supported by mygnokii
  • -
  • yes - feature supported by mygnokii
  • -
  • - - feature not supported by phone
  • -
- -

In connection you have types, you should enter in gnokiirc and which will -work in phone. When its' in brackets, it means, that this of connection is supported, -but "connection" parameter in gnokiirc is not important. ATGSM means, that you -should use ATGSM "model" in gnokiirc. - - - + + + + + Supported phones + + + + + +

Main page

+
Supported phones
+ +


+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModelConnectionLogosRingtonesData callsNotes
640(mbus)???
3110serial?-?
3210serial/mbusstartup (static)/operator/pictureuploading-
3310serial/mbusstartup (static)/operator/pictureuploading only-Each memory note has null name
3810serial?-?
5110serial/mbus or ATGSM (with NCDS)operator-yes
5130serial/mbus or ATGSM (with NCDS)operator-yes
5160(mbus)?-?
6110serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6130serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6150serial/mbus/infrared or ATGSM (with NCDS)startup/operator/calleruploading/downloadingyes
6160(mbus)???
6185(mbus)???
6210serial/mbus/dlr3 or ATGSMstartup/operator/callernono
7110serial/mbus/dlr3 or ATGSMstartup/operator/callernono
8110serial?-?
8110iserial?incoming?
9000i??incoming?
+ +

Note: + +

+

    +
  • ? - not tested
  • +
  • incoming - you have to find another phone supported by mygnokii and +send ringtone/logo/etc. to this one
  • +
  • no - feature not supported by mygnokii
  • +
  • yes - feature supported by mygnokii
  • +
  • - - feature not supported by phone
  • +
+ +

In connection you have types, you should enter in gnokiirc and which will +work in phone. When its' in brackets, it means, that this of connection is supported, +but "connection" parameter in gnokiirc is not important. ATGSM means, that you +should use ATGSM "model" in gnokiirc. + + + diff --git a/Docs/en_US/gnokii/todologo b/Docs/en_US/gnokii/todologo index d497d86..10f1168 100644 --- a/Docs/en_US/gnokii/todologo +++ b/Docs/en_US/gnokii/todologo @@ -1,52 +1,52 @@ - - -todologo.perl GNOKII Tools todologo.perl - - -NAME - todologo.perl - Create operator logo that contains 3 lines of text - -SYNOPSIS - todologo.perl - - - -DESCRIPTION - The `todologo.perl' program is used to create three lines of text - that fits to the standard Nokia operator logo space (i.e. 72x14 - pixel space). This is achieved by using a proportional tiny font - which most elements have size of 3x4 pixels (some are thinner). - - The name comes from an original intention that this program is - used to create todo entries to one's mobile phone screen so that - those are always visible and thus in user's memory. But the tool - can just be used to print arbitrary text to the space provided - by an operator logo. - - The hand-crafted font currently supports the following characters: - abcdefghijklmnopqrstuvwxyz and 0123456789 - -OUTPUT - The standard `.nol' formatted operator logo is printed to - standard output. The header information of that output is taken - from `gnokii.nol' that is distributed with Gnokii -- so you most - probably need to give your operator code when uploading it to your - mobile phone. Use `Gnokii' or `Xlogos' to do the uploading. - -EXAMPLES - First example writes some todo entries to todo.nol: - - todologo.perl pick up kids - call wife - order chinese >todo.nol - - This last example writes some wisdom to the stdout: - - todologo.perl Never underestimate - the power of the dork - \ - side of the force - -SEE ALSO - Gnokii, Xlogos - -COPYING - This program is distributed under the GNU Public License. - - - -Gnokii Tools 25oct2000 + + +todologo.perl GNOKII Tools todologo.perl + + +NAME + todologo.perl - Create operator logo that contains 3 lines of text + +SYNOPSIS + todologo.perl - - + +DESCRIPTION + The `todologo.perl' program is used to create three lines of text + that fits to the standard Nokia operator logo space (i.e. 72x14 + pixel space). This is achieved by using a proportional tiny font + which most elements have size of 3x4 pixels (some are thinner). + + The name comes from an original intention that this program is + used to create todo entries to one's mobile phone screen so that + those are always visible and thus in user's memory. But the tool + can just be used to print arbitrary text to the space provided + by an operator logo. + + The hand-crafted font currently supports the following characters: + abcdefghijklmnopqrstuvwxyz and 0123456789 + +OUTPUT + The standard `.nol' formatted operator logo is printed to + standard output. The header information of that output is taken + from `gnokii.nol' that is distributed with Gnokii -- so you most + probably need to give your operator code when uploading it to your + mobile phone. Use `Gnokii' or `Xlogos' to do the uploading. + +EXAMPLES + First example writes some todo entries to todo.nol: + + todologo.perl pick up kids - call wife - order chinese >todo.nol + + This last example writes some wisdom to the stdout: + + todologo.perl Never underestimate - the power of the dork - \ + side of the force + +SEE ALSO + Gnokii, Xlogos + +COPYING + This program is distributed under the GNU Public License. + + + +Gnokii Tools 25oct2000 diff --git a/Docs/en_US/gnokii/xgnokii/calendar/index.htm b/Docs/en_US/gnokii/xgnokii/calendar/index.htm index 7e8da59..a2e5a22 100644 --- a/Docs/en_US/gnokii/xgnokii/calendar/index.htm +++ b/Docs/en_US/gnokii/xgnokii/calendar/index.htm @@ -1,18 +1,18 @@ - - - - - Calendar - - - - - -

Main page

-
Calendar
- -

FIX ME: we need description of Calendar window in xgnokii here... - - - - + + + + + Calendar + + + + + +

Main page

+
Calendar
+ +

FIX ME: we need description of Calendar window in xgnokii here... + + + + diff --git a/Docs/en_US/gnokii/xgnokii/contacts/index.htm b/Docs/en_US/gnokii/xgnokii/contacts/index.htm index d506422..8ea93cd 100644 --- a/Docs/en_US/gnokii/xgnokii/contacts/index.htm +++ b/Docs/en_US/gnokii/xgnokii/contacts/index.htm @@ -1,18 +1,18 @@ - - - - - Contacts - - - - - -

Main page

-
Contacts
- -

FIX ME: we need description of Contacts window in xgnokii here... - - - - + + + + + Contacts + + + + + +

Main page

+
Contacts
+ +

FIX ME: we need description of Contacts window in xgnokii here... + + + + diff --git a/Docs/en_US/gnokii/xgnokii/dtmf/index.htm b/Docs/en_US/gnokii/xgnokii/dtmf/index.htm index ce9c9e3..affaa2b 100644 --- a/Docs/en_US/gnokii/xgnokii/dtmf/index.htm +++ b/Docs/en_US/gnokii/xgnokii/dtmf/index.htm @@ -1,18 +1,18 @@ - - - - - DTMF - - - - - -

Main page

-
DTMF
- -

FIX ME: we need description of DTMF window in xgnokii here... - - - - + + + + + DTMF + + + + + +

Main page

+
DTMF
+ +

FIX ME: we need description of DTMF window in xgnokii here... + + + + diff --git a/Docs/en_US/gnokii/xgnokii/main/index.htm b/Docs/en_US/gnokii/xgnokii/main/index.htm index f1b4aaa..82ca10e 100644 --- a/Docs/en_US/gnokii/xgnokii/main/index.htm +++ b/Docs/en_US/gnokii/xgnokii/main/index.htm @@ -1,18 +1,18 @@ - - - - - XGNOKII - - - - - -

Main page

-
XGNOKII
- -

FIX ME: we need description of main xgnokii window here... - - - - + + + + + XGNOKII + + + + + +

Main page

+
XGNOKII
+ +

FIX ME: we need description of main xgnokii window here... + + + + diff --git a/Docs/en_US/gnokii/xgnokii/netmon/index.htm b/Docs/en_US/gnokii/xgnokii/netmon/index.htm index 32d6173..f45cc7f 100644 --- a/Docs/en_US/gnokii/xgnokii/netmon/index.htm +++ b/Docs/en_US/gnokii/xgnokii/netmon/index.htm @@ -1,21 +1,21 @@ - - - - - Netmon - - - - - -

Main page

-
Netmon
- -

FIX ME: we need description of Netmon window in xgnokii here... - -

Related links: -
Netmonitor manual - - - - + + + + + Netmon + + + + + +

Main page

+
Netmon
+ +

FIX ME: we need description of Netmon window in xgnokii here... + +

Related links: +
Netmonitor manual + + + + diff --git a/Docs/en_US/gnokii/xgnokii/sms/index.htm b/Docs/en_US/gnokii/xgnokii/sms/index.htm index e9447b2..7fbd770 100644 --- a/Docs/en_US/gnokii/xgnokii/sms/index.htm +++ b/Docs/en_US/gnokii/xgnokii/sms/index.htm @@ -1,23 +1,23 @@ - - - - - SMS - - - - - -

Main page

-
SMS
- -

- -

FIX ME: we need description of SMS window in xgnokii here... - -

Related topics: -
SMS FAQ - - - - + + + + + SMS + + + + + +

Main page

+
SMS
+ +

+ +

FIX ME: we need description of SMS window in xgnokii here... + +

Related topics: +
SMS FAQ + + + + diff --git a/Docs/en_US/gnokii/xgnokii/speeddial/index.htm b/Docs/en_US/gnokii/xgnokii/speeddial/index.htm index a2a89f2..ac5f18c 100644 --- a/Docs/en_US/gnokii/xgnokii/speeddial/index.htm +++ b/Docs/en_US/gnokii/xgnokii/speeddial/index.htm @@ -1,18 +1,18 @@ - - - - - Speed dial - - - - - -

Main page

-
Speed dial
- -

FIX ME: we need description of Speed dial window in xgnokii here... - - - - + + + + + Speed dial + + + + + +

Main page

+
Speed dial
+ +

FIX ME: we need description of Speed dial window in xgnokii here... + + + + diff --git a/Docs/en_US/gnokii/xgnokii/xkeyb/index.htm b/Docs/en_US/gnokii/xgnokii/xkeyb/index.htm index 91783e0..51a7cc5 100644 --- a/Docs/en_US/gnokii/xgnokii/xkeyb/index.htm +++ b/Docs/en_US/gnokii/xgnokii/xkeyb/index.htm @@ -1,18 +1,18 @@ - - - - - Keyboard - - - - - -

Main page

-
Keyboard
- -

FIX ME: we need description of Keyboard window in xgnokii here... - - - - + + + + + Keyboard + + + + + +

Main page

+
Keyboard
+ +

FIX ME: we need description of Keyboard window in xgnokii here... + + + + diff --git a/Docs/en_US/gsm/cables/cables.htm b/Docs/en_US/gsm/cables/cables.htm index a2f9fae..3b14ef6 100644 --- a/Docs/en_US/gsm/cables/cables.htm +++ b/Docs/en_US/gsm/cables/cables.htm @@ -1,130 +1,130 @@ - - - - - Cables FAQ - - - - - -

Main page

-
Cables FAQ
- -


- -

What cables are used for Nokia phones ?
-


- -

Nokia phone can support three protocols of transmission over cable: - -

-

    -
  • M2BUS (called often simply MBUS) - 9600,N,...
  • -
  • FBUS - 115200
  • -
  • AT mode - 19600
  • -
- -

You cable can support each of them...and phone must be compatible with it -(for example, CAN'T use DLR-3 with phone, which show "headset connected" -after connecting it)... - -

Schematics
-


- -

Simple M2BUS (only) cable: -

-

Note: -
-

    -
  • 74HC04 must be in HC version
  • -
  • Dioda Zenera 3,2 V it required for phones different than 21xx, 3110
  • -
- -

FBUS cable: -

- -

Switch for M2BUS/FBUS for cable above: -

- -

Cable for AT mode is unavailable here, because it needs programmed chip -and I don't know, what programm should be inside... - -

To make FBUS/MBUS cable you have to connect: -

-

    -
  • FBUS - GND, TX and RX
  • -
  • M2BUS - MBUS and GND
  • -
- -

Phone connectors
-


- - - -

What are original cables for Nokia phones ?
-


- -

-

    -
  • DAU-3 (or DAU-3H) - cable for Nokia series 2100. -Sell with Nokia Cellularware (it isn't produced now). -
  • - -
  • -DAU-4S - cable for Nokia 3110 and all models in series 8100 (8110, 8110i, 8148 and 8148i). -Sell with Nokia Cellularware (it isn't produced now). -
  • - -
  • -DAU-4F - uniwersal (FBUS/M2BUS) cable without switch, -for Nokia 3110 and all models in series 8100 (8110, 8110i, 8148 and 8148i). -Sell with Nokia Cellular Data Suite 1.0 (it isn't produced now). -
  • - -
  • -DAU-9P - uniwersal (FBUS/M2BUS) cable without switch, for Nokia 51x0/61x0. -Sell with Nokia Cellular Data Suite 1.2 - 3.0a. -
  • - -
  • -DLR-1 - cable sell with Nokia 9000 Communicator. It can be used -to exchange date between phone and computer and installing software into phone. -It's M2BUS cable. -
  • - -
  • -DLR-2 - cable sell with Nokia 9110 Communicator. It can be used -to exchange date between phone and computer and installing software into phone. -It's M2BUS cable, but can't be used with programs working with this protocol (needs -some small changes - after them will not work original Communicator programms). - -
  • -DLR-3 and DLR-3P - cables for Nokia 7110/6210. Supports AT mode and FBUS. -FIXME: MBUS too ? -
  • -
- -

Can I use DLR-3 cable with my phone ?
-


- -

See post from gnokii maillist: - -

The dlr-3 CAN'T work with the older phones. this is because the -converter in the cable is powered by the phone. this is done by the -phone by raising the !mic-gnd! pin to vcc. if the cable doesn't -repond on the mbus after 1 second, the power is dropped. a older -phone doesn't do this, so the converter is unpowered. - -

To decide if a phone needs a dau-9 (the old one, powered by pc) or -the new one (dlr-3) simply connect a dlr-3 to the phone. if the -phone says "headset connected" it isn't capable of using a dlr-3 -and you have to change to a dau-9. - -


- -

Page created from materials from www.fkn.pl - - - - + + + + + Cables FAQ + + + + + +

Main page

+
Cables FAQ
+ +


+ +

What cables are used for Nokia phones ?
+


+ +

Nokia phone can support three protocols of transmission over cable: + +

+

    +
  • M2BUS (called often simply MBUS) - 9600,N,...
  • +
  • FBUS - 115200
  • +
  • AT mode - 19600
  • +
+ +

You cable can support each of them...and phone must be compatible with it +(for example, CAN'T use DLR-3 with phone, which show "headset connected" +after connecting it)... + +

Schematics
+


+ +

Simple M2BUS (only) cable: +

+

Note: +
+

    +
  • 74HC04 must be in HC version
  • +
  • Dioda Zenera 3,2 V it required for phones different than 21xx, 3110
  • +
+ +

FBUS cable: +

+ +

Switch for M2BUS/FBUS for cable above: +

+ +

Cable for AT mode is unavailable here, because it needs programmed chip +and I don't know, what programm should be inside... + +

To make FBUS/MBUS cable you have to connect: +

+

    +
  • FBUS - GND, TX and RX
  • +
  • M2BUS - MBUS and GND
  • +
+ +

Phone connectors
+


+ + + +

What are original cables for Nokia phones ?
+


+ +

+

    +
  • DAU-3 (or DAU-3H) - cable for Nokia series 2100. +Sell with Nokia Cellularware (it isn't produced now). +
  • + +
  • +DAU-4S - cable for Nokia 3110 and all models in series 8100 (8110, 8110i, 8148 and 8148i). +Sell with Nokia Cellularware (it isn't produced now). +
  • + +
  • +DAU-4F - uniwersal (FBUS/M2BUS) cable without switch, +for Nokia 3110 and all models in series 8100 (8110, 8110i, 8148 and 8148i). +Sell with Nokia Cellular Data Suite 1.0 (it isn't produced now). +
  • + +
  • +DAU-9P - uniwersal (FBUS/M2BUS) cable without switch, for Nokia 51x0/61x0. +Sell with Nokia Cellular Data Suite 1.2 - 3.0a. +
  • + +
  • +DLR-1 - cable sell with Nokia 9000 Communicator. It can be used +to exchange date between phone and computer and installing software into phone. +It's M2BUS cable. +
  • + +
  • +DLR-2 - cable sell with Nokia 9110 Communicator. It can be used +to exchange date between phone and computer and installing software into phone. +It's M2BUS cable, but can't be used with programs working with this protocol (needs +some small changes - after them will not work original Communicator programms). + +
  • +DLR-3 and DLR-3P - cables for Nokia 7110/6210. Supports AT mode and FBUS. +FIXME: MBUS too ? +
  • +
+ +

Can I use DLR-3 cable with my phone ?
+


+ +

See post from gnokii maillist: + +

The dlr-3 CAN'T work with the older phones. this is because the +converter in the cable is powered by the phone. this is done by the +phone by raising the !mic-gnd! pin to vcc. if the cable doesn't +repond on the mbus after 1 second, the power is dropped. a older +phone doesn't do this, so the converter is unpowered. + +

To decide if a phone needs a dau-9 (the old one, powered by pc) or +the new one (dlr-3) simply connect a dlr-3 to the phone. if the +phone says "headset connected" it isn't capable of using a dlr-3 +and you have to change to a dau-9. + +


+ +

Page created from materials from www.fkn.pl + + + + diff --git a/Docs/en_US/gsm/codes/codes.htm b/Docs/en_US/gsm/codes/codes.htm index c8db321..93668e7 100644 --- a/Docs/en_US/gsm/codes/codes.htm +++ b/Docs/en_US/gsm/codes/codes.htm @@ -1,136 +1,136 @@ - - - - - - - - - - - - - - - - - - - - FAQ - kable do Nokii - - - - - -

Strona g³ówna/Main -page

- -
Kody do Nokii/Codes -for Nokia phones
- -

-
- -

Poni¿ej zosta³y zebrane wszystkie (?) kody do telefonów Nokia, które mo¿na -wpisaæ w momencie, gdy na wy¶wietlaczu jest widoczna nazwa sieci/logo i odblokowana -jest klawiatura:

-

You have here all (?) codes for Nokia phones. You can enter them, when -see on the screen network name/logo and keypad is unlocked.

-

-
    -
  • GSM/DCS/PCN: -
      -
    • *#06# - sprawdzanie IMEI/checking IMEI. -Wiêcej o IMEI/More about IMEI
    • -
    • *EFR0# w³±cza/enables EFR -, #EFR0# wy³±cza/disables EFR -. Je¿eli dzia³a w Twoim telefonie (GSM/DCS/PCN), telefon siê zrestartuje -po jego u¿yciu/If it works for your GSM/DCS/PCN phone, phone will restart -after using it. Je¿eli nie, mo¿esz u¿yæ np. mygnokii ze strony -Pliki do pobrania do jego w³±czenia/If not, you can use mygnokii from - Files for download page to -enable it. Wiêcej o EFR/More about EFR
    • -
    • *HRC0# w³±cza/enables HR -, #HRC0# wy³±cza/disables HR -. Je¿eli dzia³a w Twoim telefonie (GSM/DCS/PCN), telefon siê zrestartuje -po jego u¿yciu/If it works for your GSM/DCS/PCN phone, phone will restart -after using it. Je¿eli nie, mo¿esz u¿yæ np. mygnokii ze strony -Pliki do pobrania do jego w³±czenia/If not, you can use mygnokii from - Files for download page to -enable it. Wiêcej o HR/More about HR
    • -
    • *#sim0clock# - sprawdza, czy mo¿liwe jest zatrzymanie zegara -karty SIM/checks, if SIM card can stop its' clock (GSM/DCS/PCN)
    • - -
    -
  • -
  • analog: -
      -
    • *3001#12345, *#639# - Menu do programowania NAM/NAM programming -menu. W niektórych modelach pozwala w³±czyæ -monitor sieci (nazywany Field Test)/In some models allows to enable -netmonitor (called Field Test).
    • -
    • *#92772689# - checking ISDN number/sprawdzanie numeru ISDN (N6120/6160/6162)
    • -
    • *#EVRC# - w³±cza i wy³±cza AMPS (Enhanced Variable Rate Codec)/enables -and disables AMPS (Enhanced Variable Rate Codec) (N6185)
    • - -
    -
  • -
  • *#9999#, *#170602112302#, *#682371158412125#, - *#3110#, *#0000#, *#3810#, *#5190#, *#6120# -, *#837#, *#6190#, *#8110# - sprawdzanie wersji i daty -firmware, modelu telefonu/checking firmware date & version and phone -model. Wiêcej o firmware/More about firmware
  • -
  • #pw+Master code+Y# - kod pozwalaj±cy zdj±æ simlocka o numerze -Y (je¿eli podano prawid³owy 10-cyfrowy MasterCode) - wtedy zobaczysz -"SIM protection turn off". Je¿eli telefon ma simlocka i podano z³y MasterCode, -zobaczysz "Code error". Je¿eli telefon nie ma simlocka, zobaczysz - "SIM was not restricted". Mo¿esz sprawdziæ stan simlocka równie¿ -przy u¿yciu mygnokii ze strony Pliki do -pobrania This is code for disabling simlock number Y (if you gave correct -10-digits MasterCode) - you will see "SIM protection turn off". -If phone has simlock and MasterCode was wrong, you will see "Code error" -. If phone doesn't have simlock, you will see "SIM was not restricted" -. You can also check simlock state using mygnokii from page -Files for download too
  • -
  • *#war0anty#, *#warranty# - wej¶cie do menu serwisowego/entering -service menu. W niektórych telefonach nale¿y usun±æ modu³ analogowy przed -jego u¿yciem/In some phones you have to remove analog module before using -it. W niektórych starszych telefonach (np. Nokii 3110) trzeba tu podaæ dodatkowy -kod/ In some older phones (like Nokia 3110) you have to enter additional -code here: -
      -
    • 6232 (OK): Pokazuje miesi±c i rok produkcji/Displays the Month -and Year of Manufacture
    • -
    • 7332 (OK): Pokazuje datê ostatniej naprawy/Displays the date -of the last repairment, if found ('DATE NOT SAVED'...)
    • -
    • 7832 (OK): Pokazuje datê kupna telefonu/Displays (if found) -the date where the phone was purchased ('DATE NOT SAVED'...)
    • -
    • 9268 (OK): Pokazuje numer seryjny/Displays Serial Number
    • -
    • 37832 (OK): Zmienia datê kupna (TYLKO RAZ!)/Set the Purchasing -Date MMYY (Warning: You can only do this once - So be careful ...)
    • -
    • 87267 (OK): Transfer danych do nastêpnego telefonu/Transfers -ALL phone numbers, pictures, sounds from one phone to another
    • - -
    -
  • -
  • *#7780# - reset ustawieñ telefonu do fabrycznych (np. Nokia -3110)/reset settings to Factory (for example, Nokia 3110)
  • -
  • *#date# - pokazuje datê produkcji/data date of production (N2110)
  • -
  • *#srn0# - pokazuje numer seryjny/shows Serial Number (N6150)
  • -
  • *#opr0logo# - kasuje logo operatora. Dzia³a w Nokii 3310 4.06 -i nowszych/clears operator logo. Works in Nokia 3310 4.06 and newer
  • - -
- -

Na pocz±tek/Back to the top

-

-
-
-

-Marcin Wi±cek ( -WWW)
-Ostatnia aktualizacja: 5 stycznia 2002/Last modification: 5 January 2002
-

- - + + + + + + + + + + + + + + + + + + + + FAQ - kable do Nokii + + + + + +

Strona g³ówna/Main +page

+ +
Kody do Nokii/Codes +for Nokia phones
+ +

+
+ +

Poni¿ej zosta³y zebrane wszystkie (?) kody do telefonów Nokia, które mo¿na +wpisaæ w momencie, gdy na wy¶wietlaczu jest widoczna nazwa sieci/logo i odblokowana +jest klawiatura:

+

You have here all (?) codes for Nokia phones. You can enter them, when +see on the screen network name/logo and keypad is unlocked.

+

+
    +
  • GSM/DCS/PCN: +
      +
    • *#06# - sprawdzanie IMEI/checking IMEI. +Wiêcej o IMEI/More about IMEI
    • +
    • *EFR0# w³±cza/enables EFR +, #EFR0# wy³±cza/disables EFR +. Je¿eli dzia³a w Twoim telefonie (GSM/DCS/PCN), telefon siê zrestartuje +po jego u¿yciu/If it works for your GSM/DCS/PCN phone, phone will restart +after using it. Je¿eli nie, mo¿esz u¿yæ np. mygnokii ze strony +Pliki do pobrania do jego w³±czenia/If not, you can use mygnokii from + Files for download page to +enable it. Wiêcej o EFR/More about EFR
    • +
    • *HRC0# w³±cza/enables HR +, #HRC0# wy³±cza/disables HR +. Je¿eli dzia³a w Twoim telefonie (GSM/DCS/PCN), telefon siê zrestartuje +po jego u¿yciu/If it works for your GSM/DCS/PCN phone, phone will restart +after using it. Je¿eli nie, mo¿esz u¿yæ np. mygnokii ze strony +Pliki do pobrania do jego w³±czenia/If not, you can use mygnokii from + Files for download page to +enable it. Wiêcej o HR/More about HR
    • +
    • *#sim0clock# - sprawdza, czy mo¿liwe jest zatrzymanie zegara +karty SIM/checks, if SIM card can stop its' clock (GSM/DCS/PCN)
    • + +
    +
  • +
  • analog: +
      +
    • *3001#12345, *#639# - Menu do programowania NAM/NAM programming +menu. W niektórych modelach pozwala w³±czyæ +monitor sieci (nazywany Field Test)/In some models allows to enable +netmonitor (called Field Test).
    • +
    • *#92772689# - checking ISDN number/sprawdzanie numeru ISDN (N6120/6160/6162)
    • +
    • *#EVRC# - w³±cza i wy³±cza AMPS (Enhanced Variable Rate Codec)/enables +and disables AMPS (Enhanced Variable Rate Codec) (N6185)
    • + +
    +
  • +
  • *#9999#, *#170602112302#, *#682371158412125#, + *#3110#, *#0000#, *#3810#, *#5190#, *#6120# +, *#837#, *#6190#, *#8110# - sprawdzanie wersji i daty +firmware, modelu telefonu/checking firmware date & version and phone +model. Wiêcej o firmware/More about firmware
  • +
  • #pw+Master code+Y# - kod pozwalaj±cy zdj±æ simlocka o numerze +Y (je¿eli podano prawid³owy 10-cyfrowy MasterCode) - wtedy zobaczysz +"SIM protection turn off". Je¿eli telefon ma simlocka i podano z³y MasterCode, +zobaczysz "Code error". Je¿eli telefon nie ma simlocka, zobaczysz + "SIM was not restricted". Mo¿esz sprawdziæ stan simlocka równie¿ +przy u¿yciu mygnokii ze strony Pliki do +pobrania This is code for disabling simlock number Y (if you gave correct +10-digits MasterCode) - you will see "SIM protection turn off". +If phone has simlock and MasterCode was wrong, you will see "Code error" +. If phone doesn't have simlock, you will see "SIM was not restricted" +. You can also check simlock state using mygnokii from page +Files for download too
  • +
  • *#war0anty#, *#warranty# - wej¶cie do menu serwisowego/entering +service menu. W niektórych telefonach nale¿y usun±æ modu³ analogowy przed +jego u¿yciem/In some phones you have to remove analog module before using +it. W niektórych starszych telefonach (np. Nokii 3110) trzeba tu podaæ dodatkowy +kod/ In some older phones (like Nokia 3110) you have to enter additional +code here: +
      +
    • 6232 (OK): Pokazuje miesi±c i rok produkcji/Displays the Month +and Year of Manufacture
    • +
    • 7332 (OK): Pokazuje datê ostatniej naprawy/Displays the date +of the last repairment, if found ('DATE NOT SAVED'...)
    • +
    • 7832 (OK): Pokazuje datê kupna telefonu/Displays (if found) +the date where the phone was purchased ('DATE NOT SAVED'...)
    • +
    • 9268 (OK): Pokazuje numer seryjny/Displays Serial Number
    • +
    • 37832 (OK): Zmienia datê kupna (TYLKO RAZ!)/Set the Purchasing +Date MMYY (Warning: You can only do this once - So be careful ...)
    • +
    • 87267 (OK): Transfer danych do nastêpnego telefonu/Transfers +ALL phone numbers, pictures, sounds from one phone to another
    • + +
    +
  • +
  • *#7780# - reset ustawieñ telefonu do fabrycznych (np. Nokia +3110)/reset settings to Factory (for example, Nokia 3110)
  • +
  • *#date# - pokazuje datê produkcji/data date of production (N2110)
  • +
  • *#srn0# - pokazuje numer seryjny/shows Serial Number (N6150)
  • +
  • *#opr0logo# - kasuje logo operatora. Dzia³a w Nokii 3310 4.06 +i nowszych/clears operator logo. Works in Nokia 3310 4.06 and newer
  • + +
+ +

Na pocz±tek/Back to the top

+

+
+
+

+Marcin Wi±cek ( +WWW)
+Ostatnia aktualizacja: 5 stycznia 2002/Last modification: 5 January 2002
+

+ + diff --git a/Docs/en_US/gsm/compare/1.htm b/Docs/en_US/gsm/compare/1.htm index aad41a1..e8a8e94 100644 --- a/Docs/en_US/gsm/compare/1.htm +++ b/Docs/en_US/gsm/compare/1.htm @@ -1,20 +1,20 @@ - - - - - - - - - - Compare phones - - - - - - + + + + + + + + + + Compare phones + + + + + + diff --git a/Docs/en_US/gsm/compare/compare.htm b/Docs/en_US/gsm/compare/compare.htm index b306487..acf0447 100644 --- a/Docs/en_US/gsm/compare/compare.htm +++ b/Docs/en_US/gsm/compare/compare.htm @@ -1,21 +1,21 @@ - - - - - - - - - - Compare your phone - - - + + + + + + + + + + Compare your phone + + + -

Strona g³ówna/Main page

+

Strona g³ówna/Main page

-

Click here to open script in new window - -

Kliknij, aby otworzyæ skrypt w nowym oknie - - +

Click here to open script in new window + +

Kliknij, aby otworzyæ skrypt w nowym oknie + + diff --git a/Docs/en_US/gsm/compare/index.htm b/Docs/en_US/gsm/compare/index.htm index 3645bb7..8c799a3 100644 --- a/Docs/en_US/gsm/compare/index.htm +++ b/Docs/en_US/gsm/compare/index.htm @@ -1,210 +1,210 @@ - - - - - - - - - - Compare your phone - - - - - - + + + + + + + + + + Compare your phone + + + + + + diff --git a/Docs/en_US/gsm/compare/null.htm b/Docs/en_US/gsm/compare/null.htm index a511ca4..c64eba4 100644 --- a/Docs/en_US/gsm/compare/null.htm +++ b/Docs/en_US/gsm/compare/null.htm @@ -1,6 +1,6 @@ - - - - - - + + + + + + diff --git a/Docs/en_US/gsm/firmware/firm12.htm b/Docs/en_US/gsm/firmware/firm12.htm index 8ee1a3e..71c648f 100644 --- a/Docs/en_US/gsm/firmware/firm12.htm +++ b/Docs/en_US/gsm/firmware/firm12.htm @@ -75,7 +75,7 @@ language in phone ? -100 +100 THX-9L @@ -99,7 +99,7 @@ language in phone ? -540 +540 THF-11 @@ -113,7 +113,7 @@ language in phone ? -550 +550 THF-10 @@ -127,7 +127,7 @@ language in phone ? -640 +640 THF-13 @@ -137,7 +137,7 @@ language in phone ? -650 +650 THF-12 @@ -151,7 +151,7 @@ language in phone ? -1011 +1011 NHE-2 @@ -161,7 +161,7 @@ language in phone ? -1610 +1610 NHE-5 @@ -181,7 +181,7 @@ language in phone ? -1611 +1611 NHE-5SX @@ -200,7 +200,7 @@ language in phone ? -1630 +1630 NHE-5NA @@ -214,7 +214,7 @@ language in phone ? -1631 +1631 NHE-5SA @@ -224,7 +224,7 @@ language in phone ? -16?? +16?? NHE-5NX @@ -238,7 +238,7 @@ language in phone ? -2010 +2010 NHE-3 @@ -248,7 +248,7 @@ language in phone ? -2110 +2110 NHE-1XN @@ -263,7 +263,7 @@ language in phone ? -2110i, 2110e for GSM 900 +2110i, 2110e for GSM 900 NHE-4 @@ -278,7 +278,7 @@ language in phone ? -2110i, 2110e for GSM 900 +2110i, 2110e for GSM 900 NHE-4NX @@ -295,7 +295,7 @@ language in phone ? -2110i, 2110e for GSM 1800 +2110i, 2110e for GSM 1800 NHK-IEA @@ -305,7 +305,7 @@ language in phone ? -2140 +2140 NHK-1XA @@ -319,7 +319,7 @@ language in phone ? -2148 +2148 NHK-1 @@ -329,7 +329,7 @@ language in phone ? -2148i +2148i NHK-4 @@ -339,7 +339,7 @@ language in phone ? -2160 +2160 NHC-4NE diff --git a/Docs/en_US/gsm/firmware/firm3.htm b/Docs/en_US/gsm/firmware/firm3.htm index 165e04d..ca19ca3 100644 --- a/Docs/en_US/gsm/firmware/firm3.htm +++ b/Docs/en_US/gsm/firmware/firm3.htm @@ -75,7 +75,7 @@ language in phone ? -3110 +3110 NHE-8 @@ -141,7 +141,7 @@ telefonu i j -3210 +3210 NSE-8/9 @@ -411,11 +411,14 @@ more expensive phones. There still some help texts inside, texts from some functions (does it mean, that phone support them ?) - ("Rename this set" - it can be done via cable !), text with name of "full" profiles - the same question (Meeting, Outdoor, Pager, General), texts "Save to another -memory?, Saved to phone memory,Saved to SIM Card", "List of own numbers"... +memory?, Saved to phone memory,Saved to SIM Card", "List of own numbers"... +

Asian versions have built in vibra in phone. European doesn't have vibra +motor, but have place for it and disabled option in firmware (so, it's +possible to easy add it). -3310 +3310 NHM-5 @@ -1119,7 +1122,7 @@ Possibility for user to delete SIM-created SMS from inbox 

  • Operator Name List updated (#44) 
  • -V5.11 +V5.11 19-12-01
    • Following T9 languages have been added: Arabic, Hungarian, Slovakian 
    • @@ -1215,7 +1218,8 @@ activated and set the clock  SIM ATK: Refresh command no longer jams the keypad. Selectable header in SIM ATK menu has been removed
    - +V5.13 11-01-02 +


    WARNING: IF YOU GIVE YOUR PHONE TO SERVICE FOR REPLACING FIRMWARE, DELETE ALL VOICE TAGS FROM ITS' MEMORY. IN OTHER @@ -1226,12 +1230,53 @@ YOU CAN HAVE ONLY 6 PLACES (NOT 8) FOR VOICE TAGS. SIM cards. I don't know, if problem depends on phone or these SIM cards bugs.... If I have correctly info, users of Polish Plus GSM (260-01) network with SIM cards with HRL 91 should change them... -

    Note: When use shortcut for Menu 8-1, Menu 8-2, Menu 8-3, -Menu 8-4, Menu 8-6, for a moment displays incorrect data... -

    Interesting facts: firmware seems to be cut version of firmware from -more expensive phones. There still some help texts inside, texts from some -functions (does it mean, that phone support them ?) - ("Rename this set"- -it can be done via cable !), texts from "full" calendar ("Meeting", "Birthday", +

    BUGS (all versions): +

      +
    • +When use shortcut for Menu 8-1, Menu 8-2, Menu 8-3, Menu 8-4, +Menu 8-6, for a moment displays incorrect data...
    • + +
    • +No Menu 8-5
    • + +
    • +You need to enter Menu 1-10-1 (after pressing 1 wait about 3 seconds +until you will see "-" in right side of "1" and menu will go higher level, +then enter 10 and 1). Now press Up or Down or wait small moment. You will +see now strange things - screen isn't refreshed, but keys work:
    • + +
        +
      • +When press C once, Navi description is deleted. After it press any key +and everything is OK.
      • + +
      • +When press Up or Down, you select person from phonebook (but of course +you won't see it).
      • + +
      • +Navi selects person
      • +
      + +
    • +when select shortcut to game (like Menu 8-1) and image disappear, +press fast C or Navi many times. Until they will be pressed, menu won't +change.
    • + +
    • +shortcuts Menu 8-6-1-1, Menu 8-6-1-2, Menu 8-6-2-1, Menu 8-6-2-2,Menu +8-6-3-1, Menu 8-6-3-2 and Menu 8-6-4 don't work too correctly
    • + +
    • +after enabling phone and entering PIN, very fast (before reading phonebook +from SIM card) enter Menu 1-9 (can be entered normally without shortcut). +Now leave. And enter again... Each time, when you will enter it, you will +different results. Sometimes phone can reboot...
    • +
    +Interesting facts: firmware seems to be cut version of firmware from more +expensive phones. There still some help texts inside, texts from some functions +(does it mean, that phone support them ?) - ("Rename this set"- it can +be done via cable !), texts from "full" calendar ("Meeting", "Birthday", etc.), texts "Save to another memory?, Saved to phone memory,Saved to SIM Card","List of own numbers" (update: own numbers memory is available via cable)... @@ -1557,7 +1602,7 @@ Emergency dialling snooze; softkey text appears changed from 'Clear' to
  • Operator Name list (#42) and UI Text updated
  • -V4.50: +V4.50 12-10-01:
    • Improvements to WAP
    • @@ -1670,7 +1715,7 @@ WITH VOICE TAGS AND UPGRADING FIRMWARE LIKE IN NOKIA 3310 -V7.03 10-11-00  +V7.03 10-11-00
      V7.05 05-01-01

      @@ -1679,7 +1724,7 @@ WITH VOICE TAGS AND UPGRADING FIRMWARE LIKE IN NOKIA 3310 -3810 +3810 NHE-9 diff --git a/Docs/en_US/gsm/firmware/firm5.htm b/Docs/en_US/gsm/firmware/firm5.htm index d7b083d..a42c900 100644 --- a/Docs/en_US/gsm/firmware/firm5.htm +++ b/Docs/en_US/gsm/firmware/firm5.htm @@ -53,7 +53,8 @@ language in phone ?
      -

      Here is table describing firmware in various Nokia 5xxx phones +

      +

      Here is table describing firmware in various Nokia 5xxx phones
      You can also see table for
      Nokia 1xxx/2xxx, Nokia 3xxx, Nokia 5xxx, Nokia @@ -74,7 +75,7 @@ language in phone ? -5110 +5110 NSE-1 @@ -304,7 +305,7 @@ profiles - the same question (Meeting, Outdoor, Pager, General), texts -5130 +5130 NSK-1 @@ -332,7 +333,7 @@ profiles - the same question (Meeting, Outdoor, Pager, General), texts -5160 +5160 NSW-1 @@ -346,7 +347,7 @@ profiles - the same question (Meeting, Outdoor, Pager, General), texts -5190 +5190 NSB-1 @@ -368,7 +369,8 @@ older firmware in Menu 10).
      V5.81 20-09-99

      Downloadable operator logo and ringtone

      V6.11 28-04-00 -

      V6.71 25-01-01 +

      V6.71 25-01-01 +

      Added T9 dictionaries @@ -411,7 +413,11 @@ have stopped after three minutes, but it crashed). 

    • Language package M (Tagalog, Bahasa Indonesian, Bahasa Malaysian) added. 
    -V3.45 04-12-01 +BUG: If you enter Menu 8 (music) and try to enter music-reader (Menu +8-1), without any music in memory, phone return an error message then +enter in stand-by, without remaining in Menu 8. The same if you +enter in menu "radio" without headset connected. +

    V3.45 04-12-01

    V3.47

    • @@ -444,6 +450,39 @@ USSD with more than 30 digits is now possible 
    • STK "Refresh" command improved 
    +V3.50 +
      +
    • +Chr table improvement in SIM ATK menu application. Now it is possible to +enter character behind Chr key in SIM ATK menu. 
    • + +
    • +Text improvements: 
    • + +
        +
      • +If there is no memory left, when saving a downloaded WAP picture to phone's +memory, an English error note "Memory full. Replace picture?" is split +into two lines. 
      • + +
      • +Russian text improvements 
      • +
      + +
    • +WAP and OTA improvement. Received OTA settings which data call with speed +14.4 kbps for WAP: data speed 14.4 kbps will be replaced with default value +9.6 kbps, because NPM-5 supports only 9.6 kbps as data call speed 
    • + +
    • +Dot/+ improvement in entering IP address and dial-up number (K language +package). In case English is activated from K language package (K package +includes Russian, Ukrainian and English), it is now possible to enter a +dot (.) into IP address and a plus (+) into dial-up number 
    • + +
    • +Operator list updated 
    • +
    diff --git a/Docs/en_US/gsm/firmware/firm6_1.htm b/Docs/en_US/gsm/firmware/firm6_1.htm index e3d2146..c11df4f 100644 --- a/Docs/en_US/gsm/firmware/firm6_1.htm +++ b/Docs/en_US/gsm/firmware/firm6_1.htm @@ -53,7 +53,8 @@ language in phone ?
    -

    Here is table describing firmware in various Nokia 60xx/61xx phones +

    +

    Here is table describing firmware in various Nokia 60xx/61xx phones
    You can also see table for
    Nokia 1xxx/2xxx, Nokia 3xxx, Nokia 5xxx, Nokia @@ -74,7 +75,7 @@ language in phone ? -6050 +6050 NME-1 @@ -84,7 +85,7 @@ language in phone ? -6080 +6080 NME-2 @@ -98,7 +99,7 @@ language in phone ? -6081 +6081 NME-2E @@ -112,7 +113,7 @@ language in phone ? -6090 +6090 NME-3 @@ -126,7 +127,7 @@ language in phone ? -6110 +6110 NSE-3 @@ -305,7 +306,7 @@ wariuje przy przewijaniu odebranego SMSa zawieraj -6120 +6120 NSC-3 @@ -319,7 +320,7 @@ wariuje przy przewijaniu odebranego SMSa zawieraj -6130 +6130 NSK-3 @@ -353,7 +354,7 @@ use "Reminder" instead of "Birthday". -6138 +6138 NSK-3 @@ -363,7 +364,7 @@ use "Reminder" instead of "Birthday". -6150 +6150 NSM-1 @@ -545,7 +546,8 @@ all profiles displayed (including Car and Headset) in "Profiles" menu Info from users: in PL language "Mikrofon wy³±czon" and "Odg³usz"

    VP5.23, 25-09-00 -
    with animated menus, picture messaging, T9 dictionary. +
    with animated menus, picture messaging, T9 dictionary, new ringtones +and game (see http://www.nokia.de/mobile_phones/produkte/6150/6150_su.html).

    Problems with SIM Application Toolkit & netmonitor (tested with Italian SIM cards). With:

      @@ -567,7 +569,7 @@ than "All calls" -6160/6162 +6160/6162 NSW-3 @@ -583,7 +585,7 @@ than "All calls" -6185/6188 +6185/6188 NSD-3AX @@ -615,7 +617,7 @@ the maximum volume. -6190 +6190 NSB-3 @@ -652,9 +654,9 @@ do telefonu przez kabel.
      Dodano obs³ugê loga operatora (mo¿liwo¶æ wgrywania przez kabel albo ogóln± obs³ugê)

      V5.93 22-11-99 -
      V6.13 28-04-00  +
      V6.13 28-04-00  +
      V6.73 25-01-01 - Back to the top/Na pocz±tek

      diff --git a/Docs/en_US/gsm/firmware/firm6_2.htm b/Docs/en_US/gsm/firmware/firm6_2.htm index 29adb40..3c415bc 100644 --- a/Docs/en_US/gsm/firmware/firm6_2.htm +++ b/Docs/en_US/gsm/firmware/firm6_2.htm @@ -75,7 +75,7 @@ language in phone ? -6210 +6210 NPE-3 @@ -1029,13 +1029,18 @@ Menu shortcuts problem: Menu 1-8-x (example Menu 1-8-7) directs to Menu 1-8-1

    1. -Shotcut Menu 2-5-1-1-1 hangs phone !
    2. +Shortcut Menu 2-5-1-1-1 hangs phone ! - + +
      +
      According to some WWW sites phone seems to work with firmware from +Nokia 6250. (The only ?) known problem is weak 1800Mhz coverage (probably +calibration info is saved in different place). I don't have any other info, +do not ask me. -6250 +6250 NHM-3 @@ -1058,8 +1063,7 @@ Shotcut Menu 2-5-1-1-1 hangs phone !
    3. (V3.00) Service dialing numbers in SIM read correctly
    4. -Menu 14 doesn't have picture -

      V4.00 06-12-00 +V4.00 06-12-00

      • Improvements to Task Journal:
      • @@ -1395,7 +1399,10 @@ O- language package added
      • Operator list updated (#44)
      - +V5.03 06-12-01 +
      +
      +
      Menu 14 (Netmonitor) doesn't have picture @@ -1412,11 +1419,23 @@ Operator list updated (#44) V1.23 19-03-01
      V4.10 04-01-02

      BUGS: -
      the phone crashed when i recorded a second voice message after an older +

        +
      • +the phone crashed when i recorded a second voice message after an older one which is 1 minute of length. after i did that, i couldnt delete the second recording, and the screen would turn black.. another [ok] and the -phone would restart. -

        V4.15 +phone would restart.

      • + +
      • +It seems incompatible with 32k sim. (Nokia says 32k SIM are incompatible +with operator TIM and OMNITEL)
      • + +
      • +Some other bugs are related to use of car-kit (CARK-91), as strange "echo", +when navigating in menus sometimes the phone enable external speaker and +disable the "radio/stereo .."
      • +
      +V4.15
      • RS232 Serial Cable connection improved (connection did not work properly @@ -1443,9 +1462,9 @@ Support for Language package T (Australia and New Zealand) added 
      • Support for Arabic UI added 
      • -Improvements to SMS 
      • +Improvements to SMS
      - +BUGS: When send business card over SMS or infrared, name is changed. @@ -1459,7 +1478,8 @@ Improvements to SMS  -V3.22 10-01-02 +V3.22 10-01-02 +
      V3.30 30-01-02  Back to the top/Na pocz±tek diff --git a/Docs/en_US/gsm/firmware/firm7.htm b/Docs/en_US/gsm/firmware/firm7.htm index 802d490..a34cee8 100644 --- a/Docs/en_US/gsm/firmware/firm7.htm +++ b/Docs/en_US/gsm/firmware/firm7.htm @@ -53,7 +53,8 @@ language in phone ?

    -

    Here is table describing firmware in various Nokia 7xxx phones +

    +

    Here is table describing firmware in various Nokia 7xxx phones
    You can also see table for
    Nokia 1xxx/2xxx, Nokia 3xxx, Nokia 5xxx, Nokia @@ -74,7 +75,7 @@ language in phone ? -7110 +7110 NSE-5 @@ -97,7 +98,23 @@ language in phone ?

    V4.69 05-10-99 (not in German language)

    Improvements in WAP browser (with WML)

    V4.70 28-10-99 -
    V4.72 10-11-99 (not in German language) +

      +
    • +If you setup your phone in mode "silent", and you have an alarm set up, +the phone ring at preset time.
    • + +
    • +if you receive a call from a CLI ending with '0' (zero),  the phone +doesn't display the name of caller.
    • + +
    • +If you setup the "navy roller" to "last (AS: dialed ?) calls", some times +the display remain blanks, and you have to close/open the flip.
    • + +
    • +No 'R' (roaming indicator) in NetMonitor
    • +
    +V4.72 10-11-99 (not in German language)
    V4.73 15-11-99

    (V4.70) BUG REMOVED: Earlier: Max. 12 messages can be stored in self created SMS-folders. @@ -161,9 +178,17 @@ jest przypisana do dw a SMS

  • -Inserting a phonebook-number into a SMS: Total crash. Sometimes self-reset -after 1-2 mins. If you're activting IR-receive, yo'll get a error ""remove -datacable"" even it is not connected."
  • +when you write a SMS and select "insert number" from menu and select the +number from addressbook, phone displays + +
    strange characters on soft keys and go locked for some minutes/sometimes +self-reset after 1-2 mins.To unlock, you should remove battery. To avoid +this bugs you should select "insert number", then select the name from +addressbook and then goto "options", "display details", select the "number" +then "select" it. +
  • +If you're activting IR-receive, yo'll get a error ""remove datacable"" +even it is not connected."
  • When deleting an entry from a call register list and closing the slide @@ -183,11 +208,30 @@ is crashing. Remove battery, afterwards the SMS isn't in the outbox. Maybe more often when sending sms to more receivers. At power-up alleged no PIN-request.
  • BUG (ONLY THIS VERSION): Crash with deactivated PIN-request -

    V4.77 25-01-00 +

    BUGS: +

      +
    • +keyboard is locked, when delete not answered calls or inside WAP services
    • + +
    • +phone is locked after first WAP session
    • +
    +V4.77 25-01-00

    BUG FIXED: "Clear operator logo" works now (from Operator Logo Uploader).

    BUG REMOVED: Earlier: Cell Broadcasts: Settings are cleared after power cycling. -

    V4.80 23-02-00 +

    BUGS: +

      +
    • +there is a problem with name of caller groups, i.e. you can change or add +the group name, but when you select it inside other menus, the phone doesn't +display the added group.
    • + +
    • +if you select "vibra-call", you cant ear the ring-tones until you select +a group without vibra-call.
    • +
    +V4.80 23-02-00

    Improvement of browsing after ending an incoming call.

    Wakeup Graphic is now maintained after 'Restore Factory Settings' 

    Changed ringing tones - Grande Valse renamed to Nokia tune  @@ -199,8 +243,11 @@ in the past and other note expires.

    OTA ringing tones is not playing continuously after being saved. 

    Tone loop with OTA tones. OTA tones are now being played in full length when it is being tested in profiles.  -

    Indication of incoming FAX call improved. Profile dependant indications -is now corrected. e.g. Beep in Meeting Profile.  +

    Indication of incoming FAX call improved. +

    Profile dependant indications is now corrected. e.g. Beep in Meeting +Profile. Earlier: If you setup your phone in mode "meeting" (with "Bip +x 1") and there is incoming call from a "group different" from the default, +the phone ring with the melody selected for that group.

    Ringing Tone Check in Profile setting is now also only played twice as an example when the phone is 'charging' or another message is displayed. 

    BUG REMOVED: Earlier: @@ -222,6 +269,29 @@ when received more (3) Vcards or calendar-appointments over IR (V4.70) After removing the battery, the currency and unit-settings are lost often. +BUGS: +

      +
    • +if you reach pos 129 in PHONE MEMORY, the phone doesn't recognize numbers +and name and groups. if you activate the SIM, all is OK.
    • + +
    • +THIS bug is related to 4.80, not to 4.70:
    • + +
        +
      • +assign name X to a mem pos. Y and a phone number N
      • + +
      • +change the phone number of X to M
      • + +
      • +try to call X with speed dial Y
      • + +
      • +the phone call the number N
      • +
      +
    V4.84 07-04-00

    Improvement to Advice of Charge. Charging on prepaid SIM cards is now improved @@ -314,7 +384,23 @@ a failed login attempt ('no response' or 'page cannot be displayed') only
    to
    letter bar (longer)
    Sending message -

    V4.94 02-10-00 or 27-09-00 or 28-09-2000 +

    BUGS: +

      +
    • +it seems the a received call from a CELLULAR number ending with '0' (zero), +is not recognized from the phone, but if you received a call from a NON +CELLULAR number all is OK. Appears as if incoming call as CLI of 11 digits, +they arent't recognized.
    • + +
    • +if you are playing a game, and there is an incoming call, the phone reset +itself.
    • + +
    • +Rarely, when arrive an incaming call, the phone reject the call and lock +up the keyboard, if it wasn't already locked.
    • +
    +V4.94 02-10-00 or 27-09-00 or 28-09-2000

    Carkit Audio optimisation

    Text files in language packages updated (localised group names, ...)

    IRDA data transmission improved @@ -470,8 +556,9 @@ Alleged only when sending data, receiving works. Alleged ok, when using a ir-speed of 9600 baud.

  • -When security-level set to "Phone": you can't get the Memory Status. When -set to "Memory", it is possible. Should be vice versa.
  • +When security-level set to "Phone": you can't get the Memory Status (phone +answers with "protected memory"). When set to "Memory", it is possible. +Should be vice versa.
  • The call divertion icon is cleared after powercycling, or no service condition. @@ -479,7 +566,8 @@ Appears again after status-check.
  • Autoanswer with the headset does not work if the keyboard is locked (altough -activated in the profile).
  • +activated in the profile): in Menu 3-6-1-8, if you select YES, phone +DISABLE automatic answer, if you select NO, phone ENABLE automatic answer.
  • (was OK in V4.73 and earlier, not OK in 4.88) Closed user group: after @@ -488,6 +576,15 @@ entering the groupnumber, the left OK-button doesn't work, only the NaviRoller.<
  • (V4.80) german text wrong: "auf Netzant- wort <new line> warten" (english: "Requesting")
  • + +
  • +if you disable the ringer and receive a SMS, the phone doesn't beep.
  • + +
  • +problems related to customs caller gruoup appears solved
  • + +
  • +"warning on incoming" call work ok also with "grouped" names.
  • NaviRoller for Redialing (Menu 4-3-5) official not possible anymore since FW v4.73 not possible again... @@ -505,6 +602,10 @@ and the Link to ""/sub.wml"" targets to ""http://www.abc.co/sub.wml"""
  • Snake2: after playing, the cup is shown without the reached points.
  • + +
  • +Sending business cards: Option related to "full details" and "predefined +number" are inverted. (V04.88 doesn't have this bug)
  • BUG (IN THIS AND NEWER VERSIONS):
      @@ -731,6 +832,9 @@ to the 7110. leap year bug: birthday i.e. on 3.3.2000, remind-date before 28.2. I.e. 15.2. Store and edit again -> remind-date has changed to 14.2., and with every edit one additional day. + +
    • +In Italian T9: "I'm" is always "I-am"
    • V5.01 08-12-00
      V5.01 09-01-01 (ROM6?) @@ -750,7 +854,13 @@ New UI Text release
    • Operator list updated
    - +BUGS V04.88 - V05.01 +
    Problems with addressbook, +
    After (and only after) using software linke 7110explorer or similar, +ther are problems with name and numbers. numbers are displayed instead +of names upon incoming calls. Phone restart to work correctly after a total +reset from wintesla or o NkProfile +


    BUG: Test 45 in NetMonitor doesn't work correctly. @@ -881,14 +991,20 @@ profile. Checked for 4.70, 4.80, 4.84. Solution: enable vibra again, or powercycle the phone.
  • -No vibrating, although enabled, and even power-cycling doesn't help.
  • +No vibrating, although enabled, and even power-cycling doesn't help. Solution: +select an other ringtone in the profiles. -
    Solution: select an other ringtone in the profiles. +
  • +if you cusomize the "silent mode", when you select it the vibra-call is +deactivated. if the phone is turned off and then on the vibra-call is activated. +Checked for 4.84
  • + Games:
    • The back light turns off during a games of opposite or racket, even if -the option is set for the lights to be on.
    • +the option is set for the lights to be on (solution: open slider, then +play a game; not play a game, when open the slider)
    • Either the light doesn't turn on at all, or the light switches of in the @@ -971,7 +1087,6 @@ but returned the SIM ones.
    • V3.30 06-11-00 - Back to the top/Na pocz±tek

      diff --git a/Docs/en_US/gsm/firmware/firm8.htm b/Docs/en_US/gsm/firmware/firm8.htm index 3b044cf..f0faf10 100644 --- a/Docs/en_US/gsm/firmware/firm8.htm +++ b/Docs/en_US/gsm/firmware/firm8.htm @@ -53,7 +53,8 @@ language in phone ?


      -

      Here is table describing firmware in various Nokia 8xxx phones +

      +

      Here is table describing firmware in various Nokia 8xxx phones
      You can also see table for
      Nokia 1xxx/2xxx, Nokia 3xxx, Nokia 5xxx, Nokia @@ -74,7 +75,7 @@ language in phone ? -8110 +8110 NHE-6, NHE-6BX @@ -94,7 +95,7 @@ language in phone ? -8110i +8110i NHE-6, NHE-6BM @@ -148,7 +149,7 @@ V25.20 16-10-98 -8146 +8146 NHK-6 @@ -163,7 +164,7 @@ V25.20 16-10-98 -8148 +8148 NHK-6 @@ -178,7 +179,7 @@ V25.20 16-10-98 -8148i +8148i NHK-6V @@ -192,7 +193,7 @@ V25.20 16-10-98 -8210 +8210 NSM-3 @@ -1044,7 +1045,11 @@ memory, you see "Saved to phone" display. It has icon from older Nokia phones (unchanged) - phone with the antenna drawn...

      Bug (all versions ? - tested for 5.25): when send too long ringtone for phone, in "preview" menu it's cut and played, after saving to location -playes only one note... +playes only one note... +
      +


      +
      According to some WWW sites phone seems to work with firmware from +Nokia 8850. I don't have any other info, do not ask me. @@ -1099,17 +1104,52 @@ HDC-5... V2.90 08-09-01
      V3.05 23-09-01 -
      V3.07 -
                              -Improvements in voice recorder stability  -
                              -Improvements in SIM card reading stability  -
                              -Improvements in SIM Application toolkit dynamic menu  -
                              -Improvements in SEND USSD  -
                              -Changes to meet some test cases  +

      BUGS: +

        +
      • +If you select "warning of call" = "Bip x 1" and select "caller groups" +from phonebook menu and try to customize group, the vibra-call activate +itself. You must turn off the phone to stop it.
      • + +
      • +after renaming caller group "family" as "personal", adding the members +of group and customizing the ringtone. Now, the first time that select +"personal", the phone return to initial state, and the second time reset +itself.
      • + +
      • +low voice recoder quality
      • +
      +V3.07 +
        +
      • +Improvements in voice recorder stability (quality ?)
      • + +
      • +Improvements in SIM card reading stability 
      • + +
      • +Improvements in SIM Application toolkit dynamic menu 
      • + +
      • +Improvements in SEND USSD 
      • + +
      • +Changes to meet some test cases 
      • +
      +BUG (also existing in V3.05): +
        +
      • +when you are (near) losting signal, the phone reset itself, also, in that +case, is much difficult re-sync the signal. Partial solution is to select +"Manual Operator" instead of "Automatic"
      • + +
      • +if you turn on the phone with headset plugged in, the phone reset itself +continously.
      • +
      +BUG: After customizing a ringtone (with logomanager) and entering "caller +groups", the phone reset itself. Possible reason: incorrect ringtone ID.

      V4.04

      • @@ -1170,7 +1210,10 @@ Improvements to caller group logo sending and receiving 
      • Improvements to Service Dialling Numbers 
      • -Minor improvements to phone number showing 
      • +Minor improvements to phone number showing (caller identification) + +
      • + correction of displaying icons for numbers "WORK" and "CELLULAR"
    • @@ -1192,7 +1235,8 @@ Call Register:
    • Lists cleaned if new SIM card used 
    • -AoC Currency showing and default limits showing improved 
    • +AoC Currency showing and default limits showing improved (displaying "remaining +credits" with SIM that has "cash display" in their menus)
  • @@ -1215,7 +1259,7 @@ Fixed dialling number stability improvements 
  • Help text for fixed dialling numbers added 
  • -Hands free indicator didnåt disappear in some cases 
  • +Hands free indicator didn't disappear in some cases 
  • Minor improvements to Automatic language selection 
  • @@ -1312,7 +1356,7 @@ WAP bookmarks and cookies:  Some denial of service vulnerabilities corrected 
  • -Problems with maximum length of bookmark URLås corrected 
  • +Problems with maximum length of bookmark URL's corrected 
  • In certain WAP pages Cookies were causing problems 
  • @@ -1386,6 +1430,37 @@ Several text, font and other minor look&feel improvements Several minor stability improvements  +Last (?) version with this bug: when using 32k sim, sometimes the phone +display "SIM not ready". Problem exist only, when PIN code was disabled. +Enabling access with PIN code solved this type of problem +

    BUGS:  +

      +
    • +The problem related to losting signal is still present (but in lower way), +sometimes turning off and on the phone is needed to resync the signal.
    • + +
    • +it's necessary to press key '5' to confirm selection of players in Snowboard, +then all is OK in this game
    • + +
    • +problems after closing GPRS (you must reset phone):
    • + +
        +
      • +phone displays "SIM rejected"
      • + +
      • +phone can't send SMS
      • + +
      • +phone can't make or receive calls
      • +
      + +
    • +problems when you use both SIM and phone memory. Use only one memory - +suggested PHONE memory
    • +
    V4.53
    • @@ -1399,7 +1474,7 @@ Private in Conference call improvement 
    • Speed dial number recognition improvement 
    • -AoC improvements 
    • +AoC (cash display system) improvements
    • Field strength signal bar configuration changed 
    • @@ -1442,7 +1517,7 @@ WAP: 
      • -Improvement to OTA bookmarks 
      • +Improvement to OTA bookmarks  (over SMS?)
      • Bookmark sending fails when SMS center number is not given in advance 
      • @@ -1466,7 +1541,7 @@ Unicode support added to WAP Push Messages  Push message reception by default ON 
      • -GPRS related corrections 
      • +GPRS related corrections (example: better ending)
      • Corrections to end-key functionality when having voice call during WAP @@ -1508,7 +1583,7 @@ Improvements when copying entries 
      • Improvements in Pop-up search (mainly in APAC languages) 
      • -Improvements when browsing phonebook memory 
      • +Improvements when browsing phonebook memory
      • Hungarian and Slovak alpha order improvements 
      • @@ -1574,11 +1649,11 @@ Improvements to operator name display  NITZ improvements 
    - +BUGS: It seems solved problem of resync signal, but still present are "resets" -8810 +8810 NSE-6 @@ -1612,7 +1687,7 @@ use "Reminder" instead of "Birthday". -8850 +8850 NSM-2 @@ -1622,12 +1697,16 @@ use "Reminder" instead of "Birthday". -Look to the info for Nokia 8210 - they have almost identical -firmware (with some details) +Look to the info for Nokia 8210 - they +have almost identical firmware (with some details) +

    BUG in V.5.26 (19-10-00): If you activate the IrDA connection (Menu +9) twice in a row (while the phone queries for an IrDA connection -that +is) the IrDA icon will go static (blink stops!) until each IrDA activation +times-out. During the static IrDA icon, the phone will still function properly. -8890 +8890 NSB-6 @@ -1831,7 +1910,6 @@ Service (TTML browser) main menu removed  - Back to the top/Na pocz±tek

    diff --git a/Docs/en_US/gsm/firmware/firm9.htm b/Docs/en_US/gsm/firmware/firm9.htm index 2f8e8f0..308f924 100644 --- a/Docs/en_US/gsm/firmware/firm9.htm +++ b/Docs/en_US/gsm/firmware/firm9.htm @@ -53,7 +53,8 @@ language in phone ?


    -

    Here is table describing firmware in various Nokia 9xxx phones +

    +

    Here is table describing firmware in various Nokia 9xxx phones
    You can also see table for
    Nokia 1xxx/2xxx, Nokia 3xxx, Nokia 5xxx, Nokia @@ -74,7 +75,7 @@ language in phone ? -Communicator 9000 +Communicator 9000 RAE-1 @@ -96,7 +97,7 @@ be set manually then. -Communicator 9000i +Communicator 9000i RAE-4 @@ -117,7 +118,7 @@ be set manually then. -Communicator 9000il +Communicator 9000il GE-9 @@ -136,7 +137,7 @@ be set manually then. -Communicator 9110 +Communicator 9110 RAE-2 @@ -482,7 +483,7 @@ is also available from Forum Nokia web page -Card Phone 1.0 +Card Phone 1.0 RPE-1 @@ -492,7 +493,7 @@ is also available from Forum Nokia web page -Card Phone 2.0 +Card Phone 2.0 RPM-1 diff --git a/Docs/en_US/gsm/firmware/firmware.htm b/Docs/en_US/gsm/firmware/firmware.htm index bdc44ec..6192742 100644 --- a/Docs/en_US/gsm/firmware/firmware.htm +++ b/Docs/en_US/gsm/firmware/firmware.htm @@ -1,698 +1,706 @@ - - - - - - - - - - - Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia - - - - -

    - -
    -


    Nokia identification & firmware/Identyfikacja -i oprogramowanie telefonów Nokia

    - -

    -


    -
      -
    1. -Ogólne b³êdy/General bugs
    2. - -
    3. -Ogólne informacje o IMEI/General info about IMEI
    4. - -
    5. -Czy mogê wgraæ sobie oprogramowanie/Can I download firmware -to my phone ?
    6. - -
    7. -Czy to kosztuje ?/Does it cost ?
    8. - -
    9. -Gdzie tego dokonaæ ?/Where to make it ?
    10. - -
    11. -Jakie s± b³êdy/zmiany w kolejnych wersjach ?/What are bugs/changed -things in next versions ?
    12. - -
    13. -Jak zmieniæ wersjê jêzykow±?/How to change language in -phone ?
    14. - -
    15. -U¿yte materia³y/Information sources
    16. -
    - -
    -
    First: what is firmware ? It's program (like in computer - in fact -phone is small computer) saved somewhere inside phone. -

    Na pocz±tku: co to jest firmware ? Jest to program  (jak w komputerze -- w³a¶ciwie telefon to taki ma³y komputer) zapisany gdzie¶ w ¶rodku telefonu. -

    On this page you can find information about: -

      -
    • -model numbers for Nokia phones
    • - -
    • -codes to see their firmware versions
    • - -
    • -different firmware revisions and changes among them (I think, it will help -to answer, if firmware upgrade for your phone will give you something and -correct some bugs).
    • - -
    • -description for IMEI. For example TAC numbers (first 6 digits of IMEI) -given for various Nokia phones (if I will have them, I will be able to -tell you your phone model from its IMEI).
    • -
    -Na tej stronie znajdziesz informacje o: -
      -
    • -oznaczeniach Nokii
    • - -
    • -kodach pozwalaj±cych sprawdziæ ich wersje oprogramowania
    • - -
    • -jakie s± wersje ich oprogramowania i czym siê ró¿ni± (mam nadziejê, ¿e -pomo¿e to odpowiedzieæ, czy upgrade oprogramowania w Twoim telefonie da -co¶ i czy np. poprawi jakie¶ dokuczliwe b³êdy)
    • - -
    • -informacje o IMEI telefonu.. Przyk³adowo numery TAC (pierwsze 6 cyfr IMEI) -nadawane ró¿nym modelom (je¿eli je bêdê mia³, bêdê móg³ podaæ model telefonu -wy³±cznie na podstawie jego IMEI).
    • -
    -If you want to add or correct something to this list, please write -me (for example: -
      -
    1. -when you changed firmware in your phone and noticed some changes, inform -me about them and write, what is phone model, old and new firmware version
    2. - -
    3. -if you have access to two phones with different firmware and notice any -differences, inform me about them and write, what is phone models, and -their firmware versions).
    4. -
    -Je¿eli masz co¶ dodania do tej listy albo znalaz³e¶(a¶) na niej b³êdy, -proszê do mnie napisaæ w tej -sprawie (przyk³adowo: -
      -
    1. -je¿eli wymieni³e¶ oprogramowanie w swoim telefonie i zauwa¿y³e¶ jakie¶ -zmiany, napisz mi o nich podaj±c równie¿ model telefonu, star± i now± wersjê -oprogramowania
    2. - -
    3. -je¿eli masz dostêp do dwóch telefonów z ró¿nym oprogramowaniem i zauwa¿y³e¶ -ró¿nice, napisz mi o nich podaj±c równie¿ model telefonów, ich wersjê oprogramowania).
    4. -
    -Informacja dla polskich czytelników tej strony: mia³a ona byæ w za³o¿eniu -i po polsku i po angielsku. Niestety, od którego¶ momentu nie by³em w stanie -tworzyæ lepszego czy gorszego jej t³umaczenia i w obecnej chwili czê¶æ -przet³umaczon± pozostawi³em, a reszta jest wstawiana TYLKO po angielsku. -

    I want also to thank Tomasz Stêpski -(admin of newsgroup server news://212.160.228.194) -for special help in creating this page...and some other people too (Martin -F. Schlögl, jsp_m, -marOOn, -etc.) :-))) -

    Back to the top/Na pocz±tek -

    1. Ogólne -b³êdy/General bugs -
    -


    -

    Here are some bugs (or features), which can exist in (almost) ALL new -models: -

      -
    • -DIVERTS: "Call divert  if not available" (Menu 5-5): "Check -status" is missing. It's not bug. It's because it's combined diverting -(N6210, 7110...)
    • - -
    • -some SMS saved on SIM can look different, when read them from phone's menu -(checked for N5110, 6150). Example (mygnokii can be download from my www): -try to use "mygnokii --savesms "test" --bug < file" and read -saved SMS
    • - -
    • -char 0x00, 0x00 in Unicode SMS hides SMS contents, when try to read it -from phone's menu (feature ?)
    • - -
    • -char 0x00, 0x01 in Unicode SMS enables/disables blinking of chars in SMS, -when try to read it from phone's menu (feature ?). Confirmed for N51xx, -61xx, 8210, 3210. Doesn't blink in N7110 (4.77), but can edit them there.
    • - -
    • -after receiving some SMS phone enables light/vibra (like after receiving -SMS), but doesn't display anything. Example (mygnokii can be download from -my www): try to use "mygnokii --savesms "test" --voidsms < file" -and forward it to phone.
    • - -
    • -SMS delivery reports are received twice: first ""... at work"", later a -second ""... transmitted"
    • - -
      Solution: the SMS-center number used for sending should be the same -than the one, that is sending back the delivery reports. -
    • -When have unreaded messages (let's say 4 SMS and one delivery report) and -you will receive next one, you will see "6 messages received", not "1 message -received". Changed for last models like 6210, ...
    • - -
    • -PL: s³owa "Og³usz" (w modelach z zielon± i czerwon± s³uchawk±) i komunikat -"Mikrofon wy³±czon". Wystêpuje nawet w 3310 wersja 4.45 i 8210 wersja 5.25 -(sprawdzone przez Artura Heise)
    • - -
    • -After deactivating netmonitor using 241 code, you have sometimes to reset -phone. In other case Up and Down arrows don't work...
    • - -
    • -When you set such ID for ringtone in caller group, which doesn't exist -in phone, you can't set it (ringtone) from phone's menu... Checked for -6210 (5.17) and 8210 (info from jsp_m).
    • - -
    • -Try few times, because sometimes doesn't work:
    • - -
        -
      1. -unlock keypad
      2. - -
      3. -press Power button (should go to the Profiles menu)
      4. - -
      5. -press Power button double
      6. - -
      7. -scroll menu to "Switch off" (or similiar) using Down key
      8. - -
      9. -wait second or longer
      10. - -
      11. -when press Power button now, phone will jump always to "Switch off" (not -go into next position)
      12. -
      -
    -And some other tips: -
      -
    • -when want to delete SMS Centre Number (you don't want to see it from phone's -menu), write "*" inside. Tested for N5110, 3310
    • - -
    • -when you put "#" char as SMS Centre Number, phone will replace it by "3". -Tested for N5110, 3310
    • - -
    • -(in models with two functions keys, for example 6110): when you see network -name/logo, press "Menu" key longer (about 2 secs.) - you will enter to -menu available during calls
    • - -
    • -when you will see list of phonebook entries and press "#" key, will see -number displayed with large font (tested for N5110, 3310, 6150).
    • - -
    • -when you're in phone's menu and press "C" key (go higher level), when press -fast "#" key, keypad will be blocked, as if you pressed "Menu" and "#" -combination (tested for N5110, 3310)
    • - -
    • -(in phones with Navi key, for example N5110, 3310): when edit SMS and don't -want to lost it/don't want to send or save, press "Options" (you will see -available options), then "C" for longer time. Contents of SMS will be in -memory (to the moment, when you disable phone) and you will be able to -return to it.
    • - -
    • -when send to phone DMTF sequence (tested for N5110) via cable and sequence -starts from "w" (wait), phone doesn't display it (first "w" in sequence), -but display menu for sending the rest of sequence in the phone. In N6150 -waits a moments before sending sequence...
    • -
    -I kilka interesuj±cych rzeczy: -
      -
    • -W nowych modelach, kiedy ustawisz sygna³ wiadomo¶ci SMS na "Narastaj±cy", -telefon bêdzie wygrywa³ komunikat "Connecting people" alfabetem Morse'a. -Przy sygnale "Specjalny" jest to "SMS"
    • -
    -And some interesting things: -
      -
    • -.In new models, when you set SMS message tone to "Ascending" ('Long & -Loud' with older firmware), phone plays "Connecting people" with Morse -alphabet. When select "Special", "SMS" is played.
    • -
    -Back to the top/Na pocz±tek -

    2. Ogólne -informacje o IMEI/General info about IMEI -


    -

    IMEI is written as: -

    XXXXXX/XX/XXXXXX/X -
    TAC/FAC/SNR/SP -

    where: -

    TAC (Type Approval Code): -
    first two digits of are for Nokia: 35, 44, 49 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    last four digitsmodel
    8890,9206,9314,93403210
    05205110
    92105130
    05236110
    30026150
    9214, 9337, 95976210
    8904, 88957110
    8902, 93068210
    05258810
    89018850
    00038890
    - -

    FAC (Final Assembly Code) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FACCountry
    07, 08, 20Germany
    10, 70Finland
    19, 40UK
    30Korea
    67USA
    80China
    - -

    Back to the top/Na pocz±tek -

    3. Czy mogê wgraæ -sobie oprogramowanie/Can I download firmware to my phone ? -
    -


    -

    Firmware is saved in flash memory, not in EEPROM, like many people think. -In EEPROM you have configuration for phone (in almost all phones) - downloadable -logos, ringtones, etc. and generally it's very small - 8, 16, 32 kB. Flash -memory is rather big (for example, 8 MB). You have full firmware there -and (in some models) part of configuration. -

    From long time there is available on the Dejan's -page flasher (soft + schematics for interface) and it allows to change -flash, but not at all. Because not everything is decoded (all checksums, -etc.), this flasher will allow to: -

      -
    1. -change part of flash (for example, used for such modyifing firmware, that -phone doesn't read status of simlock and can work with each SIM card)
    2. - -
    3. -repairing some CONTACT SERVICES
    4. -
    -You can't (?) change firmware version to newer (phone doesn't log in to -network) and for it you must go to the next point to see, where to change -it ;-). Additionaly, using this flasher can be illegal (especially with -simlocks). -

    Back to the top/Na pocz±tek -

    4. Czy to kosztuje -?/Does it cost ? -
    -


    -

    When you have quarantie for your phone, it should be done for free by -Nokia service. Some services want additionaly info from you about found -bugs (generally: explaining, why you want to make it) - look into my page -and you will know everything ;-) -

    After quarantie you must pay for it...or (only in some services) if -will be done by free, if you will show them bug... -

    Back to the top/Na pocz±tek -

    5. Gdzie tego dokonaæ -?/Where to make it ? -
    -


    -

    Ask your operator... -

    Back to the top/Na pocz±tek -

    6. What are -bugs/changed things in next versions ?/Jakie s± b³êdy/zmiany w kolejnych -wersjach ? -
    -


    -

    Some info about my description, which is available on subpages: -

      -
    • -when I write firmware version before text (for example "(V 3.41)") - something -is changed, when compare to this firmware version (here 3.41)
    • - -
    • -when I write "(OLDER ?)" before text - this bug/info, etc. can be connected -with older firmware versions, here is confirmed
    • - -
    • -when I write "(NEWER TOO ?)" before text - this bug/info, etc. wasn't checked -in newer versions
    • -
    -Kilka s³ów o opisie dostêpnym na podstronach: -
      -
    • -je¿eli piszê wersjê oprogramowania przed tekstem (np. "(V 3.41)") - co¶ -zosta³o zmienione w stosunku do podanej wersji oprogramowania.
    • - -
    • -je¿eli piszê "(STARSZE ?)" przed tekstem - informacja, b³±d, itp. mo¿e -byæ równie¿ w starszych wersjach, tutaj za¶ jest potwierdzona
    • - -
    • -je¿eli piszê "(NOWSZE TE¯ ?)" przed tekstem - informacja, b³±d, itp. nie -by³a sprawdzona w nowszych wersjach
    • -
    -Please also notice, that changes between the same firmware versions in -different models are not the same. -

    Please find your model and click to see everything: -

    -Back to the top/Na pocz±tek -

    7. Jak zmieniæ wersjê jêzykow±?/How to -change language in phone ? -
    -


    -

    You have to change in phone part of firmware... From some time it's -possible to do it with Dejan flasher. -

    Back to the top/Na pocz±tek -

    8. U¿yte materia³y/Information -sources -
    -


    -

    Niektóre u¿yte materia³y pochodz± ze stron: -
    Some used materials are from WWW pages: -

      -
    1. -http://www.webit.com/tw/nokia.shtml
    2. - -
    3. -http://vzone.virgin.net/neil.hobbs/Nokia/Phone.htm
    4. - -
    5. -http://www.worldofcellularsecrets.com/free.htm
    6. - -
    7. -http://www.telephone.ru/faq/nokia6100/
    8. - -
    9. -http://gsm.erc.bc.ca/553software.html
    10. - -
    11. -http://www.users.bigpond.com/Scotth/
    12. - -
    13. -http://www.yaws.dk/communicator/faq/imei/home.html
    14. - -
    15. -http://www.yaws.dk/communicator/faq/versions/phone.html
    16. - -
    17. -http://www.nokiainfo.f2s.com/software_versions.html -(12-07-2001)
    18. - -
    19. -www.vosper.prv.pl
    20. - -
    21. -http://www.unofficial7110.co.uk/bugs/bugs.htm
    22. - -
    23. -http://slashdot.org/articles/00/09/03/1515202.shtml
    24. - -
    25. -http://www.arcx.com/sites/6190Tips.htm
    26. - -
    27. -http://www.wapterror.de/index.shtml
    28. - -
    29. -http://www.wapterror.de/6210.html
    30. - -
    31. -http://bugzilla.punknet.cz/long_list.cgi
    32. - -
    33. -http://www.artie.force9.co.uk/8850/about.htm
    34. - -
    35. -http://www.fponticelli.com/bug8210.html
    36. - -
    37. -http://members.aon.at/mfs/ (14-01-2002)
    38. - -
    39. -http://www.2thumbswap.com/products/secrets/nokia_8110.htm
    40. - -
    41. -http://www.nokia4u.cz/Nokia/firmware/fw-zmeny.htm -(12-07-2001)
    42. - -
    43. -http://www.indocell.net/id37.htm
    44. - -
    45. -http://www.ponticellinks.com/bug3330.html
    46. - -
    47. -http://www.flash.net.ph/cgi-bin/ikonboard/forums.cgi?forum=4&show=30
    48. - -
    49. -http://www.xinfo.net
    50. -
    -Back to the top/Na pocz±tek -

    -


    -
    Marcin -Wi±cek (WWW) -
    Ostatnia aktualizacja: 16 luty 2002/ Last modification: -16 February 2002
    - - - + + + + + + + + + + + Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia + + + + + + +
    +


    Nokia identification & firmware/Identyfikacja +i oprogramowanie telefonów Nokia

    + +

    +


    +
      +
    1. +Ogólne b³êdy/General bugs
    2. + +
    3. +Ogólne informacje o IMEI/General info about IMEI
    4. + +
    5. +Czy mogê wgraæ sobie oprogramowanie/Can I download firmware +to my phone ?
    6. + +
    7. +Czy to kosztuje ?/Does it cost ?
    8. + +
    9. +Gdzie tego dokonaæ ?/Where to make it ?
    10. + +
    11. +Jakie s± b³êdy/zmiany w kolejnych wersjach ?/What are bugs/changed +things in next versions ?
    12. + +
    13. +Jak zmieniæ wersjê jêzykow±?/How to change language in +phone ?
    14. + +
    15. +U¿yte materia³y/Information sources
    16. +
    + +
    +
    First: what is firmware ? It's program (like in computer - in fact +phone is small computer) saved somewhere inside phone. +

    Na pocz±tku: co to jest firmware ? Jest to program  (jak w komputerze +- w³a¶ciwie telefon to taki ma³y komputer) zapisany gdzie¶ w ¶rodku telefonu. +

    On this page you can find information about: +

      +
    • +model numbers for Nokia phones
    • + +
    • +codes to see their firmware versions
    • + +
    • +different firmware revisions and changes among them (I think, it will help +to answer, if firmware upgrade for your phone will give you something and +correct some bugs).
    • + +
    • +description for IMEI. For example TAC numbers (first 6 digits of IMEI) +given for various Nokia phones (if I will have them, I will be able to +tell you your phone model from its IMEI).
    • +
    +Na tej stronie znajdziesz informacje o: +
      +
    • +oznaczeniach Nokii
    • + +
    • +kodach pozwalaj±cych sprawdziæ ich wersje oprogramowania
    • + +
    • +jakie s± wersje ich oprogramowania i czym siê ró¿ni± (mam nadziejê, ¿e +pomo¿e to odpowiedzieæ, czy upgrade oprogramowania w Twoim telefonie da +co¶ i czy np. poprawi jakie¶ dokuczliwe b³êdy)
    • + +
    • +informacje o IMEI telefonu.. Przyk³adowo numery TAC (pierwsze 6 cyfr IMEI) +nadawane ró¿nym modelom (je¿eli je bêdê mia³, bêdê móg³ podaæ model telefonu +wy³±cznie na podstawie jego IMEI).
    • +
    +If you want to add or correct something to this list, please write +me (for example: +
      +
    1. +when you changed firmware in your phone and noticed some changes, inform +me about them and write, what is phone model, old and new firmware version
    2. + +
    3. +if you have access to two phones with different firmware and notice any +differences, inform me about them and write, what is phone models, and +their firmware versions).
    4. +
    +Je¿eli masz co¶ dodania do tej listy albo znalaz³e¶(a¶) na niej b³êdy, +proszê do mnie napisaæ w tej +sprawie (przyk³adowo: +
      +
    1. +je¿eli wymieni³e¶ oprogramowanie w swoim telefonie i zauwa¿y³e¶ jakie¶ +zmiany, napisz mi o nich podaj±c równie¿ model telefonu, star± i now± wersjê +oprogramowania
    2. + +
    3. +je¿eli masz dostêp do dwóch telefonów z ró¿nym oprogramowaniem i zauwa¿y³e¶ +ró¿nice, napisz mi o nich podaj±c równie¿ model telefonów, ich wersjê oprogramowania).
    4. +
    +Informacja dla polskich czytelników tej strony: mia³a ona byæ w za³o¿eniu +i po polsku i po angielsku. Niestety, od którego¶ momentu nie by³em w stanie +tworzyæ lepszego czy gorszego jej t³umaczenia i w obecnej chwili czê¶æ +przet³umaczon± pozostawi³em, a reszta jest wstawiana TYLKO po angielsku. +

    I want also to thank Tomasz Stêpski +(admin of newsgroup server news://212.160.228.194) +for special help in creating this page...and some other people too (Martin +F. Schlögl, jsp_m, +marOOn, +etc.) :-))) +

    Back to the top/Na pocz±tek +

    1. Ogólne +b³êdy/General bugs +
    +


    +

    Here are some bugs (or features), which can exist in (almost) ALL new +models: +

      +
    • +DIVERTS: "Call divert  if not available" (Menu 5-5): "Check +status" is missing. It's not bug. It's because it's combined diverting +(N6210, 7110...)
    • + +
    • +some SMS saved on SIM can look different, when read them from phone's menu +(checked for N5110, 6150). Example (mygnokii can be download from my www): +try to use "mygnokii --savesms "test" --bug < file" and read +saved SMS
    • + +
    • +char 0x00, 0x00 in Unicode SMS hides SMS contents, when try to read it +from phone's menu (feature ?)
    • + +
    • +char 0x00, 0x01 in Unicode SMS enables/disables blinking of chars in SMS, +when try to read it from phone's menu (feature ?). Confirmed for N51xx, +61xx, 8210, 3210. Doesn't blink in N7110 (4.77), but can edit them there.
    • + +
    • +after receiving some SMS phone enables light/vibra (like after receiving +SMS), but doesn't display anything. Example (mygnokii can be download from +my www): try to use "mygnokii --savesms "test" --voidsms < file" +and forward it to phone.
    • + +
    • +SMS delivery reports are received twice: first ""... at work"", later a +second ""... transmitted"
    • + +
      Solution: the SMS-center number used for sending should be the same +than the one, that is sending back the delivery reports. +
    • +When have unreaded messages (let's say 4 SMS and one delivery report) and +you will receive next one, you will see "6 messages received", not "1 message +received". Changed for last models like 6210, ...
    • + +
    • +PL: s³owa "Og³usz" (w modelach z zielon± i czerwon± s³uchawk±) i komunikat +"Mikrofon wy³±czon". Wystêpuje nawet w 3310 wersja 4.45 i 8210 wersja 5.25 +(sprawdzone przez Artura Heise)
    • + +
    • +After deactivating netmonitor using 241 code, you have sometimes to reset +phone. In other case Up and Down arrows don't work...
    • + +
    • +When you set such ID for ringtone in caller group, which doesn't exist +in phone, you can't set it (ringtone) from phone's menu... Checked for +6210 (5.17) and 8210 (info from jsp_m).
    • + +
    • +Try few times, because sometimes doesn't work:
    • + +
        +
      1. +unlock keypad
      2. + +
      3. +press Power button (should go to the Profiles menu)
      4. + +
      5. +press Power button double
      6. + +
      7. +scroll menu to "Switch off" (or similiar) using Down key
      8. + +
      9. +wait second or longer
      10. + +
      11. +when press Power button now, phone will jump always to "Switch off" (not +go into next position)
      12. +
      +
    +And some other tips: +
      +
    • +when want to delete SMS Centre Number (you don't want to see it from phone's +menu), +write "*" inside. Tested for N5110, 3310
    • + +
    • +when you put "#" char as SMS Centre Number, phone will replace it by "3". +Tested for N5110, 3310
    • + +
    • +(in models with two functions keys, for example 6110): when you see network +name/logo, press "Menu" key longer (about 2 secs.) - you will enter to +menu available during calls
    • + +
    • +when you will see list of phonebook entries and press "#" key, will see +number displayed with large font (tested for N5110, 3310, 6150).
    • + +
    • +when you're in phone's menu and press "C" key (go higher level), when press +fast "#" key, keypad will be blocked, as if you pressed "Menu" and "#" +combination (tested for N5110, 3310)
    • + +
    • +(in phones with Navi key, for example N5110, 3310): when edit SMS and don't +want to lost it/don't want to send or save, press "Options" (you will see +available options), then "C" for longer time. Contents of SMS will be in +memory (to the moment, when you disable phone) and you will be able to +return to it.
    • + +
    • +when send to phone DMTF sequence (tested for N5110) via cable and sequence +starts from "w" (wait), phone doesn't display it (first "w" in sequence), +but display menu for sending the rest of sequence in the phone. In N6150 +waits a moments before sending sequence...
    • +
    +I kilka interesuj±cych rzeczy: +
      +
    • +W nowych modelach, kiedy ustawisz sygna³ wiadomo¶ci SMS na "Narastaj±cy", +telefon bêdzie wygrywa³ komunikat "Connecting people" alfabetem Morse'a. +Przy sygnale "Specjalny" jest to "SMS"
    • +
    +And some interesting things: +
      +
    • +.In new models, when you set SMS message tone to "Ascending" ('Long & +Loud' with older firmware), phone plays "Connecting people" with Morse +alphabet. When select "Special", "SMS" is played.
    • +
    +Back to the top/Na pocz±tek +

    2. Ogólne +informacje o IMEI/General info about IMEI +


    +

    IMEI is written as: +

    XXXXXX/XX/XXXXXX/X +
    TAC/FAC/SNR/SP +

    where: +

    TAC (Type Approval Code): +
    first two digits of are for Nokia: 35, 44, 49 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    last four digitsmodel
    8890,9206,9314,93403210
    05205110
    92105130
    05236110
    30026150
    9214, 9337, 95976210
    8904, 88957110
    8902, 93068210
    05258810
    89018850
    00038890
    + +

    FAC (Final Assembly Code) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FACCountry
    07, 08, 20Germany
    10, 70Finland
    19, 40UK
    30Korea
    67USA
    80China
    + +

    Back to the top/Na pocz±tek +

    3. Czy mogê wgraæ +sobie oprogramowanie/Can I download firmware to my phone ? +
    +


    +

    Firmware is saved in flash memory, not in EEPROM, like many people think. +In EEPROM you have configuration for phone (in almost all phones) - downloadable +logos, ringtones, etc. and generally it's very small - 8, 16, 32 kB. Flash +memory is rather big (for example, 8 MB). You have full firmware there +and (in some models) part of configuration. +

    From long time there is available on the Dejan's +page flasher (soft + schematics for interface) and it allows to change +flash memory. This flasher will allow to: +

      +
    1. +change part of flash (for example, used for such modyifing firmware, that +phone doesn't read status of simlock and can work with each SIM card)
    2. + +
    3. +repairing some CONTACT SERVICES
    4. + +
    5. +uploading new flash (firmware version) to phone
    6. +
    +After uploading new flash phone will not log into network. You have to +find and use loggers...I don't know more and don't ask me about it. +

    Remember, that using this software can be illegal... +

    Back to the top/Na pocz±tek +

    4. Czy to kosztuje +?/Does it cost ? +
    +


    +

    When you have quarantie for your phone, it should be done for free by +Nokia service. Some services want additionaly info from you about found +bugs (generally: explaining, why you want to make it) - look into my page +and you will know everything ;-) +

    After quarantie you must pay for it...or (only in some services) if +will be done by free, if you will show them bug... +

    Back to the top/Na pocz±tek +

    5. Gdzie tego dokonaæ +?/Where to make it ? +
    +


    +

    Ask your operator... +

    Back to the top/Na pocz±tek +

    6. What are +bugs/changed things in next versions ?/Jakie s± b³êdy/zmiany w kolejnych +wersjach ? +
    +


    +

    Some info about my description, which is available on subpages: +

      +
    • +when I write firmware version before text (for example "(V 3.41)") - something +is changed, when compare to this firmware version (here 3.41)
    • + +
    • +when I write "(OLDER ?)" before text - this bug/info, etc. can be connected +with older firmware versions, here is confirmed
    • + +
    • +when I write "(NEWER TOO ?)" before text - this bug/info, etc. wasn't checked +in newer versions
    • +
    +Kilka s³ów o opisie dostêpnym na podstronach: +
      +
    • +je¿eli piszê wersjê oprogramowania przed tekstem (np. "(V 3.41)") - co¶ +zosta³o zmienione w stosunku do podanej wersji oprogramowania.
    • + +
    • +je¿eli piszê "(STARSZE ?)" przed tekstem - informacja, b³±d, itp. mo¿e +byæ równie¿ w starszych wersjach, tutaj za¶ jest potwierdzona
    • + +
    • +je¿eli piszê "(NOWSZE TE¯ ?)" przed tekstem - informacja, b³±d, itp. nie +by³a sprawdzona w nowszych wersjach
    • +
    +Please also notice, that changes between the same firmware versions in +different models are not the same. +

    Please find your model and click to see everything: +

    +Back to the top/Na pocz±tek +

    7. Jak zmieniæ wersjê jêzykow±?/How to +change language in phone ? +
    +


    +

    You have to change in phone part of firmware... From some time it's +possible to do it with Dejan flasher. +

    Back to the top/Na pocz±tek +

    8. U¿yte materia³y/Information +sources +
    +


    +

    Niektóre u¿yte materia³y pochodz± ze stron: +
    Some used materials are from WWW pages: +

      +
    1. +http://www.webit.com/tw/nokia.shtml
    2. + +
    3. +http://vzone.virgin.net/neil.hobbs/Nokia/Phone.htm
    4. + +
    5. +http://www.worldofcellularsecrets.com/free.htm
    6. + +
    7. +http://www.telephone.ru/faq/nokia6100/
    8. + +
    9. +http://gsm.erc.bc.ca/553software.html
    10. + +
    11. +http://www.users.bigpond.com/Scotth/
    12. + +
    13. +http://www.yaws.dk/communicator/faq/imei/home.html
    14. + +
    15. +http://www.yaws.dk/communicator/faq/versions/phone.html
    16. + +
    17. +http://www.nokiainfo.f2s.com/software_versions.html +(12-07-2001)
    18. + +
    19. +www.vosper.prv.pl
    20. + +
    21. +http://www.unofficial7110.co.uk/bugs/bugs.htm
    22. + +
    23. +http://slashdot.org/articles/00/09/03/1515202.shtml
    24. + +
    25. +http://www.arcx.com/sites/6190Tips.htm
    26. + +
    27. +http://www.wapterror.de/index.shtml
    28. + +
    29. +http://www.wapterror.de/6210.html
    30. + +
    31. +http://bugzilla.punknet.cz/long_list.cgi
    32. + +
    33. +http://www.artie.force9.co.uk/8850/about.htm
    34. + +
    35. +http://www.fponticelli.com/bug8210.html
    36. + +
    37. +http://members.aon.at/mfs/ (14-01-2002)
    38. + +
    39. +http://www.2thumbswap.com/products/secrets/nokia_8110.htm
    40. + +
    41. +http://www.nokia4u.cz/Nokia/firmware/fw-zmeny.htm +(12-07-2001)
    42. + +
    43. +http://www.indocell.net/id37.htm
    44. + +
    45. +http://www.ponticellinks.com/bug_sw.html +(02-02)
    46. + +
    47. +http://www.flash.net.ph/cgi-bin/ikonboard/forums.cgi?forum=4&show=30 +(03-02)
    48. + +
    49. +http://www.xinfo.net
    50. +
    +Back to the top/Na pocz±tek +

    +


    +
    Marcin +Wi±cek (WWW) +
    Ostatnia aktualizacja: 10 marca 2002/ Last modification: +10 March 2002
    + + + diff --git a/Docs/en_US/gsm/firmware/ftable1.htm b/Docs/en_US/gsm/firmware/ftable1.htm deleted file mode 100644 index 51b9041..0000000 --- a/Docs/en_US/gsm/firmware/ftable1.htm +++ /dev/null @@ -1,2297 +0,0 @@ - - - - - - - - - - - Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia - - - - - - -
    -


    Nokia identification & firmware/Identyfikacja -i oprogramowanie telefonów Nokia

    - -

    -


    -
      -
    1. -Ogólne b³êdy/General bugs
    2. - -
    3. -Ogólne informacje o IMEI/General info about -IMEI
    4. - -
    5. -Czy mogê wgraæ sobie oprogramowanie/Can I download -firmware to my phone ?
    6. - -
    7. -Czy to kosztuje ?/Does it cost ?
    8. - -
    9. -Gdzie tego dokonaæ ?/Where to make it ?
    10. - -
    11. -Jakie s± b³êdy/zmiany w kolejnych wersjach -?/What are bugs/changed things in next versions ?
    12. - -
    13. -Jak zmieniæ wersjê jêzykow±?/How to change -language in phone ?
    14. - -
    15. -U¿yte materia³y/Information sources
    16. -
    - -
    -

    Here is first part of table describing firmware in various Nokia phones. -

    You can also: -

      -
    1. -see second part of table
    2. - -
    3. -see third part of table
    4. - -
    5. -back to "main" firmware page
    6. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Phone (telefon)Model number (Oznaczenie)Firmware version code (kod do sprawdzania wersji oprogramowania)TAC in IMEI (TAC w IMEI)
    100THX-9L
    450TFH-9*#9999#
    V1.04 03-02-97
    540THF-11*#9999#
    V1.01 18-11-97
    550THF-10*#9999#
    V1.04 09-06-97
    640THF-13
    650THF-12
    V1.05 08-12-98
    1011NHE-2
    1610NHE-5*#170602112302#
    V3.92 17-03-96 -
    V4.12 30-05-96 -
    V5.02 26-06-96 -

    (V4.12) SMS sending added. -
    (V4.12) Dodane wysy³anie SMS. -

    V5.15 25-02-97 -
    V5.23 02-11-98

    1611NHE-5SX
    V4.03 12-08-97 -

    V4.05 09-11-98 (new 1611?) -

    V5.02 26-06-96 -

    Some firmware versions display full network names. -
    Niektóre wersje oprogramowania wy¶wietlaj± pe³ne nazwy sieci. -

    V5.23 02-11-98

    1630NHE-5NA*#170602112302#
    V5.23 02-11-98
    1631NHE-5SA
    16??NHE-5NX490152
    V5.13 10-12-96
    2010NHE-3*#9999#
    2110NHE-1XN*#9999#
    Vm4.95 02-07-96 -
    V5.56 03-12-96
    2110i, 2110e for GSM 900NHE-4*#170602112302#
    V5.11 27-09-95 -
    V5.62 05-05-97
    2110i, 2110e for GSM 900NHE-4NX*#682371158412125#490130
    V5.31 06-01-96 -
    V5.49 09-10-96 -
    V5.62 05-05-97 -
    V5.70 15-11-97
    2110i, 2110e for GSM 1800NHK-IEA*#682371158412125#
    2140NHK-1XA
    Vm4.92 01-06-95
    2148NHK-1
    2148iNHK-4
    2160NHC-4NE
    3110NHE-8*#3110#490165, 490184 (Finland)
    V6.52 15-05-97 -
    V7.11 24-09-97 -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    By pressing C during a call which then changes the NaviKey's function -to Options that include putting the call on hold, address book, sending -DTMF and ending the Call (it can be activated via a settting menu item -"In Call functions"). -
    Przez naci¶niêcie klawisza C w czasie rozmowy oznaczenie NaviKey zmienia -siê na "Opcje" daj±c dostêp do  menu zawieraj±cego ró¿ne opcje przydatne -podczas rozmowy (mo¿e byæ ono w³±czane przy pomocy opcji "Funkcje równoleg³e" -w menu). -

    The hold function is complemented by a new Menu function "call waiting -service". -
    Funkcja zawieszenia po³±czenia jest obecna w postaci nowej pozycji -menu ("Us³uga po³±czeñ oczekuj±c."). -

    The leaflet also indicates that the volume of all ringing tones have -been raised. -
    Zwiêkszono g³o¶no¶æ wszystkich dzwonków. -

    The option to add a number directly from the dialled/received/missed -calls to the phonebook - When a number in those registers is highlighted -and is not in the phonebook already, the Navikey displays "Options" which -include save and dial. -
    Dodano opcjê zapisu numeru do ksi±¿ki telefonicznej z menu z wybieranymi/odebranymi -i nieodebranymi po³±czeniami - je¿eli nie ma jakiego w ksi±¿ce, oznaczenie -Navikey zmienia siê na "Options", które pozwala w³a¶nie na zapis (i dzwonienie). -

    A "fast silent mode" (like in 8110) - press Menu and #. -
    Szybkie przej¶cie do cichego trybu (jak w Nokii 8110) - wystarczy nacisn±æ -Menu -i #. -

    Any answer key function removed. -
    Usuniêto funkcjê odbioru jednym klawiszem. -

    V7.72 18-12-97 -

    Support for vibra battery - added menu in option. -
    Obs³uga baterii wibracyjnych - odpowiednia opcja w menu. -

    Added "Cell Info Display" and "Broadcast Messages" options in menu. -
    Dodana obs³uga cell info i cell broadcast (pozycje "Informacje o sieciach" -i "Wiadomo¶ci sieciowe" w menu) -

    V7.73 30-01-98 -
    V8.11 27-02-98 -

    (NEWER TOO ?): when you're in menu and press (c) key, phone leaves menu -(it doesn't go to one level higher) -
    (NOWSZE TE¯ ?): je¿eli u¿ytkownik jest w menu i naci¶nie klawisz (c), -opu¶ci ca³kowicie menu (a nie przejdzie do jednego poziomu wy¿ej). -

    V8.30 16-04-98 -
    V8.32 21-09-98 -
    V8.50 20-10-98 -
    -


    -
    B£¡D (nie wiem, czy z równie¿ z najnowszym oprogramowaniem): nie mo¿na -do³adowaæ karty SIM+ (zadzwoniæ pod 5555) po wyczerpaniu limitu do 0 PLN -lub zablokowaniu rozmów wychodz±cych (nale¿y kartê prze³o¿yæ do innego -telefonu i j± tam do³adowaæ albo skorzystaæ z numeru 0-22 6075555).
    3210NSE-8/9*#0000#448896, 448903 (Finland), 449142 (Finland), 449143, 499149 (Germany), -449150, 449203 (Germany), 449204 (Germany), 449314
    V2.54 20-01-99 -
    V3.00 07-06-99 -
    V3.01 10-06-99 -
    V3.10 17-06-99 -
    V4.02 20-07-99 -
    V4.41 17-08-99 -
    V4.43 14-09-99 -
    V4.65 07-10-99 -
      -
    • -Improvement to charger detection and clock stoppings (in the display)
    • - -
    • -Menu support for OTA prepaid service implemented
    • - -
    • -Improved Short Term Memory: the number from e.g. missed calls list can -now be edited
    • - -
    • -SIM ATK message sent note improved. Now SMS message send indication is -shown only once when the message is sent.
    • - -
    • -SIM-card busy note implemented in SIM ATK. SIM card busy note is now displayed -when entering SIM ATK menu while SIM card is waiting for response to send -SMS or send SS command.
    • - -
    • -Keyguard can now be on, when the phone is connected to PPH-1 car kit
    • - -
    • -Operator name changed "KB Impuls" -> "Bee Line" (250/99)
    • - -
    • -T9 language databases updated
    • - -
    • -T9 case handling improved: Automatical change between upper and lower cases -after dot (.). Spell mode now uses the present case instead of always starting -in upper case.
    • - -
    • -Improvements in T9 special character handling and Matches menu
    • - -
    • -Improvement to T9 ('Insert word' and 'Insert number')
    • - -
    • -Improvement to USSD
    • - -
    • -Improvement to CPHS Information number handling
    • - -
    • -Improved reception of two consecutive OTA ringing tones.
    • - -
    • -Postponing alarm for over 90 minutes, improved. When the alarm is set and -activated, it is possible to postpone (snooze) it continuously (before -it was limited to 90 min.)
    • - -
    • -Destination number is now given as default if Picture Message sending fails. -This means that the user does not have to enter the destination number -again.
    • -
    -V5.01 26-11-99 -

    (V4.02) With connected headset the light turn on all time (previously -not always). -
    (V4.02) Przy pod³±czaniu zestawu s³uchawkowego zawsze zapala siê pod¶wietlenie -(poprzednio nie zawsze). -

    Added Menu 3-8 ("Prepaid credit"). -
    Dodane Menu 3-8 ("Op³acony kredyt"). Nie dzia³a z SIM+. -

    V5.10 21-01-00 -

    Changes in parts connected with charging battery. -
    Zmiany w czê¶ci odpowiedzialnej za ³adowanie baterii. -

    V5.22 29-03-00 -

    V5.26 07-04-00 -

    Phone displays animated startup logo with "hands", not downloaded by -user. If you will reset phone settings (Menu3-3 in PC-LOCALS 1.3), it disappear -and downloaded logo will be displayed then. -
    Telefon pokazuje animowane logo startowe z "r±czkami", a nie to wgrane -przez u¿ytkownika. Je¿eli zresetujesz ustawienia telefonu (Menu 3-3 w PC-LOCALS -1.3), zniknie ono i pokazywane bêdzie wtedy logo wgrane. -

    V5.31 24-05-00 -

      -
    • -(V5.01): when you edit SMS and enter "*" key (symbols), pressing "#" will -move cursor to the next line
    • - -
    • -Can't open simlocks using NokiaTool only - must use EEPROM method
    • - -
    • -Dodano dwie ukryte gry (React i Logika). Aby je uaktywniæ (opis dla PC-LOCALS -1.3):
    • - -
        -
      • -Uruchom PCLOCALS
      • - -
      • -Wejd¼ w menu 3 ( ME Function)
      • - -
      • -Wybierz PRODUCT PROFILE SETTINGS
      • - -
      • -Zmieñ bit 29 (pozycja 1D) z 0 na 1
      • - -
      • -Wci¶nij F2, aby zapisaæ zmiany w EEPROMie
      • -
      - -
    • -Added two hidden games (React and Logic). To activate them (description -for PC-LOCALS 1.3):
    • - -
        -
      • -RUN PC Locals
      • - -
      • -Goto menu 3 ( ME Functions )
      • - -
      • -Choose PRODUCT PROFILE SETTINGS section
      • - -
      • -Change bit 29 ( place 1D ) from 0 to 1
      • - -
      • -Press F2 to save to EEPROM
      • -
      - -
    • -(NOWSZE TE¯ ?) B£¡D: Po wybraniu czasu 12-godzinnego i jêzyka polskiego -w godzinach popo³udniowych w menu ustawiaj±cym zegarek pojawia siê godzina, -"po po³." (po po³udniu) i ró¿ne dziwne znaczki...
    • - -
    • -(NEWER TOO ?) BUG: Test 45 in NetMonitor -and parameter ChCur in test 23 -don't work correctly.
    • - -
      (NOWSZE TE¯ ?) B£¡D: Test 45 -w monitorze sieci i parametr ChCur w te¶cie -23 nie dzia³aj± poprawnie. -
    • -(NEWER TOO ?) BUG: When you're in Composer (Menu 9-3), haven't set tempo -before and use "Tempo", will see blank screen with indicator on the right -side of screen. To change tempo must press any key.
    • - -
      (NOWSZE TE¯ ?) B£¡D: Kiedy jeste¶ w Kompozytorze (Menu 9-3), nie ustawia³e¶ -tempa melodii i u¿yjesz opcji "Tempo", zobaczysz pusty ekran ze wzka¼nikiem -po prawej stronie ekranu. Musisz teraz nacisn±æ jeden raz dowolny klawisz... -
    • -(NOWSZE TE¯ ?) B£¡D: Niedok³adne t³umaczenie w Menu 1-8-2 i Menu -1-4-1
    • - -
    • -Improvement to RF signal bars: When RX was reduced by e.g. 50 dB in phones -with software version 5.22 or 5.26, the RF signal bars may only decrease -by one bar instead of two-three bars.
    • - -
    • -Improvement to Picture messages: In previous versions Picture messages -couldn't be forwarded unless the text was edited.
    • - -
    • -SMS editor speed improved: In previous versions the SMS editor could appear -slow when entering long messages (100-160 characters)
    • - -
    • -Improvement to composer: In previous versions certain sequences of tones -could cause the phone to reset.
    • - -
    • -Operator list updated
    • -
    -V5.36 25-07-00 or 08-08-20 or 27-07-00 -
    V5.38 -

    (?) When read info about simlocks via cable some programs (for example, -NokiaTool), they're CLOSED ! -
    (?) Przy odczycie informacji o simlockach przez kabel przy u¿yciu pewnych -programów (np. NokiaTool), s± one ZAMYKANE ! -

    V6.00 13-10-00 or 03-10-00 -
    V6.00 23-08-01 (ROM6?) -
      -

      -
    • -(V5.24) In call register menu new option Send SMS in Dialled/Missed/Received -list
    • - -
    • -(V5.24)Changed ringing tones (for example, "Hurdy-gurdy")
    • - -
    • -(V5.36) "SIM card registration failed" message is shown when the SIM card -or phone is unknown or rejected from the network.
    • - -
      (V5.36) Komunikat "Rejestracja karty SIM nieudana" , gdy karta SIM -lub telefon nie mo¿e byæ zalogowany w sieci -
    • -(V5.36) Unknown callers (private/unlisted numbers) are now registered as -missed calls (for example, in the Call register (Menu 3-1)). They -are listed as "(no number)" and it is now possible to see Time of call
    • - -
    • -(V5.36) Arabic (Indian) numbers are used correctly
    • - -
    • -(V5.36) Improvement to receiving an over the air ringing tone. Earlier -when receiving an over the air ringing tone and selecting playback directly, -the first tone would be partially cut off during the playback (only when -the keypad tones were activated)
    • - -
    • -(V5.36) Improvement to SIM Application Toolkit
    • - -
    • -(V5.36) Improvements to T9 
    • - -
    • -(V5.36) When using Options menu to insert a symbol twice in an empty SMS -editor (e.g. @@) (This problem was presented only in SW versions 5.31 and -5.36) - phone remembers the T9 state after entering and leaving the options -menu (earlier when entering and leaving the options menu from the SMS editor -after having disabled T9 with the #-key, the phone would activate T9 again -automatically)
    • - -
    • -(V5.36) Operator list updated 
    • - -
    • -(V5.36) BUG REPAIRED: When edit long SMS (about 160 chars) and press Up/Down -key very long (until will scroll all SMS context - 160 chars) without releasing, -phone will restart after it - info from SkyBoy
    • - -
      (V5.36) POPRAWIONO B£¡D: Przy edycji d³ugiego SMSa (oko³o 160 znaków) -po naci¶niêciu klawisza Góra/Dó³ i przytrzymaniu (bez zwalniania), a¿ ca³y -SMS (160 znaków) zostanie przewiniêty, telefon zresetuje siê...  - -informacja od SkyBoy  -
    • -(V5.31) Memory game is named "memory", not "pairs" 
    • -
    - -
    -
    If you Activate and Deactivate the Phone Security (Menu 4-3-4) -on Software versions 5.26 - 5.36 the tick is incomplete. -

    I have signals, that sometimes after making some things over cable (uploading -logo, etc.), contrast of LCD is changed ! Probably using Logo Manager makes -problem! -

    Interesting facts: firmware seems to be cut version of firmware from -more expensive phones. There still some help texts inside, texts from some -functions (does it mean, that phone support them ?) - ("Rename this set" -- it can be done via cable !), text with name of "full" profiles - the -same question (Meeting, Outdoor, Pager, General), texts "Save to another -memory?, Saved to phone memory,Saved to SIM Card", "List of own numbers"...

    3310NHM-5*#0000#350005, 350101 (Finland)
    V3.24 22-08-00 -

    BUG (NEWER TOO ?): With voice dialing and HF, when phone understand -your voice, "hanges". You can see "Dialing too..." and "End". When you -press "End" and keypad is locked, you will see "Press Unlock and then *" -and then (something lika that) "Enable SIM application?". When press "OK", -everything is again normal... -
    B³±d (Nowsze te¿ ?): Przy wybieraniu g³osowym (przez zestaw HF) i pozytywnym -rozpoznaniu znaku, telefon "zamiera". Widaæ "Dzwoni do..." i "Zakoñcz". -Gdy chcemy Zakoñczyæ i s± zablokowane klawisze pojawia siê "Naci¶nij odblokuj, -a potem *", a nastêpnie (co¶ w rodzaju) "W³±czyæ aplikacje SIM?". Naciskamy -"OK" i wszystko wraca do "normy"...  -

    V4.02 05-10-00 -

    V4.06 21-11-00 -

      -
    • -Handling (e.g. sorting/adding/replacing) of names in phonebook corrected -in Turkish and Greek languages
    • - -
    • -Special characters corrected in Danish language (when sent to 8210/3210)
    • - -
    • -Improvements to SIM-ATK, e.g.:
    • - -
        -
      • -When USSD notify is send, the phone sends the response to the SIM card
      • - -
      • -Long press 'C' and short press 'C' gives correct value to SIM card
      • - -
      • -Call coming with SIM ATK gives correct result back to SIM
      • - -
      • -Display Text works with scroll key
      • -
      - -
    • -Improvements to SMS and T9:
    • - -
        -
      • -Delivery report 'pending' in Chat-mode corrected
      • - -
      • -Name were missing on delivery reports
      • - -
      • -Changes in cursor movements in SMS (with active T9)
      • - -
      • -Adding words to dictionary can be recognised
      • -
      - -
    • -Improvements to Reminder:
    • - -
        -
      • -Corrections on functionality when erasing one by one, pressing Clear during -erase
      • - -
      • -Receiving calendar requests from other phones improved
      • -
      - -
    • -USSD commands activated from AND (Abbreviated Dialling Numbers) when Speed -Dial selected
    • - -
    • -New code - you can Clear Operator Logo using *#67705646# command
    • - -
    • -Returning from game settings improved
    • - -
    • -Service numbers do not open anymore an empty screen
    • - -
    • -Improvement to phonebook number query count
    • - -
        -
      • -Caller groups in names on SIM card were not always removed
      • -
      - -
    • -Improvements to OTA functionality
    • -
    -V4.18 12-01-01 (18-12-00 ?) -
    Support for new Power Amplifier added -

    V4.23 25-01-01 -

      -
    • -Improvements to SIM-ATK: Setup Call could reset phone, if text sent with -Setup -Call  was very long 
    • - -
    • -Improvements to SMS and T9: 
    • - -
        -
      • -Receiving Picture Messages with Euro sign 
      • - -
      • -Counter in Picture Messages when Unicode is selected (Adding character -counter for message writen other than English ?)
      • - -
      • -'Send to many' option after reply 
      • - -
      • -Not able to fetch Phonebook (blank display) when forward / reply to SMS 
      • - -
      • -Errors receiving Concatenated SMS 
      • - -
      • -Inserting a Smiley 
      • -
      - -
    • -Improvements to Reminder: letter counter (earlier: when edit reminder text, -number of free chars is displayed incorrectly. First: one additional byte -is used for indicating coding (in fact you have maximally 35, not 36 chars), -second: some chars are saved as two 8 bit chars (indicator doesn't show -it) and when write only them, you can write only 17 chars. Summary: you -can write 17 - 35 chars (number of it depends, what chars are in text) -and indicator doesn't show number of free chars correctly...)
    • - -
    • -Improvements to Settings: Light managing in carkit 
    • - -
    • -Improvements to Composer: Screen blanked when selecting Tempo option with -some OTA ringing tones 
    • - -
    • -Improvements to Phonebook: 
    • - -
        -
      • -Indicator shown while sending message 
      • - -
      • -Long number correction 
      • -
      -
    -V4.19 03-01-01 -
    The same functionality as version 4.18 -

    Note: New text strings (localisation), which were implemented in V4.23, -contained some specific characters (i.e. Clear Key when writing SMS). Software -version 4.19 will correct these failures. -

    V4.24 23-02-01 -

      -
    • -Note: When using V4.23, deleting character with 'C' key was not possible -in language pack B, G and H. This has been corrected.
    • - -
    • -Contains all improvements made in V4.23
    • - -
    • -Support for RFMD Power Amplifier added 
    • - -
    • -Improvements to SIM-ATK: If Display text was (8n-1) long, an @ would show -at the end 
    • - -
    • -Improvements to SMS and T9: 
    • - -
        -
      • -Wrong counter in query 
      • - -
      • -Letter counter 
      • - -
      • -Euro-sign as second-last character in Reminder Text 
      • -
      - -
    • -Improvements to Reminder: Euro-sign as second-last character in Reminder -Text 
    • - -
    • -Improvements to ALS: Missing blinking indicator for non selected line 
    • - -
    • -Improvements to Phonebook: 
    • - -
        -
      • -Voice Mailbox DDI Interface improved 
      • - -
      • -Corrections to Turkish language (menu items, translations, message in Voice -dialling)
      • - -
      • -(removed bug) Can read phonebook and other memories via cable
      • -
      -
    -V4.35 29-03-01 -
      -
    • -'Insert SIM' problem with certain 32K SIM cards improved 
    • - -
    • -(?) 'Uppercase ABC' in Chinese Language package corrected 
    • - -
    • -(?) 'Multi Sim Lock' included
    • -
    -V4.45 21-06-01: -
    V4.45 05-07-01 (ROM6?): -
      -
    • -Language: 
    • - -
        -
      • -General update of Dictionary in all languages 
      • - -
          -
        • -New T9-languages 
        • - -
            -
          • -Czech
          • - -
          • -Polish 
          • - -
          • -Hebrew 
          • -
          - -
        • -New UI-language 
        • - -
            -
          • -Ukrainian (No T9 input) 
          • - -
          • -Chinese 
          • -
          - -
        • -Selected 'word' shown as "square" in traditional Chinese 
        • - -
        • -Special word not selectable when Bopomofo 
        • - -
        • -Vietnamese 
        • - -
            -
          • -Translation to 'Countdown Timer' corrected 
          • -
          - -
        • -German 
        • - -
            -
          • -Translation of 'Highscore' corrected 
          • -
          - -
        • -Hebrew 
        • - -
            -
          • -input in all editors 
          • -
          -
        - -
      • -Composer 
      • - -
          -
        • -Vibrating in Composer stops when receiving an SMS 
        • - -
        • -Vibra active when composing a ringing tone 
        • - -
        • -Not possible to forward received ringing tones anymore 
        • -
        - -
      • -Phonebook 
      • - -
          -
        • -Mixed case multitap ('Abc') in phonebook implemented 
        • - -
        • -Alphabetic sorting order corrected when spaces in the beginning of a name 
        • - -
        • -Search in Phonebook now starts from the top 
        • - -
        • -Scrolling error in Chinese Phonebook corrected 
        • - -
        • -Leading blanks ignored in sorting 
        • - -
        • -When trying to save "no. too long, max. 20" next screen is number editor -but with name query 
        • -
        - -
      • -Dictionary / SMS / GMS 
      • - -
          -
        • -'Insert word' works without adding spaces 
        • - -
        • -'Insert symbol' will be placed at cursor position 
        • - -
        • -Mixed numbers and characters handeled correctly 
        • - -
        • -Phone freeze / reset when sending GMS if Message Center Number missing -is corrected
        • - -
        • -From Option menu in Write Message 'Upper / Lower' case latin 
        • - -
          input can be selected from menu in chinese language packs 
        - -
      • -MISC 
      • - -
          -
        • -Calculator: Exchange rate now done with higher precision 
        • - -
        • -SIM ATK: Clear key is now working properly in Play Tone 
        • - -
        • -Shortcut: Missing functionality in Reminder and Tone menu implemented 
        • - -
        • -General update of Operator Name List (#41) and UI Text
        • -
        -
      -
    -Users info (corrected or changed things compared with V4.02): -
      -
    1. -the same:
    2. - -
        -
      1. -Picture Images:
      2. - -
          -
        1. -You can write Unicode chars. You can write, but when send image or get -via cable, they're converted to latin chars (I quess: for backward compatibility -with older phones)
        2. - -
        3. -You can have sender number for each Picture. Phone can't put alphanumeric -numbers (only "normal" and "international") there...
        4. -
        - -
      3. -SMS:
      4. - -
          -
        1. -Unicode SMS's saved in Outbox have Details in Options and "Sender" and -"Message centre: 0" there (sometimes date too)...
        2. - -
        3. -No differences between "Automatic" and "GSM alphabet" (Menu 2-7-6-3) -- Unicode SMS chars are translated to chars from GSM alphabet. IMHO, when -set to Automatic and write Unicode specific chars, Unicode should be used; -if don't use such chars, GSM Alphabet should be used (you should see in -editing screen info about this - different number of maximal chars)
        4. - -
        5. -When edit SMS, have some contenst inside, T9 dictionary is disabled and -write with large chars (ABC on the tope of the screen) and use any of functions -from Options (at least enter into it and return to editing), size of chars -for new text is set to small (abc on the top of the screen).
        6. - -
        7. -When open SMS from Outbox for editing, T9 dictionary is disabled, size -of chars for new text is set to small (abc on the top of the screen).
        8. - -
        9. -When save Linked SMS in Outbox, they're visible double...
        10. - -
        11. -(???) Some business cards (from 3210 ?), which contains some additional -data after correct business card contents are not recognized and you have -problems with editing them...
        12. - -
        13. -(???) Blinking SMS Unicode messages (contains 0x00,0x01 chars) can be edit -and forwared (GREAT!), but wrote appears few spaces in front of the cursor -(as if cursor was there, but it's not - it's few characters behind!)
        14. - -
        15. -T9 dictionary:
        16. - -
            -
          1. -When enable T9 dictionary, have "Insert number", "Insert symbol" and "Insert -word" in Options during editing SMS. They don't seem to be connected with -T9 (at least two first)
          2. -
          -
        - -
      5. -Reminders menu (very limited version of Calendar) is like joke:
      6. - -
          -
        1. -When use Menu 10-3-2 with empty reminders memory, phone goes out -from Reminders menu
        2. - -
        3. -when set notes via cable, year of them is set to 2090
        4. - -
        5. -(???) can receive notes from more expensive models (61xx) and send them -in one SMS (can not edit); when create reminder in phone and send it to -more expensive model (61xx), two SMS are required...
        6. - -
        7. -(???) don't display date from notes from more expensive models (61xx)
        8. - -
        9. -(???) when send note to more expensive models (61xx), date of it is 13.07.2041
        10. - -
        11. -(???) loss birthday date in note (in such situation: forward note from -61xx to 3310, from 3310 to 61xx)
        12. -
        - -
      7. -Ringtones:
      8. - -
          -
        1. -Phone incorrectly decodes some tones (their scale) in received tones (only -?) in Composer - to avoid this you must save Scale info with each ringtone -(--scale option in --saveringtone/--sendringtone in mygnokii).
        2. - -
        3. -(???) When receiving an over the air ringing tone and selecting playback -directly, the first tone would be partially cut off during the playback -(only when the keypad tones were activated)
        4. -
        - -
      9. -Games:
      10. - -
          -
        1. -When use shortcut for Menu 8-6, for a moment displays incorrect -data...
        2. - -
        3. -Go into Bantumi game, select New Game, during animation press Navi key -and then C, select Continue and press any key. Interesting...
        4. - -
        5. -You must enable Warning Tones (Menu 5-7), when want to use Sound -(Menu 8-6-1). Old code (in older Nokias these options were connected)
        6. - -
        7. -You must enable Vibrating alert (Menu 5-8), when want to use Shakes -(Menu 8-6-3)
        8. - -
        9. -When select maze in Snake II, must play and end at least one game - maze -state is saved then into EEPROM
        10. - -
        11. -(???) Sometimes phones doesn't vibrate (with enabling shaking option) in -Snake II after eating food
        12. - -
        13. -(???) When play games (Space Impact only ?) and have "Battery full" message, -phone leaves menu...
        14. - -
        15. -(???) Sometimes doesn't write line in border in Snake II
        16. - -
        17. -(???) When end game with high score and press key during displaying score -info/animation, new score is not saved
        18. -
        - -
      11. -Language specific:
      12. - -
          -
        1. -PL: kiedy w Menu 8-6-4 masz zapisany identyfikator i wybierzesz -Wybierz, telefon pyta siê: Zastapic poprzedni identyfikator ? (niedok³adne -t³umaczenie).
        2. - -
        3. -PL: Niedok³adne t³umaczenie w Menu 1-8-2 i Menu 1-4-1 i Menu -10-3-1
        4. - -
        5. -To use some chars specific for some languages you need to activate them -(what, when phone doesn't have correct PPM package with specific language -?)
        6. - -
        7. -PL: Komunikat "Mikrofon wy³±czon"
        8. -
        - -
      13. -Warranty menu (*#war0anty#):
      14. - -
          -
        1. -if you haven't entered Purchasing date, press Edit, use up/down keys, press -any digit char and then you will have menu for editing Purchasing date...
        2. - -
        3. -(???) Life Timer doesn't work from the start (it starts showing correct -values, when all calls were longer than 1 h)
        4. -
        - -
      15. -Other:
      16. - -
          -
        1. -In netmonitor (all versions ?) in test -55 you have small type (one 's' too much in last line) in help and -info displayed in first line only
        2. - -
        3. -(???) After changing SIM card, voice tags weren't erased (manual connected -to phone writes, that they should be....) and T9 dictionary was enabled -and first number selected on SIM card and Cell info display (Menu 6-2-2) -set to off and and all tones assigned in Menu 1-6 set to default -(manual doesn't write about it).
        4. - -
        5. -Where is Menu 8-5 ?
        6. - -
        7. -(???) well, in Reminders and phonebook can have numbers of chars < 0 -(indicator on top screen). If it happens, phone informs about it or cut -some chars...
        8. - -
        9. -(???) Shortcut to Menu 6-1-1 doesn't work correctly
        10. -
        -
      - -
    3. -corrected or changed:
    4. - -
        -
      1. -Phonebook:
      2. - -
          -
        1. -Better sorting of entries with national chars. Phonebook is also returned -in Unicode now (via cable).
        2. -
        - -
      3. -SMS:
      4. - -
          -
        1. -(corrected - in some V4.02 it wasn't OK) In delivery reports don't have -names, only numbers (even, if numbers are in the phonebook)
        2. - -
        3. -T9 dictionary:
        4. - -
            -
          1. -(corrected) T9 dictionary state is not saved during disabling phone
          2. -
          -
        - -
      5. -Other:
      6. - -
          -
        1. -(new) Abc mode when write texts, SMS, etc.
        2. - -
        3. -(V4.06) when somebody calls you and will press "C" (drop a call or divert -it), for a moment (one, two seconds) screen looks like after answering -call...
        4. -
        - -
      7. -Ringtones:
      8. - -
          -
        1. -Phone is not compliant with Smart Messaging 2.0.
        2. - -
          Earlier: For received ringtones with some speed values (according -to SM2.0), when you edit them in Composer and use "Tempo", will see blank -screen with indicator on the right side of screen. To change tempo must -press any key. -
          In version 4.23 it was probably corrected -
          Now: when enter Composer, don't see even ringtone contenst
        - -
      9. -Reminders menu (very limited version of Calendar) is like joke:
      10. - -
          -
        1. -(corrected) sometimes doesn't delete notes (when memory is full):
        2. - -
            -
          1. -use Add new (Menu 10-1)
          2. - -
          3. -phone will display: "Memory full. Replace old reminder ?" - press NaviKey -(OK)
          4. - -
          5. -you will be able to select, which reminder should be deleted (NaviKey=Erase). -Select such reminder, which has default name (when created it, didn't write -anything in "Remind about" and phone write "Reminder" now)
          6. - -
          7. -Press NaviKey (Erase)
          8. - -
          9. -Phone will ask "Erase ?"
          10. - -
          11. -Press NaviKey (OK)
          12. - -
          13. -Phone will display "Reminder erased" and will display empty screen. When -will come back to viewing reminders, will see, that ist wasn't erased !
          14. -
          -
        - -
      11. -Netmonitor:
      12. - -
          -
        1. -(new - earlier it was always equal 0) Works "TIM" parameter in test -132
        2. - -
        3. -(new - earlier this test only reseted timers) Test -80 resets timers from test -82 and enables them (works as test -81)
        4. -
        -
      - -
    5. -Other: after upgrading firmware all Picture Images with sender numbers -have them changed (last digit changed to "0")
    6. -
    -V5.03 10-10-01 -
      -
    • -Possibility for user to delete SIM-created SMS from inbox 
    • - -
    • -Operator Name List updated (#44) 
    • -
    - -


    -


    -
    WARNING: IF YOU GIVE YOUR PHONE TO SERVICE -FOR REPLACING FIRMWARE, DELETE ALL VOICE TAGS FROM ITS' MEMORY. IN OTHER -CASE YOU CAN LOST THIS PLACE IN PHONE'S MEMORY. EXAMPLE: IF YOU HAD 2 VOICE -TAGS IN MEMORY, WHEN PHONE WAS GIVEN TO SERVICE, AFTER REPLACING FIRMWARE -YOU CAN HAVE ONLY 6 PLACES (NOT 8) FOR VOICE TAGS. -

    Phone doesn't work correctly with some SAT (SIM Application Toolkit) -SIM cards. I don't know, if problem depends on phone or these SIM cards -bugs.... If I have correctly info, users of Polish Plus GSM (260-01) network -with SIM cards with HRL 91 should change them... -

    Interesting facts: firmware seems to be cut version of firmware from -more expensive phones. There still some help texts inside, texts from some -functions (does it mean, that phone support them ?) - ("Rename this set"- -it can be done via cable !), texts from "full" calendar ("Meeting", "Birthday", -etc.), texts "Save to another memory?, Saved to phone memory,Saved to SIM -Card","List of own numbers" (update: own numbers memory is available via -cable)...

    3330NHM-6*#0000#350150
    V2.49 19-03-01 -
    V3.05 05-04-01 -

    BUG: -

      -
    • -when have more than 3 voice tags, during using this function (voice dialling) -phone hangs and resets
    • - -
    • -Games:
    • - -
        -
      • -If you try to download (via wap) new "game levels".  The problem is -that after it phone do not display the "ranking list" of "snake2" and/or -"space impact". Problem appeared after downloading new "labirints" and -"new mission". When you try to download the same mission (promo 1, gratis) -after it. Result was the phone always don't display the ranking list and -also "space impact" don't run. "Bumper" runs ok.
      • - -
      • -Snake, if you reach an high level of scoring, when you select "continue" -the phone go locked.
      • -
      - -
    • -"ascending" attribute doesn' t work
    • - -
    • -bug connected with assigning ringtones: when I changed a name with a specific -ringtone, and I look at other names I see that also some one other name -was changed the ringtone. The I changed back this second name to original -ringtone,  and also the first came back to original ring tone. It -seems that you can change a ringtone for a specific position number, that -is in use simultaneously in use in SIM and Phone memory, without possibility -to distinguish them.
    • -
    -V3.10 12-05-01 -

    Inprovements in Voice Tags -

    BUG removed: when trying to write a message with an uppercase accented -character  (i.e. character <?>) and saving SMS without sending -it, then entering "Own messages" the charater <?> become an <E>.  -To solve this use "left accent" insetad of right accent. (Ú) instead of -(À). -

    BUG: if I set the alarm clock, phone "reset" (it go off and then on).  -in about 20% when alarm clock ring, and I press a key, phone go OFF, and -when I tryed to go ON it ask the calendar date. -

    V3.12 -

    Changed operator names -

    Problems with games: snake, if you start a game and you exit from menu -when you return to the game you don't find ther item "continue" but only -a "new game". -

    V4.12 -
      -

      -
    • -Languages:
    • - -
        -
      • -General update of Dictionary in all languages
      • - -
      • -New T9-languages: Check and Polish
      • - -
      • -New UI-language: Ukrainian (no T9 input)
      • - -
      • -In German language: Translation of 'Highscore' corrected
      • -
      - -
    • -Composer:
    • - -
        -
      • -Vibrating in Composer stops when receiving an SMS
      • - -
      • -Vibra active when composing a ringing tone
      • - -
      • -Not possible to forward received ringing tones anymore
      • -
      - -
    • -Phonebook
    • - -
        -
      • -It is now possible to erase all entries (earlier phone wrote "memory deleted" -and didn't erase it)
      • - -
      • -Mixed case multitap ('Abc') in phonebook implemented
      • - -
      • -Alphabetic sorting order corrected when spaces in the beginning of a name
      • - -
      • -Search in Phonebook now starts from the top
      • - -
      • -Leading blanks ignored in sorting
      • -
      - -
    • -Dictionary/SMS/Picture Messaging
    • - -
        -
      • -Phone reset sending Picture Message + 120 char text corrected
      • - -
      • -C-key no longer deletes all SMS if used twice in the end of a long SMS
      • - -
      • -'Insert word' works without adding spaces
      • - -
      • -'Insert symbol' will be placed at cursor position
      • -
      - -
    • -WAP
    • - -
        -
      • -Over The Air settings can now be saved and viewed
      • - -
      • -Freeze/reset using WAP combined with FDN corrected
      • - -
      • -Blank menu removed
      • - -
      • -#-key press: stays in WAP-session
      • - -
      • -Layout updated several places
      • - -
      • -After saving bookmark phone now returns to idle state
      • -
      - -
    • -USSD
    • - -
        -
      • -Never ending request (spinning globe) corrected
      • - -
      • -Connection timeout problem fixed
      • - -
      • -Memory leak fixed
      • - -
      • -Bearer setting "Address Type" removed
      • -
      - -
    • -Games
    • - -
        -
      • -Now it is possible to download games
      • - -
        WML page replies with "Download failed" if there is an error
      - -
    • -SIM ATK
    • - -
        -
      • -SIM ATK opened for WAP (send and receive SMS etc.)
      • - -
      • -Now showing more than only first error message
      • - -
      • -Clear key is now working properly in Play Tone
      • -
      - -
    • -Voicetag feature improved: 8 voicetags possible
    • - -
    • -Screensaver selection improved
    • - -
    • -Exchange rate now done with higher precision in Calculator
    • - -
    • -In Shortcut, missing functionality in Reminder and Tone menu implemented
    • - -
    • -Operator Name List and UI Text updated
    • -
    -BUG:  If you are playing with "space impact", and a new SMS come in, -and you try to read it, when you continue the game after the 1st startship -lost, the game go on but without the starship. -

    V4.16 25-06-01 -

      -
    • -Operator Name List and UI Text updated
    • - -
    • -Service indicator was missing totally with some new SIM-cards
    • -
    -V4.30 20-08-01 (ROM6?): -
      -
    • -New features implemented
    • - -
        -
      • -Conference Call
      • - -
      • -T9 in WAP - Based on CUI editors
      • - -
      • -Languages:
      • - -
          -
        • -Chinese (T9 support)
        • - -
        • -Czech (T9 support)
        • - -
        • -Polish (T9 support)
        • - -
        • -Hebrew (T9 support)
        • - -
        • -Hungarian (T9 support)
        • - -
        • -Slovak (T9 support)
        • - -
        • -Ukrainian (no T9 support)
        • -
        -
      - -
    • -Improvement to Phonebook
    • - -
        -
      • -Matching the dialled phone number containing special character "+" is now -possible
      • -
      - -
    • -Improvements to SMS
    • - -
        -
      • -when changing T9 language
      • - -
      • -under Message Write it is now possible to write in Insert Word more than -one capital letter
      • - -
      • -SMS Input indicator changed (showed '123' after Send cancellation)
      • - -
      • -when receiving SMS containing special set-up
      • -
      - -
    • -Improvements to Tones
    • - -
        -
      • -possibility to save received OTA ringing tone
      • -
      - -
    • -in Profile menu Use of Warnings Tones changed
    • - -
    • -Improvements in charging (using ACP-7U in 110V/60Hz environment)
    • - -
    • -Improvements to Russian WML (Random Phone texts were shown)
    • - -
    • -SIM ATK: Selectable Header (menu_display_item) removed
    • - -
    • -Improvements to Activating/Deactivating of Cell Broadcast
    • - -
    • -Emergency dialling snooze; softkey text appears changed from 'Clear' to -'Call'
    • - -
    • -Operator Name list (#42) and UI Text updated
    • -
    -V4.50: -
      -
    • -Improvements to WAP
    • - -
        -
      • -Word wrapping default is active ('On')
      • - -
      • -Input element indicator set up for numeric element dialog box added
      • -
      - -
    • -Improvements to Phonebook:
    • - -
        -
      • -Possible to edit/add/replace name/number in phonebook when SIM card memory -is full
      • - -
      • -Blank screen not shown anymore when replacing an entry and SIM card memory -is full
      • - -
      • -Scrolling Phonebook entries with leading spaces possible for Latin as well -for Chinese names
      • - -
      • -Missing information note added when copying entries between SIM and Phone -memory (Security level: Memory)
      • - -
      • -Possible to add new entries in Phonebook when FDN is no (.but not to dial)
      • - -
      • -Erase all entries in Phonebook will continue in background when interrupted -by a MT call
      • -
      - -
    • -Improvement to Dictionary/SMS
    • - -
        -
      • -Possible to save/view/send SMS containing only one character
      • - -
      • -Reminder sending; Correct Calendar date on receiving end (e.g. NPE-3)
      • - -
      • -Picture message: Euro-sign in message received successfully on other phones
      • - -
      • -Stop Watch and Unit Price Editor: Correct alignment in editors (when charging -interrupted)
      • -
      - -
    • -General vibration level increased, in order to make it easier to feel the -vibra function has been activated
    • - -
    • -Possibility for user, to delete SIM-created SMS from Inbox, added (if deleted -SIM will recreate the items)
    • - -
    • -Display Text length changed (it was too short for Send SS)
    • - -
    • -Change Phone Line (with #) is now only possible from Idle
    • - -
    • -DISPLAY TEXT with the option 'wait for user to clear text' now waits for -user to clear text (was cleared automatically after 5 sec.)
    • - -
    • -Operator Name list (#44) updated
    • -
    -V5.11 -
      -
    • -Following T9 languages have been added: Arabic, Hungarian, Slovakian 
    • - -
    • -Dictionary/SMS:
    • - -
        -
      • -Phone virus (SMS with corrupt header) can be deleted and only deleted 
      • - -
      • -Chat: editing Chatname cursor placement is fixed 
      • - -
      • -Hebrew: Templates, Searching and Keymap (in 'spell' state) improved. Writing -more than one capital letter is now possible 
      • - -
      • -Russian: Unicode and Latin letters in same SMS are now received correctly 
      • - -
      • -Picture Message: Blank screen after a call is now removed 
      • - -
      • -Improvement to Smiley editor counter 
      • -
      - -
    • -Phonebook: 
    • - -
        -
      • -Change Phone Line (with #) is now only possible from Idle 
      • - -
      • -Numbers matched even with + in it 
      • - -
      • -Incoming call is now indicated while erasing all in phonebook 
      • - -
      • -Possible to add new entries to internal Phonebook when 
      • - -
      • -FDN is on (but not possible to dial) 
      • - -
      • -Missing information note added when copying entries between SIM and Phone -memory (Security level: Memory) 
      • - -
      • -Scrolling Phonebook entries with leading spaces possible for Latin as well -as for Chinese names 
      • - -
      • -Keypad lock can no longer be unlocked using special key string 
      • -
      - -
    • -Emergency call: During snooze softkey text is changed to 'call' Possible -while entering new PIN-code 
    • - -
    • -Euro-sign in picture message received successfully on other phones 
    • - -
    • -Counter overflow corrected (language pack G) in Reminder and Phonebook 
    • - -
    • -Alignment corrected in Stop Watch and Unit Price Editor (when charging -interrupted) 
    • - -
    • -Time: Improvement to 12-hour setting. Input contains now 4 digits in year -in Russian Time/Date. Russian Date is with a colon instead of a dot 
    • - -
    • -Reminder: Calendar date corrected on receiving end. Now DISPLAY TEXT with -the option 'wait for user to clear text' waits for user to clear the text -(earlier it was cleared automatically after 5 sec.) 
    • - -
    • -Display Text length increased (it was too short for Send SS) 
    • - -
    • -General vibration level increased to make it easier to feel that the vibra -function has been activated
    • - -
    • -NITZ: (Automatic update of time/date) Time set, even if the user hasn't -activated and set the clock 
    • - -
    • -SIM ATK: Refresh command no longer jams the keypad. Selectable header in -SIM ATK menu has been removed
    • -
    - -
    -
    WARNING: THERE IS PROBABLY THE SAME PROBLEM -WITH VOICE TAGS AND UPGRADING FIRMWARE LIKE IN NOKIA 3310
    3390NPB-1*#0000#
    V7.03 10-11-00  -
    V7.05 05-01-01 -
    -
    -
    WARNING: THERE IS PROBABLY THE SAME PROBLEM -WITH VOICE TAGS AND UPGRADING FIRMWARE LIKE IN NOKIA 3310
    3810NHE-9*#3810#
    V6.20 21-03-97 -
    V6.32 06-06-97 -
    V6.61 19-08-97
    5110NSE-1*#0000#449218, 490520, 490542, 490546, 490547 (Germany), 490549 (Germany), -490550 (Germany)
    V3.02 06-02-98 -
    V3.06 04-03-98 (ROM3) -
    V4.51 26-03-98 (ROM3) -
    V4.59 01-06-98 (ROM3) -
      -
      -
    • -Phone goes crazy if you scroll the received SMS with 160 dots.
    • - -
      Telefon wariuje przy przewijaniu odebranego SMSa zawieraj±cego 160 -kropek. -
    • -Phone clears "Headset" text from display after disconnecting HF.
    • - -
      Telefon kasuje napis "Mikrozestaw" z wy¶wietlacza po od³±czeniu zestawu -s³uchawkowego. -
    • -Half Rate codes (#HRC0# -and *HRC0#) don't work - to enable this channel you have to use -WinTesla or other software
    • - -
      Nie dzia³aj± kody do obs³ugi Half -Rate (#HRC0# i *HRC0#) - do w³±czenia tego kana³u trzeba -u¿yæ np. WinTesli albo innego oprogramowania
    - -


    V4.62 14-08-98 (ROM3) -

    V5.04 14-09-98 (ROM3) -
      -

    -V5.07 22-11-98 (ROM3) -
    V5.07 20-11-98 (ROM4 ?) -
      -
      -
    • -New 'Text version' parameter in test -89 of NetMonitor
    • - -
      Nowy parametr 'Text version' w te¶cie -89 monitora sieci -
    • -CCCH channel always used, when -network doesn't support cell broadcasting (in V5.04 CBCH -channel was used with enabled "Info service"or "Cell info display" -options)
    • - -
      U¿ywany jest zawsze kana³ CCCH, -gdy sieæ nie obs³uguje nadawania komórkowego (w wersji 5.04 u¿ywany by³ -kana³ -CBCH po w³±czeniu opcji "Info service" albo "Cell info display") -
    • -When you set "Incoming call alert" to "Ascending" and "Ringing volume" -to higher volume than 2, phone correctly changes volume from volume 1 to -set (previously it changed it only one level)
    • - -
      Przy ustawieniu "Sygna³ nadej¶cia po³±czenia" na "Rosn±co" i "G³o¶no¶æ -dzwonka" na wiêcej ni¿ poziom 2, telefon poprawnie zmienia g³o¶no¶æ od -poziomu 1 do ustawionego (wcze¶niej zmienia³ j± tylko o jeden poziom) -
    • -LAC and CID in test 11 in NetMonitor -are in decimal format.
    • - -
      LAC i CID w te¶cie 11 monitora -sieci s± podawane dziesiêtnie. -
    • -Newer versions(?):
    • - -
        -
      • -set profile to "Silent"
      • - -
      • -reset phone settings via cable
      • - -
      • -Phone will display "silent" mark on display with "Personal" profile selected...
      • -
      -
    - -


    V5.10 23-12-98 (ROM3) -
    V5.11 19-02-99 (ROM3) -
    V5.11 18-02-99 (ROM4) -

    (OLDER ?) Different meaning of Product Profile Settings - can't change -LCD Contrast -
    (STARSZE ?) Inne znaczenie Product Profile Settings - nie mo¿na zmieniæ -kontrastu LCD -

    V5.20 03-06-99 (ROM4) -
    V5.22 01-07-99 (ROM3) -
    V5.24 09-09-99 (ROM3) -
    V5.24 03-09-99 (ROM4) -
    -
    (NOWSZE TE¯ ?) B£¡D: Niedok³adne t³umaczenie w Menu 1-7-2 i -Menu -1-4-1 -

    (NEWER TOO ?) OTHER: This phone has working clock with date and interesting -thing is, that you can't set date from menu (you have to use gnokii) -
    (NOWSZE TE¯ ?) INNE: Telefon ma poprawnie dzia³aj±cy zegar z dat±, -przy czym daty nie mo¿na ustawiæ z menu (ale np. przy pomocy gnokii) -

    (NEWER TOO ?)ALARM BUGS: -

      -
    1. -first:
    2. - -
        -
      1. -set alarm
      2. - -
      3. -disable phone
      4. - -
      5. -when phone will alarm you, press "Snooze"
      6. - -
      7. -enable phone, until will alarm you again (6 minutes)
      8. - -
      9. -don't see "Snooze active" and alarm sign on the screen !
      10. -
      - -
    3. -when you're in the menu, alarm will enable, you will hear sound, but won't -see any info ! When leave menu, will see message, but without sound...
    4. - -
    5. -when keypad is locked and phone alarm you, you can disable it using 1-9, -*, 0, # keys
    6. -
    -V5.26 15-12-99 (ROM4) -
    V5.27 04-02-00 (ROM3) -
    V5.27 03-02-00 (ROM4) -

    Added code *#7760# for displaying Production Serial Number. -
    Dodano kod *#7760# do pokazywania numeru seryjnego. -

    V5.28 17-04-00 (ROM3 ?) -
    V5.28 18-02-00 (ROM4)  -

    Can't open simlocks using NokiaTool only - must use EEPROM method -

    Added info new new GSM operators. For example: -
    Dodano identyfikatory nowych operatorów. Na przyk³ad: -

    ERONET, Mobilis, WATANIYA, K`CELL, LAO GSM, EMTEL, DHIMOBILE, Celtel, -JAWWAL, CELLTEL, Swazi-MTN, TT, ZANTEL, DIGITEL, ECONET -

    Changes names for some GSM operators. For example: -
    Zmieniono nazwy niektórych operatorów. Na przyk³ad: -
    D1-TELEKOM ==> T-D1 -
    D2 PRIVAT ==> D2 -
    MaxTouch ==> Orange -
    SENTELgsm ==> SENTEL -
    HK TELECOM ==> C&W HKT -

    (NEWER TOO ?) BUG:When edit long SMS (about 160 chars) and press Up/Down -key very long (until will scroll all SMS context - 160 chars) without releasing, -phone will restart after it - info from SkyBoy -
    (NOWSZE TE¯ ?) B£¡D: Przy edycji d³ugiego SMSa (oko³o 160 znaków) po -naci¶niêciu klawisza Góra/Dó³ i przytrzymaniu (bez zwalniania), a¿ ca³y -SMS (160 znaków) zostanie przewiniêty, telefon zresetuje siê...  - -informacja od SkyBoy -

    V5.29 24-07-00 (ROM4) -
    MT Unicode USD activated -

    GSM operators field updated: -
    Uaktualnione nazwy operatorów: -
    CT-GSM ==> CMCC -
    LIBTEL  ==> LIBERTEL -

    V5.30 28-09-00 (ROM4) -

    GSM operators field updated -
    Uaktualnione nazwy operatorów -

    (V5.07) "SIM card registration failed" message is shown when the SIM -card or phone is unknown or rejected from the network. -
    (V5.07) Komunikat "Rejestracja karty SIM nieudana" , gdy karta SIM -lub telefon nie mo¿e byæ zalogowany w sieci -
    -


    -
    BUG (all versions ?): some SMS on SIM in Outbox can hang phone, when -try to read them (checked for N5110). Example (mygnokii can be download -from my www): try to use "mygnokii --savesms "test" --hangsms < file" -and read saved SMS -

    Interesting facts: firmware seems to be cut version of firmware from -more expensive phones. There still some help texts inside, texts from some -functions (does it mean, that phone support them ?) - ("Anykey answer", -"Rename this set"- it can be done via cable !), text with name of "full" -profiles - the same question (Meeting, Outdoor, Pager, General), texts -"Save to another memory?, Saved to phone memory,Saved to SIM Card"...

    5130NSK-1*#0000#495503, 495508, 495509, 449210
    V3.08 03-04-98 -
    V4.11 12-06-98 -
    V5.00 01-09-98 -
    V5.30 23-04-99 -
    V5.51 03-08-99 -
    V5.60 14-10-99 -
    V5.71 10-04-00 -
    -
    -
    Interesting facts: firmware seems to be cut version of firmware from -more expensive phones. There still some help texts inside, texts from some -functions (does it mean, that phone support them ?) - ("Anykey answer", -"Rename this set"- it can be done via cable !), text with name of "full" -profiles - the same question (Meeting, Outdoor, Pager, General), texts -"Save to another memory?, Saved to phone memory,Saved to SIM Card"...
    5160NSW-1
    V3.47 15-07-99
    5190NSB-1*#5190#010063
    V3.41 07-02-98 -
    V4.01 22-10-98 -
    V5.01 02-11-98 -

    V5.24 -

    NetMonitor in Menu 11 (in -older firmware in Menu 10). -
    Monitor sieci w Menu 11 -(w starszych wersjach w Menu 10). -

    V5.51 15-04-99 -
    V5.81 20-09-99 -

    Downloadable operator logo and ringtone -

    V6.11 28-04-00 -

    V6.71 25-01-01

    5210NSM-5*#0000#
    V5.12 17-01-02
    5510NPM-5*#0000#
    V3.43 -
      -
    • -Silence or annoying beep is removed, when starting player for the first -time through menus. 
    • - -
    • -Improvement to headset connection timeout. (In some cases when recording -had started from FM radio and then headset was removed, recorder should -have stopped after three minutes, but it crashed). 
    • - -
    • -Language package M (Tagalog, Bahasa Indonesian, Bahasa Malaysian) added. 
    • -
    -
    -Back to the top/Na pocz±tek -

    -


    - - - - diff --git a/Docs/en_US/gsm/firmware/ftable2.htm b/Docs/en_US/gsm/firmware/ftable2.htm deleted file mode 100644 index 709a857..0000000 --- a/Docs/en_US/gsm/firmware/ftable2.htm +++ /dev/null @@ -1,2017 +0,0 @@ - - - - - - - - - - - Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia - - - - - - -
    -


    Nokia identification & firmware/Identyfikacja -i oprogramowanie telefonów Nokia

    - -

    -


    -
      -
    1. -Ogólne b³êdy/General bugs
    2. - -
    3. -Ogólne informacje o IMEI/General info about -IMEI
    4. - -
    5. -Czy mogê wgraæ sobie oprogramowanie/Can I download -firmware to my phone ?
    6. - -
    7. -Czy to kosztuje ?/Does it cost ?
    8. - -
    9. -Gdzie tego dokonaæ ?/Where to make it ?
    10. - -
    11. -Jakie s± b³êdy/zmiany w kolejnych wersjach -?/What are bugs/changed things in next versions ?
    12. - -
    13. -Jak zmieniæ wersjê jêzykow±?/How to change -language in phone ?
    14. - -
    15. -U¿yte materia³y/Information sources
    16. -
    - -
    -

    Here is second part of table describing firmware in various Nokia phones. -

    You can also: -

      -
    1. -see first part of table
    2. - -
    3. -see third part of table
    4. - -
    5. -back to "main" firmware page
    6. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Phone (telefon)Model number (Oznaczenie)Firmware version code (kod do sprawdzania wersji oprogramowania)TAC in IMEI (TAC w IMEI)
    6050NME-1
    6080NME-2*#0000#
    V5.14 03-03-97
    6081NME-2E*#170602112302#
    V5.14 03-03-97
    6090NME-3
    V5.00 30-11-99
    6110NSE-3*#0000#490518, 490523, 490526, 490527, 490545
    V3.11 14-11-97 -
    V3.14 28-11-97 -

    First shipping version of the software. -
    Pierwsza wersja oprogramowania w sprzedawanych telefonach. -

    V4.05 07-01-98 -
    V4.06 16-01-98 -
    V4.25 01-01-98 -
    V4.33 11-03-98  (ROM3) -

    Improves the reception quality. -
    Poprawiona jako¶æ odbioru. -

    SMS message alert volume now linked to ringing volume. -
    G³o¶no¶æ sygna³u SMS po³±czona z g³o¶no¶ci± dzwonka. -

    Minor changes in Profiles menu. -
    Niewielkie zmiany w menu profili. -

    'Long & Loud' SMS alert is now called 'Ascending' -
    D¼wiêk dzwonka SMS 'Long & Loud' zmieniony na 'Ascending' -

    'Warning Tones' is now 'Warning and Games Tones' -
    'Warning Tones' zmienione na 'Warning and Games Tones' -

    The 'No Service' areas between cells seem to have disappeared.When the -phone does go 'No Service', it will very quickly log onto a new cell, usually -within a few seconds. -
    Telefon szybciej siê loguje do nowej komórki po odzyskaniu zasiêgu. -

    The desktop charger now works correctly when the phone is inserted with -the battery connected. -
    £adowarka biurkowa pracuje poprawnie, gdy pod³±czany jest do niej telefon -z w³o¿on± bateri±. -

    BUG: Nokia Cellular Data Suite 1.2 (NCDS) infra red function has now -gone intermittent. This has been confirmed this by using a V3.14 phone -which works perfectly with the installed version of the NCDS. Basically -if I connect the phone using the RS232 cable the NCDS works fine. If you -then disconnect and re-connect using IR, also no problem. If you then disconnect -and re-connect a 2nd time using IR you get no connection. The IR symbol -on the phone flashes, then goes static, then flashes again. -
    B£¡D: Po³±czenie przez podczerwieñ z NCDS 1.2 nie dzia³a dobrze (podczas -gdy w telefonem z oprogramowaniem 3.14 nie ma problemów), natomiast po³±czenie -kablem ci±gle funkcjonuje bez zarzutu. Je¿eli od³±czysz i po³±czysz ponownie -podczerwieñ, nie ma problemu. Je¿eli próbujesz natomiast jeszcze raz, problem -siê pojawia. Symbol podczerwieni w telefonie mruga, pó¼niej wy¶wietla siê -na sta³e i znów mruga. -

    V4.51 26-03-98 (ROM3) -
    V4.59 01-06-98 (ROM3) -
    V4.73 22-04-98 (ROM3) -

    (V4.06) Correct call counters (Received+Dialled calls=All calls) -
    (V4.06) Poprawne liczenie d³ugo¶ci po³±czeñ (Odbierane+Wykonywane po³±czenia=Wszystkie) -

    (V4.33) IR-Software improved -
    (V4.33) Poprawnione oprogramowanie do obs³ugi IR -

    (V4.33) Charger recognition improved. -
    (V4.33) Poprawiono rozpoznawanie ³adowarek. -

    (V4.33) Headset features improved. -
    (V4.33) Poprawiono obs³ugê zestawu s³uchawkowego. -

    (V4.33) Same standard SMS alert as 8110i. -
    (V4.33) Niektóre d¼wiêki SMSów jak w Nokii 8110i. -

    (V4.33) Better energy saving functions. -
    (V4.33) Lepsze funkcje oszczêdzania energii. -

    (V4.33) Better conference call features. -
    (V4.33) Poprawiono obs³ugê po³±czeñ konferencyjnych. -

    (V4.33) Better SMS status report. -
    (V4.33) Lepsze raporty SMS. -

    (V4.33) Display of saving status (phone or SIM). -
    (V4.33) Wy¶wietlanie statusu zapisu (telefon albo karta SIM). -

    (V4.33) HFU-2 improved. -
    (V4.33) Poprawiona obs³uga zestawu samochodowego HFU-2. -

    (V4.33) Better charging with standard, car charger and "cold" battery. -
    (V4.33) Lepsze ³adowanie ze standardow± albo samochodow± ³adowark± -i zimn± bateri±. -

    (V4.33) Faster network connection. -
    (V4.33) Szybsze po³±czenie z sieci±. -

    (V4.33) Safer network connection at a low signal strength. -
    (V4.33) Bezpieczniejsze po³±czenia z sieci± na obszarach o s³abym sygnale. -

    (V4.33) Longer single ringtone with vibra pack. -
    (V4.33) D³u¿szy sygna³ d¼wiêkowy przy u¿ywaniu baterii wibracyjnej. -

    (V4.33) Corrected the problem of the battery indicator bar flickering -between one and two bars with a Li-ion battery. -
    (V4.33) Poprawiono problem ze wska¼nikiem poziomu na³adowania baterii -(wcze¶niej przy baterii Li-ion miga³ pomiêdzy jedn± i dwoma kreskami) -

    (V4.33) No more changing Half Rate -settings via keypad. -
    (V4.33) Nie dzia³aj± kody do aktywacji/deaktywacji kana³ów Half -Rate z klawiatury. -

    (V4.33) Improved audio quality when using the EFR -Speech Codec. -
    (V4.33) Lepsza jako¶æ d¼wiêku przy u¿ywaniu EFR. -

    (V4.33) Reception of CCH blocks after cell reselection in weak field -has been improved. -
    (V4.33) Poprawiono odbiór bloków CCH po powtórnym wyborze komórki na -obaszrach o s³abym sygnale. -

    (V4.33) Improved the maintenance charging when using the ACP-7 charger. -
    (V4.33) Poprawione ³adowanie podtrzymuj±ce z ³adowark± ACP-7. -

    (V4.33) More frequent battery low warning beeps added during a call -made with a Li-ion battery. -
    (V4.33) Czêstsze ostrze¿enia o wy³adowaniu baterii przy po³±czeniu -i baterii Li-ion. -

    (V4.33) Improved SMS storage time handling. If the user has not selected -a storage time, the phone uses the maximum storage time set by the network. -
    (V4.33) Je¿eli uzytkownik nie wybra³ czasu wa¿no¶ci SMSa (przy wysy³aniu), -telefon przyjmuje maksymaln± warto¶æ przyjmowan± przez sieæ. -

    (V4.33) Improved recovery of SIM card in error situations. -

    (V4.33) Fixed bug in SMS editing screen where the cursor is one character -to far right. -
    (V4.33) Poprawiono b³±d przy edycji SMSów w sytuacji gdy kursor jest -odleg³y jeden znak od prawej strony. -

    V5.00 28-05-98 (ROM3) -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    V5.22 18-08-98 (ROM3) -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    V5.24 19-09-98 (ROM3) -
    V5.24 14-09-98 (ROM4)  -

    Implemented code *#sim0clock# which shows whether the SIM card -inserted supports clock stopping. -
    Dodano kod *#sim0clock# do sprawdzania, czy zegar karty SIM -mo¿e byæ zatrzymany. -

    Headset detection improved. -
    Poprawione wykrywanie zestawu s³uchawkowego. -

    Performance in weak signal area improved. -
    Poprawiono czu³o¶æ przy s³abym sygnale sieci. -

    Improvements to short message handling. -

    Tone levels tuned (distinct difference now between levels 5 and 4). -
    Zmieniono poziomy dzwonków (wyczuwalna ró¿nica miêdzy poziomem 4 i -5). -

    (V4.73) Different energy consumption in test -23 of NetMonitor. -
    (V4.73) Inne zu¿ycie energii w te¶cie -23 monitora sieci. -

    V5.30 23-12-98 (ROM3) -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    V5.31 19-02-99 (ROM3)  -
    V5.31 18-02-99 (ROM4) -

    Added Menu 4-3-6 ("Active line"), which allows to select active -line on SIM card (ALS function) -
    Dodano Menu 4-3-6, które pozwala wybraæ numer na karcie SIM -(funkcja ALS) -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    V5.40 25-05-99 (ROM4) -

    V5.47 01-07-99 (ROM3)  -
    V5.47 30-06-99 (ROM4) -

    (OLDER ?) Different meaning of Product Profile Settings - can't change -LCD Contrast -
    (STARSZE ?) Inne znaczenie Product Profile Settings - nie mo¿na zmieniæ -kontrastu LCD -

    Some phones with it (I don't know, if it's connected with firmware version -or ROM) doesn't have more than 19 menus in NetMonitor -and some first tests are cut - see more -

    V5.48 08-09-99 (ROM3) -
    V5.48 03-09-99 (ROM4) -

    New ringing tones. -
    Nowe dzwonki. -
    -


    -
    Note: In very old firmware versions (3.x) you have test -18 in NetMonitor. In newer (4.x, -5.x) it was removed... -
    Informacja: W bardzo starych wersjach firmware (3.x) dostêpny by³ test -18 w monitorze sieci. W nowszych -(4.x, 5.x) zosta³ on usuniêty... -

    BUG: Some older/all (?) firmware had bug in Calendar in Birthday option: -it it was set to the last day of February on non-leap-years (for example -29.02.2000), calendar will inform about it 1'st March (1.03.2000). Must -use "Reminder" instead of "Birthday". -

    BUG: Some older/all (?) firmware had bug: Phone goes crazy if you scroll -the received SMS with 160 dots. -
    B£¡D: Niektóre starsze/wszystkie (?) wersje zawiera³y b³±d: Telefon -wariuje przy przewijaniu odebranego SMSa zawieraj±cego 160 kropek.

    6120NSC-3*#6120#
    V1.18 01-07-99
    6130NSK-3*#9999#495502
    V3.26 10-02-98 (ROM3) -
    V3.27 18-02-99 (ROM3) -
    V3.28 24-02-98 -
    V3.32 03-04-98 (ROM3) -
    V4.11 10-06-98 (ROM3) -
    V5.00 08-09-98 -

    (V4.11) NetMonitor in Menu 11 -(in -older firmware in Menu 10). -
    (V4.11) Monitor sieci w Menu -11 (w starszych wersjach w Menu 10). -

    V5.30 23-04-99 (ROM3) -
    V5.30 23-04-99 (ROM4)  -
    V5.60 14-10-99 (ROM3) -
    V5.61 22-11-99 (ROM3) -
    -


    -
    BUG: Some older/all (?) firmware had bug in Calendar in Birthday option: -it it was set to the last day of February on non-leap-years (for example -29.02.2000), calendar will inform about it 1'st March (1.03.2000). Must -use "Reminder" instead of "Birthday".
    6138NSK-3
    6150NSM-1*#0000#449208 (Finland), 493002, 493006 (Germany), 493009
    V3.02 08-07-98 -
    V3.06 10-08-98 -
    V4.01 23-09-98 -
    V4.02 01-10-98 -
    V4.11 05-11-98 -
    V4.12 02-12-98 -

    Added corect recognizing phase 2+ SIM cards. -
    Dodano poprawne rozpoznawania karty SIM fazy 2+ GSM. -

    V4.13 16-12-98 -

    BUG: Calling Menu 10-3 causes the phone to hang and you will -have to remove the battery. -
    B£¡D: Wywo³anie Menu 10-3 zawiesza telefon (pomaga dopiero wypiêcie -baterii). -

    V4.14 18-12-98 -
    V5.02 02-02-99 -

    (V4.13) Added Menu 4-4-6 ("Confirm SIM service actions") with -Menu -4-4-6-1 ("Asked") and 4-4-6-2 ("Not asked") options. -
    (V4.13) Dodane Menu 4-4-6 ("Powiadomienia o zmianach") z Menu -4-4-6-1 ("Widaæ") i 4-4-6-2 ("Nie widaæ"). -

    V5.10 14-06-99  -
    V5.16 22-06-99 -

    (V4.13) NetMonitor in Menu 12 -(in -older firmware in Menu 11) - you have SIM Services (SIM Application -Toolkit) in Menu 11. -

    V5.17 01-07-99 -
    V5.20 20-09-99 -

    NetMonitor in Menu 13 (in -older firmware in Menu 12). Menu 12 seems to be used for -something called LifeChart or WellMate (it seems to be some service connected -somehow with health - some device connected to phone and measured some -health parameters ?) -

    V5.22 10-11-99 -

    (V4.13) Better support for some 16kB SIM card with SIM Application Toolkit -(example: SIM cards from Italian TIM) -

    (NEVER TOO ?) BUG: When receiving an over the air ringing tone and selecting -playback directly, the first tone would be partially cut off during the -playback (only when the keypad tones were activated) -

    Production Serial Number String added (*#7760# code) -
    Dodano kod *#7760# do pokazywania numeru seryjnego. -

    Calendar birthday reminder, related to the last day of February on non-leap-years, -will now be set to right day -
    Notatki w kalendarzu dotycz±ce urodzin odnosz±ce siê ostatniego dnia -Lutego w latach nieprzestêpnych jest teraz ustawiany we w³a¶ciwym dniu. -

    Improvement to character conversion. Earlier blank display was shown -when UCS2 type (e.g. Greek characters) of SMS was received. -
    Poprawiono konwersjê znaków. Wcze¶niej pokazywany by³ pusty ekran, -gdy SMS typu UCS2 (np.ze znakami greckimi) zosta³ odebrany. -

    Multiple multi-page Cell Broadcast reception improved. -
    Poprawiono odbiór wielostronicowych po³±czonych komunikatów nadawanaia -komórkowego. -

    An updated GSM operators' list. -
    Uaktualniona lista operatorów. -

    (V5.17)Different names ringtone: "Polska" instead of "Polka"... -

    V5.23 20-03-00 (except NSM-1NY ORANGE, product code 0502581) -
    V5.23 17-05-00 (ROM6?) -

    (NEWER TOO ?) BUG:When edit long SMS (about 160 chars) and press Up/Down -key very long (until will scroll all SMS context - 160 chars) without releasing, -phone will restart after it - info from SkyBoy -
    (NOWSZE TE¯ ?) B£¡D: Przy edycji d³ugiego SMSa (oko³o 160 znaków) po -naci¶niêciu klawisza Góra/Dó³ i przytrzymaniu (bez zwalniania), a¿ ca³y -SMS (160 znaków) zostanie przewiniêty, telefon zresetuje siê...  - -informacja od SkyBoy -

    Jêzyk polski (wszystkie wersje ?): Niedok³adne t³umaczenie w trzech -miejscach (Spis tel./Opcje/Stan pamiêci, Spis tel./Wykasuj oraz Menu -1-6-2) i b³±d (albo rzadko u¿ywana forma) w pomocy do Menu 6 -(....Opcja dwóch graczy wymaga -dwu telefonów....) -

    Partnership network search improved -

    "Grande walse" renamed as "Nokia tune" -

    (?) "Happy birthday" changed to "Auld lang syne" -

    GSM Operator list updated: -

      -
    • -New Operators (new countries: LAO (457), MV(472), SZ (653), TN (605)):
    • - -
        -
      • -Operator name -> MNC/MCC
      • - -
      • -ERONET -> 218/03
      • - -
      • -Mobilis -> 624/02
      • - -
      • -WATANIYA -> 419/03
      • - -
      • -K`CELL -> 401/02
      • - -
      • -LAO GSM -> 457/01
      • - -
      • -EMTEL -> 617/10
      • - -
      • -DHIMOBILE -> 472/01
      • - -
      • -Celtel -> 650/10
      • - -
      • -JAWWAL -> 425/05
      • - -
      • -CELLTEL -> 413/03
      • - -
      • -Swazi-MTN -> 653/10
      • - -
      • -TT -> 605/02
      • - -
      • -ZANTEL -> 640/03
      • - -
      • -DIGITEL -> 734/02
      • - -
      • -ECONET -> 648/04
      • - -
      • -Vodafone -> 216/70
      • -
      - -
    • -Operator name changed
    • - -
        -
      • -Old name -> New name
      • - -
      • -D1-TELEKOM -> T-D1 (262/01)
      • - -
      • -D2 PRIVAT -> D2 (262/02)
      • - -
      • -MaxTouch -> Orange (404/20)
      • - -
      • -EMARTEL -> TMTTOUCH (502/13)
      • - -
      • -SENTELgsm -> SENTEL (608/02)
      • - -
      • -GT-BCS -> UA-GT (255/05)
      • - -
      • -HK TELECOM -> C&W HKT (454/00)
      • - -
      • -Blu S.p.A -> I BLU (222/98)
      • -
      -
    -(V5.22): -
      -
    • -can't send group graphic via IrDa -> "Group graphic sending failed" message
    • - -
    • -all profiles displayed (including Car and Headset) in "Profiles" menu
    • -
    -Info from users: in PL language "Mikrofon wy³±czon" and "Odg³usz" -

    VP5.23, 25-09-00 -
    with animated menus, picture messaging, T9 dictionary. -

    Problems with SIM Application Toolkit & netmonitor (tested with -Italian SIM cards). With: -

      -
    1. -16k SIM from Wind (called Hi-Wind and working on 1800 Mhz networks only) -- no services (no menu 10) and netmonitor on 11
    2. - -
    3. -SIM from Omnitel Pronto Italia (OPI) shows only 9 menus, the 9th being -Infrared, no netmonitor
    4. -
    - -
    -
    Some older firmware versions had problems with SMS from Quios -(Alphanumeric SMS, I quess): when user tried to read, phone hang and removing/inserting -battery was necessary. -

    Older firmware/all (?) had bug: "Received+Dialled calls" were different -than "All calls"

    6160/6162NSW-3*#9999#
    V1.12 01-02-99 -
    V3.01 09-07-99 -
    V3.02 10-12-99
    6185/6188NSD-3AX*#837#
    V430SD3a2.nef 05-18-99 -
    V440SD3a3.nef 10-26-99 -
    V441SD3a3.nef 11-12-99 -
    V542SD3d3.nef 08-02-00 -
    -
    -
    BUG: The earpiecie volume isn't the same for different phones: -
      -
    • -For 435/441 firmware: If the phone is powered up with the volume set to -level 10, you end up with markedly lower maximum volume. If the phone is -powered up with the volume set at level 9 or lower, the maximum volume -is much louder
    • - -
    • -For 430: You needed to also power up the phone in Field Test Mode to get -the maximum volume.
    • -
    -(?) Alpha Tag Menu (seen after *3001#12345# code) is not available ?
    6190NSB-3*#6190#
    V4.02 06-04-98  -
    V4.22 01-07-98 -
    V4.30 19-08-98  -
    V5.03 09-11-98 -
    V5.10 14-06-99  -
    V5.24 -

    NetMonitor in Menu 11 (in -older firmware in Menu 10). -
    Monitor sieci w Menu 11 -(w starszych wersjach w Menu 10). -

    V5.30 -

    Support for caller groups logos. -
    Wsparcie dla log grupy. -

    V5.53 15-04-99 -

    Custom ringtones and the Startup logo are all now uploadable to the -phone directly using a data cable. -
    W³asne dzwonki i loga startowe mog± byæ teraz bezpo¶rednio wgrywane -do telefonu przez kabel. -

    The max volume is slightler louder than previous -
    Maksymalna g³o¶no¶æ jest teraz wiêksza. -

    Added Menu 4-3-7 (Notifications on SIM update) -
    Dodano Menu 4-3-7. -

    V5.83 17-09-99 -

    Added support for operator logo (uploading via cable or general support) -
    Dodano obs³ugê loga operatora (mo¿liwo¶æ wgrywania przez kabel albo -ogóln± obs³ugê) -

    V5.93 22-11-99 -
    V6.13 28-04-00 

    6210NPE-3*#0000#350138, 350147, 449333 (Germany), 449337, 449338
    V2.95 16-02-00 -
    V3.00 16-08-00  -
    V3.01 21-08-00 -

    BUGS (NEWER TOO ?): -

      -
    1. -Sporadic vibrating during SMS receiving or calling although the vibration -was switched off
    2. - -
    3. -Call waiting service (Menu 4-3-4) doesn't work correctly (it should -"Requests the network to send a beep during a call when another call is -coming"). When use profile Meeting (with Incoming call alert = Beep once), -during call can hear beep and phone is vibrating when another call is coming. -But with another setup of "Incoming call alert" there isn't beep. Only -on display another call is flashing.
    4. - -
      Temporary solution: Callers group have own icons. If you turn off showing -icons, auditible signaling is OK. Other solution is to put off number from -caller group -
    5. -When profile is switched to "Meeting" where is "Incoming call alert" switched -to "Beep once", don't hear beep during call when battery is low and double -beep when battery is empty. Phone turn off unawares.
    6. - -
    7. -When "Delivery reports (1-8-5)" is switched to "on" and phone receives -a delivery report, menu item "Games-Settings (6-4)" disappears. It is showed -again when turn off and turn on phone.
    8. - -
    9. -When keypad is locked and you put phone into carkit, keypad is active. -When take it from carkit then, it's sometimes locked again, sometimes not.
    10. - -
    11. -When phone is in the carkit, you can sometimes lock keypad
    12. - -
    13. -When you take from carkit phone with locked keypad, very often can't unlock -keypad and you have to restart phone
    14. - -
    15. -In Polish language in Menu 5 ("Call diverts") there two the same -submenus (3 and 5) "Divert when not answered" with different contenst
    16. - -
    17. -When for example you received a SMS, when you unlock the phone's keypad, -you must wait till you see "1 message received" before you can push 'read'. -Otherwise you'll go to the menu.
    18. - -
    19. -When you enable cell-info, you won't see any info anymore about which profile -you're in.
    20. - -
    21. -Sometimes, when receive SMS and starts to read it, you have info "menu -contains...." (help for Inbox menu)
    22. -
    - -
    -
    SOME OLDER VERSIONS HAD BUG: sometimes the phone couldn't show the -names of the person whose calling eventhough the person's name IS on the -phonebook. So instead of showing the caller's name the phone was only showing -"+62.... call"  -

    BUG (all version ?): -

      -
    1. -Dropping the last character of the domain name when using relative URLs! -Example: A link like /cgi-bin/wap_news.pl on a page http://www.wapterror.de/wml/index.wml -sould be constructed as http://www.wapterror.de/cgi-bin/wap_news.pl. -Phone makes it http://www.wapterror.d/cgi-bin/wap_news.pl (missing -e on .de)
    2. - -
    3. -Can't delete templates of SMS and Picture Images
    4. - -
    5. -Sometimes, even when vibra is disabled in profile, it enables
    6. - -
    7. -DTMF doesn't work , when have enabled keypad tones
    8. - -
    9. -Phone sometimes doesn't want to connect to WAP (message "check settings")
    10. - -
    11. -If you assigned downloaded ringtone for caller group and deleted if (ringtone) -from phone, it stops ring and vibrate. Can't change ringtone from phone's -menu then (must use Logo Manager or different software)
    12. -
    - -
    -
    V3.04 (16-10-00 ????) -
      -
    • -Improved Half Rate audio quality
    • - -
    • -Updated operator list
    • -
    -V3.08 -
      -
    • -(V3.04) Improvement to Arabic/Hebrew Memory status layouts
    • - -
    • -(V3.04) Improvements to Voicetags 
    • - -
    • -(V3.04) Improvements to SMS 
    • - -
    • -(V3.04) Only one indicator is at the end of Selection window when moving -to second candidate first time in the editing mode
    • - -
    • -(V3.04) Input method indicator in top left corner is disappeared in Rename -operation 
    • - -
    • -(V3.04) DLR-3 is detected as a headset after one headset call 
    • - -
    • -(V3.04) UNICODESIM: SDN only names of length less than 8 are shown 
    • - -
    • -(V3.04) Improvements to browser setup: \"Menu\" -> \"2\" -> \"Scroll\" -corrected
    • -
    -V3.74 22-09-00 -
    V4.04 06-10-00 -

    BUG (NEWER TOO ?): Make these steps: -

      -
    1. -create new folder in Messages/My folders
    2. - -
    3. -create message and move to this folder
    4. - -
    5. -enter into this folder
    6. - -
    7. -edit this message
    8. - -
    9. -save it
    10. -
    -You can't now enter to any folder. Must restart phone. Note, that bug exist -only, if this folder is first on the folders' list. For other it's OK. -

    V4.08 25-10-00 -

    V4.27 21-12-00 -

      -
    • -Turkish, Greek, Czech and Polish T9 added
    • - -
    • -Spanish language and T9 added
    • - -
    • -LCD temperature compensation
    • - -
    • -LCD reset after powerup
    • - -
    • -Spaces couldn't be put in front of text in Dealer Welcome Note (DWN)
    • - -
    • -PIN-code couldn't be entered on a SIM-locked phone
    • - -
    • -It wasn't possible to call a SS string beginning with a "*" (e.g. *#61# -etc.) stored on the FDN phonebook
    • - -
    • -Setup Menu command was not executed when already in SIM ATK menu
    • - -
    • -SIM ATK minimum polling interval increased from 5 to 10 sec
    • - -
    • -Improvements when trying to enter username in HTTP authentication
    • - -
    • -Dynamic text case handling improved
    • - -
    • -OPERATOR_NAME_MAX_LENGTH changed from 10 to 11
    • - -
    • -Timeout killer didn't work on *+-key in number queries
    • - -
    • -Games 'options' -menu disappeared when deleting delivery report in messages
    • - -
    • -Missing/strange menu items when sending SMS
    • - -
    • -Improvements to Arabic & Hebrew editor options
    • - -
    • -Letter insertion direction change in Arabic
    • - -
    • -Improvements to Arabic & Hebrew input (wrong ui-text was used for special -characters)
    • - -
    • -Improvements to calendar when using fetch service with birthday note
    • - -
    • -Improvements when selecting Multiple copies
    • - -
    • -In SMS: Improvements when storing more than 50 items in the Template folder
    • - -
    • -Improved functionality in Names-list
    • - -
    • -If T9 is active '#'-key toggles now between T9 and normal input in Arabic/Hebrew -and Chinese languages
    • - -
    • -Improved business card sending
    • - -
    • -No characters were received if Euro-sign was first character in a picture -message
    • - -
    • -Improvements to Voice tag
    • - -
    • -Correction of Arabic Name & Number view, RTL marker inserted
    • - -
    • -Correction of number length for Idle number input
    • - -
    • -Bottom margin changed in Arabic editor from '2' to '1'
    • -
    -BUGS: -
      -
    • -PL specific: brak informacji o wolnej pamiêci telefonu (widaæ tylko "Wolne: -")
    • - -
    • -After enabling phone, entering PIN code (after "Enter PIN code" request) -and when you will see network indicator, press many times (very fast) phone's -keys (Red and Green key). You should see "Emergency calls only". It must -done so fast, that Stop sign doesn't blink. If you don't see startup logo: -phone doesn't give access to phone's menu and profiles, although it's logged -into network.
    • - -
    • -when keypad is locked and you will press any key, you will see "Press Menu -and then *". You can now press longer Power button and phone will disable -!
    • - -
    • -when you make something, somebody call to you and you will press left soft -key, phone hangs after receiving call...
    • - -
    • -sometimes after WAP session you can't lock keypad
    • - -
    • -after using Irda can't receive SMS
    • - -
    • -using BTS Test in netmonitor can -damage phone (CONTACT SERVICE, etc.) !
    • -
    -V4.36 31-01-01 -
      -
    • -Handling of operator logo length improved
    • - -
    • -AT commands updated
    • - -
    • -Initialisation of Data SW when receiving/releasing the data switch
    • - -
    • -Fixed Dialling Numbers - View details shows wrong number if it is longer -than 12 digits. Although SSC-String for call forwarding is on FDN list, -call forwarding can not be performed either via menu or via string
    • - -
    • -Flashing panel when erasing a phonebook item
    • - -
    • -Impossible to call to SMS 'use number'
    • - -
    • -Delayed SMS
    • - -
    • -SMS Delivery reports
    • - -
    • -Wrong indication of max characters in SMS
    • - -
    • -Font size selection not working for received SMS
    • - -
    • -Error in DLR-3 usage in the middle of the IR usage
    • - -
    • -Modified AT commands for DHU functionality (TCH Loopback)
    • - -
    • -Automatic answer does not work in car profile
    • - -
    • -Some spelling in languages improved
    • - -
    • -Call without simcard, note "Emergency calls only" won't disappear
    • - -
    • -Freezes when faulty Business Card is received
    • - -
    • -Possible to switch phone off during keypad is locked
    • - -
    • -Updated MoU list (DUAL_operators) (Operator Cosmorom)
    • - -
    • -SIM ATK: submenus become trash
    • - -
    • -Cancel all CF's at once:
    • - -
    • -Performed on Line1: If CFU for Line2 is activated the sign is deleted too
    • - -
    • -Performed on Line2: CF's for Line1, data and fax are cancelled: Line2 not -affected
    • - -
    • -*#06# should show IMEI even when SIM card is not inserted
    • - -
    • -USSD short strings supported
    • - -
    • -STP support (e.g. used in Mercedes)
    • - -
    • -CLI logo over IR send/receive
    • - -
    • -Ringing tones over IR - receive
    • - -
    • -Shortcut on 'Send' for go to bookmark
    • -
    -Bug: -
      -
    • -after ending Snake II game enter options and last view. When it will be -displayed, the light will be not off.
    • - -
    • -in German D2 Network problems with message receiving (after receiving one -no more are received).
    • -
    -(?) Improvements in netmonitor -

    V5.01 15-03-01 -

      -
    • -The first WAP call cometimes fails after answering/missing a MT PSTN call
    • - -
    • -When trying to delete a received picture message the phone sometimes freezes
    • - -
    • -When erasing unread SMS from phone by cable or IrDA, SMS icon stays on -display
    • - -
    • -Added function for UI to check, if Data cable is connected or not
    • -
    -This version can cause following intermittent errors: -
      -
    • -Divert freezes the phone
    • - -
    • -SMS receive freezes the phone when reading
    • - -
    • -SMS editing freezes the phone
    • -
    -V5.02 02-04-01 -

    All changes from V4.36 -

      -
    • -(?) first three changes available in 5.01
    • - -
    • -Not possible to change the date of the calendar
    • - -
    • -DTMF tones stop working during call
    • - -
    • -Memory overwrite when using Russian text
    • - -
    • -When PC Suite changes the profile name it is not updated to phone UI before -restarting the phone
    • - -
    • -Strange behaviour when entering number and then <SEND> to PIN query -in start-up
    • - -
    • -By HSCSD data transfer is flow ctrl problems (data loss by upload and bi-directional)
    • - -
    • -The first WAP call sometimes fails after answering/missing a MT PSTN call
    • - -
    • -When trying to delete a received picture message the phone hangs
    • - -
    • -When erasing unread SMS from phone by cable or IrDA, SMS icon stays in -UI
    • - -
    • -Wrong font used for emergency call
    • - -
    • -Sometimes when phone is set to local mode (e.g. by WinTesla) the phonebook -server is not initialised. This makes it impossible to store CLI icons
    • - -
    • -Not possible to insert new words to the dictionary, if phone SW has been -updated to 4.27
    • - -
    • -Business card received over IR handled as a Ringing tone
    • - -
    • -Speed dial not updated, if a SIM card entry's number is edited to NULL
    • - -
    • -SMS Notifications are not routed to PC Suite
    • - -
    • -Bluetooth implemented (there is also special hardware "Nokia Connectivity -Pack" required for it !)
    • - -
    • -Added support in the IrDA subsystem for sending CLI logos to Nokia 6110
    • -
    -Observations from users (V4.36): -
      -
    • -new parameter in test 8 in netmonitor
    • - -
    • -when create note in calendar, default year is 2001 (not 2000)
    • - -
    • -PL: zmieniona nazwa dla Menu 5-5. Wcze¶niej "kiedy nie odbieram", -teraz "kiedy niedostêpny"
    • - -
    • -BUG: when send SMS using phone memory (it should be empty), before receiving -report, you have strange chars inside...
    • - -
    • -"ERA GSM" changed to "PL ERA GSM"
    • -
    -Note: The correction for line 2 icon (mainly seen in UK and Ireland), which -was implemented in 5.01, is not implemented in 5.02 -

    V5.17 01-06-01 -
    V5.17 05-07-01 (ROM6?) -

      -
    • -Added support for Package M - Telekom Jingle - Operator specific ringing -tone
    • - -
    • -Changed language name spelling of Ukrainian language menu select
    • - -
    • -Operators language files updated.
    • - -
    • -Use one sort order for all languages in Q and S pack. Still problem with -the letter "Q" in language pack Q!
    • - -
    • -Startup texts/graphics priority changed to: 1 User Welcome Note Text, 2 -Dealer Welcome Note Text, 3 User Welcome Note Graphics.
    • - -
    • -A "DDI Call Create" message on the Fbus (typically used in STP) cause 6210 -SW crash.
    • - -
    • -When a busy number was called twice the third CALL_CREATE_REQ is not responded -in any way
    • - -
    • -Resets with WAP browsing and bookmark operations
    • - -
    • -Strange behaviour when entering number +SEND to PIN query in startup
    • - -
    • -Wrong font used for DTMF numbers when call is accepted. Now corrected to -bold 8pt.
    • - -
    • -An unknown DTMF tone is sent at the pause when using carkit.
    • - -
    • -TWIN-BILL SIM Causes "SIM REJECTED" Error message when entering wrong PIN -code.
    • - -
    • -Heavy load of phone entries from AT command interface resets phone.
    • - -
    • -Incorrect sub_block length in PND_NAME_FIELD
    • - -
    • -Indications ordered from STP are not unsubscribed/cancelled when phone -is disconnected, causing garbage in data calls.
    • - -
    • -Wrong line 2 icon problem.
    • - -
    • -Car radio mute when voice dialling.
    • - -
    • -New features: WAP over USSD enabled.
    • -
    -Note: To restore WAP Bookmarks, WinTesla version 311.06.00 or later must -be used! -

    (V4.27) New netmonitor test -95 and 130 (for Bluetooth) -

    Note (probably for ALL firmware versions): light sometimes doesn't turn -on, when keypad is locked and power button pressed (like in older models). -For me is NOT BUG. It's rather feature, which allows to save some energy. -It happens (light doesn't enable), when: -

      -
    1. -keypad is locked
    2. - -
    3. -any key is pressed and "Press unlock and then *" or "Now press *" message -will disappear
    4. - -
    5. -power key is pressed
    6. -
    -Press notice, that light is always enabled after pressing power key then, -when message "Press unlock and then *" or "Now press *" is displayed. Because -of it I think, it's good feature, which saves energy after accidentaly -pressing this key (when press fast any key and power button or fast double -power button, light is enabled). -

    BUG: -

      -
    • -when change caller group data and set incorrect (not existing in this model) -ID for ringtone, it's not possible to change it from phone's menu. Bug -existing for example, when upload backup data made in other model to it.
    • - -
    • -when have "Pending" delivery report, phone shows different contents (with -"Pending" you have many strange chars)
    • - -
    • -PL specific: niedok³adne t³umaczenie w pomocy do Menu 3 (wykrzystania) -and Menu 6 (opcja dla dwu graczy)
    • -
    -V5.27 01-08-01 -
      -
    • -Improvements on key lock in combination with car kit. Keyboard will now -lock correctly when removing the phone from car kit
    • - -
    • -Improved functionality when enabling frequency hopping
    • - -
    • -Improved speed for network search after power on, in a country different -from the one where the phone was turned off
    • - -
    • -Improvement to IR after sending a business card to 9110
    • - -
    • -Dealer Welcome Note remains after the user has restored factory settings
    • - -
    • -Improvement to SMS: pressing * in SMS options insert template does not -any more stick the menu
    • - -
    • -Voicetags improved restoring from PC
    • - -
    • -Improved Data Download via SMS Cell Broadcast
    • - -
    • -Call Barring service string accepts now an empty password
    • - -
    • -SS requesting disabled, when a SIM has not been inserted
    • - -
    • -Operator list updated:
    • - -
        -
      • -New operators
      • - -
          -
        • -"SPACETEL" (417/02)
        • - -
        • -"VUT SMILE" (541/01)
        • - -
        • -"GH-MOBITEL" (620/03)
        • - -
        • -"ORENSOT" (250/11)
        • - -
        • -"VODAFONE" (276/02)
        • - -
        • -"TR AYCELL" (286/04)
        • - -
        • -"CU/C_COM" (368/01)
        • - -
        • -"U-CALL" (539/01)
        • - -
        • -"GAB TELECEL" (628/02)
        • - -
        • -"CELLCO" (630/05)
        • - -
        • -"Digicel" (706/02)
        • -
        - -
      • -Operator names changed
      • - -
          -
        • -Old New
        • - -
        • -"Dutchtone" "Orange NL" (204/20)
        • - -
        • -"ERA GSM" "Era" (260/02)
        • - -
        • -"TH WCS" "TH ORANGE" (520/10)
        • -
        - -
      • -New country name
      • - -
          -
        • -"VUT" (417)
        • -
        -
      -
    -Note 1: When flashing 05.27 into a phone, that has never been in service -in normal network (e.g. a swap phone or other brand-new phone), flashing -might not terminate correctly. This can be avoid by letting the phone to -go into service before flashing or by using a normal SIM card (not test -SIM) in the phone during flashing. -

    Note: To restore WAP Bookmarks, WinTesla version 311.06.00 or later -must be used! -

    V5.36 -
    When flashing 05.36 into a phone that has NEVER BEEN IN SERVICE ON -A LIVE NETWORK (e.g. a swap phone or other brand new phones) the flashing -might not terminate correctly. The problem only occurs when using WinTesla -for flashing. A work around for this problem is to make the phone go into -service before flashing or having a live SIM in the phone while flashing.  -

    In order to restore WAP Bookmarks, the latest WinTesla version (311.06.00) -must be used!  -

      -
    • -Changes to operator and country names: 
    • - -
        -
      • -New operator: 
      • - -
          -
        • -XFERA (214/04)
        • - -
        • -TELE2 (246/03)
        • - -
        • -MCM (262/13) 
        • - -
        • -Quam (262/14) 
        • - -
        • -SI VEGA 070 (293/70) 
        • - -
        • -Telcell GSM (362/51) 
        • - -
        • -UTS (362/91) 
        • - -
        • -PK-UFONE (410/03) 
        • - -
        • -SyriaTel (417/93) 
        • - -
        • -DIGITEL (515/05) 
        • - -
        • -ORANGE (520/99) 
        • - -
        • -FSM Telecom (550/01) 
        • - -
        • -OTA NET (603/02) 
        • - -
        • -GAMCEL (607/01) 
        • - -
        • -ECONET NG (621/20) 
        • - -
        • -NG NITEL (621/40) 
        • - -
        • -COG LIBERTIS (629/10) 
        • - -
        • -MOBITEL - TZ (640/02) 
        • - -
        • -CELTEL TZ (640/05) 
        • - -
        • -Itineris RUN (647/00) 
        • - -
        • -F-OMT (647/02) 
        • - -
        • -Cell C (655/07) 
        • - -
        • -PORT-HABLE (722/35) 
        • -
        - -
      • -Name changed: 
      • - -
          -
        • -AIRTEL -> E VODAFONE (214/0 
        • - -
        • -Orange -> orange (228/03) 
        • - -
        • -TDK-MOBIL -> TDC MOBIL (238/01) 
        • - -
        • -mobilix -> Orange (238/30) 
        • - -
        • -Q GSM -> TELE2 (248/03) 
        • - -
        • -TELECEL -> P VODAFONE (268/01) 
        • - -
        • -AMERIS -> F-Orange (340/01) 
        • - -
        • -INA SPICE -> INA AIRTEL (404/31) 
        • - -
        • -M.PLUS -> BATELCO (426/01) 
        • - -
        • -DiGi 1800 -> DiGi (502/16) 
        • - -
        • -EXCELCOM -> proXL (510/11) 
        • - -
        • -ORANGE -> Orange (520/99) 
        • - -
        • -OMEGA -> LoneStar (618/01) 
        • - -
        • -CAMNET -> MTN CAM (624/01) 
        • - -
        • -CELLCO -> CELLCO GSM (630/04) 
        • - -
        • -Itineris RUN -> Orange re (647/00) 
        • -
        - -
      • -New country name: 
      • - -
          -
        • -NA (362) 
        • - -
        • -PK (410) 
        • - -
        • -FSM (550) 
        • - -
        • -GMB (607) 
        • - -
        • -ARG (722) 
        • - -
        • -BRA (724) 
        • -
        - -
      • -Country name changed: 
      • - -
          -
        • -NIG -> NG (255) 
        • - -
        • -NA -> ANT (362) 
        • - -
        • -F -> REU (647) 
        • -
        -
      - -
    • -Improper UI-disconnection of data cable causing IrDA to disconnect corrected. 
    • - -
    • -Locked UI while in call on Mobilkom Austria network using A1 Plus SIM corrected. 
    • - -
    • -Missing Chinese punctuation characters in WAP corrected. 
    • - -
    • -Problem with Phone Book reading via AT commands corrected. 
    • - -
    • -Problem with SMS indicator reading via AT commands corrected. 
    • - -
    • -Chinese sorting in Phone Book when using the letter Q improved. 
    • - -
    • -Wrong text in Call Cost Limit query corrected. 
    • - -
    • -Problem with making calls from Name&Number display in Arabic corrected.
    • -
    -V5.44 29-11-01 -
      -
      -
    • -Possibility of acoustic feedback from keypad and warning tones in HFU-2 -reduced. Typically that feedback appeared when the car radio speakers were -used for phone audio 
    • - -
    • -Handling of long numbers in the Abbreviated Dialling 
    • - -
    • -Number list on SIM improved. The last digit of a very long number string -might have changed in some cases 
    • -
    - -
    -
    Note: -
      -
    • -after changing SIM card memory type is set to "SIM card". Correct it manually -or set security level to "phone" (when SIM card was used earlier, memory -type won't be changed).
    • - -
    • -after calling WAP WAP access number is added to Called Numbers
    • -
    -BUGS: -
      -
    • -Menu shortcuts problem: Menu 1-8-x (example Menu 1-8-7) directs -to Menu 1-8-1
    • -
    -
    6250NHM-3*#0000#
    V1C54 23-02-00 -
    V3.00 15-09-00 -
    V3.12 08-11-00  -
      -
    • -(V3.00) Improvement in weak field
    • - -
    • -(V3.00) Improvements to sound level meter and keyguard code
    • - -
    • -(V3.00) Service dialing numbers in SIM read correctly
    • -
    -Menu 14 doesn't have picture -

    V4.00 06-12-00 -

      -
    • -Improvements to Task Journal:
    • - -
    • -Searching 'by customer' was shown 'by work'
    • - -
    • -Default value was missing when entering amount of materials
    • - -
    • -Flaw in information note when pausing a task
    • - -
    • -When entering the material id, last given id is being default
    • - -
    • -Shortcuts did not work
    • - -
    • -SMS sending did not work with special characters
    • - -
    • -Arabic SMS sending couldn't turn up and down the pages
    • - -
    • -Wrong number font in language packages R and S
    • - -
    • -Phone came from clock menu to Automatic keylock -menu with 'Back' button
    • - -
    • -When adding comment there was text 'OK' instead of 'Save' in left softkey
    • - -
    • -Speed dial names touched service/battery bar
    • - -
    • -Improvements to Automatic keylock:
    • - -
    • -Keypad was locked while in menu
    • - -
    • -Strange behaviour when simultaneous alarm and calendar remainder
    • - -
    • -In Stopwatch shortcuts did not work
    • - -
    • -Charger activated and deactivated the vibra
    • - -
    • -Keyguard not activated when timed profile & missed calls
    • - -
    • -Improvement to Arabic/Hebrew Memory status layouts
    • - -
    • -Improvements to Voicetags
    • - -
    • -Improvements to SMS
    • - -
    • -Only one indicator is at the end of Selection window when moving to second -candidate first time in the editing mode
    • - -
    • -Input method indicator in top left corner is disappeared in Rename operation
    • - -
    • -DLR-3 is detected as a headset after one headset call
    • - -
    • -UNICODESIM: SDN only names of length less than 8 are shown
    • - -
    • -Improvements to browser setup: - "Menu" -> "2" -> "Scroll" corrected
    • -
    -V4.01 28-12-00 -
      -
    • -Timed profile now stays activated after power off/on
    • - -
    • -Impression to be able to same more than 250 names corrected
    • - -
    • -Wrong header text in stopwatch erasing in some languages ("Erase times") -corrected
    • -
    -V4.04: -
      -
    • -Improvements in SMS: phonebook memory re-configuration
    • - -
    • -Improvements in Task Journal: "Task active on background" notification -now displayed also when exiting the Task Journal by pressing "Back"
    • - -
    • -Display contrast factory default value changed from 6 to 4
    • - -
    • -Improved Keylock code shortcut
    • - -
    • -Operator name list updated (Cosmorom / Romania)
    • -
    -V4.05 -
      -
    • -Turkish, Greek, Czech and Polish T9 added
    • - -
    • -LCD temperature compensation
    • - -
    • -LCD reset after powerup
    • - -
    • -Spaces couldn't be put in front of text in Dealer Welcome Note (DWN)
    • - -
    • -PIN-code couldn't be entered on a SIM-locked phone
    • - -
    • -It wasn't possible to call a SS string beginning with a "*" (e.g. *#61# -etc.) stored on the FDN phonebook
    • - -
    • -Setup Menu command was not executed when already in SIM ATK menu
    • - -
    • -SIM ATK minimum polling interval increased from 5 to 10 sec
    • - -
    • -Improvements when trying to enter username in HTTP authentication
    • - -
    • -Dynamic text case handling improved
    • - -
    • -Timeout killer didn't work on *+-key in number queries
    • - -
    • -Games 'options' -menu disappeared when deleting delivery report in messages
    • - -
    • -Missing/strange menu items when sending SMS
    • - -
    • -In SMS: Improvements to calendar when using fetch service with birthday -note
    • - -
    • -In SMS: Improvements when selecting Multiple copies
    • - -
    • -In SMS: Improvements when storing more than 50 items in the Template folder
    • - -
    • -Improved functionality in Names-list
    • - -
    • -If T9 is active '#'-key toggles now between T9 and normal input in Arabic/Hebrew -and Chinese languages
    • - -
    • -Improved business card sending
    • - -
    • -No characters were received if Euro-sign was first character in a picture -message
    • - -
    • -Improvements to Voice tag
    • - -
    • -Correction of Arabic Name & Number view, RTL marker inserted
    • - -
    • -Correction of number length for Idle number input
    • - -
    • -Handling of operator logo length improved
    • - -
    • -AT commands updated
    • - -
    • -Initialisation of Data SW when receiving/releasing the data switch
    • - -
    • -Fixed Dialling Numbers - View details shows wrong number if it is longer -than 12 digits. Although SSC-String for call forwarding is on FDN list, -call forwarding can not be performed either via menu or via string
    • - -
    • -Flashing panel when erasing a phonebook item
    • - -
    • -Earlier it was impossible to call to SMS 'use number'
    • - -
    • -Improved SMS Delivery reports
    • - -
    • -Wrong indication of max characters in SMS
    • - -
    • -Font size selection not working for received SMS
    • - -
    • -Error in DLR-3 usage in the middle of the IR usage
    • - -
    • -Modified AT commands for DHU functionality (TCH Loopback)
    • - -
    • -Automatic answer does not work in car profile
    • - -
    • -Some spelling in languages improved
    • - -
    • -Call without simcard, note "Emergency calls only" won't disappear
    • - -
    • -Freezes when faulty Business Card is received
    • - -
    • -Possible to switch phone off during keypad is locked
    • - -
    • -Updated MoU list (DUAL_operators)
    • - -
    • -SIM ATK: submenus become trash
    • - -
    • -Cancel all CF's at once:
    • - -
        -
      • -Performed on Line1: If CFU for Line2 is activated the sign is deleted too
      • - -
      • -Performed on Line2: CF's for Line1, data and fax are cancelled: Line2 not -affected
      • -
      - -
    • -*#06# should show IMEI even when SIM card is not inserted
    • - -
    • -USSD short strings supported
    • - -
    • -STP support (e.g. used in Mercedes)
    • - -
    • -CLI logo over IR send/receive
    • - -
    • -Ringing tones over IR - receive
    • - -
    • -Shortcut on 'Send' for go to bookmark
    • - -
    • -In Task Journal: User data memory reconfiguration (now more space for user -data)
    • - -
    • -Reconfiguration to language packages:
    • - -
        -
      • -LP C: Turkish T9 added, Spanish menu and T9 removed
      • - -
      • -LP F: Greek T9 added, Spanish T9 removed
      • - -
      • -LP H: Czech T9 added, German T9 removed
      • - -
      • -LP I: Russian menu removed
      • - -
      • -LP J: Polish T9 added, German menu added
      • - -
      • -LP L: created for Spain and Portugal
      • -
      - -
    • -New text release 130301
    • -
    -V5.00 10-07-01 (ROM6?) -
      -
    • -Mainly update to get GCF approva
    • - -
    • -Operator max. name lenght change 11 a 1
    • - -
    • -SIM Poll Interval chang
    • - -
    • -New text release 160301
    • - -
    • -Dual Operator list update
    • -
    -V5.02 -
      -
    • -SMS sending improved (SMS sending jammed occasionally)
    • - -
    • -Light stayed on occasionally
    • - -
    • -Improvement to alternate speech-fax call
    • - -
    • -O- language package added
    • - -
    • -Operator list updated (#44)
    • -
    -
    6310NPE-4*#0000#
    V1.23 19-03-01 -
    V4.10 04-01-02 -

    BUGS: -
    the phone crashed when i recorded a second voice message after an older -one which is 1 minute of length. after i did that, i couldnt delete the -second recording, and the screen would turn black.. another [ok] and the -phone would restart.

    6510NPM-9*#0000#350697
    V3.22 10-01-02
    -Back to the top/Na pocz±tek -

    -


    - - - - diff --git a/Docs/en_US/gsm/firmware/ftable3.htm b/Docs/en_US/gsm/firmware/ftable3.htm deleted file mode 100644 index cd79874..0000000 --- a/Docs/en_US/gsm/firmware/ftable3.htm +++ /dev/null @@ -1,2807 +0,0 @@ - - - - - - - - - - - Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia - - - - - - -
    -


    Nokia identification & firmware/Identyfikacja -i oprogramowanie telefonów Nokia

    - -

    -


    -
      -
    1. -Ogólne b³êdy/General bugs
    2. - -
    3. -Ogólne informacje o IMEI/General info about -IMEI
    4. - -
    5. -Czy mogê wgraæ sobie oprogramowanie/Can I download -firmware to my phone ?
    6. - -
    7. -Czy to kosztuje ?/Does it cost ?
    8. - -
    9. -Gdzie tego dokonaæ ?/Where to make it ?
    10. - -
    11. -Jakie s± b³êdy/zmiany w kolejnych wersjach -?/What are bugs/changed things in next versions ?
    12. - -
    13. -Jak zmieniæ wersjê jêzykow±?/How to change -language in phone ?
    14. - -
    15. -U¿yte materia³y/Information sources
    16. -
    - -
    -

    Here is third part of table describing firmware in various Nokia phones. -

    You can also: -

      -
    1. -see first part of table
    2. - -
    3. -see second part of table
    4. - -
    5. -back to "main" firmware page
    6. -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Phone (telefon)Model number (Oznaczenie)Firmware version code (kod do sprawdzania wersji oprogramowania)TAC in IMEI (TAC w IMEI)
    7110NSE-5*#0000#448895
    V4.07 20-10-99 -

    Internal Nokia test version -
    Wersja testowa Nokii -

    V4.51 18-06-99 -
    V4.58 14-07-99 -
    V4.61 23-08-99 -
    V4.62 24-08-99 -
    V4.67 28-09-99 -

    First shipping version of the software. -
    Pierwsza wersja oprogramowania w sprzedawanych telefonach. -

    V4.69 05-10-99 (not in German language) -

    Improvements in WAP browser (with WML) -

    V4.70 28-10-99 -
    V4.72 10-11-99 (not in German language) -
    V4.73 15-11-99 -

    (V4.70) BUG REMOVED: Earlier: Max. 12 messages can be stored in self -created SMS-folders. -

    V4.75 23-11-99 or 07-01-00 -

    V5.11 16-12-99 -

    Internal Nokia test version -
    Wersja testowa Nokii -

    V4.76 13-01-00 -

    (V4.73) Improvement to Manual Network selection search -
    (V4.73) Poprawiono wyszukiwanie sieci przy rêcznym ich wyborze -

    (V4.73) Improvements to CLI Graphics: -
    (V4.73) Poprawki nastêpuj±cych b³êdów: -

      -
    • -CLI group tone can't be changed
    • - -
      D¼wiêk nie mo¿e byæ zmieniony w grupach osób -
        -
    • -Can't make call by pressing "send" key in CLI member list
    • - -
      Nie mo¿na zadzwoniæ przez naci¶niêcie "wy¶lij" w menu grupy osób cz³onkowie -
        -
    • -"End" key doesn't work right in Caller Group General Note
    • - -
      Klawisz "Koniec" nie dzia³a poprawnie w ogólnych notatkach grupy osób -dzwoni±cych -
        -
    • -Phone reset when there are two or more active downloaded ringing tones -in Caller groups
    • - -
      Telefon siê resetuje, gdy s± dwa albo wiêcej wgranych przez u¿ytkownika -dzwonków w grupach osób dzwoni±cych -
        -
    • -CLI group tones list problems
    • - -
      Problemy z list± dzwonków grupy (pozycje s± przesuniête - po wybraniu -jakiego¶ telefon faktycznie ustawia kolejny na li¶cie)
    -(V4.73) The Call Waiting functionality in the car kit is now improved concerning -radio mute -
    (V4.73) Poprawiono funkcjê po³±czeñ oczekuj±cych w zestawie samochodowym -

    (V4.73) Dialled numbers removed in Roller menu. -
    (V4.73) Wybierane numery zosta³y usuniête z Roller menu. -

    (V4.73) The user is now able to insert a phone number into a SMS message -by searching the phonebook for the number. -
    (V4.73) U¿ytkownik mo¿e teraz wstawiæ numer telefonu do wiadomo¶ci -SMS przez znalezienie go w ksi±¿ce telefonicznej. -

    (V4.73) Improvement of Calendar using am/pm clock -
    (V4.73) Poprawki w kalendarzu przy u¿ywaniu 12-godzinnego formatu czasu -

    (V4.73) Improvement of speed dial function when same name is assigned -to speed dial twice -
    (V4.73) Poprawki w funkcji szybkiego dzwonienia, gdy ta sama pozycja -jest przypisana do dwóch klawiszy szybkiego wyboru. -

    (V4.73) BUG REMOVED: Earlier: -

      -
    • -"?" (Euro) and "\" are converted to space characters when storing or sending -a SMS
    • - -
    • -Inserting a phonebook-number into a SMS: Total crash. Sometimes self-reset -after 1-2 mins. If you're activting IR-receive, yo'll get a error ""remove -datacable"" even it is not connected."
    • - -
    • -When deleting an entry from a call register list and closing the slide -while the deletion is in progress (after 'ok') the phone hangs up when -changing the menukey from 'Lock keys' to Menu'.
    • - -
    • -When deleting a space before a uppercase char with active T9-dictionary, -the char will be changed to lowercase
    • - -
    • -Clock: hour/minute separator "." instead of ":"
    • - -
    • -Sometimes when sending a SMS: SMS get sent (will be received, too), phone -is crashing. Remove battery, afterwards the SMS isn't in the outbox. Maybe -more often when sending sms to more receivers. At power-up alleged no PIN-request.
    • -
    -BUG (ONLY THIS VERSION): Crash with deactivated PIN-request -

    V4.77 25-01-00 -

    BUG FIXED: "Clear operator logo" works now (from Operator Logo Uploader). -

    BUG REMOVED: Earlier: Cell Broadcasts: Settings are cleared after power -cycling. -

    V4.80 23-02-00 -

    Improvement of browsing after ending an incoming call. -

    Wakeup Graphic is now maintained after 'Restore Factory Settings'  -

    Changed ringing tones - Grande Valse renamed to Nokia tune  -

    Phone alert for a future calendar note, which has been transferred during -flashing, is now improved. -

    Improvement of birthday notes expiry when having birthday notes in the -past. In previous release two birthday notes were shown if having note -in the past and other note expires. -

    OTA ringing tones is not playing continuously after being saved.  -

    Tone loop with OTA tones. OTA tones are now being played in full length -when it is being tested in profiles.  -

    Indication of incoming FAX call improved. Profile dependant indications -is now corrected. e.g. Beep in Meeting Profile.  -

    Ringing Tone Check in Profile setting is now also only played twice -as an example when the phone is 'charging' or another message is displayed.  -

    BUG REMOVED: Earlier: -

      -
    • -In the profile "Conference" calls , that numbers are in a callergroup, -are ringing not "short", but normal. Looks like the previous used profile's -settings are used again.
    • - -
    • -In profile "Quiet": phone is ringing at calendar-appointments. Should be -quiet, too. "Conference" is ok (short tone)
    • - -
    • -In firmware 4.76 and 4.77 (4.73 and earlier were OK)  phone crashed -when received more (3) Vcards or calendar-appointments over IR
    • - -
    • -(V4.70) After removing the battery, the currency and unit-settings are -lost often.
    • -
    -V4.84 07-04-00 -

    Improvement to Advice of Charge. Charging on prepaid SIM cards is now -improved -

    Improvements to Manual Network Selection -

    Improvement to Operator Logo in display. The operator logo is now shown -when the service provider is read from SIM -

    Call waiting tone can now be heard in silent mode -

    Longer vibrating time. When phone is in "Beep once" mode and vibra is -on, the phone will now vibrate 250 times before stopping -

    Animation in Services menu too fast. Changed timing from 125 to 160 -milliseconds -

    Improvement to warranty transfer of WAP settings -

    Car Radio Mute is now activated when continuing a handheld call in the -cradle (car kit) -

    (NEWER TOO ?) BUG: Send a calendar note from Nokia 6110 via a SMS to -your 7110. The calendar in 7110 will stop showing calendar notes... -

    Test for size of SMS memory (from http://www.vosper.prv.pl): -
    SMS messages - 47 in different folders -
    Templates - 10 -
    Delivery reports - 36 -
    Additional folders - 2 -
    After 39 SMS phone deactivated function Move ! -
    Full size of memory is 93 (including 10 templates)  -
    ------- -
    Second test for SMS only: 84 SMS + 10 templates -

    BUG REMOVED. Earlier: -

      -
    • -Vibration is running in the rhythm of the music, at very quiet or short -ringtones it is vibrating extrem short or not at all
    • - -
    • -(V4.70) After disconnecting battery (without power-off) the volume is often -set to standard.
    • -
    -V4.85 -

    Info from  http://www.linux.org.uk/diary/: -Seems firmware 4.7x randomly dies on some AT commands. With 4.85 wait for -'OK' then delay 1/10th second before sending a command. If you imediately -respond to OK with a reply the phone misses it. -

    V4.88 19-06-00 or 16-06-00 or 02-06-00 -

    (V4.84) User setting transfer improved (Permanent Memory Management -update). All data saved apart from wake-up graphics -

    (V4.84) Test for size of SMS memory (from http://www.vosper.prv.pl): -
    SMS messages - 62 in different folders -
    Templates - 10 -
    Delivery reports - 18 -
    Additional folders - 2 -
    After 49 SMS phone deactivated function Move ! -
    Full size of memory is 90 (including 10 templates)  -
    ------- -
    (V4.84) Second test for SMS only: 80 SMS + 10 templates -

    BUG REMOVED: Earlier -

      -
    • -The phone freezes sometimes, when assigning rintones to callergroups. Maybe -depending somehow on the settings of callergroups and groupgraphics. Sometimes -continue after 1-2 mins. Maybe better results when using the power-key -than with Menu 3.
    • - -
    • -"Opposite: the levels are in wrong order (1-3-4-2; 2 is the most complicated -one)"
    • -
    - -


    (V4.80) BUG REMOVED: Earlier: -

      -
    • -Names of loaded ringtones were shown as rectangles sometimes, i.e. after -a firmwareupgrade, when ringtones were deleted, but the callergroups still -pointed to them.
    • - -
    • -""Confirmations of SIM service actions"" is not working sometimes, although -enabled - phone is sending SMS without asking.
    • - -
    • -Reminder-alert rings loud even while doing a call.
    • -
    -(V?.??) BUG REMOVED. Earlier: "No connections possible after a Wap-Call -(for approx. 15 min), although receiving-level is up. Alleged the phone -is still sending then (noticeable on the noise in a radio). If you have -a failed login attempt ('no response' or 'page cannot be displayed') only -?  -

    Changed text while sending SMS -
    from -
    letter bar (shorter) -
    Sending -
    message -
    to -
    letter bar (longer) -
    Sending message -

    V4.94 02-10-00 or 27-09-00 or 28-09-2000 -

    Carkit Audio optimisation -

    Text files in language packages updated (localised group names, ...) -

    IRDA data transmission improved -

    Correction to Viag Homezone -

    Operator list updated -

    Update of WAP browser: -

      -
    • -Handling of "No cache" and "Redirect" commands
    • - -
    • -Handling of WAP session after an incoming call
    • - -
    • -Handling of <onenterforward> command
    • - -
    • -Handling of long URLs
    • - -
    • -Handling of HTTP post size limitation
    • - -
    • -Handling of deep navigating
    • -
    -Now max. 838 chars (earlier only 160) can be written into inputfields... -

    Update of SIM handling SW, including SIM ATK corrections -

    BUG: In WTLS mode sends an additional byte in the Client-KeyExchange -packet. Some WAP gateways seem to have a workaround for this bug (E-Plus -works, Debitel not). Netlife WAP-Server has a workaround too... -

    Can render tables in WAP now. -

    Jeden z u¿ytkowników na polskich grupach dyskusyjnych porówna³ j± ze -starszymi wersjami tak: -
    One of 7110 compared it to the earlier firmware: -

      -
    • -WAP browser organised like in N6210
    • - -
      W³a¶ciwie przegl±darka WAP zorganizowana jest podobnie, a w³a¶ciwie -chyba tak samo jak przegladarka WAP w N6210. -
    • -added <CENTER> support
    • - -
      Dodano obs³ugê tagu <CENTER> -
    • -Added function "Go to the address" in menu
    • - -
      Dodano mo¿liwo¶æ wpisania adresu strony bezpo¶rednio z menu (wcze¶niej -trzeba by³o najpierw za³o¿yæ zak³adkê) - opcja "Id¼ do adresu" -
    • -You can NOT LOAD images - new Menu 10-3-2 (previous 10-3-2 -moved to 10-3-3) Appereance settings with Show Images -Yes/No
    • - -
      Dodano mo¿liwo¶æ NIEWCZYTYWANIA grafiki - opcja w nowym Menu 10-3-2 -
    • -Image can be link
    • - -
      Dodano obs³ugê grafiki jako linka -
    • -When phone read pages, you don't see "snake" and "Connecting with...", -but globe
    • - -
      Podczas wczytywania stron nie pojawia siê "wê¿yk" i napis "³±czy siê -z us³ugami" tylko w prawym górnym naro¿niku globusik -
    • -WAP connections are MORE STABLE
    • - -
      generalnie DU¯O STABILNIEJSZE po³±czenia WAP ni¿ dotychczas -
    • -Can send and receive bookmarks in WAP settings
    • - -
      mo¿liwo¶æ wysy³ania i odbierania zak³adek w ustawieniach WAP
    -Test for size of SMS memory (from http://www.vosper.prv.pl): -
    SMS messages - 128 in different folders -
    Templates - 10 -
    Delivery reports - 52 -
    Additional folders - 3 -
    Phone didn't deactivate function Move ! -
    Full size of memory is 190 (including 10 templates)  -
    ------- -
    Second test for SMS only: 142 SMS (or more - test wasn't end) + 10 -templates -

    (V 4.88) BUG REPAIRED: In older versions more numbers for one name broke -call with Green button: -

      -
    1. -Add more numbers to one name (standard number other than type 'general').
    2. - -
    3. -Change "Type of view" to "Name and number".
    4. - -
    5. -Press Green button (Call) or the NaviRoller long with this number.
    6. - -
    7. -Phone "starts" to call, but instead of printing the number, it prints only -name and after few seconds it returns to name.
    8. - -
    9. -Go to "last calls" (or "Redial" and "Options - Edit Number").
    10. - -
      The called name has number starting with "/".
    -Solution for it was: use the NaviRoller 2 times to get through the menu -

    BUG REMOVED: Earlier: -

      -
    • -When made these steps: Receiving Vcard - show - break off by closing slide --> the Vcard-name appeared in some menus, until power cycling (i.e. in -a SMS-folder, while the display is building up a SMS, in the top line, -instead of the SMS-title)
    • - -
    • -When a number, which was assiged to a speeddial, was deleted, the speeddial -remained and pointed to nothing. When called such a speeddial the phone -crashed sometimes (after the Error message "Number missing").
    • - -
    • -When deleting a phonebook-entry with a assigned speeddial (but let the -name itself stored), pressing the NaviRoller (set to speeddial), and closing -the slide while the "Number missing" Message is displayed, the display -gets empty when the slide is closed and the Text has changed from "Lock. -Keys" to "Menu". When someone calls, the display gets on again. Ok after -powercycling.
    • - -
    • -Assigning ringtones to callergroups after a firmwareupgrade: sometimes -some of the ringtones are deleted, but the callergroups and profiles still -pointing to them -> Phone crashes when trying to assign the tones.
    • - -
      Solution for it was: assign all profiles and callergroups to a standard-tone, -power cycle the phone, load the individual 5 tones new, and assign profiles -and groups new. -
    • -If you renamed group, the old (preset) name was still shown in menus (i.e. -"Alert for").
    • - -
    • -"?" (Euro) and "\" in the SMS listview are shown as rectangles.
    • - -
    • -When entering CAPTIALS with active T9-dictionary, and a word with the german -Umlaut ""ß"" is found, this letter is leaved noncaps.
    • - -
    • -After Wap access sometimes the display gets empty when the slide is open, -normal display only for a short time when it is closed. Ok after powercycling. -(i.e. when opening the 'suchmaschine' link at  <http://mopilot.com/wml/index.wml>)
    • - -
    • -Data-calls using IR breaks down after some Minutes (""IR connection lost""). -Alleged only when sending data, receiving works. Alleged ok, when using -a ir-speed of 9600 baud.
    • - -
    • -When security-level set to "Phone": you can't get the Memory Status. When -set to "Memory", it is possible. Should be vice versa.
    • - -
    • -The call divertion icon is cleared after powercycling, or no service condition. -Appears again after status-check.
    • - -
    • -Autoanswer with the headset does not work if the keyboard is locked (altough -activated in the profile).
    • - -
    • -(was OK in V4.73 and earlier, not OK in 4.88) Closed user group: after -entering the groupnumber, the left OK-button doesn't work, only the NaviRoller.
    • - -
    • -(V4.80) german text wrong: "auf Netzant- wort <new line> warten" (english: -"Requesting")
    • -
    -NaviRoller for Redialing (Menu 4-3-5) official not possible anymore since -FW v4.73 not possible again... -

    Keyboard can only be locked after closing the slide with the Softkey -only, not anymore with the NaviRoller (like earlier). -

    BUG (ONLY THIS VERSION): -

      -
    • -Changing a Speeddial-Entry with 'search' does not work (''selected memory -empty'). Deleting and assigning new works.
    • - -
    • -"WAP: Bug in relative URL's with leading ""/"": ""http://www.abc.com/""  -and the Link to ""/sub.wml"" targets to ""http://www.abc.co/sub.wml"""
    • - -
    • -Snake2: after playing, the cup is shown without the reached points.
    • -
    -BUG (IN THIS AND NEWER VERSIONS): -
      -
    • -When receiving a SMS with locked keypad, unlock it, and immediately press -the left softkey, the phone shows the menu instead of the SMS. ('Menu' -instead of 'Show')
    • - -
    • -all (Infrared-) "Print" menu's are missing
    • - -
    • -If the keyboard is locked with "Menu *", it is not unlocked when opening -the slide.
    • - -
    • -SMS with more numbers - Options/Use number - Number is shown - Options/Add -to name: Namelist is empty and softkeys are not working
    • - -
    • -French language: reply text ""Sans/Avec"" in Jeux/Param?tres/Audio mixed -up (i.e. when selecting ""Sans"" the phone replys ""Avec Audio"") (Games/Settings/Sounds -On/Off)
    • - -
    • -Games: start-animation is not smooth
    • -
    -V5.00 09-11-00 -

    Improvements to Data/Fax call functionality -

    Extended URL length -

    Improved cache control (max age=0 functionality improved) -

    Weak encryption (40 bit) now displayed correctly -

    DTMF tones usable during emergency call -

    Vibra settings adjusted (it doesn't enable/disable, when want) -

    Improvements to the phonebook search function (use Search function and -press some key (phone will jump do the first entry starting with this char), -now use Delete function - cursor doesn't return to names starting on A) -

    'PIN code request change to PUK code request after emergency call' corrected -

    Games (two players): Text for winners/losers added -

    Different alghoritms for games ? On the page http://www.vosper.prv.pl -you can find, how to win in Opposite in 4'th level in firmware 4.77, 4.84 -and 4.94. Author writes, that in 5.00 it doesn't work. -

    (V4.88) Games: in Games menu have new setting, which can enable/disable -sounds (earlier you had to change it in settings of profiles) -

    (V4.88): in WAP can enable wrapping long texts - new Text wrapping -On/Off option in Menu 10-3-2 -

    (V4.88). BUG: when download correctly group logo to phone, right half -of first line to the bottom of the screen is clean.... -

    (V4.88) if you receive SMS you CAN'T  type twice left function -key to get message, you HAVE to wait second between keystrokes. -

    Test for size of SMS memory (from http://www.vosper.prv.pl): -
    SMS messages - 112 in different folders -
    Templates - 10 -
    Delivery reports - 68 -
    Additional folders - 2 -
    Phone deactivated function Move after 171 SMS ! -
    Full size of memory is 190 (including 10 templates)  -

    (V4.88) Different menu: earlier in "Phonebook->Options" there was "Print" -function -

    BUG REMOVED: Earlier: -

      -
    • -Vcard sent from 7110 to 61x0 with SMS is received as normal SMS instead -of a Vcard (mostly "not showable") Combinations 61x0 to 7110, 61x0 to 61x0 -and 7110 to 7110 worked OK in earlier versions.
    • - -
    • -When searching the phonebook, the displayed list should jump to the given -letters, but should not be filtered with them.(like on 2110 or 61x0). After -pressing 'options' and 'back', or waiting 30 seconds, the phone switches -into this mode. In this version the phone holds the position after clearing -the entry.
    • - -
    • -While playing games (ringtone and message alerts are beep once, light is -enabled), the lights turn off after few seconds when an SMS is received. -In this version game is interrupted...
    • - -
    • -(V4.88) If someone called you with CLIP active and you had no time to answer, -this call will be under Missed Calls, displayed with (no number). If you -try to erase it, over 50% chance will be that on display will be something -like (sequence of squares) and if you press Ok phone hangs. Only battery -removing helps.
    • - -
    • -(V4.88) in Norwegian language only: phonebook search with more than 1 char -will give a "No match" error-reply
    • -
    -BUGS (which still exists): -
      -
    1. -It is not possible to add a pbx extention to a stored number.Only possibility: -call - hang up immediately - redial - options - edit number - correct - -dial
    2. - -
    3. -When editing names, after "Done" you're in the standby-mode, instead of -been put into the names-list. Very annoying when editing much names, one -after the other.
    4. - -
    5. -Vcard sent from 7110 to 61x0 with IR: german Umlauts incorrect (i.e. ä --> =E4). Works with 61x0 to 7110, 61x0 to 61x0 and 7110 to 7110
    6. - -
    7. -Received Vcards are stored in the internal Phonememory, even when "SIM-Card" -is selected.
    8. - -
    9. -When keying in a character into a textbox (phonebook, WAP) using the num-keys, -and you want to key in the same character again, you'll have to wait until -the Cursor jumps to the next position, even when this 2nd input is done -using the naviroller. This must-wait is not necessary.
    10. - -
    11. -SMS-alert "Ascending" does not ascend, it is loud from the beginning, just -longer then standard.
    12. - -
    13. -Profile name is overwritten by the cell info (displayed in the same line, -although the display is big enough). On the 6150, 2 lines were used (as -long as the opeartor logo wasn't enabled).
    14. - -
    15. -Roller functions set to speeddial - select a name (Number is displayed) -- dial with pressing the NaviRoller twice shortly doesn't work (only with -green Key, or pressing the NaviRoller long).
    16. - -
    17. -Call waiting message is shown on the display, but the phone doesn't beep, -if number is assigned to caller group with caller logo. If caller group -logo is turned off, it works correctly.
    18. - -
    19. -(V4.94 and NEWER) Long names are clipped after the last visible blank space -since 4.94, if they are too long to display (i.e. in the quick-dial list). -Formerly the Names were simply clipped on the end of line. It's more 'pretty' -now, but longer names with same begin can't be told apart any more. Best -thing would be a automatic adjustion of the fontsize to the textlenght.
    20. - -
    21. -When the Phonebook is set to be viewed by "Name and Number", it's still -shown "Name only" when sending a SMS.
    22. - -
    23. -Press NaviRoller (set to "quick menu") 1x (Messages), press "Write", key -in something, press "Options" and "Send options" --> not working, you're -in writing mode again and only writing, deleting and red key are still -working
    24. - -
    25. -SMS: blank characters on the begin of a new line are not visible (i.e. -ASCII-Art SMS)
    26. - -
    27. -"SMS folders: lists are not sorted They are listed in the order, when the -SMS have been moved into the folder. But when some SMS have been deleted, -the 'gaps' are filled first."
    28. - -
    29. -"Moving and deleting of SMS templates doesn't work.When moving, a copy -is made. (""Delete"" should not be displayed, and instead of ""move"" ""copy -"")"
    30. - -
    31. -Cell Broadcasts: Settings are replacing the SIM-card
    32. - -
    33. -When the SMS-memory is full, and you try to store another SMS, you'll get -the errormessage "Sent, no space to copy" (although nothing was sent).
    34. - -
    35. -When Alarm is on, the phone does a short slight beep at midnight, if it -is switched off. After that, it can't powered on for about 20 seconds.
    36. - -
    37. -sending groupgraphics via IR should be possible according to the manual, -but the menu is missing (via SMS it's ok). Receiving via IR is also not -possible - only via SMS. With 61x0 sending and receiving via IR works.
    38. - -
    39. -WAP: In hidden password-inputfields (with *s, like yahoo's email page) -digits can only be keyed in by pressing the respective key several times, -and not (like anywhere else) by holding the key for a second.
    40. - -
    41. -security-level set to "Memory": when viewing the internal phonememory, -the securitycode should be requested.
    42. - -
    43. -"After sending DTMF-tones, you cant set the volume. (You'll have to clear -the digits first, otherwise it acts as Cursormovement, what is not useful -in DTMF)"
    44. - -
    45. -After power on, when turning the NaviRoller the first time, or opening -the slide (without pressing any other key before, so disable PIN), the -phone beeps shortly. Later, it never beeps when doing this.
    46. - -
    47. -(V4.88) When turning the NaviRoller while displaying a helpscreen, the -lights are flickering.
    48. - -
    49. -NaviRoller as "Quick Menu", on "Home" and "Bookmarks" the right Softkey -changes from "Exit" to "Back" (like in online-mode), but is without a function -then.
    50. - -
    51. -When replying to a SMS, and an other message profile than the standard -one is selected, the phone numer is not proposed anymore.
    52. - -
    53. -"Reminders" in te calendar have no alert, even not a time. Was ok on the -61x0.
    54. - -
    55. -Calendar-birthdays sent from 61x0 to 7110 with IR: year is not imported -to the 7110.
    56. - -
      Works with 8210 to 7110, 7110 to 7110, 61x0 to 61x0, and 7110 to 61x0. -
    57. -leap year bug: birthday i.e. on 3.3.2000, remind-date before 28.2. I.e. -15.2. Store and edit again -> remind-date has changed to 14.2., and with -every edit one additional day.
    58. -
    -V5.01 08-12-00 -
    V5.01 09-01-01 (ROM6?) -
      -
    • -Optimal Operator name length changed from 10 to 11 characters
    • - -
    • -Enabling of inserting space in subject when writing e-mail via WAP in Australia
    • - -
    • -Improved dual SIM handling
    • - -
    • -New UI Text release
    • - -
    • -Operator list updated
    • -
    - -
    -
    BUG: Test 45 in NetMonitor -doesn't work correctly. -
    B£¡D: Test 45 w monitorze sieci -nie dzia³a poprawnie. -

    There are/were also some other bugs. I can't tell, if they're corrected -or not. If have experiences with it, please report it to me: -

    WAP: if you have call waiting enabled, use WAP and somebody will -call to you, he will heard busy signal -

    Alarm Clock: If the alarm goes when the phone is switched off, -and the "Snooze" button is pressed, the phone will not turn back on until -the alarm resounds, or the phone is rebooted. -

    Phone Book: -

      -
    1. -When someone calls only the number is displayed. This doesn't happen to -every name. It also doesn't matter if there are multiple or single entries -under the name or in which caller group it is. The number's aren't  -in the memory twice. 
    2. - -
    3. -If you use the roller for speed dialing, sometimes when you scroll to a -number other than the first one and press the green call key, the phone -automatically phones the number at position one.
    4. - -
    5. -When using the phonebook with the SIM card, sometimes when trying to select -a number to dial, the screen goes blank and the phone shuts down. The battery -needs to remove to get it to work again.
    6. - -
    7. -How to delete more names from phonebook (the same to roller => select name -=> Options => Delete => confirm):
    8. - -
        -
      1. -Names => Delete => One by one
      2. - -
      3. -First entry of phonebook is shown
      4. - -
      5. -Select name to delete by roller
      6. - -
      7. -Press Delete & confirm
      8. - -
      9. -Goes to 2. (first entry again!!!) instead of printing next name
      10. -
      -
    -Back Light: The back light has been known to refuse to turn off, -until the battery is removes.  -

    Answer Phone: If you get an answer phone message on line two, -the phone does not select the correct line as it pretends to, you have -to select the correct line before attempting to listen to your message. -

    SMS: -

      -
    1. -If you write an SMS and then choose options, insert number you can happily -insert a number that you type, but if you select 'search' to allow you -to insert a number from the address book the address book is displayed -but with corrupt menu options and no screen border, the phone crashes and -requires a reboot. Occasionally it will either a) reboot itself or b) (if -the Network Monitor is active) perform a memory dump to the screen. The -phone works fine with the insert name option.
    2. - -
    3. -E-mail longer than 21 chars in cutted off (checked for 4.77, 4.80, 4.84)
    4. - -
        -
      1. -Add e-mail longer than 21 chars to some name.
      2. - -
      3. -Go to: Roller => select the name => Options => Send e-mail.
      4. - -
      5. -Only first 21 chars is pasted into SMS.
      6. - -
      7. -Go to: Roller => select the name => Roller => select e-mail entry => Roller -=> Send e-mail.
      8. - -
      9. -E-mail is pasted correctly.
      10. -
      - -
    5. -It's not possible to store logo, graphics or ringtone into SMS inbox, you -can only send it as SMS (function "Store-to-sms-inbox" is some programs -doesn't work). Checked for 4.73, 4.76, 4.77
    6. - -
    7. -When SMS beep (any mode - normal, ascending etc.) is enabled in Silent -profile, phone doesn't make any sound when the message is received. Checked -for 4.84
    8. -
    -IRDA: -
      -
    • -After ending of data tranfer over IrDA, it's not possible to send SMS over -IrDA, you have to switch off & on the phone (Palm V on other side). -Checked for 4.73
    • - -
    • -When you send reminder to Nokia 6110 via IrDa, date of it 1.01.2050...
    • -
    -Call Standby: When you are on the phone, and someone else tries -to phone you the phone beeps (Warning tones have to be on) there are three -ways to deal with this either send the incoming caller to your answer phone, -hang-up on the current call and take the new on or conference call both -together. However it has been known that when the current caller hangs -up, you lose both calls, or at least your can not activate the waiting -call. and if one person hangs up in conference calling, they all go!  -

    Roller: Assign function "short menu" to roller, press roller, -go to "menu". There is no menu 11 (SIM toolkit, Paegas Info etc.). Checked -for 4.73, 4.77, 4.80, 4.84  -

    Vibrating call alert: -

      -
    1. -If your battery is low, then there isn't enough power to use the Vibrate -mode so the phone switches it of automatically to save energy. Very Clever.
    2. - -
    3. -Vibrate ringing sometimes turn on or off even it's disabled/enabled in -profile. Checked for 4.70, 4.80, 4.84. Solution: enable vibra again, or -powercycle the phone.
    4. - -
    5. -No vibrating, although enabled, and even power-cycling doesn't help.
    6. - -
      Solution: select an other ringtone in the profiles.
    -Games: -
      -
    • -The back light turns off during a games of opposite or racket, even if -the option is set for the lights to be on.
    • - -
    • -Either the light doesn't turn on at all, or the light switches of in the -middle of the game.
    • -
    -Groups: If you assigned downloaded ringtone for caller group and -deleted if (ringtone) from phone, it stops ring and vibrate. Can't change -ringtone from phone's menu then (must use Logo Manager or different software). -Checked for 4.94 -

    Language specific: -

      -
    1. -When Czech is selected, y' is not in the "standard chars" list. It's in -"special chars". So you can't type it with pressing 9 & rolling to -y'. It's correct when Slovak language is selected. Checked for 4.70, 4.80, -4.84
    2. - -
    3. -When Czech is selected, it's not possible to look up name starting with -"Ch" in phone book by typing "ch" in list... Checked for 4.80, 4.84
    4. - -
    5. -Order of chars on key 3 in Composer is "d, d~, e, e', f, 3" and depends -on Language settings. Fixed for Czech from 4.76 (correct d, e, f, d~, e', -3), but Slovak is still broken... Checked for 4.70, 4.73, 4.76, 4.77, 4.80, -4.84
    6. -
    -Ringtones: -
      -
    • -Change of ringtone for group Family returns from menu and it's not possible -to open this group till next power-on. Checked for 4.77, 4.80, 4.84. Use -Logomanager to alter the ringtone. this fixes the bug. After using Logomanager -you can then manually change it via the phone.
    • - -
    • -If you assign downloaded ringtone to group, you have active call waiting -function and somebody from this group will call to you, you don't have -info about it. Must assign one original ringtones and then is OK. Checked -for 4.84
    • -
    -DLR-3 support and AT (all versions ?): -
      -
    • -you have to wait minimum 400 millisecs after DTR drop before you send an -AT command to the phone or it will hang.
    • - -
    • -earlier firmware versions were unable to return SMS from the phone memory -but returned the SIM ones.
    • -
    -
    7160NSW-5*#9999#
    V1.05 22-11-00 -
    V1.07 22-03-01
    7190NSB-5 *#0000#
    V3.30 06-11-00
    8110NHE-6, NHE-6BX*#8110#490137
    V4.24 13-08-96 -
    V4.25 09-09-96 -
    V4.36 23-10-96 -
    V5.31 06-01-96 -
    V5.62 05-05-97 -
    V6.01 27-02-98 -
    V6.21 16-10-98
    8110iNHE-6, NHE-6BM*#8110#490502
    V24.03 16-07-97 -
      -
    • -First known version.
    • - -
    • -This version had some problems showing the service provider in the display. -Instead it showed some empty space. ??? 
    • -
    -V24.04 08-08-97 -
      -
    • -An updated GSM operators' list.
    • - -
    • -Problem with missing service provider name in display solved.
    • -
    -V24.11 09-09-97 -
      -
    • -An updated GSM operators' list.
    • -
    -V24.23 21-10-97 -
      -
    • -An updated GSM operators' list.
    • -
    -V25.00 12-02-98 -
      -
    • -An updated GSM operators' list.
    • - -
    • -Ringtone 10 was changed..
    • -
    -V25.10 03-06-98 -
      -
    • -An updated GSM operators' list.
    • -
    -V25.20 16-10-98
    8146NHK-6*#170602112302#
    V4.02 06-02-97 -
    V5.00 13-03-98
    8148NHK-6*#8110#
    V4.02 06-02-97 -
    V5.00 13-03-98
    8148iNHK-6V*#8110#
    V3.10 09-12-97
    8210NSM-3*#0000#449306
    V5.08 16-11-99 or 17-11-99 -
    V5.11 09-12-99  -
    V5.16 15-02-00 -

    BUG: When you edit a large SMS, and you move the cursor for about 60-70 -characters, when you stop moving the cursor, and try to write in that place, -wrote appears 3 spaces in front of the cursor (as if cursor was there, -but it's not - it's 3 characters behind!). Info from jsp_m -

    V5.20 17-04-00 -

    BUGS AVAILABLE: -

      -
    1. -if someone call from a number that end with "88", you can't see the name -of caller even if there is a name in memory. Another user claims same problem -but with number ending with "98".
    2. - -
    3. -if you activate "silent mode", from power-on key, than receiving a call, -than come back to "Normal mode", the "ringer" will be to level 1 instead -of default of 4 or 5
    4. - -
    5. -Recharge time to much long (5 hours, manual says 2.30 hours) this not a -bug, really (you can see with netmonitor), during first 2.30 hours there -is the main recharge of battery (BLB2 Li-Ion 650 mA), and last 2.30 hours -is a maintenance charge. (this if powered-off phone).
    6. - -
      If you recharge with power-on phone, needed time will be 2.30 hours, -(charge indicators stop flashing) -
      If you recharge with power-off phone, needed time will be 5.00 hours, -(charge indicators stop flashing) -
    7. -voice tags: somethings, even if voice tags are on phone-memory, (instead -of SIM-memory), when you change SIM card, you miss all voice tags (deleted).
    8. - -
    9. -T9: if you should use a different language for menus and T9, every time -you change the SIM the T9 language are re-setted to menus language.
    10. -
    -V5.21 03-05-00 or 25-04-00 -
      -
    • -Support for Intel ComboMemory
    • - -
    • -Fixed "buzzing" sound heard sometimes while establishing a call
    • -
    - -


    BUG AVAILABLE: If you activate "silent mode", from power-on key, -than receiving a call, than come back to "Normal mode", the "ringer" will -be to level 1 instead of default of 4 or 5) -

    V5.25 20-09-00 -

      -
    • -Tone "Orient" replaced with "Moon & Clouds"
    • - -
    • -Improved copying long phonebook entries from SIM to phone (increased speed)
    • - -
    • -Default ringing tone after menu reset was changed into "Ring ring" in every -PPM package 
    • - -
    • -No more than 5 ringing tones (and other OTA things) can be received in -a row without saving or discarding them 
    • - -
    • -Left softkey now activates IR link during incoming datacall
    • - -
    • -Improvement to printing from 7110 to 8210/8850 
    • - -
    • -Datacalls possible after using PC Suite without rebooting the PC 
    • - -
    • -Operator list updated 
    • -
    -Info from users: in PL language "Mikrofon wy³±czon" and "Odg³usz" -

    V5.26 19-10-00 -

      -
    • -Corrections to cases where the ringing tone/keypad tone stayed at lowest -level
    • - -
    • -COLP Note display increased 1.5 s to 30 s (help screens of menus apear -twice faster than before)
    • - -
    • -Improvements to emergency calls
    • - -
    • -Operator list updated
    • -
    - -


    V5.27 16-02-01 -

      -
    • -Support for DSP code for ROM6 added
    • - -
    • -Earlier, when using PPH-1 in certain circumstances, a tapping sound could -be heard via loudspeaker
    • - -
    • -Operator name length changed from 10 to 12 characters
    • - -
    • -New text release in use (there was key-9 spelling mistake in Russian language)
    • - -
    • -Earlier in certain circumstances SMS editor was left in a wrong (Unicode) -mode
    • - -
    • -Operator list updated
    • - -
        -
      • -Operator name changed
      • - -
          -
        • -Old name   New name     MNC/MCC
        • - -
        • -Vodafone   Vodafone HU  216/70
        • - -
        • -GSM-MS1    GSM MS1      218/05
        • - -
        • -FEast      Far East     -250/12
        • - -
        • -ERA GSM    PL ERA GSM   260/02
        • - -
        • -DIGIFONE   IRL Digifone 272/02
        • - -
        • -Mobilkom   FL1          -295/05
        • - -
        • -MODICOM    INA SPICE    404/14
        • - -
        • -MobileNet  INA SPICE    404/31
        • - -
        • -EAE        KSA EAE      -420/07
        • - -
        • -C&W HKT    HK TELECOM   454/00
        • - -
        • -UNICOM     CHN-CUGSM    460/01
        • - -
        • -GTGSM      GH ONEtouch  620/02
        • - -
        • -Celtel     CELTEL GA    628/03
        • - -
        • -Celtel     CELTEL CD    630/02
        • - -
        • -ANTARIS    BUSAFA       -642/02
        • -
        - -
      • -New operator added
      • - -
          -
        • -Operator name MNC/MCC
        • - -
        • -ProMonte      220/02
        • - -
        • -YUG 03        220/03
        • - -
        • -MONET         220/04
        • - -
        • -FI AMT        244/14
        • - -
        • -RUS DTC       250/10
        • - -
        • -Primtel       250/92
        • - -
        • -TXXI          250/93
        • - -
        • -MD MOLDCELL   259/02
        • - -
        • -Viking        274/04
        • - -
        • -go mobile     278/21
        • - -
        • -GEO 03        282/03
        • - -
        • -TELE GRL      290/01
        • - -
        • -telecom FL    295/01
        • - -
        • -Montel        295/02
        • - -
        • -LI TANGO      295/77
        • - -
        • -JM DIGICEL    338/50
        • - -
        • -MPTGSM        414/01
        • - -
        • -JO MobCom     416/77
        • - -
        • -MN MobiCom    428/99
        • - -
        • -IR-TCI        432/11
        • - -
        • -IR KISH       432/14
        • - -
        • -BUZTEL        434/01
        • - -
        • -ISAT M3       510/21
        • - -
        • -MALITEL ML    610/01
        • - -
        • -CI CORA       612/01
        • - -
        • -BF CELTEL     613/02
        • - -
        • -BJ BENINCELL  616/03
        • - -
        • -TD CELTEL     622/01
        • - -
        • -TD LIBERTIS   622/02
        • - -
        • -CELTEL RC     629/01
        • - -
        • -CELTEL CD     630/02
        • - -
        • -CD OASIS      630/89
        • - -
        • -Safaricom     639/02
        • - -
        • -UTL_TELECEL   641/11
        • - -
        • -ZM ZAMCELL    645/01
        • - -
        • -MG Madacom    646/01
        • - -
        • -MG ANTARIS    646/02
        • - -
        • -MTC NAMIBIA   649/01
        • - -
        • -BW VISTA      652/02
        • -
        - -
      • -Country name changed
      • - -
          -
        • -Old name   New name   MCC
        • - -
        • -H          HU         -216
        • - -
        • -BA         BIH        -218
        • - -
        • -I          IT         -222
        • - -
        • -M          MT         -278
        • - -
        • -FIJ        FJ         -542
        • - -
        • -GO         GA         -628
        • -
        - -
      • -New countries added
      • - -
          -
        • -Country name MCC
        • - -
        • -JM 338
        • - -
        • -MM 414
        • - -
        • -MN 428
        • - -
        • -IR 432
        • - -
        • -ML 610
        • - -
        • -BF 613
        • - -
        • -BJ 616
        • - -
        • -TD 622
        • - -
        • -RC 629
        • - -
        • -CD 630
        • - -
        • -ZM 645
        • - -
        • -MG 646
        • - -
        • -NA 649
        • -
        - -
      • -Mobile Network Code changed
      • - -
          -
        • -Old code New code Operator
        • - -
        • -634/1    634/10   MobiTel
        • -
        -
      -
    -Here are observations from jsp_m: -
      -
    • -new netmonitor test 140
    • - -
    • -no helps in netmonitor
    • - -
    • -net monitor tests cycle much faster now
    • - -
    • -(NEWER TOO ?) BUG:When edit long SMS (about 160 chars) and press Up/Down -key very long (until will scroll all SMS context - 160 chars) without releasing, -phone will restart after it - info from SkyBoy
    • - -
      (NOWSZE TE¯ ?) B£¡D: Przy edycji d³ugiego SMSa (oko³o 160 znaków) po -naci¶niêciu klawisza Góra/Dó³ i przytrzymaniu (bez zwalniania), a¿ ca³y -SMS (160 znaków) zostanie przewiniêty, telefon zresetuje siê...  - -informacja od SkyBoy
    -V5.28 24-05-01 -
    V5.28 27-06-2001 (ROM6?) -
      -
    • -'Sending picture message' note stays anymore on the screen after the picture -message has been sent, when there is an incoming call, while sending the -message
    • - -
    • -New text release: Slovakian key text's alphabet order same as Czech
    • - -
    • -Part of SMS-tone in Class 0 messages was missing. There were two simultaneous -tones at once (SMS message received and note tone) when Class 0 SMS was -received
    • - -
    • -In certain situations, when active call was on hold and business card was -received, the 'Business card received' disappeared too quickly
    • - -
    • -When business cards/calendar notes are sent via IR more characters are -now received
    • - -
    • -When sending Birthday notes over IR, the year was sometimes received incorrectly -if the year included 0 (zero)
    • - -
    • -Operator list updated
    • - -
        -
      • -Operator name changed
      • - -
          -
        • -Old name     New name     MNC/MCC
        • - -
        • -Macau SMC    SmarTone     455/00
        • - -
        • -ADAM         TIMECel      -502/17
        • - -
        • -Itineris     Orange F     208/01
        • - -
        • -PL ERA GSM   ERA GSM      260/02
        • - -
        • -B-COM        LV TELE2     -247/02
        • - -
        • -ALJAWWAL     ALJAWAL      -420/01
        • - -
        • -WP-1800      DTAC         -520/18
        • - -
        • -MG ANTARIS   ANTARIS      646/02
        • - -
        • -Ben-NL       Ben NL       -204/16
        • - -
        • -MOBILAND     STA-MOBILAND 213/03
        • - -
        • -WIND         I WIND       -222/88
        • - -
        • -Connex GSM   CONNEX       226/01
        • - -
        • -DiAx Swiss   sunrise      228/02
        • - -
        • -GLOBTEL      SVK GT       -231/01
        • - -
        • -One          ONE          -232/05
        • - -
        • -one2one      One 2 One    234/30
        • - -
        • -ZAO SMARTS   SMARTS       250/07
        • - -
        • -Kuban-GSM    KUGSM        -250/13
        • - -
        • -VODA M       VODAFONE MLA 278/01
        • - -
        • -AirTel       AIRTEL       -404/45
        • - -
        • -AirTel       AIRTEL       -404/49
        • - -
        • -HK TELECOM   CSL          -454/00
        • - -
        • -HK SMC       HK SMARTONE  454/06
        • - -
        • -KGT-ONLINE   KGT-Online   466/88
        • - -
        • -Hello        HELLO        -520/23
        • - -
        • -TT           TUNTEL       -605/02
        • - -
        • -Alize        ALIZE        -608/01
        • - -
        • -Omega        OMEGA        -618/01
        • - -
        • -Rwandacell   R-CELL       635/10
        • - -
        • -KenCell      KENCELL      -639/03
        • - -
        • -SFR RU       SFR REUNION  647/10
        • - -
        • -CelTel       CELTEL       -650/10
        • -
        - -
      • -New operator added
      • - -
          -
        • -Operator name MNC/MCC
        • - -
        • -ARIA          286/03
        • - -
        • -Macau SMC     455/00
        • - -
        • -HT Macau      455/03
        • - -
        • -NE CELTEL     614/02
        • - -
        • -FI 2G         244/12
        • - -
        • -NTC           250/16
        • - -
        • -FO FT-GSM     288/01
        • - -
        • -SPACETEL      421/02
        • - -
        • -LIPPO TEL     510/08
        • - -
        • -SGP-M1-3GSM   522/04
        • - -
        • -LIBERTIS      628/01
        • - -
        • -SPACETEL BI   642/01
        • -
        - -
      • -Country name changed
      • - -
          -
        • -Old name New name MCC
        • - -
        • -UKR      UA       -255
        • - -
        • -FR       FO       -288
        • - -
        • -MDG      BI       -642
        • -
        - -
      • -New countries added
      • - -
          -
        • -Country name MCC
        • - -
        • -NE           614
        • - -
        • -YE           421
        • -
        - -
      • -Mobile Network Code changed
      • - -
          -
        • -Old code New code Operator
        • - -
        • -338/50   338/05   JM DIGICELL
        • -
        -
      -
    -Here are observations from jsp_m: -
      -
    • -no helps in netmonitor
    • - -
    • -no more "Pending" delivery reports (?)
    • -
    -V5.29 18-09-01 -
      -
    • -Improved network scanning (Earlier when the phone was out of network coverage -and keys were pressed too fast, in some cases the phone made a reset, because -each key press caused a network search. Now key presses cause a new network -search only once a minute) 
    • - -
    • -Operator list updated
    • - -
        -
      • -Operator name changed
      • - -
          -
        • -Old name  New name MNC/MCC
        • - -
        • -ONE      one      232/05
        • - -
        • -ERA GSM     era    260/02
        • - -
        • -TH WCS    TH ORANGE   520/10
        • - -
        • -Dutchtone  Orange NL    204/20
        • - -
        • -TDK-MOBIL   DK TDC   238/01
        • - -
        • -M.PLUS    BATELCO    426/01
        • - -
        • -CAMNET    MTN CAM    624/01
        • - -
        • -CELLCO      CELLCO GSM  630/04
        • -
        - -
      • -New operators added
      • - -
          -
        • -Operator name    MNC/MCC
        • - -
        • -ORENSOT        250/11
        • - -
        • -VODAFONE    276/02
        • - -
        • -TR AYCELL    286/04
        • - -
        • -CU/C_COM     368/01
        • - -
        • -U-CALL     539/01
        • - -
        • -GAB TELECEL    628/02
        • - -
        • -CELLCO     630/05
        • - -
        • -Digicel     706/02
        • - -
        • -SPACETEL     417/02
        • - -
        • -VUT SMILE    541/01
        • - -
        • -GH-MOBITEL    620/03
        • - -
        • -DIGITEL  515/05
        • - -
        • -ORANGE   520/99
        • - -
        • -ECONET NG    621/20
        • - -
        • -COG LIBERTIS    629/10
        • - -
        • -MOBITEL - TZ    640/02
        • - -
        • -CELTEL TZ   640/05
        • - -
        • -Itineris RUN 647/00
        • - -
        • -F-OMT   647/02
        • - -
        • -Cell C    655/07
        • -
        - -
      • -Country name changed
      • - -
          -
        • -Old name    New name   MCC
        • - -
        • -NIG    NG    255
        • - -
        • -F     REU     647
        • -
        - -
      • -New countries added
      • - -
          -
        • -Country name     MCC
        • - -
        • -CU      368
        • - -
        • -VUT     417
        • -
        - -
      • -Mobile Network Code changed
      • - -
          -
        • -Old code    New code    Operator
        • - -
        • -621/00     621/30     MTN NG
        • - -
        • -634/10    634/01   MobiTel
        • -
        -
      -
    - -
    -
    In netmonitor (all versions ?) in test -55 you have small type (one 's' too much in last line) in help and -info displayed in first line only -

    On some V 5.11 and 5.16 once you have missed the signal, the phone make -difficult to re-sync it, and you must turn off and then on to re-sync. -This is no a bug of this firmware, because there are many 8210 v5.11 and -5.16 that works much-fine -

    Another bug (feature ? ;-)): when save Name entry to phonebook in phone's -memory, you see "Saved to phone" display. It has icon from older Nokia -phones (unchanged) - phone with the antenna drawn... -

    Bug (all versions ? - tested for 5.25): when send too long ringtone -for phone, in "preview" menu it's cut and played, after saving to location -playes only one note...

    8250NMS-3D*#0000#
    V3.12 19-01-01 -
    V3.08 13-12-00 -

    V3.12 -

    Improvements in Irda and activating voice dial via on/off button in -HDC-5... -

    V3.18 03-04-01 -

    Improvements in Irda, SIM Toolkit, OTA calendar notes... -

    V3.20 29-05-01 -

    Better support for Nokia PC Suite over IrDA -

    V5.00 16-09-01

    8290NSB-7*#0000#
    V5.07 08-08-00 -
    V5.06 19-06-00 -
    V5.15 30-01-01
    8310NHM-7*#0000#
    V2.90 08-09-01 -
    V3.05 23-09-01 -
    V3.07 -
                            -Improvements in voice recorder stability  -
                            -Improvements in SIM card reading stability  -
                            -Improvements in SIM Application toolkit dynamic menu  -
                            -Improvements in SEND USSD  -
                            -Changes to meet some test cases  -

    V4.04 -

      -
    • -Call and network management: 
    • - -
        -
      • -Operator name not shown if service provider name has the priority 
      • - -
      • -UCS2 support for service provider name added 
      • - -
      • -CPHS feature: operator name reading from SIM support added 
      • - -
      • -Exception handling for Operator name showing improved 
      • - -
      • -Minor improvements to multi call handling 
      • -
      - -
    • -GPRS: 
    • - -
        -
      • -Handling of GPRS indicators improved 
      • - -
      • -Block Check Sum error while using CS2. Values of the spare bit field are -changed to mach all network implementations 
      • - -
      • -Cell re-selection in case of lost of service 
      • - -
      • -Occasional service drop while Extended BCCH blocks used 
      • - -
      • -MT call failures, while Extended Paging used 
      • - -
      • -Old TLLI deleted too early, causing breaks in data transmission 
      • -
      - -
    • -Phonebook: 
    • - -
        -
      • -Improvements to search functionality 
      • - -
      • -Improvements to caller group logo sending and receiving 
      • - -
      • -Improvements to Service Dialling Numbers 
      • - -
      • -Minor improvements to phone number showing 
      • -
      - -
    • -Messages: 
    • - -
        -
      • -Stability improvements to message erasing and picture message handling 
      • - -
      • -Voice mailbox improvements 
      • -
      - -
    • -Call Register:
    • - -
        -
      • -Lists cleaned if new SIM card used 
      • - -
      • -AoC Currency showing and default limits showing improved 
      • -
      - -
    • -Profiles and settings: 
    • - -
        -
      • -Ringing tone order changed 
      • - -
      • -Improvements to OTA ringing tone handling 
      • - -
      • -Louder alarm tone 
      • - -
      • -Fixed dialling number stability improvements 
      • - -
      • -Help text for fixed dialling numbers added 
      • - -
      • -Hands free indicator didnåt disappear in some cases 
      • - -
      • -Minor improvements to Automatic language selection 
      • -
      - -
    • -Games and calculator: 
    • - -
        -
      • -Snowboard game added 
      • - -
      • -Game tones follow only the games tone setting 
      • - -
      • -Exception handling in high score sending improved 
      • - -
      • -Improvements to lights handling and some text modifications 
      • - -
      • -Minor calculator look&feel improvements 
      • -
      - -
    • -To-do list and calendar: 
    • - -
        -
      • -Minor look&feel To-do-list improvements 
      • - -
      • -Some text and look&feel improvements e.g. current date highlighting 
      • -
      - -
    • -Radio and extras: 
    • - -
        -
      • -Exception handling of radio improved 
      • - -
      • -Font modifications in Countdown timer 
      • - -
      • -Indexing in Voice recordings list improved 
      • - -
      • -Stability improvements to voice recorder alarm support 
      • - -
      • -Voice recognition can be activated only when in idle mode 
      • - -
      • -Exception handling in voice commands and voice recorder improved 
      • -
      - -
    • -Services and SIM toolkit: 
    • - -
        -
      • -Header lines added to services 
      • - -
      • -Improvements to Send USSD functionality 
      • - -
      • -SIM ATK CB download support added 
      • -
      - -
    • -WAP push: 
    • - -
        -
      • -16-bit characters in title corrected and some denial of service vulnerabilities -corrected 
      • - -
      • -Manual login mode Now possible also with GPRS 
      • - -
      • -Screen backlight turned on when username/p@ss word prompt displayed 
      • -
      - -
    • -WAP bookmarks and cookies: 
    • - -
        -
      • -Some denial of service vulnerabilities corrected 
      • - -
      • -Problems with maximum length of bookmark URLås corrected 
      • - -
      • -In certain WAP pages Cookies were causing problems 
      • - -
      • -Over the air (OTA) set-up: Mal formatted set-up messages were causing problems -while viewing the set-up content 
      • - -
      • -WTAI public library: 
      • - -
      • -GPRS PDP Context unnecessarily closed after mobile originated voice call 
      • - -
      • -Voice call establishment from WAP bookmarks corrected 
      • -
      - -
    • -Error messages: 
    • - -
        -
      • -"Unknown abort" messages correctly mapped to descriptive error notes 
      • - -
      • -Two separate error messages displayed next to each other 
      • - -
      • -Viewing business card through WAP: 
      • - -
      • -Icons corrected for WORK and CELL numbers 
      • -
      - -
    • -WML Scripting: 
    • - -
        -
      • -Problems with pressing End key while script were running corrected 
      • - -
      • -WML variables now updated correctly while WML script is running 
      • -
      - -
    • -Other changes: 
    • - -
        -
      • -Support for new languages / market areas added 
      • - -
      • -5 Volt SIM cards blocked by 8310, ref. GSM 11.12 section 4.5. 'SIM card -not supported' text displayed 
      • - -
      • -CPHS support improved 
      • - -
      • -Plug-in HF Car Kit PPH-1 recognition improved 
      • - -
      • -Showing of battery low warning note improved 
      • - -
      • -Several text, font and other minor look&feel improvements
      • - -
      • -Several minor stability improvements 
      • -
      -
    -V4.53 -
      -
    • -Call and network management: 
    • - -
        -
      • -Private in Conference call improvement 
      • - -
      • -Speed dial number recognition improvement 
      • - -
      • -AoC improvements 
      • - -
      • -Field strength signal bar configuration changed 
      • - -
      • -"SIM card registration failed" text added in the case when IMSI not found -in HLR 
      • -
      - -
    • -GPRS: 
    • - -
        -
      • -Improvements in inter-SGSN RAU/unexpected N-PDU functionality 
      • - -
      • -Continuous timing advance improvement 
      • - -
      • -Improvements in handling of Extended BCCH 
      • - -
      • -Improvements in combined attach in network mode I 
      • - -
      • -Always online functionality changed: When Always online is selected from -WAP settings and the phone is powered up only GPRS attach is performed -PDF context is made when the user makes WAP over GPRS connection and context -is deactivated when user exists the WAP browser 
      • - -
      • -Recommended PBCCH/PCCCH feature set activated, Nokia has tested the Recommended -PCCCH Feature Set functionality against basic configurations available -in IOT laboratories
      • -
      - -
    • -WAP: 
    • - -
        -
      • -Improvement to OTA bookmarks 
      • - -
      • -Bookmark sending fails when SMS center number is not given in advance 
      • - -
      • -Problems when entering maximum length bookmarks 
      • - -
      • -Improvement to bitmap downloading 
      • - -
      • -WAP over GPRS with manual login improvement 
      • - -
      • -WAP Push 
      • - -
      • -Unicode support added to WAP Push Messages 
      • - -
      • -Push message reception by default ON 
      • - -
      • -GPRS related corrections 
      • - -
      • -Corrections to end-key functionality when having voice call during WAP -browsing 
      • - -
      • -Support for WTAI-call from bookmarks 
      • -
      - -
    • -DATA: 
    • - -
        -
      • -Improvements to AT-command interpreter: ATZ, AT&F, +CGDCONT, +CGQMIN -and +CGQREQ, ATE, AT+CREG, AT*99#, AT&V 
      • - -
      • -Change in handling of GPRS dial-up when CSD dial-up is active 
      • - -
      • -Correction to WAP connection over CSD 
      • - -
      • -Improvement in resetting of CID values 
      • - -
      • -Improvement in V.120 data call 
      • -
      - -
    • -Phonebook: 
    • - -
        -
      • -Improvements when copying entries 
      • - -
      • -Improvements in Pop-up search (mainly in APAC languages) 
      • - -
      • -Improvements when browsing phonebook memory 
      • - -
      • -Hungarian and Slovak alpha order improvements 
      • -
      - -
    • -Games: 
    • - -
        -
      • -Menu shortcuts added to games 
      • - -
      • -Score Sending removed from Snowboard 
      • - -
      • -Minor game functionality improvements 
      • -
      - -
    • -Messages: 
    • - -
        -
      • -Message waiting indicators improvements (CPHS) 
      • - -
      • -Voice mailbox number saving to SIM (CPHS) 
      • - -
      • -Corrections in languages with Unicode characters 
      • - -
      • -Stability and look improvements in SMS editor 
      • - -
      • -Cell broadcast improvement with GPRS Always online 
      • -
      - -
    • -Other changes: 
    • - -
        -
      • -Opening and closing parenthesis correction in Hebrew 
      • - -
      • -Improvements in SIM ATK 
      • - -
      • -Improvements in handling line 2 (ALS) 
      • - -
      • -Voice volume control corrections 
      • - -
      • -Caller Group Ringing Tone correction 
      • - -
      • -Improvements to operator name display 
      • - -
      • -NITZ improvements 
      • -
      -
    -
    8810NSE-6*#0000#
    V3.01 08-07-98 -
    V4.03 10-08-98 -
    V4.05 26-11-98 -
    V5.00 29-09-99 -
    V6.02 31-03-00 -
      -
    • -improvements in displaying CB
    • - -
    • -improvements in calendar - non lap year
    • - -
    • -....
    • -
    - -
    -
    BUG: Some older/all (?) firmware had bug in Calendar in Birthday option: -it it was set to the last day of February on non-leap-years (for example -29.02.2000), calendar will inform about it 1'st March (1.03.2000). Must -use "Reminder" instead of "Birthday".
    8850NSM-2*#0000#448901
    Look to the info for Nokia 8210 - they have almost identical -firmware (with some details)
    8890NSB-6*#0000#
    V11.01 14-02-00 -
    V12.05 22-05-00  -
    V12.07 08-08-00 -
    V12.15 21-02-01 -
      -
    • -Improvements to USSD
    • - -
    • -RELEASE COMPLETE message is sent to network to end the USSD dialogue, when -a NULL USSD string is received from UI
    • - -
    • -Releasing USSD dialogue with 'Back' softkey fixed
    • - -
    • -Cell selection improved (Sometimes it took long time for the phone to acquire -the network when the phone was out of coverage for long time)
    • - -
    • -Improvements to IrDA (IrPhonet fixed)
    • - -
    • -Improvements to SIM Application toolkit (handling of Provide Local Information -improved, handling of Setup Call Redial improved)
    • - -
    • -Handling of downloaded ringtone improved
    • - -
    • -Strange characters are not displayed (when the special character screen -was not full, highlighting the last characters caused strange characters -displayed on the screen)
    • - -
    • -Improvement to handling of IR (Left softkey didn't activate IR-link while -incoming data call)
    • - -
    • -Calling Name Presentation (CNAP) supplementary service support added
    • - -
    • -Caller group list feature added
    • - -
    • -Czech and Russian removed from PPM package D
    • - -
    • -New PPM package G created with languages English, German, Czech and Russian
    • -
    -
    Communicator 9000RAE-1*#682371158412125#490169
    V4.01 15-09-97 -
    V4.55 04-02-97 -
    -
    -
    Some older firmware had BUG: When phone received SMS, it didn't display -correctly its' date, if it was after 1.1.2000 -

    Some older/all (?) firmware had BUG: in sleep mode after 28.02 change -date change always to 1.03 (not to 29.02 in non-leap-years). Date must -be set manually then.

    Communicator 9000iRAE-4*#682371158412125#490169
    V6.34 16-09-97 -
    V6.51 02-02-98 -
    V6.70 15-07-98  -
    -
    -
    Some older/all (?) firmware had BUG: in sleep mode after 28.02 change -date change always to 1.03 (not to 29.02 in non-leap-years). Date must -be set manually then.
    Communicator 9000ilGE-9*#682371158412125#010024
    V6.34 16-09-97 -
    -
    -
    Some older/all (?) firmware had BUG: in sleep mode after 28.02 change -date change always to 1.03 (not to 29.02 in non-leap-years). Date must -be set manually then.
    Communicator 9110RAE-2*#0000#490143, 490543
    V3.07 17-01-99 -
    V4.01 02-02-99  -
    (???)V4.05 19-03-99 -

    V4.15: -

    (V4.02) In clock application, home contry 'United Kingdom' is shown -completely.  -
    (V4.02) Careline numbers updated.  -
    (V4.02) Apostrofe to Finnish keyboard.  -
    (V4.02) Numbers in French keyboard.  -
    (V4.02) Home country list changed.  -
    (V4.02) Internet access improvements in some IAPs.  -
    (V4.02) Print settings improvements in image printing.  -
    (V4.02) Composed tunes can be sent via SMS also if contact selected -from SIM.  -
    (V4.02) WWW performance improvements.  -
    (V4.02) Keyboard scanning times adjusted.  -
    (V4.02) BIOS v2.22  -

    V5.01 08-06-99 -

      -
    • -Improvements for audio in car kit use. 
    • - -
    • -Backlight is deactivated when locked device is removed from cradle. 
    • - -
    • -Empty list situation, in list of own numbers-application, now handled correctly. 
    • -
    -V5.02 28-08-99 -
    V5.06 09-12-99 -
    V5.10 06-10-00 -
    -
    -
    After receiving some Smart Messaging SMS in older/all (?) firmware -versions the communicator-side changes to mail-application WITHOUT ANY -SIGN of a received SMS. 
    Communicator 9210RAE-3*#0000#   (?)350149
    V2.91P 12-03-01 -
    V2.97 02-04-01 -
    V3.03 25-04-01 -
    V3.18 05-06-01 -
    V3.54 05-07-01 -
      -
    • -Perbaikan untuk membuka email yang sudah didelete secara lokal
    • - -
    • -Call masuk tidak berbunyi di PDA setelah reboot
    • - -
    • -Perbaikan di bagian contact sehingga bisa menampung banyak nomor telephone, -sebelumnya bisa jadi hang
    • - -
    • -PDA bisa dikunci tanpa password
    • - -
    • -Autolock UNtuk interval "1 minute" and "2 minutes" tidak bekerja
    • - -
    • -PIN di SIM hanya ditanyakan pada telephone di bagian luar tidak di PDA
    • - -
    • -PIN Code diminta 2 kali
    • - -
    • -Aplikasi SMS langsung ditutup setelah mengirim SMS sebagai reply
    • - -
    • -Layar tidak menjadi blank ketika autolock aktif
    • - -
    • -Call masuk tanpa nomor ringtone yang dimainkan hanya Nokia Tune
    • - -
    • -Proses restore berhenti ketika ada call masuk.
    • -
    -V3.62: -
      -
    • -Device reset improved (In some cases device did not restart when battery -was removed)
    • - -
    • -Network tone routing improved (When PDA cover was open, all network tones -were not routed correctly to Hands Free Speaker)
    • - -
    • -The User Busy (Engaged) Tone playtime changed (When a call is made to busy -number User Busy Tone playtime is longer)
    • - -
    • -Java Telephone API tests improved
    • - -
    • -SMS alphanumeric address improvement (SMS message sender name is shown -correctly also when name is used as sender instead of number)
    • - -
    • -PDA Telephone displays call even phone is idle (PDA display was sometimes -showing call active even though call ended from phone side)
    • - -
    • -Timer improved (Ocassionally jamming in games reduced by improved timers)
    • -
    -
    Card Phone 1.0RPE-1
    Card Phone 2.0RPM-1449144
    -Back to the top/Na pocz±tek -

    -


    - - - - diff --git a/Docs/en_US/gsm/irda/irda.htm b/Docs/en_US/gsm/irda/irda.htm index ebd343f..9e1922a 100644 --- a/Docs/en_US/gsm/irda/irda.htm +++ b/Docs/en_US/gsm/irda/irda.htm @@ -1,25 +1,25 @@ - - - - - IrDA FAQ - - - - - -

    Main page

    -
    IRDA FAQ
    - -


    - -

    How to make iRda port for computer... - -

    How to configure gnokii for IrDa connection ?
    -


    - -

    See file describing configuration of gnokii - - - - + + + + + IrDA FAQ + + + + + +

    Main page

    +
    IRDA FAQ
    + +


    + +

    How to make iRda port for computer... + +

    How to configure gnokii for IrDa connection ?
    +


    + +

    See file describing configuration of gnokii + + + + diff --git a/Docs/en_US/gsm/logos/logos.htm b/Docs/en_US/gsm/logos/logos.htm index 5e29c4f..c6d7aae 100644 --- a/Docs/en_US/gsm/logos/logos.htm +++ b/Docs/en_US/gsm/logos/logos.htm @@ -1,38 +1,38 @@ - - - - - Logos FAQ - - - - - -

    Main page

    -
    Logos FAQ
    - -


    - -

    Types of logos
    -


    - -

    Nokia phones can support: -

    -

      -
    • startup logo - picture displayed, when phone is enabled. -In some models (3210 5.27 and newer and 3310) it's animated. You can -disable it (and download your own static), but I don't know, if it's possible -to return to animated... -
    • -
    • operator logo - picture displayed instead of operator name. -Logo can be assigned ONLY to one operator (when you will change it, -it will disappear; when return to this network, you will see it again)
    • -
    • caller logo - you can assign names from phonebook to something called -caller group. When someboday for this group will call to you, you can -see picture (caller logo) and name...
    • -
    • Picture Image - image, which in newer phones (3310, ...) can be -displayed in idle mode (Nokia calls it screen saver)
    • -
    - - - + + + + + Logos FAQ + + + + + +

    Main page

    +
    Logos FAQ
    + +


    + +

    Types of logos
    +


    + +

    Nokia phones can support: +

    +

      +
    • startup logo - picture displayed, when phone is enabled. +In some models (3210 5.27 and newer and 3310) it's animated. You can +disable it (and download your own static), but I don't know, if it's possible +to return to animated... +
    • +
    • operator logo - picture displayed instead of operator name. +Logo can be assigned ONLY to one operator (when you will change it, +it will disappear; when return to this network, you will see it again)
    • +
    • caller logo - you can assign names from phonebook to something called +caller group. When someboday for this group will call to you, you can +see picture (caller logo) and name...
    • +
    • Picture Image - image, which in newer phones (3310, ...) can be +displayed in idle mode (Nokia calls it screen saver)
    • +
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net0.htm b/Docs/en_US/gsm/netmon/faq_net0.htm index c8663ad..c0d55f0 100644 --- a/Docs/en_US/gsm/netmon/faq_net0.htm +++ b/Docs/en_US/gsm/netmon/faq_net0.htm @@ -1,696 +1,697 @@ - - - - - - - - - - NetMonitor in Nokia phones (1/7) - - - - - -

    Main page

    -
    -
    NetMonitor in Nokia phones (1/7) - -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] - -

    - -
    - -

    I’d like to write, that I’m not professionally connected with any -cellular network or phone company. This NetMonitor guide is based on many -different materials and exists thanks to the support of many different people (see -Information sources). This is a guide made by user. It may lack description -to some functions or contain errors and mistakes (resulting from wrong translation or my ignorance) and some strange -expressions. Many questions remain unanswered. Furthermore, this page is still "under construction". Encouraging, isn’t it? -But that’s the (sad) true: Nokia doesn’t make appropriate materials available... -I can only assure you, that I do my best to make this NetMonitor description as reliable and complete as possible. - -

    In this moment on my homepage you can also find Polish version of this FAQ. -English language version was created with help of Michal Jerz - author of -excellent page Nokia 9110 World: http://n9k.ats.pl. - -

    -I’ll be very thankful for any help in creating and maintaining this guide - please -send -me any information (or URLs where I can find it), suggestions and remarks. My FAQ currently concerns -Nokia 2110i, 2120, 2140, 2160, 3110, 3210, 3310, 5110, 5130, 5160, 5190, 6110, 6130, 6150, 6160, 6185/6188, 6210, 6250, 7110, 8210, 8810 and 9110 -series of phones. If you have NetMonitor enabled in any other model -(for example in 2110i, 6090, 8xxx, 9000), please contact me -(to let me know about the differences and possible new tests). - - -

    -Herewith I inform, that I don’t bear any responsibility for any damages and other consequences caused by applying following -information (you use it on your own responsibility) ! - - -


    - - - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    -
    -
    - -

    1. What is it ?
    -


    - -

    Net Monitor is just a special mode, which – when activated – shows different information about the network and about -phone modules, SIM card, etc. After activation your phone will usually display a new, additional menu containing -strange and constantly changing letters and digits. There are no standards here – each phone shows different data -and there are different methods of activation (my description concerns NetMonitor mode in Nokia phones – if you have some -other phone, you have to go somewhere else). I can even say, that NetMonitor (in some form) can be found in practically -each present mobile phone (because it is unprofitable for the producers to make two separate software versions – -with and without NetMonitor). Here you can find some URLs to the pages describing activation and/or individual -NetMonitor menus in other phones: - -

    -

    - -

    Other types: try searching on the links page -www.mobilserver.com/Phone_info/. - - -

    Back to the top - - -

    2. Do I need it ?
    -


    - -

    "Normal" users surely don’t need any NetMonitor, because simply most of the data included there can be of -any interest and use only for specialists (who can find out almost everything about the network). You also can: - -

    -

      -
    • feel better and be able to brag that your phone has such a BBIIIIIGGGGGG choice of different options
    • -
    • observe different network and phone parameters (I tried to explain their meaning in my description) and find out -how cellular network works
    • -
    • affect some functions in your phone and sometimes make your life easier (using these new options) – -I did my best to point at many useful NetMonitor applications
    • -
    - -

    If you still think, that you don’t need it, read other pages concerning Nokia phones. - - -

    Back to the top - - -

    3. Does my phone use more power with NetMonitor enabled ?
    -


    - -

    I’d say: NO. Each phone monitors the network even when there is no NetMonitor menu active. - -

    But why some users say, that they have to charge their batteries more often after enabling NetMonitor? It is easy to explain: -they frequently switch from one test to another (some people cannot stop ;-) and do it habitually) and the phone after each -key press (by default) turns on the light (and uses much power - see test 23). -This can be partially cured by using test 18. Additionally, -some tests (for example -test 17 or test 19) can put -your phone in a state of constant network searching (which drains the battery). - -

    To recap, NetMonitor activation itself doesn’t affect power consumption. It can be only changed by some conscious -user operations... - - -

    Back to the top - - -

    4. How to activate it ?
    -


    - -

    You can do it in three ways: - -

    -

      -
    1. by connecting your phone to the computer with a cable (in 3210 it has to be connected inside the casing) and using -appropriate software (RECOMMENDED !) working in: - -

      -

      - -

      All above programs work with majority of Nokia phones with letter "S" in middle of codename -(for example, 5110, 5130, 5190, 6110, 6130, 6150, 3210 series). With Nokia 7110 (NSE-5) over DAU-9P cable -(from Nokia 5xxx/6xxx series phones) -worked Pc-Locals and Logo Manager only. -In Nokia 9110 (RAE-2) NetMonitor can be enabled -with all above programs working with MBUS cable - Logo Manager, Pc-Locals or -Nokia Wrench. - -

      - - - - - - -
      When you want to check codename of your phone, try to use one of these codes: -*#0000#, *#9999#, *#3110#, *#3810#, *#5190#, -*#6190#, *#8110#, *#837#, *#170602112302# or -*#682371158412125# (for more information about phone identification click -here). -If phone will display something, codename will be written in 3'rd line of screen (it will be something like NSE-1).
      -

      - -

    2. by direct changing the contents of EEPROM -(Electrically Erasable and Programmable Read-Only Memory). -This method requires opening your phone and leaves visible traces inside it. -I DON’T RECOMMEND THIS METHOD! -But if you want to do it: - -

      -

      -

      -

    3. - -
    4. -using special menu, which allow to programm NAM code (in some analog phones only -- like Nokia 2160, 2120, 5160, 6160, 6185 and 6188): -

      -

        -
      • use *3001#12345# code (sometimes pressing additionaly Menu is required; -some sources write, that you have to write security code instead of 12345) -to enter this menu
      • -
      • set "Field Test Mode" to "On"/"Enable"
      • -
      • restart your phone
      • -
      -

      -

    5. - -
    6. entering Menu 3 3 (according to http://www.ras.ru/~sashka/nokia/550/ -in Nokia 550) and setting it to "ext. test". Later you should restart phone (?)
    7. - -
    - -

    You can also: - -

    -

      -
    • ask people from GSM newsgroups to do it for you
    • -
    • commission it to some specialized company
    • -
    - -

    I don’t know details about NetMonitor activation in 1610, 2110, 3110, 8110i, 8810 and 9000 series. -I don’t know exactly which programs to use (I heard only, that probably version 0.6 of PC-Locals allows to make it in older models) -or how to modify EEPROM memory (if you know anything about that, please -contact me). -In this moment I can send you to: - -

    - -

    only. - -

    I also heard, that in some copies of Nokia 6110 and 5110 phones it is possible to activate NetMonitor by a key combination -(by pressing Menu key and typing 10 – this should work even when NetMonitor menu is not visible). - -

    - - - - - - -
    -If you don’t know how to activate NetMonitor, you better ask some more experienced person to do it for you -(you can damage your phone during this operation) ! -!
    - -

    I’d like to draw your attention to one detail - in Nokia phones you just activate the monitor and not upload it (it is always -in your phone – described methods just reveal it as an additional menu). - - -

    Back to the top - - -

    5. Which NetMonitor version can be activated in my phone ?
    -


    - -

    Each program described in previous point allows you to activate one of two NetMonitor versions: - -

    -

      -
    1. limited, including tests from 1 to 19 (concerning cellular network only). This version is usually called -"Field Test" or "Operator field tests" (or you have to enter 242 code to activate it)
    2. - -
    3. -full, also including phone (and sometimes SIM card) tests. It is called "Engineering" (or "R&D field tests") and its activation -code is 243.
    4. -
    - -

    - - - - - - -
    -I recommend you enable full version of NetMonitor – you can always replace it with a limited version -(by choosing test 242 in your phone). It doesn’t work in reverse direction (you cannot activate full menu from -within the phone – it doesn’t accept test 243 when limited version is active; of course you can still use -methods described in previous point). -
    - - -

    Back to the top - - -

    6. Does NetMonitor activation void warranty ?
    -


    - -

    The method of re-programming EEPROM memory is connected with opening the casing and making modifications in your -phone (which leaves many traces, scratches etc. and voids warranty). - -

    However, these problems don’t appear (you don't have to be affraid) when using one of the described programs -or code (but I can be wrong . there are opinions that this method leaves a trace in phone.s memory, too)... - -

    Of course, before getting phone to service, is better to -deactivate NetMonitor. -Sometimes, for example, when phone's energy system is damaged, it could be impossible - -you can have some problems then (some of people working in service can think, that -you broke warranty - it depends on concrete people).. - - -

    Back to the top - - -

    7. NetMonitor menu in my phone has different number than 10. Is it normal ?
    -


    - -

    - - -
    -
    -NetMonitor menu in Nokia 3210 -NetMonitor menu in Nokia 3310 -NetMonitor menu in Nokia 5110 -NetMonitor menu in Nokia 6150 -NetMonitor menu in Nokia 6190 -NetMonitor menu in Nokia 8210/8250 -NetMonitor menu in Nokia 8310 -NetMonitor menu in Nokia 9110 -NetMonitor menu in Nokia 9210 -
    -
    - -

    - - -
    -NetMonitor menu in Nokia 7110 -
    NetMonitor menu in Nokia 6210 -
    NetMonitor menu in Nokia 6310 -
    -Of course, Number of NetMonitor menu (called "Net monitor" or "Field Test") -is different (depends on firmware version and phone series) in different Nokia phones. - -

    It can be: -Menu 7 (Nokia 3110 and 9110), Menu 10 (Nokia 5110, 5130, 6110, 6130), -Menu 11 (Nokia 5190 and 3210) or Menu 12 (Nokia 8210 or some 6150). -Nokia 3210 also has a completely different icon for this menu, 6250 doesn't have any icon. So, it's normal and don't be affraid. - -

    There is also interesting thing connected with it: in Nokia 8210 icon of phone -in netmonitor's menu is DIFFERENT from icons of phones in other menus in this model, but -THE SAME to icon in Nokia 8250... - -

    - - -

    Back to the top - - -

    8. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    -


    - -Menu 9 in Nokia 3210 -Menu 10 in Nokia 3210 -Menu 11 in Nokia 3210 -YES - It's normal. We have such situation in Nokia 3210. "Lost" Menu 10 -is reserved for SIM application toolkit and you will see it, when you will have access to them -(when your SIM card will have this feature built in - you CAN'T activate it different way). - - -

    Back to the top - - -

    9. How to use it ?
    -


    - -

    GSM/DCS/PCS phones: - -

    - - -
    -NetMonitor menu in Nokia 5110 -NetMonitor menu in Nokia 5110 - -After activation you gain access to the new position (called "Net monitor" -or "Field Test") in main phone menu. -
    - -

    NetMonitor menu in Nokia 5110 -When you enter this menu, you can type number of the test, which should be displayed -(1 to 19 in limited version, higher numbers in full version - Caution! Entering -number 241 removes NetMonitor menu and -242 switches it to the limited version – you’ll have to use one of the -methods described in How to activate it ? to regain access to the full version !). -Before number of test you can add "+". Unfortunately, in Nokia 6210/7110 there -is one wrong thing here: before entering number of new test you must delete old number -using right function key (in other models you can enter it without it). - -

    NetMonitor menu in Nokia 5110 -After pressing OK the chosen test appears on screen (and its number is shown on the top) in place of your network -name/operator logo (BTW: in some phones (like Nokia 3310), when you will enable clock, alarm clock, stopwatch, countdown timer, second line (ALS function), -test in netmonitor and lock keypad, time will disappear :-)). If you enter incorrect test number, NO TEST appears on screen and the phone returns to the last -correctly displayed test. If entered number is greater than 256, 512 or 768, then 256 (or its multiple) is subtracted and -resulting menu number is displayed (for example numbers 300 and 556 run test 44). Some test when accessed this way -(by typing its number and pressing OK to enter them directly) modify its contents (details are described later, I call this -"DIRECT" menu access’ - for example, see test 18). - -

    NetMonitor menu in Nokia 5110 -You can look at different tests by scrolling them using up/down arrows (don’t worry – this method doesn’t change -any settings in tests) – each key press moves you to the next/previous available test. In some models -(for example in 5110) these keys have different functions (like displaying last dialed numbers, opening -and scrolling phonebook or changing the volume) – unfortunately they don’t work while NetMonitor is on screen:-(. -However, you can still adjust volume during a call in Nokia 5xxx/3210/3310/6188/6185/6160/6120 – by pressing and holding -(longer than normally - about a second) one of the arrow keys. - -

    NetMonitor menu in Nokia 5110 -Help (description) to the current test can be displayed by pressing and holding * key -(repeat this to return to test values). However, this shortcut works only in some phones -(my explanation to this fact can be found in -Description of the individual tests). That's why I've added these help -screens using a bold font in most of the tests... If they are currently displayed, -entering menu directly doesn't change its settings. - -

    - - -
    -NetMonitor menu in Nokia 5110 -NetMonitor menu in Nokia 5110 -NetMonitor menu in Nokia 5110 - -You can return to the main screen with name/logo of your network by entering 0 in this menu. -
    - -

    - - - - - - -
    If you enter 0 as a test number and then add a number of a non-existing test -(for example 52), your phone will act as when NetMonitor is active (for example up/down arrows -can be used to change test number – you can check this in Menu 10). Unfortunately, in this case counters -from test 82 don’t work. Tests chosen this way appear right -after switching the phone on. You can use this feature to: - -
      -
    • temporarily "damage" your phone (to cheat your friend?)
    • -
    • block access to your phonebook (Nokia 5xxx and 6xxx)
    • -
    • prevent viewing your last dialed numbers list on the main screen with network logo/name (Nokia 5xxx)
    • -
    • make it difficult to change volume during a call (Nokia 5xxx) – the arrow keys must be pressed and hold longer than normally
    • -
    • make it impossible to change volume (Nokia 3110)
    • -
    - -
    - -

    With any test on screen (in phones other than Nokia 3110), -your phone doesn’t display some of the messages (for example. "...calling") -and there is no calling party identification recognition (the only exception to the rule is a message: -'Note: you have active diverts'). When you type a phone number the test screen disappears -(it will come back after you get connected or when you cancel this number from your display). - -

    Remember: your phone is like computer. If you won't disable it and enable -(only then it saves all values in EEPROM), -it can lost values from tests (for example, info about number of sent/received SMS from -test 64, when you will use tips above... - -

    There is one firmware bug connected with using helps (descriptions) to the tests -(in this moment, it's confirmed for Nokia 5110, 3210, 3310). -If you want to see it: - -

    - - -
    -Menu monitora w Nokii 5110 -Menu monitora w Nokii 5110 -Menu monitora w Nokii 5110 -Menu monitora w Nokii 5110 -Menu monitora w Nokii 5110 - -
      -
    • Press and keep * key. In a moment, when * desappear from the screen -(but before moment, when test values will be replaced with help or help with test values), -let * key.
    • -
    • Now you must do everything fast - * can't be written on the screen and -text below NaviKey can't change: instantly press * for a moment and let it. -You can repeat this point - effects will depend on repeat numbers. For example, -with firmware 5.07 (or 5.11) -and 0 repeats you will have access to first "hidden menu", with 1 repeat -you phone hangs and turn off (see test 36 -- it can be interesting), with 2 repeats it changes language ;-)), with 3 -you can enter to another "hidden menu", sometimes (I don't know exactly, when) -you can see "CONTACT SERVICE" message (restart you phone and everything will -be OK). With firmware 5.24 result are different: -with 0 repeats you can enter second "hidden menu", with 1 or 2 repeats -desappear NaviKey description, with 3 its description changes to "Send". -
    • -
    • wait longer moment
    • -
    • press for a moment and let one of the keys: *, 0 to 9 or #
    • -
    -
    - -

    -You can restart your Nokia 5110, if it has older firmware (it doesn't work with 5.24, -but with 5.07 and 5.11 works): - -

    -

      -
    • Press and keep * key. In a moment, when * desappear from the screen -(but before moment, when test values will be replaced with help or help with test values), -let * key.
    • - -
    • Now you must do everything fast - * can't be written on the screen and -text below NaviKey can't change: instantly press * for a moment and let it, instantly press -* for longer time (2 sec. or longer) and let, instantly press * for a moment and let it
    • -
    - -

    The reason of it is stack overflow (see test 35 -and test 57). If it doesn't work with your phone -and you have Nokia 6110, you can also use another trick to reboot phone: - -

      -
    1. Go to the Calendar (Menu-8)
    2. -
    3. Make a note or reminder.
    4. -
    5. Enter some text into the edit box.
    6. -
    7. Hold "Clear" until the whole text is cleared, then press "Back".
    8. -
    9. Press "0". The main screen will now be showing but a space appears on the screen. (you can't see it)
    10. -
    11. Enter 4 digits (e.g. 1234).
    12. -
    13. Use the down arrow to move the cursor to the left side of the numbers and the space (Down arrow twice).
    14. -
    15. Now enter 6 digits and press the call button.
    16. -
    - -

    TDMA 800/TDMA 1900 phones: - -

    After activation you gain access to the new position (called "Field Test") in main phone menu. - -

    When you enter this menu, you can type number of the test, which should be displayed (1-7 in -Nokia 6160) or enter 0 to disable it. - -

    You can look at different tests by scrolling them using up/down arrows. During voice calls, depending on how -NetMonitor was entered, the arrow keys may switch tests (you can't change volume then) or adjust volume. - -

    If the keypad is locked while a NetMonitor tests are active, pressing -0-9, *, or # will toggle the screen back to the User Interface Display. -Pressing Talk, End, the arrow keys, or the soft menu keys will return the test. - -

    In Nokia 2120 or 2160 you can also display description (help) to displayed -tests by pressing and holding "ABC" key. - - -

    Back to the top - - -

    10. Can I damage my phone ?
    -


    - -

    Probably only during NetMonitor activation -(especially in phones with NAM programming menu) or in Nokia 6210 or 3210 -(more in description for test 17). - -

    I’ve never heard of such accident -(my own strange and hard attempts :-) failed, too) during using it in different phones. -But of course you should be careful - netmonitor is "unofficial" part of -phone's firmware. - -

    If something doesn't work correctly, switch the phone off and then back on -- all tests, you can set (excluding test 17), -should be set to their default values... - - -

    Back to the top

    - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    -
    - -

    Marcin Wiacek (WWW) -
    Last modification: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (1/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (1/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + +

    I’d like to write, that I’m not professionally connected with any +cellular network or phone company. This NetMonitor guide is based on many +different materials and exists thanks to the support of many different people (see +Information sources). This is a guide made by user. It may lack description +to some functions or contain errors and mistakes (resulting from wrong translation or my ignorance) and some strange +expressions. Many questions remain unanswered. Furthermore, this page is still "under construction". Encouraging, isn’t it? +But that’s the (sad) true: Nokia doesn’t make appropriate materials available... +I can only assure you, that I do my best to make this NetMonitor description as reliable and complete as possible. + +

    In this moment on my homepage you can also find Polish version of this FAQ. +English language version was created with help of Michal Jerz - author of +excellent page Nokia 9110 World: http://n9k.ats.pl. + +

    +I’ll be very thankful for any help in creating and maintaining this guide - please +send +me any information (or URLs where I can find it), suggestions and remarks. My FAQ currently concerns +Nokia 2110i, 2120, 2140, 2160, 3110, 3210, 3310, 5110, 5130, 5160, 5190, 6110, 6130, 6150, 6160, 6185/6188, 6210, 6250, 7110, 8210, 8810, +9110 and 9210 series of phones. If you have NetMonitor enabled in any other model +(for example in 2110i, 6090, 8xxx, 9000), please contact me +(to let me know about the differences and possible new tests). + + +

    +Herewith I inform, that I don’t bear any responsibility for any damages and other consequences caused by applying following +information (you use it on your own responsibility) ! + + +


    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    1. What is it ?
    +


    + +

    Net Monitor is just a special mode, which – when activated – shows different information about the network and about +phone modules, SIM card, etc. After activation your phone will usually display a new, additional menu containing +strange and constantly changing letters and digits. There are no standards here – each phone shows different data +and there are different methods of activation (my description concerns NetMonitor mode in Nokia phones – if you have some +other phone, you have to go somewhere else). I can even say, that NetMonitor (in some form) can be found in practically +each present mobile phone (because it is unprofitable for the producers to make two separate software versions – +with and without NetMonitor). Here you can find some URLs to the pages describing activation and/or individual +NetMonitor menus in other phones: + +

    +

    + +

    Other types: try searching on the links page +www.mobilserver.com/Phone_info/. + + +

    Back to the top + + +

    2. Do I need it ?
    +


    + +

    "Normal" users surely don’t need any NetMonitor, because simply most of the data included there can be of +any interest and use only for specialists (who can find out almost everything about the network). You also can: + +

    +

      +
    • feel better and be able to brag that your phone has such a BBIIIIIGGGGGG choice of different options
    • +
    • observe different network and phone parameters (I tried to explain their meaning in my description) and find out +how cellular network works
    • +
    • affect some functions in your phone and sometimes make your life easier (using these new options) – +I did my best to point at many useful NetMonitor applications
    • +
    + +

    If you still think, that you don’t need it, read other pages concerning Nokia phones. + + +

    Back to the top + + +

    3. Does my phone use more power with NetMonitor enabled ?
    +


    + +

    I’d say: NO. Each phone monitors the network even when there is no NetMonitor menu active. + +

    But why some users say, that they have to charge their batteries more often after enabling NetMonitor? It is easy to explain: +they frequently switch from one test to another (some people cannot stop ;-) and do it habitually) and the phone after each +key press (by default) turns on the light (and uses much power - see test 23). +This can be partially cured by using test 18. Additionally, +some tests (for example +test 17 or test 19) can put +your phone in a state of constant network searching (which drains the battery). + +

    To recap, NetMonitor activation itself doesn’t affect power consumption. It can be only changed by some conscious +user operations... + + +

    Back to the top + + +

    4. How to activate it ?
    +


    + +

    You can do it in three ways: + +

    +

      +
    1. by connecting your phone to the computer with a cable (in 3210 it has to be connected inside the casing) and using +appropriate software (RECOMMENDED !) working in: + +

      +

      + +

      All above programs work with majority of Nokia phones with letter "S" in middle of codename +(for example, 5110, 5130, 5190, 6110, 6130, 6150, 3210 series). With Nokia 7110 (NSE-5) over DAU-9P cable +(from Nokia 5xxx/6xxx series phones) +worked Pc-Locals and Logo Manager only. +In Nokia 9110 (RAE-2) NetMonitor can be enabled +with all above programs working with MBUS cable - Logo Manager, Pc-Locals or +Nokia Wrench. + +

      + + + + + + +
      When you want to check codename of your phone, try to use one of these codes: +*#0000#, *#9999#, *#3110#, *#3810#, *#5190#, +*#6190#, *#8110#, *#837#, *#170602112302# or +*#682371158412125# (for more information about phone identification click +here). +If phone will display something, codename will be written in 3'rd line of screen (it will be something like NSE-1).
      +

      + +

    2. by direct changing the contents of EEPROM +(Electrically Erasable and Programmable Read-Only Memory). +This method requires opening your phone and leaves visible traces inside it. +I DON’T RECOMMEND THIS METHOD! +But if you want to do it: + +

      +

      +

      +

    3. + +
    4. +using special menu, which allow to programm NAM code (in some analog phones only +- like Nokia 2160, 2120, 5160, 6160, 6185 and 6188): +

      +

        +
      • use *3001#12345# code (sometimes pressing additionaly Menu is required; +some sources write, that you have to write security code instead of 12345) +to enter this menu
      • +
      • set "Field Test Mode" to "On"/"Enable"
      • +
      • restart your phone
      • +
      +

      +

    5. + +
    6. entering Menu 3 3 (according to http://www.ras.ru/~sashka/nokia/550/ +in Nokia 550) and setting it to "ext. test". Later you should restart phone (?)
    7. + +
    + +

    You can also: + +

    +

      +
    • ask people from GSM newsgroups to do it for you
    • +
    • commission it to some specialized company
    • +
    + +

    I don’t know details about NetMonitor activation in 1610, 2110, 3110, 8110i, 8810 and 9000 series. +I don’t know exactly which programs to use (I heard only, that probably version 0.6 of PC-Locals allows to make it in older models) +or how to modify EEPROM memory (if you know anything about that, please +contact me). +In this moment I can send you to: + +

    + +

    only. + +

    I also heard, that in some copies of Nokia 6110 and 5110 phones it is possible to activate NetMonitor by a key combination +(by pressing Menu key and typing 10 – this should work even when NetMonitor menu is not visible). + +

    + + + + + + +
    +If you don’t know how to activate NetMonitor, you better ask some more experienced person to do it for you +(you can damage your phone during this operation) ! +!
    + +

    I’d like to draw your attention to one detail - in Nokia phones you just activate the monitor and not upload it (it is always +in your phone – described methods just reveal it as an additional menu). + + +

    Back to the top + + +

    5. Which NetMonitor version can be activated in my phone ?
    +


    + +

    Each program described in previous point allows you to activate one of two NetMonitor versions: + +

    +

      +
    1. limited, including tests from 1 to 19 (concerning cellular network only). This version is usually called +"Field Test" or "Operator field tests" (or you have to enter 242 code to activate it)
    2. + +
    3. +full, also including phone (and sometimes SIM card) tests. It is called "Engineering" (or "R&D field tests") and its activation +code is 243.
    4. +
    + +

    + + + + + + +
    +I recommend you enable full version of NetMonitor – you can always replace it with a limited version +(by choosing test 242 in your phone). It doesn’t work in reverse direction (you cannot activate full menu from +within the phone – it doesn’t accept test 243 when limited version is active; of course you can still use +methods described in previous point). +
    + + +

    Back to the top + + +

    6. Does NetMonitor activation void warranty ?
    +


    + +

    The method of re-programming EEPROM memory is connected with opening the casing and making modifications in your +phone (which leaves many traces, scratches etc. and voids warranty). + +

    However, these problems don’t appear (you don't have to be affraid) when using one of the described programs +or code (but I can be wrong . there are opinions that this method leaves a trace in phone.s memory, too)... + +

    Of course, before getting phone to service, is better to +deactivate NetMonitor. +Sometimes, for example, when phone's energy system is damaged, it could be impossible - +you can have some problems then (some of people working in service can think, that +you broke warranty - it depends on concrete people).. + + +

    Back to the top + + +

    7. NetMonitor menu in my phone has different number than 10. Is it normal ?
    +


    + +

    + + +
    +
    +NetMonitor menu in Nokia 3210 +NetMonitor menu in Nokia 3310 +NetMonitor menu in Nokia 5110 +NetMonitor menu in Nokia 6150 +NetMonitor menu in Nokia 6190 +NetMonitor menu in Nokia 8210/8250 +NetMonitor menu in Nokia 8310 +NetMonitor menu in Nokia 9110 +NetMonitor menu in Nokia 9210 +
    +
    + +

    + + +
    +NetMonitor menu in Nokia 7110 +
    NetMonitor menu in Nokia 6210 +
    NetMonitor menu in Nokia 6310 +
    +Of course, Number of NetMonitor menu (called "Net monitor" or "Field Test") +is different (depends on firmware version and phone series) in different Nokia phones. + +

    It can be: +Menu 7 (Nokia 3110 and 9110), Menu 10 (Nokia 5110, 5130, 6110, 6130), +Menu 11 (Nokia 5190 and 3210) or Menu 12 (Nokia 8210 or some 6150). +Nokia 3210 also has a completely different icon for this menu, 6250 doesn't have any icon. So, it's normal and don't be affraid. + +

    There is also interesting thing connected with it: in Nokia 8210 icon of phone +in netmonitor's menu is DIFFERENT from icons of phones in other menus in this model, but +THE SAME to icon in Nokia 8250... + +

    + + +

    Back to the top + + +

    8. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    +


    + +Menu 9 in Nokia 3210 +Menu 10 in Nokia 3210 +Menu 11 in Nokia 3210 +YES - It's normal. We have such situation in Nokia 3210. "Lost" Menu 10 +is reserved for SIM application toolkit and you will see it, when you will have access to them +(when your SIM card will have this feature built in - you CAN'T activate it different way). + + +

    Back to the top + + +

    9. How to use it ?
    +


    + +

    GSM/DCS/PCS phones: + +

    + + +
    +NetMonitor menu in Nokia 5110 +NetMonitor menu in Nokia 5110 + +After activation you gain access to the new position (called "Net monitor" +or "Field Test") in main phone menu. +
    + +

    NetMonitor menu in Nokia 5110 +When you enter this menu, you can type number of the test, which should be displayed +(1 to 19 in limited version, higher numbers in full version - Caution! Entering +number 241 removes NetMonitor menu and +242 switches it to the limited version – you’ll have to use one of the +methods described in How to activate it ? to regain access to the full version !). +Before number of test you can add "+". Unfortunately, in Nokia 6210/7110 there +is one wrong thing here: before entering number of new test you must delete old number +using right function key (in other models you can enter it without it). + +

    NetMonitor menu in Nokia 5110 +After pressing OK the chosen test appears on screen (and its number is shown on the top) in place of your network +name/operator logo (BTW: in some phones (like Nokia 3310), when you will enable clock, alarm clock, stopwatch, countdown timer, second line (ALS function), +test in netmonitor and lock keypad, time will disappear :-)). If you enter incorrect test number, NO TEST appears on screen and the phone returns to the last +correctly displayed test. If entered number is greater than 256, 512 or 768, then 256 (or its multiple) is subtracted and +resulting menu number is displayed (for example numbers 300 and 556 run test 44). Some test when accessed this way +(by typing its number and pressing OK to enter them directly) modify its contents (details are described later, I call this +"DIRECT" menu access’ - for example, see test 18). + +

    NetMonitor menu in Nokia 5110 +You can look at different tests by scrolling them using up/down arrows (don’t worry – this method doesn’t change +any settings in tests) – each key press moves you to the next/previous available test. In some models +(for example in 5110) these keys have different functions (like displaying last dialed numbers, opening +and scrolling phonebook or changing the volume) – unfortunately they don’t work while NetMonitor is on screen:-(. +However, you can still adjust volume during a call in Nokia 5xxx/3210/3310/6188/6185/6160/6120 – by pressing and holding +(longer than normally - about a second) one of the arrow keys. + +

    NetMonitor menu in Nokia 5110 +Help (description) to the current test can be displayed by pressing and holding * key +(repeat this to return to test values). However, this shortcut works only in some phones +(my explanation to this fact can be found in +Description of the individual tests). That's why I've added these help +screens using a bold font in most of the tests... If they are currently displayed, +entering menu directly doesn't change its settings. + +

    + + +
    +NetMonitor menu in Nokia 5110 +NetMonitor menu in Nokia 5110 +NetMonitor menu in Nokia 5110 + +You can return to the main screen with name/logo of your network by entering 0 in this menu. +
    + +

    + + + + + + +
    If you enter 0 as a test number and then add a number of a non-existing test +(for example 52), your phone will act as when NetMonitor is active (for example up/down arrows +can be used to change test number – you can check this in Menu 10). Unfortunately, in this case counters +from test 82 don’t work. Tests chosen this way appear right +after switching the phone on. You can use this feature to: + +
      +
    • temporarily "damage" your phone (to cheat your friend?)
    • +
    • block access to your phonebook (Nokia 5xxx and 6xxx)
    • +
    • prevent viewing your last dialed numbers list on the main screen with network logo/name (Nokia 5xxx)
    • +
    • make it difficult to change volume during a call (Nokia 5xxx) – the arrow keys must be pressed and hold longer than normally
    • +
    • make it impossible to change volume (Nokia 3110)
    • +
    + +
    + +

    With any test on screen (in phones other than Nokia 3110), +your phone doesn’t display some of the messages (for example. "...calling") +and there is no calling party identification recognition (the only exception to the rule is a message: +'Note: you have active diverts'). When you type a phone number the test screen disappears +(it will come back after you get connected or when you cancel this number from your display). + +

    Remember: your phone is like computer. If you won't disable it and enable +(only then it saves all values in EEPROM), +it can lost values from tests (for example, info about number of sent/received SMS from +test 64, when you will use tips above... + +

    There is one firmware bug connected with using helps (descriptions) to the tests +(in this moment, it's confirmed for Nokia 5110, 3210, 3310). +If you want to see it: + +

    + + +
    +Menu monitora w Nokii 5110 +Menu monitora w Nokii 5110 +Menu monitora w Nokii 5110 +Menu monitora w Nokii 5110 +Menu monitora w Nokii 5110 + +
      +
    • Press and keep * key. In a moment, when * desappear from the screen +(but before moment, when test values will be replaced with help or help with test values), +let * key.
    • +
    • Now you must do everything fast - * can't be written on the screen and +text below NaviKey can't change: instantly press * for a moment and let it. +You can repeat this point - effects will depend on repeat numbers. For example, +with firmware 5.07 (or 5.11) +and 0 repeats you will have access to first "hidden menu", with 1 repeat +you phone hangs and turn off (see test 36 +- it can be interesting), with 2 repeats it changes language ;-)), with 3 +you can enter to another "hidden menu", sometimes (I don't know exactly, when) +you can see "CONTACT SERVICE" message (restart you phone and everything will +be OK). With firmware 5.24 result are different: +with 0 repeats you can enter second "hidden menu", with 1 or 2 repeats +desappear NaviKey description, with 3 its description changes to "Send". +
    • +
    • wait longer moment
    • +
    • press for a moment and let one of the keys: *, 0 to 9 or #
    • +
    +
    + +

    +You can restart your Nokia 5110, if it has older firmware (it doesn't work with 5.24, +but with 5.07 and 5.11 works): + +

    +

      +
    • Press and keep * key. In a moment, when * desappear from the screen +(but before moment, when test values will be replaced with help or help with test values), +let * key.
    • + +
    • Now you must do everything fast - * can't be written on the screen and +text below NaviKey can't change: instantly press * for a moment and let it, instantly press +* for longer time (2 sec. or longer) and let, instantly press * for a moment and let it
    • +
    + +

    The reason of it is stack overflow (see test 35 +and test 57). If it doesn't work with your phone +and you have Nokia 6110, you can also use another trick to reboot phone: + +

      +
    1. Go to the Calendar (Menu-8)
    2. +
    3. Make a note or reminder.
    4. +
    5. Enter some text into the edit box.
    6. +
    7. Hold "Clear" until the whole text is cleared, then press "Back".
    8. +
    9. Press "0". The main screen will now be showing but a space appears on the screen. (you can't see it)
    10. +
    11. Enter 4 digits (e.g. 1234).
    12. +
    13. Use the down arrow to move the cursor to the left side of the numbers and the space (Down arrow twice).
    14. +
    15. Now enter 6 digits and press the call button.
    16. +
    + +

    TDMA 800/TDMA 1900 phones: + +

    After activation you gain access to the new position (called "Field Test") in main phone menu. + +

    When you enter this menu, you can type number of the test, which should be displayed (1-7 in +Nokia 6160) or enter 0 to disable it. + +

    You can look at different tests by scrolling them using up/down arrows. During voice calls, depending on how +NetMonitor was entered, the arrow keys may switch tests (you can't change volume then) or adjust volume. + +

    If the keypad is locked while a NetMonitor tests are active, pressing +0-9, *, or # will toggle the screen back to the User Interface Display. +Pressing Talk, End, the arrow keys, or the soft menu keys will return the test. + +

    In Nokia 2120 or 2160 you can also display description (help) to displayed +tests by pressing and holding "ABC" key. + + +

    Back to the top + + +

    10. Can I damage my phone ?
    +


    + +

    Probably only during NetMonitor activation +(especially in phones with NAM programming menu) or in Nokia 6210 or 3210 +(more in description for test 17). + +

    I’ve never heard of such accident +(my own strange and hard attempts :-) failed, too) during using it in different phones. +But of course you should be careful - netmonitor is "unofficial" part of +phone's firmware. + +

    If something doesn't work correctly, switch the phone off and then back on +- all tests, you can set (excluding test 17), +should be set to their default values... + + +

    Back to the top

    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net1.htm b/Docs/en_US/gsm/netmon/faq_net1.htm index 0a11599..5a72923 100644 --- a/Docs/en_US/gsm/netmon/faq_net1.htm +++ b/Docs/en_US/gsm/netmon/faq_net1.htm @@ -1,503 +1,504 @@ - - - - - - - - - - NetMonitor in Nokia phones (2/7) - - - - - -

    Main page

    - -
    NetMonitor in Nokia phones (2/7) - -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] - -

    - -
    - - - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    -
    -
    - -

    11. Glossary
    -


    - -

    Here you can find explanation to some terms, which can be found in this FAQ: - -

    ACCH (Analog Control Channel) -(TDMA 800/TDMA 1900) - -

    AMPS (Advanced Mobile Phone Service) -
    Analogue cellular system working in 800 Mhz used, for example, in North America. - -

    ASIC (Application Specific Integrated Circuit) -
    Electronic chips designed for some concrete purposes - (for example, in phone it controlls communication between MCU and DSP) -They're designed and produced by the companies which use them. - -

    AVCH (Analog Voice Channel) -(TDMA 800/TDMA 1900) - -

    BCC (Base-station Color Code) -(GSM/DCS/PCS) -
    3-bit number (from 0-7 range) used to distinguish neighbor cells of the same operator, -transmitting using BCCH in the same -FDMA channel. Such distinguish is not needed when the cells belong to different operators -(they use different channels and their BCCH are in different FDMA channels). -It is given in BSIC of each BTS (you can check it for example in -test 2). - -

    BSC (Base Station Controller) -(GSM/DCS/PCS) -
    It controls and supervises one or more BTSes. - -

    BSIC (Base Station Identity Code -or Base transceiver Station Identity Code) -(GSM/DCS/PCS) -
    Unique ID number of each BTS. If we code this value binary, first three digits (in decimal format) -are BCC and next three are NCC. These values range from 0 - 63. -BSIC values can be found among others in test 2. - -

    BTS (Base Transceiver Station) -(GSM/DCS/PCS) -
    This device allows communication between phones and cellular network -(many parameters, like current communication channel, distance to BTS and signal quality can be found, for example, -in test 1). - -

    And here are another classes with maximum power of BTS: - -

    - - - - - -
    GSM 900
    GSM 1800
    -
    320 W (55 dBm)
    -160 W (52 dBm)
    -80 W (49 dBm)
    -40 W (46 dBm)
    -
    -
    -
    --
    --
    --
    -
    -
    20 W (43 dBm)
    -10 W (40 dBm)
    -5 W (37 dBm)
    -2,5 W (34 dBm)
    -
    - -

    In Polish version of this FAQ I give many links to WWW pages with BTS lists, their descriptions, pictures (in Poland). - -

    From English pages I recommend www.geckobeach.com/cellular/cellpixs/cellid.htm -site - it's about networks and BTSes in North America. - -

    Another links connected with it: - -

    - - -

    C1 (path loss-criterium) -(GSM/DCS/PCS) -
    This is a parameter (ranging from -99 to 99 dBm) calculated by the phone to decide which cells to use -(it uses the cell only if its C1 is positive). This value is based on: - -

    -

      -
    • RX -
      Strength of signal received in BCCH channel. If it is equal or less than -RxLevAm, the phone searches for next -BCCH channel. It is shown in -test 1 (for current channel) -and also in test 3, test 4 -and test 5 -(for neighbor channels). The amount of measurements of the quality of transmission with BCCH channels -in neighbor cells is given in test 62
    • - -
    • RxLevAm (Rx Level Access minimum) -
      Min. level of the received signal (usually from -100 dBm to -110 dBm) needed by the phone to use particular cell.
    • - -
    • MSTxPwr -
      Max power, which can be transmitted by phone to get access to -RACH channel (i.e. max power allowed by current cell). -Actually, it is lower in towns (where cells are small) and higher outside them. -
    • - -
    • MSMaxTxPwr -
      Max permissible transmission power of the phone (its classes are described in -TX description).
    - -

    It is calculated using following formula: -C1 = (RX - RxLevAm - MAX ( ( MSTxPwr -- MSMaxTxPwr ), 0) ) , where MAX(x,y) is obviously a mathematical -function giving the bigger one of the discussed numbers. -The phone shows C1 value in test 1 (for current channel) and in -test 3, test 4 -and test 5 -(for neighbor channels). - -

    C2 (cell-reselection criterion) -(GSM/DCS/PCS) -
    This parameter (-99 to 99 dBm) is calculated with following formula: -C2 = C1 + Cell reselect -offset - Temporary offset -* H (Penalty time - T). -If this value for some other cell (C2 for -neighbor channels can be found in test 3, -test 4 and -test 5) is higher than this value for current cell -(shown in test 1 and test 3) -for a period of time longer than 5 seconds, the phone switches cells. There are two exceptions to the rule: - -

    -

      -
    • if the new cell is located on different ‘Location Area (this parameter for current cell can be checked in -test 11), C2 for this cell must be (during more than 5 seconds) -higher than C2+CELL_RESELECT_HYSTERESIS for old cell (where CELL_RESELECT_HYSTERESIS is a -special parameter sent in BCCH channel).
    • - -
    • if the phone switched cells during last 15 seconds, C2 for a new cell must be higher at least 5 dBm from -C2 value of the old cell. -
    • -
    - -

    H(x) function for currently not used cells is 0 (if x<0) or 1 (if x>=0). For current cell H(x) is always equal 0. -
    By a skillful manipulation of this parameter (through CELL_RESELECT_HYSTERESIS), operators can direct -connections to specific cells (thus lightening load of the network). - -

    CDMA (Code Division Multiple Access; also known as IS-95) -
    One of the newer digital technologies in 800 or 1900 Mhz. Used in North America, Australia and some southeastern Asian countries -(e.g. Hong Kong and South Korea). It doesn't divide the radio frequency -spectrum into separate user channels by frequency slices or time slots, but -separates users by assigning them digital codes within the same broad spectrum. - -

    DCCH (Digital Control Channel) -(TDMA 800/TDMA 1900) - -

    DCS (Digital Cellular System) -
    Cellular communication system working in 1800 MHz frequency band -(currently more often called GSM 1800) – a changed version of GSM (900 MHz) system. -Its new features allowed to increase network capacity (that’s why this system is used in urban areas with huge number -of subscribers) at the cost of thick net of the base stations (BTSes) -and to provide roaming within one country. GSM 1800 has different channel numbers -(see test 17), different phone -(see RX description) and BTSes -transmission power and also different max speed of the user, at which he can use his phone -(250 km/h in GSM and 130 km/h in DCS). - -

    DSP (Digital Signal Processor) -
    Signal processor (digital signals processing chip - controls radio interface and speech coding/decoding). -Its version can be checked in test 88. - -

    DTCH (Digital Traffic Channel) -(TDMA 800/TDMA 1900) - -

    DTX (Discontinous Transmission Exchange) -
    Some phones and networks "care" ;-) about battery life using so called discontinuous transmission (DTX), -which turns off phone’s transmitter when we don’t talk (but – for example - listen to the calling party). -During that period the phone generates a so called comfortable :-) noise, because if our interlocutor heard the silence, -he could think that the connection was broken. - -

    (GSM/DCS/PCS): -
    DTX must be supported by the phone (Nokia does - see -test 78) and BTS - you can check and -(sometimes) change this in test 12 and -test 13. - -

    FDMA (Frequency Division Multiple Access) -(GSM/DCS/PCS) -
    This name means multiaccess on frequency field: transmission proceeds on different frequencies at the same time -(this is a "full duplex" connection): there is a “down-link” from BTS to the phone and -“up-link” - from the phone to BTS (this is called "up" and "down" because BTS -antennas are usually higher than phone ones, so the signal from BTS to the phone -really must go down (and vice versa)). - -

    Frequency hopping (channel hopping) -(GSM/DCS/PCS) -
    During connection your phone can continuously change used frequency (used channel) in communication with cell. -It's used, when some channel is still troubled - without channel hopping -communication with phone could not be possible, with it it's - only this -part of transmition, which is made on this frequency, is lost (so, if gives less number of -signal loss, but doesn't change sound quality - methods of coding it are always -the same). You can check (during a call) if your phone uses this function in -test 1. test 12 informs -if it is allowed by the cell (these values are updated only during a call). Channel hopping requires -Hopping Sequence Number (frenquencies are changed according to known for phone and network sequence) -- see test 2. - -

    GSM (Global System for Mobile Communication) -
    Cellular telecommunication system working at 900 MHz. It also has a 1800 MHz (DCS) and -1900 MHz (PCS) version. - -

    HLR (Home Location Register) -(GSM/DCS/PCS) -
    Network register containing information about subscribers (i.e. about their subscribed services, -tariff, last network they were logged in, etc.). - -

    IMEI (International Mobile Equipment Identification code) -(GSM/DCS/PCS) -
    Unique 15-digit identification number of every GSM phone on the world. It can be checked using *#06# code -(all phones) or in service menu (Nokia), which can be activated by typing a code *#WAR0ANTY# or -*#WARRANTY# (Nokia 6130). In Nokia 3110 after entering service menu (*#WAR0ANTY#) -you have to additionally enter a code 9268. IMEI contains information about the manufacturer, -place of production and serial number (check www.tele-servizi.com/janus/texts/imei.txt -for such list for Motorola phones, -here is my list for Nokia phones). -Operators can restrict network access for particular phones – for example the stolen ones -(identified using IMEI number). Different operators can exchange such lists too. - -

    IMSI (International Mobile Subscriber Identify) -(GSM/DCS/PCS) -
    Unique (max 15-digit) number given to the phone: - -

    -

      -
    • first three digits are MCC
    • -
    • next three digits are MNC
    • -
    • the rest is a unique number
    • -
    - -

    IMSI attach -(GSM/DCS/PCS) -
    It is a procedure executed after each power on. The phone informs network that it is active (and is ready for communication -- receiving waiting SMS, etc.) and then it receives the IMSI number. -The counter connected with IMSI attach is located in test 64, -test 7 informs whether this is allowed by the current cell. - -

    IMSI detach -(GSM/DCS/PCS) -
    The phone informs network that it is going to switch off and the communication won’t be possible -(its IMSI expires). The counter connected with IMSI detach is located in -test 64. test 7 -informs whether this is allowed by the current cell. - -

    Location Update -(GSM/DCS/PCS) -
    Every GSM phone periodically informs network about its current location. -This function is called Location Update. It is executed after changing Location Area (phone makes -it "intelligent" - when it's moved out of network coverage and the logs again to the network, makes Location Update -only when current BTS has different LAC than previous one – before losing the signal) or -PLMN (after leaving the range of one network and trying to log in to another). -Then information about Location Update is transferred to a new MSC/VLR, -which in turn passes this information to HLR. When the phone works in new -MSC/VLR, HLR doesn’t identify the user by -the number received from old MSC/VLR anymore. Location Update -has a couple of varieties: PLU, IMSI attach and IMSI detach -(they're distinquished in test 64). Current Location Area code can be checked in -test 11. - -

    MCU (Master Control Unit processor) -
    Main processor in phone. - -

    MSC (Mobile Switching Center) -(GSM/DCS/PCS) -
    Part of the system responsible for communication between subscribers and other users (also from other networks). - -

    NCC (National Color Code or Network Color Code) -(GSM/DCS/PCS) -
    3-bit number (from 0-7 range) used to differentiate cells of the operators from different countries -(for example near the border, where the phone is in range of several different networks) transmitting using -BCCH in the same FDMA channel. This number is constant -within PLMN. It is given in BSIC of every BTS -(you can check it in test 2). - -

    PLMN (Public Land Mobile Network) -(GSM/DCS/PCS) -
    Area covered by one operator (one network). After changing this area, the phone executes -Location Update. - -

    -

    - -

    PLU (Periodic Location Update) -(GSM/DCS/PCS) -
    The phone informs network, on which country area (in the range of which cells) it is located. -This procedure is executed periodically (depending on the network, for example in polish -Era GSM and -Plus GSM networks every 3rd hour, in -Idea every 2th hour) -- this can be checked in test 10. This period is counted from the -last „contact” with network (the counter doesn’t stop even if the phone loses network signal!) – from the last call, sending/receiving -SMS, requesting some services (for example enabling call diverting), because the network is then informed about phone’s -location (but this is not registered in test 64). -The counter connected with PLU is in test 64. - -

    TCH (Traffic Channels) -(GSM/DCS/PCS) -
    Two way user data (computer data or digitized voice) channels. They can be divided to: - -

      -
    • -HR (Half Rate Traffic): max data transfer rate is 6.5 kbit/sec (introduced in -GSM phase 2). HR channels offer worse sound quality but also longer phone standby time (even up to 30%), -because the phone using HR uses less power. The main advantage of this kind of channels is that they -enable the network to double its capacity (the number of subscribers able to make a call at the same time – see -TS parameter description for more details) or to double the max range of the -BTS. Using these channels must be allowed and supported by the network (this can be -checked in test 7) and the phone. Activation code is -*HRC0#, deactivation code is #HRC0#. Unfortunately, not all Nokia phones accept these codes -(the phone should reset itself after entering them) – in older models they're not supported, in never they're deactivated, when -the phone is directed to countries with networks, which doesn't support it. -Interesting fact is that in Nokia 6110 (firmware 5.24) you can decide whether the phone can use this channel or not by modifying -following EEPROM memory cells values: - - - - - - - - - - - - - -
      enablingdisabling
      cell 0070 value for 78 -
      cell 011F value for 84
      cell 0070 value for 70 -
      cell 011F value for 7C
      -
    • - -
    • -FR (Full Rate Traffic):transmission at 13 kbit/sec, coding using -LPC-RPE (Linear Prediction Coding with Regular Pulse Excitation) algorithm
    • - -
    • -EFR (Enhanced Full Rate): -13 kbit/sek, coding algorithm different than in FR (ASELP (AlgebraicCode Excitation Linear Prediction) -created by Nokia and Sherbrooke University; recognized as an industrial standard for -GSM). EFR provides better sound quality at the same data transmission rate (and up to 5% -faster battery drain compared to FR). This mode can be enabled using -*EFR0# code (the phone then tries to use TCH channels in following order: EFR, FR, -(HR)) and disabled with #EFR0# (order: FR, (HR)). These codes may be not recognized -by some models (for example 6110 with some firmware versions) - -if your phone accepts them, it should reset itself right after typing them -(if this doesn’t happen, you won’t be able to enable/disable EFR using a keyboard code). -This channel is not supported in all older models (for example, 2110). -The type of channel used by your phone can be checked only during connection. -
    • -
    - -

    When you network doesn't support one of these channel and phone recognizes its activation code, you may see -"Not ready" message. - -

    You can check this in test 1. -The sequence of TCH channels can be freely set using some of the service programs -(for example WinTesla – in Software/Product Profile menu) - it can be only possibility to enable HR channel in phone. - -

    TDMA (Time Division Multiple Access) -(GSM/DCS/PCS) -
    This means multiaccess in time: several phones can transmit signal (either digitized voice or computer data) in the -same time on the same channel (its number can be checked in test 1) – -actually, this period of time is divided into very small parts (see TS description), -invisible for us, so we can assume it happens simultaneously). - -

    TMSI (Temporary Mobile Subscriber Identity): -(GSM/DCS/PCS) -
    During signalization procedures encrypted on radio channel -(for example, during location update) this number is assigned by -MSC to phone. In the moment, when network wants to contact -with concrete phone and transmission on radio channel is not encrypted, it's send -instead of IMSI and allows phone to indentify, that concrete -call concern on it. It doesn't have global meaning -and it's structure is definited by network administrator. Actual TMSI -you can check in test 10. - -

    TS (Time Slot) -
    Each radio channel used in communication between phone and -BTS is divided into 8 parts (called TS - time slots). If in all BTSes -(available for your phone) all time slots are in use, you won't be able to make/receive a call and you'll get a 'Network busy' -message (information about reason of connection failure is given among others in -test 39). Unfortunately, each type of connection has the same priority in -networks not supporting GSM Phase 2+ (it isn't available in older GSM Phases) - so if you want to dial emergency number 112 -and the network is busy, no other call will be interrupted and you won't get connected. This problem can also be solved by -adding more BTSes (for example in dual GSM 900/1800 MHz network) or by modifying -current stations to allow the use of HR channels (FR -and EFR transmission uses whole assigned time slot, while HR -(defined in GSM Phase 2) only half of it). Max data transmission speed using one TS is 9.6 kbit/sec (or 14.4 kbit/sec, -but only in some additional conditions). There are new systems allowing higher transmission speeds -(for example GPRS (Generic Packet Radio Services) or HSCSD -(High Speed Circuit Switched Data), but they achieve this using several time slots -at the same time (which decreases network capacity). Actual used TS can be checked -in test 1, in phones with HSCSD (like Nokia 6210) -use also test 8 for it... - -

    VLR (Visitor Location Register) -(GSM/DCS/PCS) -
    This register contains the same data as HLR, but for roaming guests -(their data are taken from their home network HLR). - - -

    Back to the top
    - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    -
    - -

    Marcin Wiacek (WWW) -
    Last modification: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (2/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (2/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    11. Glossary
    +


    + +

    Here you can find explanation to some terms, which can be found in this FAQ: + +

    ACCH (Analog Control Channel) +(TDMA 800/TDMA 1900) + +

    AMPS (Advanced Mobile Phone Service) +
    Analogue cellular system working in 800 Mhz used, for example, in North America. + +

    ASIC (Application Specific Integrated Circuit) +
    Electronic chips designed for some concrete purposes + (for example, in phone it controlls communication between MCU and DSP) +They're designed and produced by the companies which use them. + +

    AVCH (Analog Voice Channel) +(TDMA 800/TDMA 1900) + +

    BCC (Base-station Color Code) +(GSM/DCS/PCS) +
    3-bit number (from 0-7 range) used to distinguish neighbor cells of the same operator, +transmitting using BCCH in the same +FDMA channel. Such distinguish is not needed when the cells belong to different operators +(they use different channels and their BCCH are in different FDMA channels). +It is given in BSIC of each BTS (you can check it for example in +test 2). + +

    BSC (Base Station Controller) +(GSM/DCS/PCS) +
    It controls and supervises one or more BTSes. + +

    BSIC (Base Station Identity Code +or Base transceiver Station Identity Code) +(GSM/DCS/PCS) +
    Unique ID number of each BTS. If we code this value binary, first three digits (in decimal format) +are BCC and next three are NCC. These values range from 0 - 63. +BSIC values can be found among others in test 2. + +

    BTS (Base Transceiver Station) +(GSM/DCS/PCS) +
    This device allows communication between phones and cellular network +(many parameters, like current communication channel, distance to BTS and signal quality can be found, for example, +in test 1). + +

    And here are another classes with maximum power of BTS: + +

    + + + + + +
    GSM 900
    GSM 1800
    +
    320 W (55 dBm)
    +160 W (52 dBm)
    +80 W (49 dBm)
    +40 W (46 dBm)
    +
    +
    -
    +-
    +-
    +-
    +
    +
    20 W (43 dBm)
    +10 W (40 dBm)
    +5 W (37 dBm)
    +2,5 W (34 dBm)
    +
    + +

    In Polish version of this FAQ I give many links to WWW pages with BTS lists, their descriptions, pictures (in Poland). + +

    From English pages I recommend www.geckobeach.com/cellular/cellpixs/cellid.htm +site - it's about networks and BTSes in North America. + +

    Another links connected with it: + +

    + + +

    C1 (path loss-criterium) +(GSM/DCS/PCS) +
    This is a parameter (ranging from -99 to 99 dBm) calculated by the phone to decide which cells to use +(it uses the cell only if its C1 is positive). This value is based on: + +

    +

      +
    • RX +
      Strength of signal received in BCCH channel. If it is equal or less than +RxLevAm, the phone searches for next +BCCH channel. It is shown in +test 1 (for current channel) +and also in test 3, test 4 +and test 5 +(for neighbor channels). The amount of measurements of the quality of transmission with BCCH channels +in neighbor cells is given in test 62
    • + +
    • RxLevAm (Rx Level Access minimum) +
      Min. level of the received signal (usually from -100 dBm to -110 dBm) needed by the phone to use particular cell.
    • + +
    • MSTxPwr +
      Max power, which can be transmitted by phone to get access to +RACH channel (i.e. max power allowed by current cell). +Actually, it is lower in towns (where cells are small) and higher outside them. +
    • + +
    • MSMaxTxPwr +
      Max permissible transmission power of the phone (its classes are described in +TX description).
    + +

    It is calculated using following formula: +C1 = (RX - RxLevAm - MAX ( ( MSTxPwr +- MSMaxTxPwr ), 0) ) , where MAX(x,y) is obviously a mathematical +function giving the bigger one of the discussed numbers. +The phone shows C1 value in test 1 (for current channel) and in +test 3, test 4 +and test 5 +(for neighbor channels). + +

    C2 (cell-reselection criterion) +(GSM/DCS/PCS) +
    This parameter (-99 to 99 dBm) is calculated with following formula: +C2 = C1 + Cell reselect +offset - Temporary offset +* H (Penalty time - T). +If this value for some other cell (C2 for +neighbor channels can be found in test 3, +test 4 and +test 5) is higher than this value for current cell +(shown in test 1 and test 3) +for a period of time longer than 5 seconds, the phone switches cells. There are two exceptions to the rule: + +

    +

      +
    • if the new cell is located on different ‘Location Area (this parameter for current cell can be checked in +test 11), C2 for this cell must be (during more than 5 seconds) +higher than C2+CELL_RESELECT_HYSTERESIS for old cell (where CELL_RESELECT_HYSTERESIS is a +special parameter sent in BCCH channel).
    • + +
    • if the phone switched cells during last 15 seconds, C2 for a new cell must be higher at least 5 dBm from +C2 value of the old cell. +
    • +
    + +

    H(x) function for currently not used cells is 0 (if x<0) or 1 (if x>=0). For current cell H(x) is always equal 0. +
    By a skillful manipulation of this parameter (through CELL_RESELECT_HYSTERESIS), operators can direct +connections to specific cells (thus lightening load of the network). + +

    CDMA (Code Division Multiple Access; also known as IS-95) +
    One of the newer digital technologies in 800 or 1900 Mhz. Used in North America, Australia and some southeastern Asian countries +(e.g. Hong Kong and South Korea). It doesn't divide the radio frequency +spectrum into separate user channels by frequency slices or time slots, but +separates users by assigning them digital codes within the same broad spectrum. + +

    DCCH (Digital Control Channel) +(TDMA 800/TDMA 1900) + +

    DCS (Digital Cellular System) +
    Cellular communication system working in 1800 MHz frequency band +(currently more often called GSM 1800) – a changed version of GSM (900 MHz) system. +Its new features allowed to increase network capacity (that’s why this system is used in urban areas with huge number +of subscribers) at the cost of thick net of the base stations (BTSes) +and to provide roaming within one country. GSM 1800 has different channel numbers +(see test 17), different phone +(see RX description) and BTSes +transmission power and also different max speed of the user, at which he can use his phone +(250 km/h in GSM and 130 km/h in DCS). + +

    DSP (Digital Signal Processor) +
    Signal processor (digital signals processing chip - controls radio interface and speech coding/decoding). +Its version can be checked in test 88. + +

    DTCH (Digital Traffic Channel) +(TDMA 800/TDMA 1900) + +

    DTX (Discontinous Transmission Exchange) +
    Some phones and networks "care" ;-) about battery life using so called discontinuous transmission (DTX), +which turns off phone’s transmitter when we don’t talk (but – for example - listen to the calling party). +During that period the phone generates a so called comfortable :-) noise, because if our interlocutor heard the silence, +he could think that the connection was broken. + +

    (GSM/DCS/PCS): +
    DTX must be supported by the phone (Nokia does - see +test 78) and BTS - you can check and +(sometimes) change this in test 12 and +test 13. + +

    FDMA (Frequency Division Multiple Access) +(GSM/DCS/PCS) +
    This name means multiaccess on frequency field: transmission proceeds on different frequencies at the same time +(this is a "full duplex" connection): there is a “down-link” from BTS to the phone and +“up-link” - from the phone to BTS (this is called "up" and "down" because BTS +antennas are usually higher than phone ones, so the signal from BTS to the phone +really must go down (and vice versa)). + +

    Frequency hopping (channel hopping) +(GSM/DCS/PCS) +
    During connection your phone can continuously change used frequency (used channel) in communication with cell. +It's used, when some channel is still troubled - without channel hopping +communication with phone could not be possible, with it it's - only this +part of transmition, which is made on this frequency, is lost (so, if gives less number of +signal loss, but doesn't change sound quality - methods of coding it are always +the same). You can check (during a call) if your phone uses this function in +test 1. test 12 informs +if it is allowed by the cell (these values are updated only during a call). Channel hopping requires +Hopping Sequence Number (frenquencies are changed according to known for phone and network sequence) +- see test 2. + +

    GSM (Global System for Mobile Communication) +
    Cellular telecommunication system working at 900 MHz. It also has a 1800 MHz (DCS) and +1900 MHz (PCS) version. + +

    HLR (Home Location Register) +(GSM/DCS/PCS) +
    Network register containing information about subscribers (i.e. about their subscribed services, +tariff, last network they were logged in, etc.). + +

    IMEI (International Mobile Equipment Identification code) +(GSM/DCS/PCS) +
    Unique 15-digit identification number of every GSM phone on the world. It can be checked using *#06# code +(all phones) or in service menu (Nokia), which can be activated by typing a code *#WAR0ANTY# or +*#WARRANTY# (Nokia 6130). In Nokia 3110 after entering service menu (*#WAR0ANTY#) +you have to additionally enter a code 9268. IMEI contains information about the manufacturer, +place of production and serial number (check www.tele-servizi.com/janus/texts/imei.txt +for such list for Motorola phones, +here is my list for Nokia phones). +Operators can restrict network access for particular phones – for example the stolen ones +(identified using IMEI number). Different operators can exchange such lists too. + +

    IMSI (International Mobile Subscriber Identify) +(GSM/DCS/PCS) +
    Unique (max 15-digit) number given to the phone: + +

    +

      +
    • first three digits are MCC
    • +
    • next three digits are MNC
    • +
    • the rest is a unique number
    • +
    + +

    IMSI attach +(GSM/DCS/PCS) +
    It is a procedure executed after each power on. The phone informs network that it is active (and is ready for communication +- receiving waiting SMS, etc.) and then it receives the IMSI number. +The counter connected with IMSI attach is located in test 64, +test 7 informs whether this is allowed by the current cell. + +

    IMSI detach +(GSM/DCS/PCS) +
    The phone informs network that it is going to switch off and the communication won’t be possible +(its IMSI expires). The counter connected with IMSI detach is located in +test 64. test 7 +informs whether this is allowed by the current cell. + +

    Location Update +(GSM/DCS/PCS) +
    Every GSM phone periodically informs network about its current location. +This function is called Location Update. It is executed after changing Location Area (phone makes +it "intelligent" - when it's moved out of network coverage and the logs again to the network, makes Location Update +only when current BTS has different LAC than previous one – before losing the signal) or +PLMN (after leaving the range of one network and trying to log in to another). +Then information about Location Update is transferred to a new MSC/VLR, +which in turn passes this information to HLR. When the phone works in new +MSC/VLR, HLR doesn’t identify the user by +the number received from old MSC/VLR anymore. Location Update +has a couple of varieties: PLU, IMSI attach and IMSI detach +(they're distinquished in test 64). Current Location Area code can be checked in +test 11. + +

    MCU (Master Control Unit processor) +
    Main processor in phone. + +

    MSC (Mobile Switching Center) +(GSM/DCS/PCS) +
    Part of the system responsible for communication between subscribers and other users (also from other networks). + +

    NCC (National Color Code or Network Color Code) +(GSM/DCS/PCS) +
    3-bit number (from 0-7 range) used to differentiate cells of the operators from different countries +(for example near the border, where the phone is in range of several different networks) transmitting using +BCCH in the same FDMA channel. This number is constant +within PLMN. It is given in BSIC of every BTS +(you can check it in test 2). + +

    PLMN (Public Land Mobile Network) +(GSM/DCS/PCS) +
    Area covered by one operator (one network). After changing this area, the phone executes +Location Update. + +

    +

    + +

    PLU (Periodic Location Update) +(GSM/DCS/PCS) +
    The phone informs network, on which country area (in the range of which cells) it is located. +This procedure is executed periodically (depending on the network, for example in polish +Era GSM and +Plus GSM networks every 3rd hour, in +Idea every 2th hour) +- this can be checked in test 10. This period is counted from the +last „contact” with network (the counter doesn’t stop even if the phone loses network signal!) – from the last call, sending/receiving +SMS, requesting some services (for example enabling call diverting), because the network is then informed about phone’s +location (but this is not registered in test 64). +The counter connected with PLU is in test 64. + +

    TCH (Traffic Channels) +(GSM/DCS/PCS) +
    Two way user data (computer data or digitized voice) channels. They can be divided to: + +

      +
    • +HR (Half Rate Traffic): max data transfer rate is 6.5 kbit/sec (introduced in +GSM phase 2). HR channels offer worse sound quality but also longer phone standby time (even up to 30%), +because the phone using HR uses less power. The main advantage of this kind of channels is that they +enable the network to double its capacity (the number of subscribers able to make a call at the same time – see +TS parameter description for more details) or to double the max range of the +BTS. Using these channels must be allowed and supported by the network (this can be +checked in test 7) and the phone. Activation code is +*HRC0#, deactivation code is #HRC0#. Unfortunately, not all Nokia phones accept these codes +(the phone should reset itself after entering them) – in older models they're not supported, in never they're deactivated, when +the phone is directed to countries with networks, which doesn't support it. +Interesting fact is that in Nokia 6110 (firmware 5.24) you can decide whether the phone can use this channel or not by modifying +following EEPROM memory cells values: + + + + + + + + + + + + + +
      enablingdisabling
      cell 0070 value for 78 +
      cell 011F value for 84
      cell 0070 value for 70 +
      cell 011F value for 7C
      +
    • + +
    • +FR (Full Rate Traffic):transmission at 13 kbit/sec, coding using +LPC-RPE (Linear Prediction Coding with Regular Pulse Excitation) algorithm
    • + +
    • +EFR (Enhanced Full Rate): +13 kbit/sek, coding algorithm different than in FR (ASELP (AlgebraicCode Excitation Linear Prediction) +created by Nokia and Sherbrooke University; recognized as an industrial standard for +GSM). EFR provides better sound quality at the same data transmission rate (and up to 5% +faster battery drain compared to FR). This mode can be enabled using +*EFR0# code (the phone then tries to use TCH channels in following order: EFR, FR, +(HR)) and disabled with #EFR0# (order: FR, (HR)). These codes may be not recognized +by some models (for example 6110 with some firmware versions) - +if your phone accepts them, it should reset itself right after typing them +(if this doesn’t happen, you won’t be able to enable/disable EFR using a keyboard code). +This channel is not supported in all older models (for example, 2110). +The type of channel used by your phone can be checked only during connection. +
    • +
    + +

    When you network doesn't support one of these channel and phone recognizes its activation code, you may see +"Not ready" message. + +

    You can check this in test 1. +The sequence of TCH channels can be freely set using some of the service programs +(for example WinTesla – in Software/Product Profile menu) - it can be only possibility to enable HR channel in phone. + +

    TDMA (Time Division Multiple Access) +(GSM/DCS/PCS) +
    This means multiaccess in time: several phones can transmit signal (either digitized voice or computer data) in the +same time on the same channel (its number can be checked in test 1) – +actually, this period of time is divided into very small parts (see TS description), +invisible for us, so we can assume it happens simultaneously). + +

    TMSI (Temporary Mobile Subscriber Identity): +(GSM/DCS/PCS) +
    During signalization procedures encrypted on radio channel +(for example, during location update) this number is assigned by +MSC to phone. In the moment, when network wants to contact +with concrete phone and transmission on radio channel is not encrypted, it's send +instead of IMSI and allows phone to indentify, that concrete +call concern on it. It doesn't have global meaning +and it's structure is definited by network administrator. Actual TMSI +you can check in test 10. + +

    TS (Time Slot) +
    Each radio channel used in communication between phone and +BTS is divided into 8 parts (called TS - time slots). If in all BTSes +(available for your phone) all time slots are in use, you won't be able to make/receive a call and you'll get a 'Network busy' +message (information about reason of connection failure is given among others in +test 39). Unfortunately, each type of connection has the same priority in +networks not supporting GSM Phase 2+ (it isn't available in older GSM Phases) - so if you want to dial emergency number 112 +and the network is busy, no other call will be interrupted and you won't get connected. This problem can also be solved by +adding more BTSes (for example in dual GSM 900/1800 MHz network) or by modifying +current stations to allow the use of HR channels (FR +and EFR transmission uses whole assigned time slot, while HR +(defined in GSM Phase 2) only half of it). Max data transmission speed using one TS is 9.6 kbit/sec (or 14.4 kbit/sec, +but only in some additional conditions). There are new systems allowing higher transmission speeds +(for example GPRS (Generic Packet Radio Services) or HSCSD +(High Speed Circuit Switched Data), but they achieve this using several time slots +at the same time (which decreases network capacity). Actual used TS can be checked +in test 1, in phones with HSCSD (like Nokia 6210) +use also test 8 for it... + +

    VLR (Visitor Location Register) +(GSM/DCS/PCS) +
    This register contains the same data as HLR, but for roaming guests +(their data are taken from their home network HLR). + + +

    Back to the top
    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net2.htm b/Docs/en_US/gsm/netmon/faq_net2.htm index 3ec22cd..a8abc8f 100644 --- a/Docs/en_US/gsm/netmon/faq_net2.htm +++ b/Docs/en_US/gsm/netmon/faq_net2.htm @@ -1,2405 +1,2408 @@ - - - - - - - - - - NetMonitor in Nokia phones (3/7) - - - - - -

    Main page

    - -
    NetMonitor in Nokia phones (3/7) - -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] - -

    - -
    - - - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    -
    -
    - -

    12. Description of the individual tests
    -


    - -

    Existence of the individual test in your phone depends on: - -

    -

      -
    • phone model: generally, never and more complicated models (with more functions and options) have more tests (for example, -Nokia 9110 has more tests than 5110, 7110 more than 9110). There is one (only ?) exception: less complicated Nokia 5110 -has bigger NetMonitor than 6110 (and that’s why I think that this model is better, even though it doesn’t have some functions).
    • - -
    • software version - usually the newer version, the more options it has (software can be upgraded in service and its -version can be checked in most models with *#0000# code, in Nokia 6130 with *#9999# and in -3110 with *#3110#) – for instance in Nokia 5110 in test 89 bbbbbb -parameter is shown only from firmware 5.07. Firmware upgrade has also additional advantage: newer versions don’t -contain some bugs (also in NetMonitor).
    • - -
    • who uploaded firmware to the phone: it is usually written in C (and then translated (compiled) to the code of phone’s -microprocessor). According to my own private theory existence (and running) of an individual tests depends on some -constants set (or not) in the source code (programmers :-) surely understand, what I’m trying to write). The best example -for this can be test 38: according to the some English documentation -it doesn't exist in phones to be sold, because DEV_FT_MEMORY_DUMP_IN_USE constant in file ftd_conf.h -(one of the firmware source code files) wasn't set before compiling. I think, that the same applies to the help screens – -their presence doesn’t depend on firmware version but on where the phone was purchased (where it comes from – -where was its firmware uploaded). How to solve this problem? Unfortunatelly, you can only download firmware again (compiled -from source with set constants). - -

      Aha, I’m also not quite sure, whether DSP tests -(test 70, 10-73, -10-74, -10-76 (except for ab parameter), 10-77, -10-78 -and 10-79) don’t have to be enabled this way (or whether their existence -(or not) depends on the network). -

    • -
    - -

    Help screens for tests are written with bold font, -concrete (example) values in tests with italic (I put them there, where I didn't have more details about test). - -

    -

    - - -

    Back to the top - - -

    Test 1 -
    Information about communication with cell - -

    - - - - - - -
    - - - - -
    abbb ccc ddd
    - e ff g mmmm
    - nnn     ppp
    -    oooo
    -
    - - - - -
    CH RxL TxPwr
    -TS TA RQ RLT
    - C1     C2
    -    CHT
    -
    - -

    -

      -
    • -a - contains H, if frequency hopping is enabled (otherwise empty). This information -can also be found in test 11 -and test 12.
    • - -
    • -bbb - CH (channel): number of the channel used in communication with cell (decimal). If -frequency hopping is enabled, this number changes when the display gets refreshed. -This parameter determines frequencies used in communication with BTS: - -

      - - - - - - - - - - - - - - - - - - - - -
      carrier (middle) frequency -of the transmission channel (MHz) -
      GSM 900
      GSM 1800
      transmission phone-BTS
      890 + CH * 0,2
      1710 + (CH - 511) * 0,2
      transmission BTS-phone
      935 + CH * 0,2
      1805 + (CH - 511) * 0,2
      - -

      -and informs, whether phone use cell working in GSM 900 or 1800 MHz -(I write more about channel numbers in test 17). - -

      - -

    • - -
    • -

      ccc - RX: -minus is not show if <=-100. This parameter affects following functions: - -

      -

        -
      • -if all channels’ signal is weaker than -110 dBm, the phone doesn’t monitor channels.
      • - -
      • -if the phone loses signal of your home network, it tries to monitor next available networks and if you don't have access to them, -you’ll see a network presence symbol and no signal strength bars (but you can make emergency calls) -
      • - -
      • - if some other network has a very strong signal (say -85 dBm) and your home network is very weak on that area (for example, --100 dBm), your phone can have big problems with logging into it (you will have to use -test 17 to manually force the phone to use proper channel). -
      • - -
      • -RXLev parameter value: - -

        - - - - - - - - -
        RX (from)RX (up to)RXLev
        less than-110 dBm0
        -110 dBm-109 dBm1
        -109 dBm-108 dBm2
        .........
        -49 dBm-48 dBm62
        -48 dBmmorej63
        -

        -

      • - -
      • -signal strength indicator value on the left side of the display (approximately): - -

        - - - - - - - -
        RX (from - to)amount of bars
        from -105 to -100 dBm0
        from -100 to -95 dBm1
        from -95 to -90 dBm2
        from -90 to -85 dBm3
        more than -85 dBm4
        -

        -

      -
    • - - -
    • -

      ddd - TX: level of the transmitted signal (only during connection). If the phone’s transmitter is active, -there is an * (asterisk) before the value. The lower value, the higher power level (also the one received by your head!) and -energy consumption. - -

      - - - - - -
      TX (GSM 900)161514131211109
      TX (GSM 1800)98765432
      dBm11121314151617181920212223242526
      Watts0,0120,0160,020,0250,0320,040,050,0630,0790,10,1250,1580,20,2510,3160,398
      - -

      and continue... - -

      - - - - - -
      TX (GSM 900)8765432-0
      TX (GSM 1800)10313029
      dBm2728293031323334353637383940414243
      Watts0,5010,6310,79411,261,5822,513,163,9856,318101215,820
      - -

      -Watt = 10(dBm/10)*0,001 -
      dBm = 10*log(Watt/0,001) - -

      There are following classes describing max phone transmission power: - -

      - - - - - - - - -
      GSM 900
      GSM 1800
      -
      20 W (not in use) -
      8 W (car/mobile phone) -
      5 W (car/mobile phone) -
      2 W (hand phone) -
      0,8 (hand phone)
      -
      -
      1 W (hand phone) -
      0,25 W (hand phone)
      -
      - -

      Min. phone transmission power in GSM 900 is 0,02 W and in GSM 1800 is 0,0025 W (4 dBm). - -

      Max BTS power level can be found in their description. - -

    • - -
    • -

      e - This TS indicator shows number of the used time slot -(0..7 for FR (EFR) or 0..15 for HR). -For phones with HSCSD (like Nokia 6210) use also test 8 for it. -

    • - -
    • -

      ff - TA (Timing Advance): BTS informs the phone, -when it should start transmission (so that it reaches BTS in time). This information is shown -by this indicator. It lets us calculate approximate distance between phone and BTS, which is -a value between TA*550 m and (TA+1)*550 m (remember, that sometimes signal is refracted and -distance evaluated with this parameter can be wrong). -This parameter is updated during communication with network (sending/receiving -SMSes, calling, requesting services), for example when using SDCC and TFR -channels. It ranges from 0 to 63 (up to 35 km) with FR and -EFR channels. HR channels offer theoretically (for example -with a car antenna (higher transmitting power) and a flat terrain) twice this range (up to 70 km) and TA contains value up to 128 -(English descriptions which I use don’t say a word about it - so, it's possible, -that for values bigger than 64 phone (?) decreases 64 from it and displays such value in this menu). - -

      Tip: you can use ALS (Alternative Line Service) function or -try to call for "*" number, when you want to refresh it...

      - -

    • - -
    • -

      g - RXQUAL_SUB (rate of transmission errors with DTX active -(DTX state can be checked in test 12)): -it determines, how many errors during connection have to be corrected by the phone for the call to be possible. Range 0 - 7 -(0 – means no errors; more than 5 – connection may be interrupted). The higher it is, the worse quality you have... - -

      - - - -
      RQ value01234567
      Max error amount<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
      -

      -

    • - -
    • -

      mmmm - RLT (Radio Link Timeout): if it is negative, 0 is shown. Max value of this parameter is 64. -If the phone uses a channel different than TCH or SDCC, xx is -displayed -

    • - -
    • nnn - C1 parameter

    • - -
    • -

      ppp - C2 parameter. If network supports only GSM Phase 1, -C1 value is displayed here. -

    • - -
    • -

      oooo - type of channel currently used by the phone (visit -www.pins.co.uk/upages/stratfordc/ -to find C programs containing algorithms used to encode different channels). -With HR channels phone even show, if first or second -part of TS is used (subchannel 0 or 1 is written): - -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      AGCH(Access Grant Channel) - a channel used by -BTS to inform the phone about what channel it should use (it is a -BTS answer to RACH) – it assigns the phone to -SDCCH
      BCCH(Broadcast Control Channel) -- a channel in direction BTS-phone, containing precise information about network -(needed for identification and access) – for example - -
        -
      • how often the phone should inform network about its location (T3212 counter value – more detailed description in -test 10)
      • -
      • whether frequency hopping is supported by the network
      • -
      • CELL_RESELECT_HYSTERESIS parameter (see C2 parameter description)
      • -
      • CELL_BARRED parameter (which informs, whether this cell is in test phase or is available for public use – but the phone -can ignore this and use test cells too - see test 19)
      • -
      -
      THR0TCH HR subchannel 0
      THR1TCH HR subchannel 1
      TFRTCH FR
      TEFRTCH EFR
      F144TCH FR - data transmission, speed 14.4 kbit/sec.
      F96TCH FR - data transmission, speed 9.6 kbit/sec.
      F72TCH FR - data transmission, speed 7.2 kbit/sec.
      F48TCH FR - data transmission, speed 4.8 kbit/sec.
      F24TCH FR - data transmission, speed 2.4 kbit/sec.
      H480TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 0
      H481TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 1
      H240TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 0
      H241TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 1
      FATCH FR - used only for quick signalization, for example in case of -handovers -
      (FACCH - Fast Associated Control Channel)
      FAH0TCH HR -used only for quick signalization, for example in case of -handovers -
      (FACCH - Fast Associated ControlChannel), subchannel 0
      FAH1TCH HR - used only for quick signalization, for example in case of -handovers -
      (FACCH - Fast Associated Control Channel), subchannel 1
      SDCCSDCCH (Stand-alone Dedicated Control -Channel) -- used for system signalization of: -
        -
      • establishing connection
      • -
      • user verification
      • -
      • Location Update executing
      • -
      • assigning to TCH
      • -
      • sending SMSes
      • -
      -
      CCCH(Common Control Channel ?) - used, when the phone is in standby mode (it doesn’t transmit not receive data)
      CBCH(Cell Broadcast Channel) - -a channel in BTS-phone direction used for cell broadcast (for example in Nokia 5110 it can -be enabled in Menu 2-5 and Menu 4-2-2, in Nokia 6110 in Menu 1-5 and Menu 4-4-2) -
      CCHRCCCH and CBCH joined in one
      SEARthe phone is searching for network
      NSPS(No Serve Power Save) -- the phone is not in range of any network, energy saving has been activated (information, whether your SIM card can stop its -clock in energy saving mode, can be found in test 51)
      -

    • -
    - -

    Interesting thing: In firmware in Nokia 3210 and 3310 there are strings -which shows info about data transmission state -("officialy" these phones don't have this function)... - -

    In Nokia 3110 this test looks similiar: - -

    - - - - - - -
    - - - - -
    abbb cccc ddd
    - e ff g qqrr
    -s Bttuu mmmm
    -w ppp oonnn z
    -
    - - - - -
     CH RxL TxPwr
    -TS TA QPM RAR
    -Ro BsiCLK RLT
    -S C2 CHT C1 B
    -
    - -

    -

      -
    • cccc - in this phone minus is always shown
    • -
    • ooo - hex values
    • -
    • qq - paging mode (see test 2)
    • -
    • rr - RAR (description in test 2)
    • -
    • s - roaming indicator (description in test 2)
    • -
    • tt - BSIC for current cell (see test 2)
    • -
    - -

    Level of received signal (RX) is connected with phone transmission power -(TX): the weaker the former, the stronger the latter (take a look at example indications of 6110 -using SDCC and TFR channels): - -

    - - - - - - -
    RXTX
    from -38 to -49 dBm19
    from -68 to -75 dBm9-14 (0,032 - 0,316 Watt)
    from -79 to -85 dBm7-9 (0,794 - 0,032 Watt)
    from -85 to -93 dBm5-7 (2 - 0,794 Watt)
    - -

    For curious people: some of these data can also be found in Nokia service programs (for example in WinTesla in -"Testing" / "RF Information" menu). - -

    - - - - - -
    Using CCCH or CBCH channel by the phone -(if the cell doesn’t support cell broadcast – you can check this in test 7) depends -on its firmware version and whether cell broadcasting has been enabled (or not) by the user. For example: Nokia 5110 v 5.04 -uses CBCH channel, if you enable this feature in Menu 2-5 or Menu 4-2-2 -(and CCCH channel, if you disable it). I think, that cell broadcast should be disabled when it is not -supported by the network – probably you can save some battery power. It has been corrected in version 5.07 (when CB is -not supported by the network, the phone uses CCCH regardless of "Info service" and -"Cell info display" settings). - -

    Additionally, ccc (RX) parameter can be used to set the direction of your antenna -(especially directional one) much more precisely than when using the indicator on the left side of phone’s display ! -I also have a piece of advice for you: never touch the antenna (in any case, you can check how it affects level of received -signal just by holding it with your fingers) ! - -

    TA parameter can be also used (apart from calculating the distance to BTS) -to measure speed (for example of the care you’re driving). I’m serious! But this can be done only when: - -

      -
    • the road is straight (no bends)
    • -
    • the phone uses only one BTS
    • -
    • BTS must be located near the road
    • -
    - -

    A little bit of mathematics: -
    -
    From Pitagoras’ theorem: - -

    a2 = c2 + e2 -
    b2 = c2 + f2 - -

    So: -
    e = -
    f = - -

    Now d = e - f =- - -

    If you know: - -

    -

      -
    1. -the way traveled by the car (on the drawing: length of "d" segment; it can be calculated form the lengths of "a" and "b" -segments (multiples of 513 m (for simplification) read from TA) and c (described later)) -
    2. - -
    3. -time, in which TA has changed (measured by a stopwatch) -
    4. -
    - -

    you can measure your speed. -
    Inaccuracy of this measure depends on: - -

    -

      -
    • -distance between BTS and road (segment "c") -
    • - -
    • -velocity itself -
    • - -
    • -distance between car and BTS -(with longer distance inaccuracy depends less from "c" segment) -
    • -
    - -

    And here is a concrete example: -
    The original value of TA was 2 and after 15 seconds it has changed to 1. You will get following results: - -

    -

      -
    • 123,120 km/h (BTS 0 m from road)
    • -
    • 124,320 km/h (100 m from road)
    • -
    • 128,160 km/h (200 m)
    • -
    • 135,600 km/h (300 m)
    • -
    - -

    You can assume, that "c" segment is 100 m (or 0 if you count in memory - then d = e - f) and the inaccuracy of the measured -velocity is 5 km/h. -

    - -

    In Nokia 2110i/2140 this test looks like follows: - -

    - - - - - - -
    -When transmitter works - call or Location Update - - - - -
    - -CH  C1 RXl
    -Pwr TS  Ql
    -TA RLT  RA -
    -
    -During standby - - - - -
    - -CH  C1 Rxl
    -Pwr TS  Ql
    -TAXXXXX RA -
    -
    - -

    -

      -
    • CH - channel number
    • -
    • C1 - value of C1
    • -
    • Rxl - RX level (in dBm)
    • -
    • Pwr - TX level or "*" (enabled transmitter) or "S" (SDCCH) or "T" (TCH)
    • -
    • TS - Time Slot
    • -
    • Ql - quality or received signal
    • -
    • TA - Timing Advance
    • -
    • RLT - Radio Link Timeout
    • -
    • RA - maximal number of Random Access retransmission
    • -
    • XXXXX - type of actual channel -
        -
      • ACCESS
      • -
      • CCCH
      • -
      • BCCH
      • -
      • SEARCH
      • -
      • NSPS
      • -
      -
    • -
    - -

    In Nokia 2120 this test looks as follows: - -

    - - - - - - -
    -Digital mode - - - - -
    - -rssi DVC d
    -chan  l  a
    -S   BB  TT
    -
    -Analog mode - - - - -
    -rssi  s  d
    -chan  l  a
    -CS-state
    -
    - -

    and in Nokia 2160 is different: - -

    - - - - - - - - - - - - -
    -DCCH mode - - - - -
    -rssi DVC S
    -chan  Pw A
    -CS-state
    -

    -

    -DTCH mode - - - - -
    -rssi   s d
    -chan   l a
    -CS-state
    -

    -

    -ACCH mode - - - - -
    -rssi   D d
    -chan  Pw A
    -CS-state
    -
    -AVCH mode - - - - -
    -rssi DVC S
    -chan   l a
    -CS-state
    -
    - -

    for Nokia 6160 it looks like follows: - -

    - - - - - - - - - - - - -
    -DCCH mode - - - - -
    -rssi DVC S
    -Bchan Pw A
    -CS-state
     
    -

    -

    -DTCH mode - - - - -
    -rssi DVC s
    -Bchan Be l
    -CS-state
     
    -

    -

    -ACCH mode - - - - -
    -rssi D d
    -Bchan Pw A
    -CS-state
     
    -
    -AVCH mode - - - - -
    -rssi s d
    -Bchan l a 
    -CS-state
     
    -
    - -

    -

      -
    • B = current network/frequency

      -

        -
      • a = a-side 800mhz cellular
      • -
      • b = b-side 800mhz cellular
      • -
      • A = A-block (30 mhz) 1900mhz PCS
      • -
      • B = B-block (30 mhz) 1900mhz PCS
      • -
      • C = C-block (30 mhz) 1900mhz PCS
      • -
      • D = D-block (10 mhz) narrowband 1900mhz PCS
      • -
      • E = E-block (10 mhz) narrowband 1900mhz PCS
      • -
      • F = F-block (10 mhz) narrowband 1900mhz PCS
      • -
      -

      -

    • - -
    • Be = Bit Error rate in % (0-16)
    • -
    • TT = last received time alignment value (0-31)
    • -
    • rssi = received signal strength (dBm) (min= -113dBm, max= -51dBm, 2dB steps)
    • -
    • DVC = Digital Verification Color code (1-255, - = not locked)
    • -
    • D = DCC (Digital Color Code) on ACCH (0-3, - = not locked)
    • -
    • s = SAT color (0-2, - = not locked)
    • - -
    • d = data receiving status -

      -

        -
      1. no sync/no data
      2. -
      3. sync/not able to read
      4. -
      5. reading correcting
      6. -
      7. reading no correction
      8. -
      -

      -

    • - -
    • S = slot (1-3)
    • -
    • chan = channel number (0001-1023)
    • - -
    • Pw = Max access power -

      -

        -
      • DCCH: MS-ACC-PWR (0-10, - = not locked)
      • -
      • ACCH: CMAC (0-7, - = not locked)
      • -
      -

      -

    • - -
    • l = Tx level (0-10, - = TxOff)
    • -
    • a = audio state (0=off, 1=on)
    • - -
    • CS-state = Cellular State -

      -

        -
      • DCCH: SCAN-LOCK : Scanning and locking of DCCH
      • -
      • DCCH: DCCH-SEL  : DCCH selection
      • -
      • DCCH: CAMPING   : Camping
      • -
      • DCCH: REGISTR   : Registration proceeding
      • -
      • DCCH: WAIT-ORDER: Waiting for order
      • -
      • DCCH: ORIGINAT  : Origination proceeding
      • -
      • DCCH: RSELECT   : Reselection
      • -
      • DCCH: ORIG-SMS  : Sending SMS proceeding
      • -
      • DCCH: TERM-SMS  : Receiving SMS proceeding
      • -
      • DTCH: TCH       : Confirm traffic channel
      • -
      • ATCH or DTCH: CONVERSAT : Conversation
      • -
      • ACCH: OOR       : Out of range
      • -
      • ACCH: SCAN-PDCH : Scan primary dedicated control channels
      • -
      • ACCH: SCAN-SDCH : Scan secondary dedicated control channels
      • -
      • ACCH: SCAN-PCH  : Scan paging channels
      • -
      • ACCH: IDLE      : Idle
      • -
      • ACCH: ACCESS    : Access
      • -
      • ACCH: VCH      : Confirm voice channel
      • -
      -
    • -
    - -

    This test in Nokia 6185/6188 is, of course ;-), different: - -

    - - - - - - - - - - - - - - - - - - - -
    -CDMA control - - - - -
    - -CSST CHAN SP
    -PPN EC/SO XF
    -LOS XHO FR B
    --Rxx-Txx FER -
    -

    -

    -CDMA traffic - - - - -
    - -CONV 0450 NP
    -8000 2
    -000 0D9 00 0
    --093+006 000
    -
    -

    -

    -AMPS control - - - - -
    - -RSSI S D
    -CHAN P A
    -CSST SID E
    -XTBY MINMAX  -
    -
    -AMPS traffic - - - - -
    - - --095 2 3
    -0273 0 0
    -CONV 16427 0
    -Y -
    -
    CDMAAMPS
    -
      -
    • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • -
    • Chan - Channel
    • -
    • PPN - PseudoNoise offset
    • -
    • EC/SO - Energy per chip per noise
    • -
    • B - Current network/frequency. a,b are A and B 800 MHz AMPS (analog). A-F indicate the digital block in use
    • -
    • Rxx - Receive power in dB
    • -
    • Txx - Transmit power in dB
    • -
    • FER - Frame Error Rate
    • -
    • In CDMA traffic screen you have current used codec too (one from these below): -

        -
      • 8000 - 13 kbit/sec
      • -
      • 0001 - 8 kbit/sec
      • -
      • 0003 - EVRC
      • -
      - -
    -
      -
    • RSSI - Received signal strength
    • -
    • S - Slot (1-3)
    • -
    • D - Digital Colour Code on analog control channel (0-3 or - for not locked)
    • -
    • CHAN - Channel
    • -
    • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • -
    • SID - System ID (Cantel = odd number)
    • -
    • MINMAX: Minimum and Maximum RSSI over last time period ?
    • -
    -
    - -

    Test 2 -
    More information about used cell - -

    - - - - - - -
    - - - - -
     aa b c Bdd 
    - ee f 
    - ggg hh iii
    - H=j mm nn
    -
    - - - - -
    PM RAR Ro BC
    -RelR QLF
    -CRO TO PenT
    -H MAIO HSN
    -
    - -

    -

      -
    • aa - paging mode: - -

      -

        -
      • NO : normal
      • -
      • EX : extended
      • -
      • RO lub SB : paging reorganization
      • -
      -

      -

    • - -
    • -b - RAR (Random Access Retransmission): max amount of transmissions using -RACH channel (Random Access Channel - a phone-BTS -channel used to send a network access request – for example during logging in) -
    • - -
    • -c - if your phone is in roaming, R is displayed (otherwise empty). This information is also shown on the top of the display. -
    • - -
    • -dd - BSIC value for current cell
    • - -
    • -ee - reason of last connection end (this parameter is also present in -test 63 and test 39 -(you will find explanation there – see description of the first parameter)) -
    • - -
    • -f - RXQUAL_FULL (error rate in transmission with DTX disabled -(DTX state can be checked in test 12)): -it determines, how many errors have to be corrected by the phone, for the connection to be possible. Range 0 - 7 (0 – means none, -more than 5 – connection may be interrupted). - -

      - - - -
      RQ value01234567
      Max amount of errors<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
      -

      -

    • - -
    • -

      ggg - Cell reselect offset: range 0 - 63 (this value should be multiplied by 2 dB), 'xxx' -when transmitting. Needed to calculate C2.

    • - -
    • -

      hh - Temporary offset: range 0 - 7 (this value should be multiplied by 10 dB, 70 dB -means infinitely long time), 'xx' when transmitting. Needed to calculate C2.

    • - -
    • -

      iii - Penalty time: range 0 - 31 (it should be multiplied by 20 s), 'xxx' when transmitting. -Needed to calculate C2.

    • - -
    • -

      j - information about frequency hopping: - -

      -

        -
      • 0 - not used (single frequency used – so called RF (Radio Frequency))
      • -
      • 1 - used (different RF (Radio Frequencies) used)
      • -
      -

      -

    • - -
    • -

      mm - MAIO (Mobile Allocation Index Offset). -Range 0 - 63, 'xx' when j=0 (when frequency hopping is disabled – you can check -this in test 12)

    • - -
    • -

      nn - HSN (Hopping Sequence Number).Range 0 - 63, 'xx' when j=0 (when -frequency hopping is disabled – you can check -this in test 12) -

    • -
    - -

    In some phones (for example, Nokia 8810 or Nokia 5110 with older firmware) -you will see parameters in two first lines only... - -

    In Nokia 3110 this test looks as follows: - -

    - - - - - - -
    - - - - -
    aaabbbccccddd
    -aaabbbccccddd
    -aaabbbccccddd
    -w           z
    -
    - - - - -
    S CH C1 rx C2
    -1 CH C1 rx C2
    -2 CH C1 rx C2
    -S    1N 2N  B
    -
    - -

    Description of the parameters can be found in menu test 3 -(in this model cccc parameters are always preceded by minus). - -

    This test looks similiar in Nokia 2110i/2140 (description is also in -test 3): - -

    - - - - - - -
    - - - - -
    -aaabbbcccc
    -aaabbbcccc
    -aaabbbcccc -
    -
    - - - - -
    -Serv cell 
    -1. neighb
    -2. neighb -
    -
    - -

    In Nokia 2120 this test looks as follows: - -

    - - - - - -
    - - - - -
    -ENCR  CIPH
    -DTX  XSTBY
    -CS-state
    -
    - -

    -

      -
    • ENCR = when message encryption is on
    • -
    • CIPH = when Ciphering is on
    • -
    • DTX = when DTX is on
    • -
    • XSTBY= when enabled standby is on
    • -
    • CS-state = see previous parameter for details
    • - -
    - -

    and in Nokia 2160 is different: - -

    - - - - - - - - - - - - -
    -DCCH mode - - - - -
    -mode   DTX
    -ENCR  CIPH
    -d    Be TA
    -

    -

    -DTCH mode - - - - -
    - -mode   DTX
    -ENCR  CIPH
    -d    Be TA -
    -

    -

    -ACCH mode - - - - -
    - -mode
    -XSTBY
    -       SID -
    -
    -AVCH mode - - - - -
    -mode
     
    -       SAT -
    -
    -
    - -

    and here is for Nokia 6160: - -

    - - - - - - - - - - - - -
    -DCCH mode - - - - -
    -mode M C
    -FB E SP pc
    -net SID..
      -
    -

    -

    -DTCH mode - - - - -
    -mode DTX
    -ENCR CIPR 
    -d a TA S
    -CODEC... -
    -

    -

    -ACCH mode - - - - -
    -mode
    -XSTBY
    - SID      
      -
    -
    -AVCH mode - - - - -
    -mode
     
    - SAT      
      -
    -
    -
    - -

    -

      -
    • mode = DCCH, DTCH, ACCH, AVCH
    • -
    • SID = system ID [0-32767, - = not locked]
    • - -
    • DCCH mode -

      -

        -
      • M = maximum paging frame class supported by network (1-8)
      • -
      • C = current PFC (Paging Frame Class) (1-8)
      • -
      • FB = number of F-BCCH slots
      • -
      • E = number of E-BCCH slots
      • -
      • SP = number of SPACH slots
      • -
      • pc = PCH subchannel
      • -
      • net = supported network types, bit map (1=suported, 0=not, C=current): -first bit for Public, second for Private, third for Residential
      • -
      -

      -

    • - -
    • DTCH mode -

      -

        -
      • DTX = shown when DTX is on
      • -
      • ENCR = shown when message encryption is on
      • -
      • CIPH or CIPR = shown when voice ciphering is on
      • -
      • d = data receiving status (0=no sync, 1=sync)
      • -
      • Be = Bit Error rate in % (0-16)
      • -
      • TA = current time alignment (0-30)
      • -
      • a = audio state (0=off, 1=on)
      • -
      • CODEC... = current codec:

        -

          -
        • -EFR- = IS-136A ACELP coder
        • -
        - -
      -

      -

    • - -
    • ACCH mode -

      -

        -
      • XSTBY = shown when extended standby is on
      • -
      -

      -

    • - -
    • AVCH mode -

      -

        -
      • SAT = SAT validity as measured by DSP (0-32767)
      • -
      -

      -

    • - -
    - -

    and for Nokia 6185/6188: - -

    - - - - - - - - - - - - - -
    -CDMA control - - - - -
    - -PN1
    -ECK         

      -

    -

    -

    -CDMA traffic - - - - -
    - -PN1 PN3 PN5 
    -ECK ECK ECK
    -PN2 PN4 PN6
    -ECK ECK ECK -
    -

    -

    -AMPS control - - - - -
    - -X F S N N C
    -SLEEP EMC
    -SCC STC M
    -RSSCPLCC CAL -
    -
    -AMPS traffic - - - - -
    - -2 2 1 0 4 1
    -00015F927B13
    -0029B 0A0 2
    -140 372 0000
    -
    -
    CDMA -

    -

      -
    • PNx: CDMA PN offsets handoff canidate listing. Shows only the current offset while idling. -Shows 1 to 6 additional choices during traffic.
    • -
    -
    - -

    Test 3 -
    Information about current and neighbor cells - -

    - - - - - - -
    - - - - -
    aaabbbcccddd
    -aaabbbcccddd
    -aaabbbcccddd
    -   ef gh
    -
    - - - - -
    SCH C1 rx C2
    -1CH C1 rx C2
    -2CH C1 rx C2
    -    1N 2N
    -
    - -

    Meaning of these lines: - -

    -

      -
    1. information about current cell
    2. -
    3. 1st neighbor cell
    4. -
    5. 2nd neighbor cell
    6. -
    7. e,f concern 1st neighbor cell, g,h concern 2nd neighbor cell
    8. -
    - -

    -

      -
    • -aaa - CH (channel): number of channel used for communication with cell (decimal)
    • - -
    • -bbb - C1 values displayed only in standby mode. In active mode (ie. during connection) -letter B and BSIC for current cell are displayed. -
    • - -
    • ccc - RX: -minus is not shown if <=-100. Lets us calculate RXLev parameter value: - -

      - - - - - - - -
      RX (from)RX (up to)RXLev
      less than-110 dBm0
      -110 dBm-109 dBm1
      -109 dBm-108 dBm2
      ......... -
      -49 dBm-48 dBm62
      -48 dBmmore63
      -

      -

    • - -
    • -ddd - C2 parameter
    • - -
    • -e,g - contains F, if current cell is located on a restricted area (otherwise empty)
    • - -
    • -f,h: - -

      -

        -
      • -B means a cell in test phase (your phone can use barred cells – this can be enabled in -test 19)
      • -
      • N - a cell given for normal use
      • -
      • L - means low level
      • -
      • otherwise empty
      • -
      -

      -

    • - -
    - - - - - - - -
    If you want to see, if actual used cell is barred or not, see on -test 19 (it depends on setting in that test)
    - -

    Sometimes phone shows, that both C1 and -C2 for channel are equal -99 -- it means probably, that it wouldn't be able to log into it... - -

    In Nokia 3110 this test looks like test 4. - -

    It looks similiar in Nokia 2110i/2140 (desciption is in -test 4 too): - -

    - - - - - - -
    - - - - -
    -aaabbbcccc
    -aaabbbcccc
    -aaabbbcccc -
    -
    - - - - -
    -3. neighb 
    -4. neighb
    -5. neighb -
    -
    - -

    In Nokia 2120 this test looks like test 4 in Nokia 2160. - -

    In Nokia 2160 this test looks different (is displayed -in DCCH mode only): - -

    - - - -
    - - - - -
    -RS SS SI b
    -NA ND
      -
    -
    - -

    and here is for Nokia 6160: - -

    - - - -
    - - - - -
    -RS SS SI b
    -NA ND
    -MA MD MO
      -
    -
    - -

    -

      -
    • RS = minimum Received signal Strength required to access cell (0-31, where 0=-113 dBm and 31=-51 dBm)
    • -
    • SS = minimum signal Strength Sufficient for candidate of reselection (0-31, where 0=-113 dBm and 31=-51 dBm)
    • -
    • SI = Scan Interval between consecutive strength measurements in hyperframes (1-16)
    • -
    • b = access burst size (0=normal, 1=abbreviated RACH)
    • -
    • NA = Number of Analog neighbors (0-24)
    • -
    • ND = Number of Digital neighbors (0-24)
    • -
    - -

    and for Nokia 6185/6188: - -

    - - - - -
    -OWNNUMBER
    -ESN-00000000
    -ESN-HEX
    -SL P MD PC -
    - -

      -
    • OWNNUMBER - phone number
    • -
    • ESN - Electronic Serial Number
    • -
    • MD - [AD] changes to [DI] at 800 CDMA
    • -
    - -

    Test 4 -
    Information about neighbor cells - -

    - - - - - - -
    - - - - -
    aaabbbcccddd
    -aaabbbcccddd
    -aaabbbcccddd
    -  ef gh ij
    -
    - - - - -
    3CH C1 rx C2
    -4CH C1 rx C2
    -5CH C1 rx C2
    -  3N 4N 5N
    -
    - -

    Meaning of the lines: -

      -
    1. 3rd neighbor cell
    2. -
    3. 4th neighbor cell
    4. -
    5. 5th neighbor cell
    6. -
    7. e,f concern 3rd neighbor cell, g,h 4th neighbor cell, i,j 5th neighbor cell
    8. -
    - -

    Meaning of the letters is the same as in test 3 (i is the same as e, j is the same as f) - -

    Sometimes phone shows, that both C1 and -C2 for channel are equal -99 -- it means probably, that it wouldn't be able to log into it... - -

    In Nokia 3110 this test looks like test 5. - -

    It looks similiar in Nokia 2110i/2140 (description is in -test 5 too): - -

    - - - - - - -
    - - - - -
    -aaabbbcccc
    -aaabbbcccc
    -aaabbbcccc -
    -
    - - - - -
    -6. neighb 
    -7. neighb
    -8. neighb -
    -
    - -

    In Nokia 2160 this test looks different: - -

    - - - - -
    - - - - -
    -bVo mod bs
    -Tbat1 Tb2
    -Wpwm FCmAh
    -
    -
    - -

    -

      -
    • bVo = battery voltage
    • -
    • mod = charging mode - -

      -

        -
      • FAS = Fast charging
      • -
      • COL = Cold battery charging
      • -
      • MAI = Maintenance charging
      • -
      • ERR = wrong charger or battery not OK
      • -
      • LIC = LiION battery charging
      • -
      • TXO = charging, transmitter active (connection in progress)
      • -
      • *** = charger disconnected
      • -
      -

      -

    • - -
    • bs = battery is full or reason for fast charge termination - -

      -

        -
      • TI = max. charge Time elapsed
      • -
      • DV = dV/peak value detected (full)
      • -
      • BV = Battery voltage max limit
      • -
      • BT = Battery temp max limit (overheat)
      • -
      • ** = battery is not full
      • -
      -

      -

    • - -
    • Tbat1 = battery temp. a/d reading (subtracted from 1023)
    • -
    • Tb2 = battery temp. in C (not implemented)
    • -
    • Wpwm = PWM charge control output (000-250)
    • -
    • FCmAh = mAh rating of charge given to the battery
    • -
    - - -

    In Nokia 2120 this test looks like follows - -

    - - - - -
    - - - - -
    -ChargV:NNN
    -ST hex des
    -B:LLLL KKK
    -
    - -

    but it was not implemented. - -

    In Nokia 6160 this test looks like follows - -

    - - - - -
    - - - - -
    -SID #####
    -NN NT NR
    -Alphatag  
      -
    -
    - -

    -

      -
    • SID = System Identification Number (0 to 32767, odd for 'A' carriers, even for 'B' carriers, - = not locked)
    • -
    • Alphatag.. = textual end-user display of current system
    • -
    - -

    and for Nokia 6185/6188: - -

    - - - - -
    -CSST CHAN
    -A B
    -SID
    -SD IT TM CAP -
    - -

      -
    • CSST - Cellular state: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • -
    • CHAN - Channel
    • -
    • B - Network Band and Frequency (lowercase a,b = 800 MHz band; uppercase A,B = 1900 MHz band)
    • -
    • SID - System ID:

      -

        -
      • [17500] - Clearnet PCS
      • -
      • [16422] - BC Tel Mobility
      • -
      • [16xxx odd number] - Cantel AT&T
      • -
      -

    • -
    - -

    Test 5 -
    Information about neighbor cells - -

    - - - - - - -
    - - - - -
    aaabbbcccddd
    -aaabbbcccddd
    -aaabbbcccddd
    -  ef gh ij
    -
    - - - - -
    6CH C1 rx C2
    -7CH C1 rx C2
    -8CH C1 rx C2
    -  6N 7N 8N
    -
    - -

    Meaning of the lines: -

      -
    1. 6th neighbor cell
    2. -
    3. 7th neighbor cell
    4. -
    5. 8th neighbor cell
    6. -
    7. e,f concern 6th neighbor cell, g,h 7th neighbor cell, i,j 8th neighbor cell
    8. -
    - -

    Meaning of the letters is the same as in test 3 (i is the same as e, j is the same as f) - -

    Sometimes phone shows, that both C1 and -C2 for channel are equal -99 -- it means probably, that it wouldn't be able to log into it... - -

    In Nokia 3110 this test looks like test 6. - -

    This test allows you to recognize, how many neighbor cells can "observe" phone -in the same time. Examples: in Nokia 6150 you can see info in all rows (8 cells), -in Nokia 5110/3310/6210 only in first row (6 cells). - -

    In Nokia 3310/6210 parameters "ef" are never displayed (you can see "xx" only)... -These models during standby mode can see only 6 cells, during call 8... - -

    In Nokia 2160 this test looks different: - -

    - - - -
    - - - - -
    -ROM SW
    -EPROM SW
    -Prod type 
    -
    - -

    -

      -
    • ROM SW = ROM software version, e.g. V 65.08
    • -
    • EPROM SW = EPROM (flash) version, e.g. V 1.45
    • -
    • Prod type = product type, e.g. NHC-4NE
    • -
    - -

    And here is for Nokia 6160: - -

    - - - -
    - - - - -
    -S bandorde
    -NC NP IRC
    -RSCO RSLO
      -
    -
    - -

    -

      -
    • S = system indicator:

      -

        -
      • H = hometype system
      • -
      • P = partner roam
      • -
      • F = preffered roam
      • -
      • N = normal roam
      • -
      • X = no service
      • -
      • a, b, A, B, C, D, E, F = current band while scanning for a control channel -(see next parameter for details)
      • -
      -

    • - -
    • bandorde = network search order:

      -

        -
      • a = a-side 800mhz cellular
      • -
      • b = b-side 800mhz cellular
      • -
      • A = A-block (30 mhz) 1900mhz PCS
      • -
      • B = B-block (30 mhz) 1900mhz PCS
      • -
      • C = C-block (30 mhz) 1900mhz PCS
      • -
      • D = D-block (10 mhz) narrowband 1900mhz PCS
      • -
      • E = E-block (10 mhz) narrowband 1900mhz PCS
      • -
      • F = F-block (10 mhz) narrowband 1900mhz PCS
      • -
      -

    • - -
    • NC = Number of Cellular = number of probability blocks to scan in cellular bands
    • -
    • NP = Number of PCS - number of sub blocks to scan in PCS bands
    • -
    • IRC = IR Control:

      -

        -
      • 1 = only systems with home SID or SOC are accepted
      • -
      • 0 = any system not listed as forbidden is accepted
      • -

    • - -
    • RSCO = Rescan Count - rescan time in hyperframes
    • -
    • RSLO = Rescan Loop - defines when all the bands in bandorder are to be scanned
    • - -
    - -

    and for Nokia 6185/6188: - -

    - - - - -
    -1YNC_OK_097B
    -SYNC_FAI4CC1
    -FOCC_WOR587C
    -WORD_OK_3E65
    -
    - -

    Test 6 -
    Information about preferred and restricted networks of the inserted SIM card. - -

    - - - - - - - -
    - - - - -
    aaabb  aaabb
    -aaabb  aaabb
    -aaabb  aaabb
    -aaabb  aaabb
    -
    - - - - -
    LReg   1_For
    -1_Pre  2_For
    -2_Pre  3_For
    -3_Pre  4_For
    - -

    In Nokia 6250: - -

    - - - - -
    LReg   1?For
    -1?Pre  2?For
    -2?Pre  3?For
    -3?Pre  4?For
    - -

    - -

    Meaning of the individual lines: - -

    - - - - - -
    last registered network1st forbidden network
    1st preferred network2nd forbidden network
    2nd preferred network3rd forbidden network
    3rd preferred network4rd forbidden network
    - -

    -

      -
    • -last registered network - you used it last time. When you're in home country, it can be your home network -(you pay them for your calls - if it is, after choosing it manually (in Nokia 5110 - Menu 4-2-4) phone displays -"Home network selected"). 00000, when phone wasn't registered in any network -after enabling.
    • - -
    • -preferred network - network, to which your SIM card was logged (when it was in its range) – for example in roaming. -
    • - -
    • -forbidden network – your SIM card was in range of that network, but wasn’t allowed to log in... -
    • -
    - -
      -
    • -

      aaa - MCC (Mobile Country Code) -- code of the network home country (260 for Poland). Decimal value. -

    • - -
    • -

      bb - MNC (Mobile Network Code) -- network code (different for networks with the same MCC). - -

      Generally values here are decimal. Sometimes are exceptions (when and why ?) -and you can find hexadecimal value here: if you will convert it into -decimal and result treat as hexadecimal value (convert it into decimal value -again), you will have decimal value of this parameter (for example, -3F hex=63 dec; 63 hex=99 dec). More about it in the question 23. - -

      When you use phone working in PCS 1900 -system (for example, Nokia 6190), this number can be 3-digit long. It's decimal (always ?). -If it consist of two digits, you will see "F" instead of last (for example, -you will see "30237F" for 302-37 network)

    • - - -
    - -

    What are these lists stored on SIM card for? Because: - -

    -

      -
    1. -the phone doesn’t have to waste its power while trying to log to the network, which is forbidden for SIM card -(it is checked only once and then stored, so the phone doesn’t have to repeat this procedure anymore) -
    2. - -
    3. -when you have automatic network selection enabled, your phone in first turn searches for networks it was -previously using ("preferred"). -
    4. -
    - -

    -The list of "preferred" and "forbidden" networks is written by the phone -(Nokia saves last chosen networks). Preffered networks can be also edited – for example in Motorola and Alcatel phones (not in Nokia). -Sometimes it is done by -the operator (he writes preferred and forbidden networks to the SIM card before selling it (it's known, that you cannot -log to competitive network – it can be stored in card programming phase). Both these lists can be changed using a -Czech program called SIMedit (www.compelson.cz/simedit.htm)... - -

    URL http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html -contains list of the MCC and MNC parameters for different networks. - -

    - - - - - - -
    Using this menu you can check (probably – NOT ALWAYS!), where SIM card was used lately (in your country, abroad) -and where its owner was traveling -
    - -

    In Nokia 2160 use this test, when you want to "disable" NetMonitor tests. - -

    And here is for Nokia 6160: - -

    - - - -
    - - - - -
    -PSC PSD   
    -FSC FSD
    -XSC XSD
      -
    -
    - -

    Intelligent Roaming Database (IRDB) statistics: - -

    This lists the total count of SOCs and SIDs in each category. -The database has a total memory limit of 82 entries, -which may be distributed amongst these categories: - -

    -PSC = number of Partner SOCs
    -PSD = number of Partner SIDs
    -FSC = number of Preffered SOCs
    -FSD = number of Preffered SIDs
    -XSC = number of Forbidden SOCs
    -XSD = number of Forbidden SIDs
    - -

    Partner SOC/SID = treated like the home system by the phone -
    Preffered SOC/SID = preferred over neutral (undefined) systems when available -
    Forbidden SOC/SID = rejected by the phone as service providers - -

    and for Nokia 6185/6188: - -

    - - - -
    CDMA
    - - - - -
    -SID NID
    -BASE ID
    -P_REV
    -MIN_P_REV    -
    -
    AMPS
    - - - - -
    -0ORD_COR0CE3
    -WORD_FAI0E76
    -CTRL_FIL787D
    -SAT_V_OK0004
    -
    -

    CDMA

    -

      -
    • SID - System ID:

      -

        -
      • [17500] - Clearnet PCS
      • -
      • [16422] - BCTel Mobility
      • -
      • [16xxx odd number] - Cantel AT&T
      • -
      • [00000]: Second SID assignment
      • -
      -
    -

    Are lines 3,4 CDMA specs ? [ANSI] for 1900 MHz, [TSB74] for 800 MHz CDMA -

    - -

    Test 7 -
    Information about current (recently monitored) cell - -

    - - - - - - -
    - - - - -
    E A H C I BR
    -a b c d e fg
    -ECSC 2Ter MB
    -h    i    j
    -
    - - - - -
    Serving Cell
    -system info
    -bits
    -
    - -

    -

      -
    • a - 1, if emergency calls (112) are possible
    • -
    • b - 1, if IMSI attach and IMSI detach are possible
    • -
    • c - 1, if the cell supports HR channels
    • -
    • d - 1, if C2 values are broadcasted
    • -
    • e - 1, system information 7 and 8 are broadcasted
    • -
    • f - 1, if the cell supports cell broadcasting (CBCH channel)
    • -
    • g - 1, if cell re-establishment is possible
    • -
    - -

    Last two lines are present only in dual phones (GSM 900/1800 – for example Nokia 6150 and 3210): - -

    -

      -
    • -h - 1 in standby mode, if ECSC (Early Classmark) sending is supported. During a call "x" is displayed. -
    • - -
    • -i - 1 in standby mode, if 2-Ter messages are supported. During call "x" is displayed -
    • - -
    • -j - information (if supported) which cells from both frequencies bands (900 and 1800 MHz) are shown -(MULTIBAND_REPORTING parameter value). Description from -Phase2+ ETSI GSM 05.08 version 5.4.0, section 8.4.3 "Additional cell reporting requirements for multi band MS" specification: - -

      -

        -
      • -0 - 6 strongest cells (with known and allowed NCC from -BSIC), regardless their frequency band (900 or 1800 MHz)
      • - -
      • -1 - strongest cell (with known and allowed -NCC from BSIC) in each frequency band on -BA list, except for frequency band of the current cell. Remaining positions should be used to show cells in frequency band -of the current cell. If there are free positions left, further strongest and recognized cells from other bands are shown (their -frequencies bands are not important). -
      • - -
      • -2 - like in 1, but two strongest cells are shown first (with known and allowed NCC from -BSIC) in each band... -
      • - -
      • -3 - three strongest cells are shown first...
      • -
      -
    • - -
    - -

    If your phone wasn’t logged to any network, some default values are shown. - -

    In Nokia 6160 this test is different: - -

    - - - - -
    -User
    -interface 
    -display
      -
    - -

    and here is for Nokia 6185/6188: - -

    - - - -
    CDMA
    - - - - -
    -CSST         
    -DATE
    -TIME
      -
    -
    AMPS
    - - - - -
    -1AT_V_FA0000
    -FVC_S_FA0000
    -WFLG_INT7046
    -NORMALRXFE25
    -
    -

    CDMA

    -

      -
    • CSST - Cellular state: [IDLE], [CONVE], [PLIOS], [TIME], [SYNC], [RELE], [PAGE], [TRFIN], [W_OR]
    • -
    • DATE - CDMA Network date
    • -
    • TIME - CDMA Network time
    • -
    -
    - - -
    Back to the top
    - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    -
    - -

    Marcin Wiacek (WWW) -
    Last modification: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (3/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (3/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    12. Description of the individual tests
    +


    + +

    Existence of the individual test in your phone depends on: + +

    +

      +
    • phone model: generally, never and more complicated models (with more functions and options) have more tests (for example, +Nokia 9110 has more tests than 5110, 7110 more than 9110). There is one (only ?) exception: less complicated Nokia 5110 +has bigger NetMonitor than 6110 (and that’s why I think that this model is better, even though it doesn’t have some functions).
    • + +
    • software version - usually the newer version, the more options it has (software can be upgraded in service and its +version can be checked in most models with *#0000# code, in Nokia 6130 with *#9999# and in +3110 with *#3110#) – for instance in Nokia 5110 in test 89 bbbbbb +parameter is shown only from firmware 5.07. Firmware upgrade has also additional advantage: newer versions don’t +contain some bugs (also in NetMonitor).
    • + +
    • who uploaded firmware to the phone: it is usually written in C (and then translated (compiled) to the code of phone’s +microprocessor). According to my own private theory existence (and running) of an individual tests depends on some +constants set (or not) in the source code (programmers :-) surely understand, what I’m trying to write). The best example +for this can be test 38: according to the some English documentation +it doesn't exist in phones to be sold, because DEV_FT_MEMORY_DUMP_IN_USE constant in file ftd_conf.h +(one of the firmware source code files) wasn't set before compiling. I think, that the same applies to the help screens – +their presence doesn’t depend on firmware version but on where the phone was purchased (where it comes from – +where was its firmware uploaded). How to solve this problem? Unfortunatelly, you can only download firmware again (compiled +from source with set constants). + +

      Aha, I’m also not quite sure, whether DSP tests +(test 70, 10-73, +10-74, +10-76 (except for ab parameter), 10-77, +10-78 +and 10-79) don’t have to be enabled this way (or whether their existence +(or not) depends on the network). +

    • +
    + +

    Help screens for tests are written with bold font, +concrete (example) values in tests with italic (I put them there, where I didn't have more details about test). + +

    +

    + + +

    Back to the top + + +

    Test 1 +
    Information about communication with cell + +

    + + + + + + +
    + + + + +
    abbb ccc ddd
    + e ff g mmmm
    + nnn     ppp
    +    oooo
    +
    + + + + +
    CH RxL TxPwr
    +TS TA RQ RLT
    + C1     C2
    +    CHT
    +
    + +

    +

      +
    • +a - contains H, if frequency hopping is enabled (otherwise empty). This information +can also be found in test 11 +and test 12.
    • + +
    • +bbb - CH (channel): number of the channel used in communication with cell (decimal). If +frequency hopping is enabled, this number changes when the display gets refreshed. +This parameter determines frequencies used in communication with BTS: + +

      + + + + + + + + + + + + + + + + + + + + +
      carrier (middle) frequency +of the transmission channel (MHz) +
      GSM 900
      GSM 1800
      transmission phone-BTS
      890 + CH * 0,2
      1710 + (CH - 511) * 0,2
      transmission BTS-phone
      935 + CH * 0,2
      1805 + (CH - 511) * 0,2
      + +

      +and informs, whether phone use cell working in GSM 900 or 1800 MHz +(I write more about channel numbers in test 17). + +

      + +

    • + +
    • +

      ccc - RX: +minus is not show if <=-100. This parameter affects following functions: + +

      +

        +
      • +if all channels’ signal is weaker than -110 dBm, the phone doesn’t monitor channels.
      • + +
      • +if the phone loses signal of your home network, it tries to monitor next available networks and if you don't have access to them, +you’ll see a network presence symbol and no signal strength bars (but you can make emergency calls) +
      • + +
      • + if some other network has a very strong signal (say -85 dBm) and your home network is very weak on that area (for example, +-100 dBm), your phone can have big problems with logging into it (you will have to use +test 17 to manually force the phone to use proper channel). +
      • + +
      • +RXLev parameter value: + +

        + + + + + + + + +
        RX (from)RX (up to)RXLev
        less than-110 dBm0
        -110 dBm-109 dBm1
        -109 dBm-108 dBm2
        .........
        -49 dBm-48 dBm62
        -48 dBmmorej63
        +

        +

      • + +
      • +signal strength indicator value on the left side of the display (approximately): + +

        + + + + + + + +
        RX (from - to)amount of bars
        from -105 to -100 dBm0
        from -100 to -95 dBm1
        from -95 to -90 dBm2
        from -90 to -85 dBm3
        more than -85 dBm4
        +

        +

      +
    • + + +
    • +

      ddd - TX: level of the transmitted signal (only during connection). If the phone’s transmitter is active, +there is an * (asterisk) before the value. The lower value, the higher power level (also the one received by your head!) and +energy consumption. + +

      + + + + + +
      TX (GSM 900)161514131211109
      TX (GSM 1800)98765432
      dBm11121314151617181920212223242526
      Watts0,0120,0160,020,0250,0320,040,050,0630,0790,10,1250,1580,20,2510,3160,398
      + +

      and continue... + +

      + + + + + +
      TX (GSM 900)8765432-0
      TX (GSM 1800)10313029
      dBm2728293031323334353637383940414243
      Watts0,5010,6310,79411,261,5822,513,163,9856,318101215,820
      + +

      +Watt = 10(dBm/10)*0,001 +
      dBm = 10*log(Watt/0,001) + +

      There are following classes describing max phone transmission power: + +

      + + + + + + + + +
      GSM 900
      GSM 1800
      +
      20 W (not in use) +
      8 W (car/mobile phone) +
      5 W (car/mobile phone) +
      2 W (hand phone) +
      0,8 (hand phone)
      +
      +
      1 W (hand phone) +
      0,25 W (hand phone)
      +
      + +

      Min. phone transmission power in GSM 900 is 0,02 W and in GSM 1800 is 0,0025 W (4 dBm). + +

      Max BTS power level can be found in their description. + +

    • + +
    • +

      e - This TS indicator shows number of the used time slot +(0..7 for FR (EFR) or 0..15 for HR). +For phones with HSCSD (like Nokia 6210) use also test 8 for it. +

    • + +
    • +

      ff - TA (Timing Advance): BTS informs the phone, +when it should start transmission (so that it reaches BTS in time). This information is shown +by this indicator. It lets us calculate approximate distance between phone and BTS, which is +a value between TA*550 m and (TA+1)*550 m (remember, that sometimes signal is refracted and +distance evaluated with this parameter can be wrong). +This parameter is updated during communication with network (sending/receiving +SMSes, calling, requesting services), for example when using SDCC and TFR +channels. It ranges from 0 to 63 (up to 35 km) with FR and +EFR channels. HR channels offer theoretically (for example +with a car antenna (higher transmitting power) and a flat terrain) twice this range (up to 70 km) and TA contains value up to 128 +(English descriptions which I use don’t say a word about it - so, it's possible, +that for values bigger than 64 phone (?) decreases 64 from it and displays such value in this menu). + +

      Tip: you can use ALS (Alternative Line Service) function or +try to call for "*" number, when you want to refresh it...

      + +

    • + +
    • +

      g - RXQUAL_SUB (rate of transmission errors with DTX active +(DTX state can be checked in test 12)): +it determines, how many errors during connection have to be corrected by the phone for the call to be possible. Range 0 - 7 +(0 – means no errors; more than 5 – connection may be interrupted). The higher it is, the worse quality you have... + +

      + + + +
      RQ value01234567
      Max error amount<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
      +

      +

    • + +
    • +

      mmmm - RLT (Radio Link Timeout): if it is negative, 0 is shown. Max value of this parameter is 64. +If the phone uses a channel different than TCH or SDCC, xx is +displayed +

    • + +
    • nnn - C1 parameter

    • + +
    • +

      ppp - C2 parameter. If network supports only GSM Phase 1, +C1 value is displayed here. +

    • + +
    • +

      oooo - type of channel currently used by the phone (visit +www.pins.co.uk/upages/stratfordc/ +to find C programs containing algorithms used to encode different channels). +With HR channels phone even show, if first or second +part of TS is used (subchannel 0 or 1 is written): + +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      AGCH(Access Grant Channel) - a channel used by +BTS to inform the phone about what channel it should use (it is a +BTS answer to RACH) – it assigns the phone to +SDCCH
      BCCH(Broadcast Control Channel) +- a channel in direction BTS-phone, containing precise information about network +(needed for identification and access) – for example + +
        +
      • how often the phone should inform network about its location (T3212 counter value – more detailed description in +test 10)
      • +
      • whether frequency hopping is supported by the network
      • +
      • CELL_RESELECT_HYSTERESIS parameter (see C2 parameter description)
      • +
      • CELL_BARRED parameter (which informs, whether this cell is in test phase or is available for public use – but the phone +can ignore this and use test cells too - see test 19)
      • +
      +
      THR0TCH HR subchannel 0
      THR1TCH HR subchannel 1
      TFRTCH FR
      TEFRTCH EFR
      F144TCH FR - data transmission, speed 14.4 kbit/sec.
      F96TCH FR - data transmission, speed 9.6 kbit/sec.
      F72TCH FR - data transmission, speed 7.2 kbit/sec.
      F48TCH FR - data transmission, speed 4.8 kbit/sec.
      F24TCH FR - data transmission, speed 2.4 kbit/sec.
      H480TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 0
      H481TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 1
      H240TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 0
      H241TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 1
      FATCH FR - used only for quick signalization, for example in case of +handovers +
      (FACCH - Fast Associated Control Channel)
      FAH0TCH HR -used only for quick signalization, for example in case of +handovers +
      (FACCH - Fast Associated ControlChannel), subchannel 0
      FAH1TCH HR - used only for quick signalization, for example in case of +handovers +
      (FACCH - Fast Associated Control Channel), subchannel 1
      SDCCSDCCH (Stand-alone Dedicated Control +Channel) +- used for system signalization of: +
        +
      • establishing connection
      • +
      • user verification
      • +
      • Location Update executing
      • +
      • assigning to TCH
      • +
      • sending SMSes
      • +
      +
      CCCH(Common Control Channel ?) - used, when the phone is in standby mode (it doesn’t transmit not receive data)
      CBCH(Cell Broadcast Channel) - +a channel in BTS-phone direction used for cell broadcast (for example in Nokia 5110 it can +be enabled in Menu 2-5 and Menu 4-2-2, in Nokia 6110 in Menu 1-5 and Menu 4-4-2) +
      CCHRCCCH and CBCH joined in one
      SEARthe phone is searching for network
      NSPS(No Serve Power Save) +- the phone is not in range of any network, energy saving has been activated (information, whether your SIM card can stop its +clock in energy saving mode, can be found in test 51)
      +

    • +
    + +

    Interesting thing: In firmware in Nokia 3210 and 3310 there are strings +which shows info about data transmission state +("officialy" these phones don't have this function)... + +

    In Nokia 3110 this test looks similiar: + +

    + + + + + + +
    + + + + +
    abbb cccc ddd
    + e ff g qqrr
    +s Bttuu mmmm
    +w ppp oonnn z
    +
    + + + + +
     CH RxL TxPwr
    +TS TA QPM RAR
    +Ro BsiCLK RLT
    +S C2 CHT C1 B
    +
    + +

    +

      +
    • cccc - in this phone minus is always shown
    • +
    • ooo - hex values
    • +
    • qq - paging mode (see test 2)
    • +
    • rr - RAR (description in test 2)
    • +
    • s - roaming indicator (description in test 2)
    • +
    • tt - BSIC for current cell (see test 2)
    • +
    + +

    Level of received signal (RX) is connected with phone transmission power +(TX): the weaker the former, the stronger the latter (take a look at example indications of 6110 +using SDCC and TFR channels): + +

    + + + + + + +
    RXTX
    from -38 to -49 dBm19
    from -68 to -75 dBm9-14 (0,032 - 0,316 Watt)
    from -79 to -85 dBm7-9 (0,794 - 0,032 Watt)
    from -85 to -93 dBm5-7 (2 - 0,794 Watt)
    + +

    For curious people: some of these data can also be found in Nokia service programs (for example in WinTesla in +"Testing" / "RF Information" menu). + +

    + + + + + +
    Using CCCH or CBCH channel by the phone +(if the cell doesn’t support cell broadcast – you can check this in test 7) depends +on its firmware version and whether cell broadcasting has been enabled (or not) by the user. For example: Nokia 5110 v 5.04 +uses CBCH channel, if you enable this feature in Menu 2-5 or Menu 4-2-2 +(and CCCH channel, if you disable it). I think, that cell broadcast should be disabled when it is not +supported by the network – probably you can save some battery power. It has been corrected in version 5.07 (when CB is +not supported by the network, the phone uses CCCH regardless of "Info service" and +"Cell info display" settings). + +

    Additionally, ccc (RX) parameter can be used to set the direction of your antenna +(especially directional one) much more precisely than when using the indicator on the left side of phone’s display ! +I also have a piece of advice for you: never touch the antenna (in any case, you can check how it affects level of received +signal just by holding it with your fingers) ! + +

    TA parameter can be also used (apart from calculating the distance to BTS) +to measure speed (for example of the care you’re driving). I’m serious! But this can be done only when: + +

      +
    • the road is straight (no bends)
    • +
    • the phone uses only one BTS
    • +
    • BTS must be located near the road
    • +
    + +

    A little bit of mathematics: +
    +
    From Pitagoras’ theorem: + +

    a2 = c2 + e2 +
    b2 = c2 + f2 + +

    So: +
    e = +
    f = + +

    Now d = e - f =- + +

    If you know: + +

    +

      +
    1. +the way traveled by the car (on the drawing: length of "d" segment; it can be calculated form the lengths of "a" and "b" +segments (multiples of 513 m (for simplification) read from TA) and c (described later)) +
    2. + +
    3. +time, in which TA has changed (measured by a stopwatch) +
    4. +
    + +

    you can measure your speed. +
    Inaccuracy of this measure depends on: + +

    +

      +
    • +distance between BTS and road (segment "c") +
    • + +
    • +velocity itself +
    • + +
    • +distance between car and BTS +(with longer distance inaccuracy depends less from "c" segment) +
    • +
    + +

    And here is a concrete example: +
    The original value of TA was 2 and after 15 seconds it has changed to 1. You will get following results: + +

    +

      +
    • 123,120 km/h (BTS 0 m from road)
    • +
    • 124,320 km/h (100 m from road)
    • +
    • 128,160 km/h (200 m)
    • +
    • 135,600 km/h (300 m)
    • +
    + +

    You can assume, that "c" segment is 100 m (or 0 if you count in memory - then d = e - f) and the inaccuracy of the measured +velocity is 5 km/h. +

    + +

    In Nokia 2110i/2140 this test looks like follows: + +

    + + + + + + +
    +When transmitter works - call or Location Update + + + + +
    + +CH  C1 RXl
    +Pwr TS  Ql
    +TA RLT  RA +
    +
    +During standby + + + + +
    + +CH  C1 Rxl
    +Pwr TS  Ql
    +TAXXXXX RA +
    +
    + +

    +

      +
    • CH - channel number
    • +
    • C1 - value of C1
    • +
    • Rxl - RX level (in dBm)
    • +
    • Pwr - TX level or "*" (enabled transmitter) or "S" (SDCCH) or "T" (TCH)
    • +
    • TS - Time Slot
    • +
    • Ql - quality or received signal
    • +
    • TA - Timing Advance
    • +
    • RLT - Radio Link Timeout
    • +
    • RA - maximal number of Random Access retransmission
    • +
    • XXXXX - type of actual channel +
        +
      • ACCESS
      • +
      • CCCH
      • +
      • BCCH
      • +
      • SEARCH
      • +
      • NSPS
      • +
      +
    • +
    + +

    In Nokia 2120 this test looks as follows: + +

    + + + + + + +
    +Digital mode + + + + +
    + +rssi DVC d
    +chan  l  a
    +S   BB  TT
    +
    +Analog mode + + + + +
    +rssi  s  d
    +chan  l  a
    +CS-state
    +
    + +

    and in Nokia 2160 is different: + +

    + + + + + + + + + + + + +
    +DCCH mode + + + + +
    +rssi DVC S
    +chan  Pw A
    +CS-state
    +

    +

    +DTCH mode + + + + +
    +rssi   s d
    +chan   l a
    +CS-state
    +

    +

    +ACCH mode + + + + +
    +rssi   D d
    +chan  Pw A
    +CS-state
    +
    +AVCH mode + + + + +
    +rssi DVC S
    +chan   l a
    +CS-state
    +
    + +

    for Nokia 6160 it looks like follows: + +

    + + + + + + + + + + + + +
    +DCCH mode + + + + +
    +rssi DVC S
    +Bchan Pw A
    +CS-state
     
    +

    +

    +DTCH mode + + + + +
    +rssi DVC s
    +Bchan Be l
    +CS-state
     
    +

    +

    +ACCH mode + + + + +
    +rssi D d
    +Bchan Pw A
    +CS-state
     
    +
    +AVCH mode + + + + +
    +rssi s d
    +Bchan l a 
    +CS-state
     
    +
    + +

    +

      +
    • B = current network/frequency

      +

        +
      • a = a-side 800mhz cellular
      • +
      • b = b-side 800mhz cellular
      • +
      • A = A-block (30 mhz) 1900mhz PCS
      • +
      • B = B-block (30 mhz) 1900mhz PCS
      • +
      • C = C-block (30 mhz) 1900mhz PCS
      • +
      • D = D-block (10 mhz) narrowband 1900mhz PCS
      • +
      • E = E-block (10 mhz) narrowband 1900mhz PCS
      • +
      • F = F-block (10 mhz) narrowband 1900mhz PCS
      • +
      +

      +

    • + +
    • Be = Bit Error rate in % (0-16)
    • +
    • TT = last received time alignment value (0-31)
    • +
    • rssi = received signal strength (dBm) (min= -113dBm, max= -51dBm, 2dB steps)
    • +
    • DVC = Digital Verification Color code (1-255, - = not locked)
    • +
    • D = DCC (Digital Color Code) on ACCH (0-3, - = not locked)
    • +
    • s = SAT color (0-2, - = not locked)
    • + +
    • d = data receiving status +

      +

        +
      1. no sync/no data
      2. +
      3. sync/not able to read
      4. +
      5. reading correcting
      6. +
      7. reading no correction
      8. +
      +

      +

    • + +
    • S = slot (1-3)
    • +
    • chan = channel number (0001-1023)
    • + +
    • Pw = Max access power +

      +

        +
      • DCCH: MS-ACC-PWR (0-10, - = not locked)
      • +
      • ACCH: CMAC (0-7, - = not locked)
      • +
      +

      +

    • + +
    • l = Tx level (0-10, - = TxOff)
    • +
    • a = audio state (0=off, 1=on)
    • + +
    • CS-state = Cellular State +

      +

        +
      • DCCH: SCAN-LOCK : Scanning and locking of DCCH
      • +
      • DCCH: DCCH-SEL  : DCCH selection
      • +
      • DCCH: CAMPING   : Camping
      • +
      • DCCH: REGISTR   : Registration proceeding
      • +
      • DCCH: WAIT-ORDER: Waiting for order
      • +
      • DCCH: ORIGINAT  : Origination proceeding
      • +
      • DCCH: RSELECT   : Reselection
      • +
      • DCCH: ORIG-SMS  : Sending SMS proceeding
      • +
      • DCCH: TERM-SMS  : Receiving SMS proceeding
      • +
      • DTCH: TCH       : Confirm traffic channel
      • +
      • ATCH or DTCH: CONVERSAT : Conversation
      • +
      • ACCH: OOR       : Out of range
      • +
      • ACCH: SCAN-PDCH : Scan primary dedicated control channels
      • +
      • ACCH: SCAN-SDCH : Scan secondary dedicated control channels
      • +
      • ACCH: SCAN-PCH  : Scan paging channels
      • +
      • ACCH: IDLE      : Idle
      • +
      • ACCH: ACCESS    : Access
      • +
      • ACCH: VCH      : Confirm voice channel
      • +
      +
    • +
    + +

    This test in Nokia 6185/6188 is, of course ;-), different: + +

    + + + + + + + + + + + + + + + + + + + +
    +CDMA control + + + + +
    + +CSST CHAN SP
    +PPN EC/SO XF
    +LOS XHO FR B
    +-Rxx-Txx FER +
    +

    +

    +CDMA traffic + + + + +
    + +CONV 0450 NP
    +8000 2
    +000 0D9 00 0
    +-093+006 000
    +
    +

    +

    +AMPS control + + + + +
    + +RSSI S D
    +CHAN P A
    +CSST SID E
    +XTBY MINMAX  +
    +
    +AMPS traffic + + + + +
    + + +-095 2 3
    +0273 0 0
    +CONV 16427 0
    +Y +
    +
    CDMAAMPS
    +
      +
    • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • +
    • Chan - Channel
    • +
    • NP, NC, SC, SP - xC for 800 MHz CDMA, xP for 1900 MHz CDMA.
    • +
    • PPN - PseudoNoise offset
    • +
    • EC/SO - Energy per chip per noise
    • +
    • B - Current network/frequency. a,b are A and B 800 MHz AMPS (analog). A-F indicate the digital block in use
    • +
    • Rxx - Receive power in dB
    • +
    • Txx - Transmit power in dB
    • +
    • FER - Frame Error Rate
    • +
    • In CDMA traffic screen you have current used codec too (one from these below): +

        +
      • 8000 - 13 kbit/sec
      • +
      • 0001 - 8 kbit/sec
      • +
      • 0003 - EVRC
      • +
      + +
    +
      +
    • RSSI - Received signal strength
    • +
    • S - Slot (1-3)
    • +
    • D - Digital Colour Code on analog control channel (0-3 or - for not locked)
    • +
    • CHAN - Channel
    • +
    • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • +
    • SID - System ID (Cantel = odd number)
    • +
    • MINMAX: Minimum and Maximum RSSI over last time period ?
    • +
    +
    + +

    Test 2 +
    More information about used cell + +

    + + + + + + +
    + + + + +
     aa b c Bdd 
    + ee f 
    + ggg hh iii
    + H=j mm nn
    +
    + + + + +
    PM RAR Ro BC
    +RelR QLF
    +CRO TO PenT
    +H MAIO HSN
    +
    + +

    +

      +
    • aa - paging mode: + +

      +

        +
      • NO : normal
      • +
      • EX : extended
      • +
      • RO lub SB : paging reorganization
      • +
      +

      +

    • + +
    • +b - RAR (Random Access Retransmission): max amount of transmissions using +RACH channel (Random Access Channel - a phone-BTS +channel used to send a network access request – for example during logging in) +
    • + +
    • +c - if your phone is in roaming, R is displayed (otherwise empty). This information is also shown on the top of the display. +
    • + +
    • +dd - BSIC value for current cell
    • + +
    • +ee - reason of last connection end (this parameter is also present in +test 63 and test 39 +(you will find explanation there – see description of the first parameter)) +
    • + +
    • +f - RXQUAL_FULL (error rate in transmission with DTX disabled +(DTX state can be checked in test 12)): +it determines, how many errors have to be corrected by the phone, for the connection to be possible. Range 0 - 7 (0 – means none, +more than 5 – connection may be interrupted). + +

      + + + +
      RQ value01234567
      Max amount of errors<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
      +

      +

    • + +
    • +

      ggg - Cell reselect offset: range 0 - 63 (this value should be multiplied by 2 dB), 'xxx' +when transmitting. Needed to calculate C2.

    • + +
    • +

      hh - Temporary offset: range 0 - 7 (this value should be multiplied by 10 dB, 70 dB +means infinitely long time), 'xx' when transmitting. Needed to calculate C2.

    • + +
    • +

      iii - Penalty time: range 0 - 31 (it should be multiplied by 20 s), 'xxx' when transmitting. +Needed to calculate C2.

    • + +
    • +

      j - information about frequency hopping: + +

      +

        +
      • 0 - not used (single frequency used – so called RF (Radio Frequency))
      • +
      • 1 - used (different RF (Radio Frequencies) used)
      • +
      +

      +

    • + +
    • +

      mm - MAIO (Mobile Allocation Index Offset). +Range 0 - 63, 'xx' when j=0 (when frequency hopping is disabled – you can check +this in test 12)

    • + +
    • +

      nn - HSN (Hopping Sequence Number).Range 0 - 63, 'xx' when j=0 (when +frequency hopping is disabled – you can check +this in test 12) +

    • +
    + +

    In some phones (for example, Nokia 8810 or Nokia 5110 with older firmware) +you will see parameters in two first lines only... + +

    In Nokia 3110 this test looks as follows: + +

    + + + + + + +
    + + + + +
    aaabbbccccddd
    +aaabbbccccddd
    +aaabbbccccddd
    +w           z
    +
    + + + + +
    S CH C1 rx C2
    +1 CH C1 rx C2
    +2 CH C1 rx C2
    +S    1N 2N  B
    +
    + +

    Description of the parameters can be found in menu test 3 +(in this model cccc parameters are always preceded by minus). + +

    This test looks similiar in Nokia 2110i/2140 (description is also in +test 3): + +

    + + + + + + +
    + + + + +
    +aaabbbcccc
    +aaabbbcccc
    +aaabbbcccc +
    +
    + + + + +
    +Serv cell 
    +1. neighb
    +2. neighb +
    +
    + +

    In Nokia 2120 this test looks as follows: + +

    + + + + + +
    + + + + +
    +ENCR  CIPH
    +DTX  XSTBY
    +CS-state
    +
    + +

    +

      +
    • ENCR = when message encryption is on
    • +
    • CIPH = when Ciphering is on
    • +
    • DTX = when DTX is on
    • +
    • XSTBY= when enabled standby is on
    • +
    • CS-state = see previous parameter for details
    • + +
    + +

    and in Nokia 2160 is different: + +

    + + + + + + + + + + + + +
    +DCCH mode + + + + +
    +mode   DTX
    +ENCR  CIPH
    +d    Be TA
    +

    +

    +DTCH mode + + + + +
    + +mode   DTX
    +ENCR  CIPH
    +d    Be TA +
    +

    +

    +ACCH mode + + + + +
    + +mode
    +XSTBY
    +       SID +
    +
    +AVCH mode + + + + +
    +mode
     
    +       SAT +
    +
    +
    + +

    and here is for Nokia 6160: + +

    + + + + + + + + + + + + +
    +DCCH mode + + + + +
    +mode M C
    +FB E SP pc
    +net SID..
      +
    +

    +

    +DTCH mode + + + + +
    +mode DTX
    +ENCR CIPR 
    +d a TA S
    +CODEC... +
    +

    +

    +ACCH mode + + + + +
    +mode
    +XSTBY
    + SID      
      +
    +
    +AVCH mode + + + + +
    +mode
     
    + SAT      
      +
    +
    +
    + +

    +

      +
    • mode = DCCH, DTCH, ACCH, AVCH
    • +
    • SID = system ID [0-32767, - = not locked]
    • + +
    • DCCH mode +

      +

        +
      • M = maximum paging frame class supported by network (1-8)
      • +
      • C = current PFC (Paging Frame Class) (1-8)
      • +
      • FB = number of F-BCCH slots
      • +
      • E = number of E-BCCH slots
      • +
      • SP = number of SPACH slots
      • +
      • pc = PCH subchannel
      • +
      • net = supported network types, bit map (1=suported, 0=not, C=current): +first bit for Public, second for Private, third for Residential
      • +
      +

      +

    • + +
    • DTCH mode +

      +

        +
      • DTX = shown when DTX is on
      • +
      • ENCR = shown when message encryption is on
      • +
      • CIPH or CIPR = shown when voice ciphering is on
      • +
      • d = data receiving status (0=no sync, 1=sync)
      • +
      • Be = Bit Error rate in % (0-16)
      • +
      • TA = current time alignment (0-30)
      • +
      • a = audio state (0=off, 1=on)
      • +
      • CODEC... = current codec:

        +

          +
        • -EFR- = IS-136A ACELP coder
        • +
        + +
      +

      +

    • + +
    • ACCH mode +

      +

        +
      • XSTBY = shown when extended standby is on
      • +
      +

      +

    • + +
    • AVCH mode +

      +

        +
      • SAT = SAT validity as measured by DSP (0-32767)
      • +
      +

      +

    • + +
    + +

    and for Nokia 6185/6188: + +

    + + + + + + + + + + + + + +
    +CDMA control + + + + +
    + +PN1
    +ECK         

      +

    +

    +

    +CDMA traffic + + + + +
    + +PN1 PN3 PN5 
    +ECK ECK ECK
    +PN2 PN4 PN6
    +ECK ECK ECK +
    +

    +

    +AMPS control + + + + +
    + +X F S N N C
    +SLEEP EMC
    +SCC STC M
    +RSSCPLCC CAL +
    +
    +AMPS traffic + + + + +
    + +2 2 1 0 4 1
    +00015F927B13
    +0029B 0A0 2
    +140 372 0000
    +
    +
    CDMA +

    +

      +
    • PNx: CDMA PN offsets handoff canidate listing. Shows only the current offset while idling. +Shows 1 to 6 additional choices during traffic.
    • +
    +
    + +

    Test 3 +
    Information about current and neighbor cells + +

    + + + + + + +
    + + + + +
    aaabbbcccddd
    +aaabbbcccddd
    +aaabbbcccddd
    +   ef gh
    +
    + + + + +
    SCH C1 rx C2
    +1CH C1 rx C2
    +2CH C1 rx C2
    +    1N 2N
    +
    + +

    Meaning of these lines: + +

    +

      +
    1. information about current cell
    2. +
    3. 1st neighbor cell
    4. +
    5. 2nd neighbor cell
    6. +
    7. e,f concern 1st neighbor cell, g,h concern 2nd neighbor cell
    8. +
    + +

    +

      +
    • +aaa - CH (channel): number of channel used for communication with cell (decimal)
    • + +
    • +bbb - C1 values displayed only in standby mode. In active mode (ie. during connection) +letter B and BSIC for current cell are displayed. +
    • + +
    • ccc - RX: +minus is not shown if <=-100. Lets us calculate RXLev parameter value: + +

      + + + + + + + +
      RX (from)RX (up to)RXLev
      less than-110 dBm0
      -110 dBm-109 dBm1
      -109 dBm-108 dBm2
      ......... +
      -49 dBm-48 dBm62
      -48 dBmmore63
      +

      +

    • + +
    • +ddd - C2 parameter
    • + +
    • +e,g - contains F, if current cell is located on a restricted area (otherwise empty)
    • + +
    • +f,h: + +

      +

        +
      • +B means a cell in test phase (your phone can use barred cells – this can be enabled in +test 19)
      • +
      • N - a cell given for normal use
      • +
      • L - means low level
      • +
      • otherwise empty
      • +
      +

      +

    • + +
    + + + + + + + +
    If you want to see, if actual used cell is barred or not, see on +test 19 (it depends on setting in that test)
    + +

    Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

    In Nokia 3110 this test looks like test 4. + +

    It looks similiar in Nokia 2110i/2140 (desciption is in +test 4 too): + +

    + + + + + + +
    + + + + +
    +aaabbbcccc
    +aaabbbcccc
    +aaabbbcccc +
    +
    + + + + +
    +3. neighb 
    +4. neighb
    +5. neighb +
    +
    + +

    In Nokia 2120 this test looks like test 4 in Nokia 2160. + +

    In Nokia 2160 this test looks different (is displayed +in DCCH mode only): + +

    + + + +
    + + + + +
    +RS SS SI b
    +NA ND
      +
    +
    + +

    and here is for Nokia 6160: + +

    + + + +
    + + + + +
    +RS SS SI b
    +NA ND
    +MA MD MO
      +
    +
    + +

    +

      +
    • RS = minimum Received signal Strength required to access cell (0-31, where 0=-113 dBm and 31=-51 dBm)
    • +
    • SS = minimum signal Strength Sufficient for candidate of reselection (0-31, where 0=-113 dBm and 31=-51 dBm)
    • +
    • SI = Scan Interval between consecutive strength measurements in hyperframes (1-16)
    • +
    • b = access burst size (0=normal, 1=abbreviated RACH)
    • +
    • NA = Number of Analog neighbors (0-24)
    • +
    • ND = Number of Digital neighbors (0-24)
    • +
    + +

    and for Nokia 6185/6188: + +

    + + + + +
    +OWNNUMBER
    +ESN-00000000
    +ESN-HEX
    +SL P MD PC +
    + +

      +
    • OWNNUMBER - phone number
    • +
    • ESN - Electronic Serial Number
    • +
    • ESN-HEX - hexadecimal ESN
    • +
    • MD - [AD] changes to [DI] at 800 CDMA
    • +
    + +

    Test 4 +
    Information about neighbor cells + +

    + + + + + + +
    + + + + +
    aaabbbcccddd
    +aaabbbcccddd
    +aaabbbcccddd
    +  ef gh ij
    +
    + + + + +
    3CH C1 rx C2
    +4CH C1 rx C2
    +5CH C1 rx C2
    +  3N 4N 5N
    +
    + +

    Meaning of the lines: +

      +
    1. 3rd neighbor cell
    2. +
    3. 4th neighbor cell
    4. +
    5. 5th neighbor cell
    6. +
    7. e,f concern 3rd neighbor cell, g,h 4th neighbor cell, i,j 5th neighbor cell
    8. +
    + +

    Meaning of the letters is the same as in test 3 (i is the same as e, j is the same as f) + +

    Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

    In Nokia 3110 this test looks like test 5. + +

    It looks similiar in Nokia 2110i/2140 (description is in +test 5 too): + +

    + + + + + + +
    + + + + +
    +aaabbbcccc
    +aaabbbcccc
    +aaabbbcccc +
    +
    + + + + +
    +6. neighb 
    +7. neighb
    +8. neighb +
    +
    + +

    In Nokia 2160 this test looks different: + +

    + + + + +
    + + + + +
    +bVo mod bs
    +Tbat1 Tb2
    +Wpwm FCmAh
    +
    +
    + +

    +

      +
    • bVo = battery voltage
    • +
    • mod = charging mode + +

      +

        +
      • FAS = Fast charging
      • +
      • COL = Cold battery charging
      • +
      • MAI = Maintenance charging
      • +
      • ERR = wrong charger or battery not OK
      • +
      • LIC = LiION battery charging
      • +
      • TXO = charging, transmitter active (connection in progress)
      • +
      • *** = charger disconnected
      • +
      +

      +

    • + +
    • bs = battery is full or reason for fast charge termination + +

      +

        +
      • TI = max. charge Time elapsed
      • +
      • DV = dV/peak value detected (full)
      • +
      • BV = Battery voltage max limit
      • +
      • BT = Battery temp max limit (overheat)
      • +
      • ** = battery is not full
      • +
      +

      +

    • + +
    • Tbat1 = battery temp. a/d reading (subtracted from 1023)
    • +
    • Tb2 = battery temp. in C (not implemented)
    • +
    • Wpwm = PWM charge control output (000-250)
    • +
    • FCmAh = mAh rating of charge given to the battery
    • +
    + + +

    In Nokia 2120 this test looks like follows + +

    + + + + +
    + + + + +
    +ChargV:NNN
    +ST hex des
    +B:LLLL KKK
    +
    + +

    but it was not implemented. + +

    In Nokia 6160 this test looks like follows + +

    + + + + +
    + + + + +
    +SID #####
    +NN NT NR
    +Alphatag  
      +
    +
    + +

    +

      +
    • SID = System Identification Number (0 to 32767, odd for 'A' carriers, even for 'B' carriers, - = not locked)
    • +
    • Alphatag.. = textual end-user display of current system
    • +
    + +

    and for Nokia 6185/6188: + +

    + + + + +
    +CSST CHAN
    +A B
    +SID
    +SD IT TM CAP +
    + +

      +
    • CSST - Cellular state: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
    • +
    • CHAN - Channel
    • +
    • B - Network Band and Frequency (lowercase a,b = 800 MHz band; uppercase A,B = 1900 MHz band)
    • +
    • SID - System ID:

      +

        +
      • [17500] - Clearnet PCS
      • +
      • [16422] - BC Tel Mobility
      • +
      • [16xxx odd number] - Cantel AT&T
      • +
      +

    • +
    + +

    Test 5 +
    Information about neighbor cells + +

    + + + + + + +
    + + + + +
    aaabbbcccddd
    +aaabbbcccddd
    +aaabbbcccddd
    +  ef gh ij
    +
    + + + + +
    6CH C1 rx C2
    +7CH C1 rx C2
    +8CH C1 rx C2
    +  6N 7N 8N
    +
    + +

    Meaning of the lines: +

      +
    1. 6th neighbor cell
    2. +
    3. 7th neighbor cell
    4. +
    5. 8th neighbor cell
    6. +
    7. e,f concern 6th neighbor cell, g,h 7th neighbor cell, i,j 8th neighbor cell
    8. +
    + +

    Meaning of the letters is the same as in test 3 (i is the same as e, j is the same as f) + +

    Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

    In Nokia 3110 this test looks like test 6. + +

    This test allows you to recognize, how many neighbor cells can "observe" phone +in the same time. Examples: in Nokia 6150 you can see info in all rows (8 cells), +in Nokia 5110/3310/6210 only in first row (6 cells). + +

    In Nokia 3310/6210 parameters "ef" are never displayed (you can see "xx" only)... +These models during standby mode can see only 6 cells, during call 8... + +

    In Nokia 2160 this test looks different: + +

    + + + +
    + + + + +
    +ROM SW
    +EPROM SW
    +Prod type 
    +
    + +

    +

      +
    • ROM SW = ROM software version, e.g. V 65.08
    • +
    • EPROM SW = EPROM (flash) version, e.g. V 1.45
    • +
    • Prod type = product type, e.g. NHC-4NE
    • +
    + +

    And here is for Nokia 6160: + +

    + + + +
    + + + + +
    +S bandorde
    +NC NP IRC
    +RSCO RSLO
      +
    +
    + +

    +

      +
    • S = system indicator:

      +

        +
      • H = hometype system
      • +
      • P = partner roam
      • +
      • F = preffered roam
      • +
      • N = normal roam
      • +
      • X = no service
      • +
      • a, b, A, B, C, D, E, F = current band while scanning for a control channel +(see next parameter for details)
      • +
      +

    • + +
    • bandorde = network search order:

      +

        +
      • a = a-side 800mhz cellular
      • +
      • b = b-side 800mhz cellular
      • +
      • A = A-block (30 mhz) 1900mhz PCS
      • +
      • B = B-block (30 mhz) 1900mhz PCS
      • +
      • C = C-block (30 mhz) 1900mhz PCS
      • +
      • D = D-block (10 mhz) narrowband 1900mhz PCS
      • +
      • E = E-block (10 mhz) narrowband 1900mhz PCS
      • +
      • F = F-block (10 mhz) narrowband 1900mhz PCS
      • +
      +

    • + +
    • NC = Number of Cellular = number of probability blocks to scan in cellular bands
    • +
    • NP = Number of PCS - number of sub blocks to scan in PCS bands
    • +
    • IRC = IR Control:

      +

        +
      • 1 = only systems with home SID or SOC are accepted
      • +
      • 0 = any system not listed as forbidden is accepted
      • +

    • + +
    • RSCO = Rescan Count - rescan time in hyperframes
    • +
    • RSLO = Rescan Loop - defines when all the bands in bandorder are to be scanned
    • + +
    + +

    and for Nokia 6185/6188: + +

    + + + + +
    +1YNC_OK_097B
    +SYNC_FAI4CC1
    +FOCC_WOR587C
    +WORD_OK_3E65
    +
    + +

    Test 6 +
    Information about preferred and restricted networks of the inserted SIM card. + +

    + + + + + + + +
    + + + + +
    aaabb  aaabb
    +aaabb  aaabb
    +aaabb  aaabb
    +aaabb  aaabb
    +
    + + + + +
    LReg   1_For
    +1_Pre  2_For
    +2_Pre  3_For
    +3_Pre  4_For
    + +

    In Nokia 6250: + +

    + + + + +
    LReg   1?For
    +1?Pre  2?For
    +2?Pre  3?For
    +3?Pre  4?For
    + +

    + +

    Meaning of the individual lines: + +

    + + + + + +
    last registered network1st forbidden network
    1st preferred network2nd forbidden network
    2nd preferred network3rd forbidden network
    3rd preferred network4rd forbidden network
    + +

    +

      +
    • +last registered network - you used it last time. When you're in home country, it can be your home network +(you pay them for your calls - if it is, after choosing it manually (in Nokia 5110 - Menu 4-2-4) phone displays +"Home network selected"). 00000, when phone wasn't registered in any network +after enabling.
    • + +
    • +preferred network - network, to which your SIM card was logged (when it was in its range) – for example in roaming. +
    • + +
    • +forbidden network – your SIM card was in range of that network, but wasn’t allowed to log in... +
    • +
    + +
      +
    • +

      aaa - MCC (Mobile Country Code) +- code of the network home country (260 for Poland). Decimal value. +

    • + +
    • +

      bb - MNC (Mobile Network Code) +- network code (different for networks with the same MCC). + +

      Generally values here are decimal. Sometimes are exceptions (when and why ?) +and you can find hexadecimal value here: if you will convert it into +decimal and result treat as hexadecimal value (convert it into decimal value +again), you will have decimal value of this parameter (for example, +3F hex=63 dec; 63 hex=99 dec). More about it in the question 23. + +

      When you use phone working in PCS 1900 +system (for example, Nokia 6190), this number can be 3-digit long. It's decimal (always ?). +If it consist of two digits, you will see "F" instead of last (for example, +you will see "30237F" for 302-37 network)

    • + + +
    + +

    What are these lists stored on SIM card for? Because: + +

    +

      +
    1. +the phone doesn’t have to waste its power while trying to log to the network, which is forbidden for SIM card +(it is checked only once and then stored, so the phone doesn’t have to repeat this procedure anymore) +
    2. + +
    3. +when you have automatic network selection enabled, your phone in first turn searches for networks it was +previously using ("preferred"). +
    4. +
    + +

    +The list of "preferred" and "forbidden" networks is written by the phone +(Nokia saves last chosen networks). Preffered networks can be also edited – for example in Motorola and Alcatel phones (not in Nokia). +Sometimes it is done by +the operator (he writes preferred and forbidden networks to the SIM card before selling it (it's known, that you cannot +log to competitive network – it can be stored in card programming phase). Both these lists can be changed using a +Czech program called SIMedit (www.compelson.cz/simedit.htm)... + +

    URL http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html +contains list of the MCC and MNC parameters for different networks. + +

    + + + + + + +
    Using this menu you can check (probably – NOT ALWAYS!), where SIM card was used lately (in your country, abroad) +and where its owner was traveling +
    + +

    In Nokia 2160 use this test, when you want to "disable" NetMonitor tests. + +

    And here is for Nokia 6160: + +

    + + + +
    + + + + +
    +PSC PSD   
    +FSC FSD
    +XSC XSD
      +
    +
    + +

    Intelligent Roaming Database (IRDB) statistics: + +

    This lists the total count of SOCs and SIDs in each category. +The database has a total memory limit of 82 entries, +which may be distributed amongst these categories: + +

    +PSC = number of Partner SOCs
    +PSD = number of Partner SIDs
    +FSC = number of Preffered SOCs
    +FSD = number of Preffered SIDs
    +XSC = number of Forbidden SOCs
    +XSD = number of Forbidden SIDs
    + +

    Partner SOC/SID = treated like the home system by the phone +
    Preffered SOC/SID = preferred over neutral (undefined) systems when available +
    Forbidden SOC/SID = rejected by the phone as service providers + +

    and for Nokia 6185/6188: + +

    + + + +
    CDMA
    + + + + +
    +SID NID
    +BASE ID
    +P_REV
    +MIN_P_REV    +
    +
    AMPS
    + + + + +
    +0ORD_COR0CE3
    +WORD_FAI0E76
    +CTRL_FIL787D
    +SAT_V_OK0004
    +
    +

    CDMA

    +

      +
    • SID - System ID:

      +

        +
      • [17500] - Clearnet PCS
      • +
      • [16422] - BCTel Mobility
      • +
      • [16xxx odd number] - Cantel AT&T
      • +
      • [00000]: Second SID assignment
      • +
      +
    +

    Are lines 3,4 CDMA specs ? [ANSI] for 1900 MHz, [TSB74] for 800 MHz CDMA +

    + +

    Test 7 +
    Information about current (recently monitored) cell + +

    + + + + + + +
    + + + + +
    E A H C I BR
    +a b c d e fg
    +ECSC 2Ter MB
    +h    i    j
    +
    + + + + +
    Serving Cell
    +system info
    +bits
    +
    + +

    +

      +
    • a - 1, if emergency calls (112) are possible
    • +
    • b - 1, if IMSI attach and IMSI detach are possible
    • +
    • c - 1, if the cell supports HR channels
    • +
    • d - 1, if C2 values are broadcasted
    • +
    • e - 1, system information 7 and 8 are broadcasted
    • +
    • f - 1, if the cell supports cell broadcasting (CBCH channel)
    • +
    • g - 1, if cell re-establishment is possible
    • +
    + +

    Last two lines are present only in dual phones (GSM 900/1800 – for example Nokia 6150 and 3210): + +

    +

      +
    • +h - 1 in standby mode, if ECSC (Early Classmark) sending is supported. During a call "x" is displayed. +
    • + +
    • +i - 1 in standby mode, if 2-Ter messages are supported. During call "x" is displayed +
    • + +
    • +j - information (if supported) which cells from both frequencies bands (900 and 1800 MHz) are shown +(MULTIBAND_REPORTING parameter value). Description from +Phase2+ ETSI GSM 05.08 version 5.4.0, section 8.4.3 "Additional cell reporting requirements for multi band MS" specification: + +

      +

        +
      • +0 - 6 strongest cells (with known and allowed NCC from +BSIC), regardless their frequency band (900 or 1800 MHz)
      • + +
      • +1 - strongest cell (with known and allowed +NCC from BSIC) in each frequency band on +BA list, except for frequency band of the current cell. Remaining positions should be used to show cells in frequency band +of the current cell. If there are free positions left, further strongest and recognized cells from other bands are shown (their +frequencies bands are not important). +
      • + +
      • +2 - like in 1, but two strongest cells are shown first (with known and allowed NCC from +BSIC) in each band... +
      • + +
      • +3 - three strongest cells are shown first...
      • +
      +
    • + +
    + +

    If your phone wasn’t logged to any network, some default values are shown. + +

    In Nokia 6160 this test is different: + +

    + + + + +
    +User
    +interface 
    +display
      +
    + +

    and here is for Nokia 6185/6188: + +

    + + + +
    CDMA
    + + + + +
    +CSST         
    +DATE
    +TIME
      +
    +
    AMPS
    + + + + +
    +1AT_V_FA0000
    +FVC_S_FA0000
    +WFLG_INT7046
    +NORMALRXFE25
    +
    +

    CDMA

    +

      +
    • CSST - Cellular state: [IDLE], [CONVE], [PLIOS], [TIME], [SYNC], [RELE], [PAGE], [TRFIN], [W_OR]
    • +
    • DATE - CDMA Network date
    • +
    • TIME - CDMA Network time
    • +
    +
    + + +
    Back to the top
    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net3.htm b/Docs/en_US/gsm/netmon/faq_net3.htm index 6807781..3fdadf9 100644 --- a/Docs/en_US/gsm/netmon/faq_net3.htm +++ b/Docs/en_US/gsm/netmon/faq_net3.htm @@ -1,2418 +1,2573 @@ - - - - - - - - - - NetMonitor in Nokia phones (4/7) - - - - - -

    Main page

    -
    NetMonitor in Nokia phones (4/7) -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    - -
    - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    - -
    - -

    Test 8 - -

    In Nokia 6185/6188 it looks like follows: - -

    - - - -
    CDMA
    - - - - -
    -TADD TDROP
    -TCOMP TTDROP
    -WW1 WW2 WW3
      -
    -
    AMPS
    - - - - -
    -1STBY_RX7244
    -XNRML_RX006C
    -X_N_RX_O004C
    -X_N_RX_F0020
    -
    -

    CDMA

    -

      -
    • TADD - threshold to add a new active PN (raw value ex: 28 = Ec/Io at -14 dB), [TDROP] : threshold to drop an active PN (raw value ex: 32 = Ec/Io at -16 dB)
    • -
    • TCOMP - an other threshold to add an active PN when a candidate PN becomes stronger than an active PN
    • -
    • TTROP - timer to drop a PN when power of this PN goes below TDROP
    • -
    • WW1 - value of the seach window for the active PN
    • -
    • WW2 - value of the seach window for the neighbour PN,[WW3]: value of the seach window for the remaining PN.
    • -
    -
    - -
    In Nokia 6210: - -

    - - - - - - - - -
    - - - - -
    -CCCH
    -Ts  01234567
    -Rx  xxxxxxxx
    -Tx  xxxxxxxx
    -mCh x mPw xx -
    -
    - - - - -
    -9600/14000

    -TS for Rx
    -TS for Tx
    -MainCh/PwrLv -
    -
    - -

    it is connected with data transmission. -In line with Rx and Tx you see, which Time Slots are used for it -(for receiving and transmiting). - -

    When phone doesn't use HSCSD (High Speed Circuit Switched Data), -only one time slot is used both for transmiting and receiving -(it's visible also in test 1 then). - -

    When use HSCSD, only this test gives full information about it... -You can check here, what can be maximal theoretical speed for downloading -and uploading data (number_of_used_slots * 9600 or number_of_used_slots * 14000)... - -
    mCh seems to be "main" time slot among them used for transmission -(one that seems to be always used for both ways - probably can be viewed as the slot -that would be used if no HSCSD were used, and all other slots are "extra" slots to -increase number of sent/received data). It seems to be displayed in -test 1 too... - -
    mPw seems to be the power level for the "main" time slot -(it seems to be displayed in test 1 too - units -are the same).... -The power levels for all 8 individual slots can be found in -test 9. - -

    First line shows channel displayed in test 1 too. -It's available in new firmware only (5.02). - -

    Test 9 - -

    In Nokia 6185/6188 it looks like follows: - -

    - - - -
    CDMA
    - - - - -
    -006 330 270
    -047 062 062
    -342 102 030
    -062 062 062
    -
    -
    AMPS
    - - - - -
    -1PT_1_OK724E
    -RPT_1_FA0042
    -TIME__2_0000
    -MER2HIGH0002
    -
    -

    CDMA

    -Tracked PN Offsets (lines 1,3) and EC/SO (Energy per chip per noise). -An EC/SO of 062 likely means not really usable? lower numbers are better -strengths). See test 2 for PN offset information. -

    - -
    In Nokia 6210: - -

    - - - - - - - - -
    - - - - -
    -mCh x mPw xx
    - xx xx xx xx
    - xx xx xx xx
      -
    -
    - - - - -
    -MainCh/PwrLv
    -PwrLv TS 0-3
    -PwrLv TS 4-7
    -  -
    -
    - -

    and is connected with HSCSD (High Speed Circuit Switched Data) -and shows power levels for each time slot -used in data transmission -(more info about data transmission in Nokia 6210 is visible also in -Test 8). Units here seems to be the same to units -in test 1 (power level used for "main" -time slot in transmission is displayed also there). - -

    Test 10 -
    Network information (concern current or recently monitored network) - -

    - - - - - - -
    - - - - -
    TMSIaaaaaaaa
    -T321:bbb/ccc
    -PRP:d  ee ff
    - ggggg  hhh 
    -
    - - - - -
    TMSI(hex)
    -T3212ctr/tim
    -PaRP DSF AGC
    -  AFC   Ch
    -
    - -

    -

      -
    • -aaaaaaaa - TMSI: -a number assigned to each phone logged to the network (it can be done, for -example, after power on, a call, sending/receiving SMS, requesting some services, -PLU). Value from the SIM card -(each new number is written there) in hexadecimal format. If assigning this -number fails (for example because transmitter was turned off in -test 45 or SIM card is not active), -'xxxxxxxx' is shown here and the phone displays 'No network coverage' message (when you try -to make a call). -
    • - -
    • -bbb - value of the so called T3212 counter: the phone periodically informs -the network about its location -(makes a PLU). 'bbb' counter means time from -last update and can be a value from 1 to 'ccc' (where 1 means 6 minutes, 2 - -2 * 6 min = 12 min, etc.). This counter is also cleared after each connection, -sending/receiving SMS or requesting a network services - for example call -diverting (but the counters from test 64 -don't change). The value doesn't change (it's always equal 0) with not active -SIM card.
    • - -
    • -ccc - max T3212 counter value: period of time, after which the phone sends -information about its location - makes a PLU -(range from 1 to 240, where 1 means 6 min between updates and 240 means -24 hours (240*6min)). This value is received from the network (if it is 0, -the network doesn't require information about phone location). For Polish -networks Era GSM and -Plus GSM it's equal 30 (3h), for -Idea 2h. Displayed normally -even, when SIM card is not active. -
    • - -
    • -d - Paging Repeat Period, sometimes called DRX (Dincontinuous Receive): -period of time, after which the phone turns its receiver on to check whether -someone is calling us (range from 2 to 9 - the higher, the longer time between -these checks so the phone uses less power: -PRP=2 means about 0.95 s, a PRP=9 equal 4.25 s.). -Interesting thing is that max standby times are usually calculated by the manufacturers -for this parameter equal 9. -
    • - -
    • -ee - DSF (Downlink Signalling Failure). If it is negative, -0 is shown. Max value of this parameter is 45. When the phone uses -TCH channel, xx is displayed. -
    • - -
    • -ff - AGC (Automatic Gain Control) - automatic gain control -of the phone receiver. The stronger the signal from BTS, -the lower this value. It is displayed correctly only when the phone uses -TCH/SDCCH channel -(for example: during a call) and can be a value from 0 to 96 (dB ?). -
    • - -
    • -ggggg - in some English descriptions it's "VCTCXO AFC DAC control" - a value -between -1024 and 1023. In help it's described as AFC -(Automatic Frequency Control) - automatic adjusting phone's -receiver to the frequency of the signal transmitted by BTS. -The more this value differs from 0, the more frequency corrections have to be -made by the receiver (it depends on the channel used in communication with -BTS - see test 1) -to "match" the BTS. -
    • - -
    • -hhh - CH (channel): number of channel used in communication with cell (decimal) -
    • -
    - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -Pagrepp. d
    -T:aaaaaaaa
    -T3212: bbb -
    -
    - - - - -
    -PagRepPer.
    -TMSI
    -T3212 -
    -
    - -

    In Nokia 3110 this test looks like follows: - -

    - - - - - - -
    - - - - -
    TMSI:aaaaaaaa
    -T3212:bbb/ccc
    -PRP:d  ee ff
    -w gggg  hhh z
    -
    - - - - -
    TMSI(hex)
    -T3212 ctr/tim
    -PagRP DSF AGC
    -S AFC   CH  B
    -
    - -

    If the phone after power on wasn't logged to any network, -some default values are displayed here (except for TMSI). - -

    Some of these values can be also found in Nokia service programs -(for example in WinTesla - in menu "Testing" / "RF Information"). - -

    - - - - - - -
    In test 64 you can check, -how many times your phone has sent an information about its location. -If you have sent an SMS, you can check (exact to 6 min), when you did it -(if it wasn't earlier than value 'ccc' for your network) - check 'bbb' parameter value. -
    - -

    And here is this test for Nokia 6185/6188: - -

    - - - -
    CDMA
    - - - - -
    -414 084 222
    -062 060 062
    -420 366 252
    -062 062 062 -
    -
    -
    AMPS
    - - - - -
    -1X_XSTBY000D
    -SYNC_LOS0031
    -DEC_SAME0000
    -VOTED_BT0000
    -
    -

    CDMA

    -Tracked PN Offsets (lines 1,3) and signal strengths. -

    - -

    Test 11 -
    Identification of the currently used (last monitored) network - -

    - - - - - - -
    - - - - -
    CC:aaa NCbbb
    -  LAC:ccccc
    -  CH : deee
    -  CID:fffff
    -
    - - - - -
     MCC    MNC
    -LocAreaCode 
    -ServChannel
    -   CellId
    -
    - -

    -

      -
    • -aaa - MCC (Mobile Country Code): code of the network home -country (260 for Poland) - decimal. -
    • - -
    • -bbb - MNC (Mobile Network Code): network code -(different for networks with the same MCC - for example, in Poland: -01 for Plus GSM, 02 for Era GSM and -03 for Idea). - -

      Generally values here are decimal. Sometimes are exceptions (when and why ?) -and you can find hexadecimal value here: if you will convert it into -decimal and result treat as hexadecimal value (convert it into decimal value -again), you will have decimal value of this parameter (for example, -3F hex=63 dec; 63 hex=99 dec). - -

      When you use phone working in PCS 1900 -system (for example, Nokia 6190), this number can be 3-digit long. It's decimal (always ?). -If it consist of two digits, you will see "?" instead of last (for example, -you will see "37?" for "37")

      -

    • - -
    • -ccccc - LAC (Location Area Code): code of the current -cell area (decimal or hexadecimal). The size of this area (with the same LAC) -depends on the network. After changing LAC, the phone makes -Location Update.
    • - -
    • -d - H, if frequency hopping is enabled (otherwise empty). This information -can be also found in test 1 and -test 12.
    • - -
    • -eee - CH (channel): number of channel used in communication with cell (decimal) -
    • - -
    • -fffff - CID (Cell Identifier): number of the current cell -(each cell in given area has its own unique ID number) - shown decimal or hexadecimal. -
    • -
    - -

    LAC and CID format (if they're displayed decimal or hexadecimal) depends -on your phone's model and its software version (for instance: Nokia 3210 -and Nokia 5110 with newer software display decimal values, while Nokia 5110 -with 4.59 (and older) firmware and some previous models (like Nokia 3110) -use hexadecimal format). - -

    GSM phones recognize the network using MCC and MNC codes -(list of these codes can be found at -http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html). -Network names shown on phone's display (like 'ERA GSM', -'Plus GSM' or 'Idea') -are stored in phone's memory (they're set by the producer - cellular network doesn't -send any name, just these two numbers). In order to correctly recognize a -new network, you must upgrade the firmware of the phone (or it won't display -network name). Some older phones, like Nokia 2110i (or newer models -without firmware upgrade) display names like PL-03 (they recognize that -MCC=260 is Poland (which has international code PL), but they don't know -the network name - only its MNC). One (?) text name can also be changed -using appropriate programs: - -

    - -

    In Polish version of this manual the description of BTSes contains -URLs of pages with BTSes lists - with their locations, LAC and CID -(for Polish networks). - -

    If the phone after power on wasn't logged to any network, some default values are displayed here. - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -aaa eee bb
    -LAC:  cccc
    -CellI:ffff -
    -
    - - - - -
    -MCC CH MNC
    -LocAreaCod
    -CELL IDent -
    -
    - -

    In Nokia 3110 this menu looks like follows: - -

    - - - - - - -
    - - - - -
    CC:aaa NC:bbb
    -  LAC:cccc
    -  CH :deee
    -w CID:ffff  z
    -
    - - - - -
     MCC     MNC
    - LocAreaCode
    - ServChannel
    -S CellId    B
    -
    - -

    And here is for Nokia 6185/6188: - -

    - - - -
    CDMA
    - - - - -
    -162 054    
    -062 062
    -186 084
    -062 051 -
    -
    -
    AMPS
    - - - - -
    -11_BETTR0000
    -SYNC_SAM0000
    -MSG__BTR0000
    -SFLG_BTR0000
    -
    -

    CDMA

    -Tracked PN Offsets (lines 1,3) and signal strengths (only, when phone is in CONV state) -

    - -

    Test 12 -
    Parameters of currently used (last monitored) network - -

    - - - - - - -
    - - - - -
    CIPHER :aaa 
    -HOPPING:bbb
    -DTX    :ccc
    -IMSI   :ddd
    -
    - - - - -
    CipherValue
    -HoppingValue
    -DTXValue
    -IMSIAttach
    -
    - -

    -

      -
    • -aaa: - -

      -

        -
      • -OFF: phone doesn't transmit
      • - -
      • -A51: phone transmits, data are coded using A5/1 algorithm (more complicated version)
      • - -
      • -A52: phone transmits, data are coded using A5/2 algorithm (a version designed -for use in some "doubtful" countries - potential future enemies (like Iraq)). It's easier to -decode and crack, but still secure (not cracked) - but I can be wrong ! -
      • -
      -

      -

    • - -
    • -bbb - informs, whether frequency hopping is enabled (ON) or disabled (OFF) -
    • - -
    • -ccc - informs, whether DTX is used (ON) or not (OFF) by phone -
    • - -
    • -ddd - informs, whether IMSI attach is allowed (ON) -
    • -
    - -

    All the values in this menu are updated only when the phone uses TCH -channel. - -

    If the phone after power on wasn't logged to any network, some default values are displayed here. - -

    More information about A5/1 and A5/2 algorithms can be found at www.scard.org/gsm/. - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -CIPHER aaa
    -HOPPIN bbb
    -DTX    ccc -
    -
    - - - - -
    -CIPHERING
    -HOPPING
    -DTX ON/OFF -
    -
    - -

    In Nokia 3110 this test looks as follows: - -

    - - - - - - -
    - - - - -
    CIPHER :aaa
    -HOPPING:bbb
    -DTX    :ccc
    -w IMSI :ddd z
    -
    - - - - -
    CipheringValu
    -HoppingValue
    -DTXValue
    -S IMSIAttachB
    -
    - -

    In Nokia 6185/6188 in AMPS it looks different: - -

    - - - - -
    -1IN_FAIL0044
    -DYN_FAIL01C7
    -MIN2_FAI0045
    -DYN2_FAI01CB
    -
    - -

    Test 13 -
    Information about DTX in currently used (last monitored) network - -

    - - - - - - -
    - - - - -
    aaaaaaaaaa 
    -DTX(DEF):bbb
    -DTX(BS) :ccc
    -
    - - - - -
    DTXMode
    -DefaulDTXSta
    -DTXValFromBS
    -
    - -

    -

      -
    • -aaaaaaaaaaaa: information, whether the phone uses DTX: - -

      -

        -
      • DTX:ON - yes, it uses
      • -
      • DTX:OFF - no, it doesn't use
      • -
      • DTX:DEF - yes or not (depends on default setting - bbb parameter)
      • -
      • NOTALLOWED - the phone cannot independently decide to use DTX or not (BTS doesn't allow this)
      • -
      -

      -

    • - -
    • bbb - default DTX setting: ON or OFF.
    • - -
    • -ccc - DTX value from BTS -(on uplink - a channel used in communication in direction phone-BTS): - -

      -

        -
      • MAY - BTS lets the phone "decide", whether to use DTX or not
      • -
      • USE - BTS forces DTX usage
      • -
      • NOT - BTS doesn't allow to use DTX
      • -
      -

      -

    • - -
    - -

    If the phone after power on wasn't logged to any network, some default values are displayed here. - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -cccccccccc
    -MS DEF:bbb
    -dddddddddd -
    -
    - - - - -
    -DTX STATUS
    -DEF STATE
    -BS PARAM -
    -
    - -

    -

      -
    • cccccccccc - the same to aaaaaaaaaa. Values: "DTX  ON", "DTX OFF", "DTX DEF" lub "NOTALLOWED"
    • -
    • dddddddddd - the same to ccc. Values "MS MAY USE", "SHALL USE" or "SHALL NOT"
    • -
    - -

    - - - - - - -
    If BTS allows this (if the last parameter's -value is MAY), you can decide whether to use DTX -or not by entering this menu in a direct mode. -
    - -

    Test 14 -
    By entering this menu in direct mode, you can change aa parameter value from 01 (default) to 00 (or vice versa). - -

    - - - - - - -
    - - - - -
     SCREENING  
    - INDICATOR
    -   IS aa
    -
    - - - - -
    Use menu to 
    -  change
    - Screening
    - indicator
    -
    - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -SCREEN IND
    -SET TO  aa
      -
    -
    - - - - -
    -CHANGE
    -SCREENING 
    -INDICATOR -
    -
    - -

    Test 15 - -

    In Nokia 5190/6190: - -

    - - - - - - -
    - - - - -
    -aaa bbb cccc
    -ddd eee f
    -gg hh ii
    -jjjjjjjjjj -
    -
    - - - - -
    -CH RxL TxPwr
    -MdSt SAT DCC
    -ST   TxA RxA
    -  CS STATE -
    -
    - -

    When you don't have additional module -(it's between "main" phone and battery), you will see "AMPS display not available" -here. After connecting it you will see values connected -AMPS: - -

    -

      -
    • aaa - channel used for communication with cell (0 during standby)
    • -
    • bbb - level of received signal in dB
    • -
    • ccc - level of the transmitted signal (0 during standby)
    • -
    • eee - SAT, x during standby
    • -
    • f - DCC (Digital Color Code) on the -ACCH channel (0-3, - = not locked), x during standby
    • -
    • jjjjjjjjjj - cellular state: -

      -

        -
      • IDLE - standby
      • -
      • CALL GOING - exchange of data required to make call
      • -
      • IN CALL - during call
      • -
      • PCH INIT - scanning available paging channels ? (for example, after call)
      • -
      • CCH INIT - scanning control channels ?
      • -
      • ACCESS - accesing network ?
      • -
      -
    • -
    - -

    and 6210: - -

    - - - - - - - - -
    - - - - -
    -  Tx27178506
    -ReTx42645758
    -  Rx27178505
    -RTRq27178504 -
    -
    - - - - -
    -Sent frames
    -Re-transmis.
    -Rec. frames
    -Re-send reqs -
    -
    - -

    In Nokia 6250 help is the same to help from 6210, but screen with values is EMPTY. - -

    In Nokia 2110i/2140: - -

    - - - - - - -
    - - - - -
    -xxx SIM yy
    -LAC:  zzzz
    -wwwwwwwwww -
    -
    - - - - -
    -MCC    MNC
    -LocAreaCod
    -Upd status -
    -
    - -

    Values here can be different from these in test 11. -They're taken from file Location information (6F7E) on SIM card. - -

    -

      -
    • xxx - MCC
    • -
    • yy - MNC
    • -
    • zzzz - LAC (hexadecimal)
    • -
    • wwww - state of Location Update -
        -
      • -Updated - value from SIM (bits b3 - b1) 0 0 0, meaning: done Location Update in Location Area, -which is shown on the screen -
      • -
      • NotUpdated - value 0 0 1, meaning: Location Update not done or didn't end with success
      • -
      • PLMN Not A - value 0 1 0, meaning: LPLMN not allowed
      • -
      • LA Not All - value 0 1 1, meaning: Location Area not allowed
      • -
      • Reserved - value 1 1 1, reserved for future use
      • -
      • Undefined0 - value 1 0 0, undefined value
      • -
      • Undefined1 - value 1 0 1, undefined value
      • -
      • Undefined2 - value 1 1 0, undefined value
      • -
      • LA NotRead - file wasn't read from SIM
      • -
      -
    • -
    - -

    Test 17 - -

    -USERS OF NOKIA 6210 HAVE TO READ FIRST NOTES WRITTEN ON THE END OF DESCRIPTION -FOR THIS TEST. IN OTHER CASE THEY CAN DAMAGE THEIR PHONES. - - -

    This menu lets the phone test one concrete channel used in communication -with cell (the phone doesn't seek channel with the strongest signal, but uses -the channel chosen by you: you can use channels 1-124 for GSM 900 -and 512-885 for GSM 1800). Each GSM network has its own assigned channels -from these ranges (which means that each two networks in one country can't -use the same channels - for example, in Poland Plus GSM -cannot use Era GSM channels and vice versa). - -

    -

    - - - - - - - - - -
    GSM 900 (1-124)
    GSM 1800 (512-885)
    TIM (222-01)
    8-64 (16 most important cities) or 8-50 (outside them)
    736-760
    Omnitel (222-10)
    66-118 (16 most important cities) or 77-118 (outside them)
    861-885
    Wind (222-88)
    52-75 (outside 16 most important cities)
    761-810
    Blu (222-??)
    -
    811-860
    Plus GSM (260-01)
    1-14 and 37-67 (37 and 67 for testing)
    749 - 760, 850 - 884 ?
    Era GSM (260-02)
    15-36 and 68-90 (15 and 36 for testing)
    736 - 748, 811 - 847 ?
    Idea (260-03)
    91-114, 115-124 from January 2004
    733, 763 - 810
    -
    - -

    You can enter numbers of channels belonging to any network (if you enter -a channel of forbidden network, you will see all network parameters, -but obviously you won't be able to establish connection (except for -emergency calls)). After enabling this test your phone won't be able to make -handovers. - -

    To enable this test, proceed as follows (sometimes this procedure doesn't -work - but turning the phone off and then on often helps; I don't know why): - -

    -

      -
    • -save (change) desired channel number on position number 33 of the SIM card's -phone book in decimal format (not in phone's memory!) - -if you save '0' there, this test will be inactive! -However, this step is not necessary, if this number was stored there earlier - -you can check this with 33# code). Remember, that phone checks used format. Here are -some examples of correct entries: "1", "700".
    • - -
    • go to test 17
    • - -
    • once again enter test 17 directly
    • - -
    • switch your phone off and then back on
    • -
    - -

    To disable this test: - -

    -

      -
    • enter test 17 directly
    • - -
    • switch the phone off and back on (sometimes it isn't needed - -phone should disable test, when loose signal on this channel; -but it's better to do that to avoid potential problems) -
    • -
    - -

    Some interesting results can be achieved, when (guess why ?): - -

    -

      -
    • you enable this test
    • - -
    • then you switch test 19 to REVERSE
    • - -
    • turn off the test, but not the phone (by entering test 17 one time in a direct mode)
    • -
    - -

    In this case the phone "jumps" from one channel to another and monitors -channels of different networks - you can see LAC and CID codes of the cells. -Furthermore, the phone cannot log to its home network (though it displays -parameters of its channels). Several times I got "Insert SIM card" or -"SIM card rejected" messages - it may be some bug in firmware. After turning -the phone off and then on everything works fine. - -

    - - - - - - -
    The above tip can be used for fast battery discharging (however your phone -won't be accesible in the network). - -

    If you want to check some informations about different than your network, you -can use different tip too: - -

      -
    1. select the test, where will be displayed interesting for you information -about this network
    2. -
    3. go to the manual network selection (for example, Menu 4-2-4-2 in Nokia -5110)
    4. -
    5. select interesting for you network
    6. -
    7. wait few seconds (some time is required to start logging into this network) -and press "Quit" (NOT (c) key) or wait, until phone will display any message -(for example, that logging wasn't successfull)
    8. -
    9. press fast (c) key to leave phone's menu
    10. -
    - -

    Information about interesting for you network will be displayed during few seconds... - -

    - -

    I heard about some cases, when this test turned itself spontaneously on -after loosing the signal by the phone. I didn't experience this, but if this -has ever happened to you, just save 0 on 33rd position of the SIM card's phone -book. - -

    - - - - - - -
    Since Nokia 51xx/61xx phones don't allow choosing the position for the phonebook entry, -I want to suggest: - -
      -
    1. check whether you already have some number stored on this position -(using 33# code)
    2. - -
    3. -if the phone displays 'Invalid location', you have to add new entries to the -phonebook until you hit this position and the phone doesn't display this -message (repeating 1st step after each new entry) -
    4. - -
    5. -after displaying the number, you have to find out who's number is this. -You can do it in two ways: - -

      -

        -
      1. -just recall (or check the whole phonebook) -
      2. - -
      3. -turn off the transmitter in -test 45 and call this number -(the name assigned to this number will be show on screen - you will also find -it on the 'Last dialed' list) -
      4. -
      -

      -

    6. - -
    7. -edit the phone book (this position) - you can change the name or the (channel) number -
    8. - -
    9. -if the phone asks you, whether to replace the old number or to save it on new location, choose the former option -
    10. -
    - -

    -To store number on chosen location you can also use other Nokia phone -(for example 2110), other cellular phones or appropriate software. -For example: in Nokia Cellular Data Suite you can export list of phone numbers -to file, open it in editor, change and upload to phone. It's simple, isn't it ? -

    - -

    -

    - - - - - -
    - - - - -
    -
      BTS TEST  
    -    aaa
    -
    - - - - -
    Use menu to 
    -toggle BTS
    -test ON/OFF
    -
    - -

    -

      -
    • -aaa - can be set to "ON" or "OFF"
    • -
    - -

    - - - - - - -
    This test can be very usefull when: - -

    -

      -
    • -you want to use some particular cell (for example to test whether it is -possible to use a cell located 20 km away) -
    • - -
    • -you'd like to avoid roaming (which is much more expensive) - for example -when you are close to the border (and the phone constantly logs to the network -of the neighbor country, because it has a stronger signal) - you just switch -your phone to the channel used by your network... -
    • - -
    • -other available network has very strong signal (for example -85 dBm) and the -signal of your home network is very weak (-100 dBm) - your phone can have -serious problems with logging to your network until you use this test -
    • - -
    • -you want to monitor the state of some very weak channel - I received some mails, that -the lowest measured with this method signal strength was -118 dBm -
    • -
    -
    - -

    In Nokia 2110i/2140: - -

    -

    - - - - - -
    - - - - -
    - -BTSTESTaaa -

      -

    -
    - - - - -
    -Tells if
    -BTS test
    -is ON/OFF  -
    -
    - -

    Number of channel must be saved in 98 position of B memory. - -

    Many users of Nokia 3210 say, that in this model there are problems with enabling -and disabling this test - part of firmware connected with it has probably some bug(s)... -I read even in one newsgroup such post (here is in translation): - -

    -Few people after enabling test 17 made reclamations in service, that phone -doesn't work. The most interesting is (I'm sure, that in one case) reclamation -was taken into consideration !!!! - phone was exchanged !!! - - -

    In new models (Nokia 3310, 6210, 6250, 8210) it's a little different: - -

    -

    - - - - -
    - - - - -
    -BTS TEST
    -   aaa

    -CH :  bbbb   -
    -
    - -

    ...but you can use it very similiar (to enable): - -

    - -

      - -
    • enter it directly. You should see: - -

      - - - - -
      -BTS TEST
      -REQUESTED

      -CH :  bbbb   -
      - -

      where instead of "bbbb" parameter you should see value read from position 33 -from phonebook from SIM card (or "xxxx", when value there was wrong, SIM card -was not ready, etc. - of course, you will not enable this test then). -

    • -
    • restart phone - "aaa" parameter should change to "ON"
    • -
    - -

    To disable this test you should: -

      -
    • enter directly into it
    • -
    • restart phone - "aaa" parameter should change to "OFF"
    • -
    - -

    BE CAREFULL IN MODEL 6210 WITH THIS TEST -In firmware 4.27 (older probably too, I don't know, if it's corrected in newer) -phone can display CONTACT SERVICE after using it or -there could be different problems with it. Here are three known examples: - -

      -
    • after enabling test everything was correct. After writting number 0 -and resetting phone (it was one method for disabling this test in older models) -CONTACT SERVICE was displayed. User put SIM card into another phone, changed -33 position in phonebook to CORRECT channel number -(1-124, 512-885), put SIM back to 6210 and normally used it (second -6210 with the same symptoms wasn't repaired after making it). -
    • -
    • in this concrete example Nokia 6210 displayed info about finding channel 79. -User written its' number in phonebook on 33'th position. After third reset -of phone CONTACT SERVICE was displayed. SIM card was put into Nokia 5110 and -channel number was changed to 76 (this channel was visible in this phone). -When SIM card was put back into Nokia 6210 phone, it was possible to enable -it. In this test phone displayed 'BTS TEST ON CH:79' (channel 79 was also visible -in test 3).
    • -
    • after enabling this test phone was restarted. After entering PIN it hanged, -"Code accepted" was displayed and it squeaked. And the same problem -was visible after each reset. User disabled netmonitor via cable. -After it phone phone very often wasn't able to find network and user had -to disable it. Solution was disconnecting battery for about 1 hour. -Problems with finding -network were visible during about next 2 weeks.
    • -
    - -

    Test 18 - -

    - - - - - - -
    This menu allows you to turn on constant backlight of the screen and keyboard -(LIGHTS ON). This can be used for very fast battery discharging. We can also -use it as a flashlight - for example to check a schedule, your location on a -map, to be visible on the road :-), etc. But there is one condition: -any of the NetMonitor tests must be visible on the screen. - -

    If you turn this test on and then back off, the light will go out -(it won't react on key presses) for several minutes (good for games - -saves battery)... - -

    The light can be also constantly enabled, if you connect a car kit -(or simulate it - check test 75) -and "Light" setting (Menu 2-5 in Nokia 5110) will be set to "All". -This will work without NetMonitor (and any of its test) enabled! -

    - -

    Changes to this menu can be made by entering it directly. - -

    -

    - - - - - -
    - - - - -
    -
       LIGHTS   
    -    aaa
    -
    - - - - -
    Use menu to 
    -  toggle
    -  lights
    -  ON/OFF
    -
    - -

    -

      -
    • -aaa - can be set to either "ON" or "OFF" (default)
    • -
    - -

    In Nokia 2110i/2140: - -

    -

    - - - - - -
    - - - - -
    - -LIGHTS aaa

      -

    -
    - - - - -
    -Control   
    -Lights
    Status -
    -
    - -

    Test 19 - -

    - - - - - - -
    Each operator before giving a new or repaired base station -(BTS) for normal use, tests its cells. -GSM phones read this information and avoid using these cells. However, using -this menu, you can set your phone to use such cells, too -(DISCARD option) - sometimes it allows you to "improve" the coverage and range of your -network . - -

    If you want your phone to use only such barred cells, just set this menu to -REVERSE (but you won't be able to make or receive calls if there are no tested -cells in your neighborhood - good phone lock ?). - -

    ACCEPTED means that your phone uses only normal cells, which are allowed for use -(it works like any other phone). -

    - -

    Information about cell status is broadcasted on BCCH -channel as a CELL_BARRED parameter value. The settings of this menu can be -changed by entering it directly (but if you have previously enabled test in -test 17, current cell may have other status -than the chosen here (for example: you chosen barred cells only, but the phone -uses a normal one)). - -

    New settings are applied during next signal quality measurements (you can -advance this by making a call, forcing the phone to search for a network or -by holding the antenna with fingers for certain amount of time). - -

    Sometimes your phone may not be able to find cells with particular status -- it will show parameters of the cells with such status belonging to other -network (once I've set this menu to REVERSE and the phone started displaying -data of barred cells in forbidden for my SIM card network, because there were -no tested my home network cells in my neighborhood). Information about cell -status can be found in test 1 to -test 5. - -

    -

    - - - - - - - - - -
    - - - - -
    -
      CELL BARR 
    -  ACCEPTED
    - -

    The phone works as any other GSM phone (default) - only normal cells -

    - - - - -
    -
      CELL BARR 
    -  REVERSE
    - -

    The phone uses only tested cells

    - - - - -
    -
      CELL BARR 
    -  DISCARD
    - -

    The phone uses all existing cells (both normal and barred ones)

    - - - - -
    Use menu to 
    -toggle cell
    -barr status
    -DIS/ACC/REV
    -
    - -

    In Nokia 2110i/2140: - -

    -

    - - - - - - - - - -
    - - - - -
    -CELL
    -BARRING
    -ACCEPTED   -
    - -
    - - - - -
    -CELL
    BARRING
    -REVERSED  
    - -
    - - - - -
    -CELL
    BARRING
    -DISCARDED 
    - -
    - - - - -
    - DISCARD  
    - CELL
    - BARRING -
    -
    - -

    Test 20 -
    Information about battery and phone charger mode - -

    - - - - - - -
    - - - - -
     aaa   bbbbb
    -Tccc     ddd
    -Ceee    Wfff
    -gggg    hhhh
    -
    - - - - -
    BatVol ChMod
    -BTemp ChTime
    -ChrgVol Pwm
    - BTyp  BFDC
    -
    - -

    -

      -
    • -aaa - battery voltage (V/100 - for instance 7.19V is displayed as 719). -Range 0.00 - 9.99 V. When value decreases, your battery is more discharged -- you have less standby/speech time to next charging... -
    • - -
    • -bbbbb - information about battery charging: - -

      -

        -
      • xxxxx - charger not connected or charging disabled
      • -
      • BatCk - checking battery charge level (after each -TCH channel usage (a call) when charging NiMH battery)
      • -
      • BSIFa - charging interrupted (battery BSI -(Battery Size Indicator: one of battery connectors connected -with ground (BGND) to resistor inside battery - phone measure its -opór and can read battery type)) -measurement failed) -
      • -
      • CelBr - charging interrupted (one or more cells broken inside battery)
      • -
      • ChaCk - EM checks charger
      • -
      • Charg - charging
      • -
      • ColdC - charging a cold battery
      • -
      • ColdM - battery is cold, maintenance charging
      • -
      • CurFa - charging interrupted (charger current measurement failed)
      • -
      • DisCh - discharging
      • -
      • Faile - error
      • -
      • FastC - fast charging
      • -
      • FullM - battery full, maintenance charging
      • -
      • F_Che - checking fast charging process
      • -
      • HotM  - battery is hot, maintenance charging
      • -
      • I_Che - initialization of charging parameters test (then the phone displays 'Charging')
      • -
      • InitC - charging process initialization
      • -
      • L_Che - checking parameters of LiIon battery charging
      • -
      • LiAFu - fff parameter (Pwm) level is higher than max limit for a full battery
      • -
      • LiDCH - DCH charging (some kind of maintenance charging ?) of LiION battery
      • -
      • LiFul - fff (Pwm) parameter exceeded the max limit for a full battery during given period of time
      • -
      • LiHot - charging hot (warm) LiION battery
      • -
      • LithC - charging LiION battery
      • -
      • LiTxO - charging LiION battery, transmitter active (connection in progress)
      • -
      • LNFTx - charging LiION battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
      • -
      • M_Che - maintenance charging process test
      • -
      • MaBFD - maintenance charging (BFD)
      • -
      • Maint - maintenance charging
      • -
      • TmpFa - charging interrupted (phone's wasn't able to read natê¿enie -of resistor NTC inside battery connected to BTEMP and BGND battery connectors -and wasn't able to calculate battery temperature)
      • -
      • TxNoF - charging NiMH battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
      • -
      • TxOnC - charging NiMH battery, transmitter active (connection in progress)
      • -
      • VolFa - charging interrupted (error checking voltage from charger)
      • -
      -

      -

    • - -
    • -ccc - battery temperature (for example T+27 means +27 degrees centigrade). -Sometimes (when the phone was turned off and not used for a long time -(no connections, low power consumption), this parameter can match outdoor -temperature (so you will have a thermometer). If you need a temperature in -Fahrenheit degrees, you can use following formula: F = 32 + 9C/5 -(where F and C are Fahrenheit and Celsius degrees). The temperature of LiION -battery is also given in test 23.
    • - -
    • -ddd - charging time in hours (first digit) and minutes (2 last digits). -This counter is cleared when charging process begins (but not always - -it doesn't happen if: - -

      -

        -
      • -previous charging process wasn't complete -
      • - -
      • -mains parameters don't meet some requirements -
      • -
      - -

      I have also experienced that Nokia 6110 doesn't clear this counter after -changing the battery (for example from LiION to NiMH). It continues after -connecting the charger and stops when the battery is full or when you -disconnect the charger. -

    • - -
    • -eee - charging voltage (V/100). The battery isn't charged with a direct -current, but with a pulse current (this indicator constantly changes). -Range 0.0 - 18.7 V. When charging is complete, maintenance charging begins. -
    • - -
    • -fff - Charge control output (decimal - range 000 - 255)
    • - -
    • -ggg - capacity of the battery in mAh (some English descriptions and -NetMonitor help in Nokia 3110 write, that it's BSI battery multiplied by 4): -in case of LiION battery you will find here the same value as on battery casing -in NiMH batteries this value can differ even by 200 mAh and change depending -on the temperature (it it connected with battery's memory effect ?). -Unfortunately, it doesn't change always immedietaly after changing battery... -See also question -Netmonitor shows different battery capacity than info on it... -
    • - -
    • -hhhh - this counter lets us calculate remaining charging time: when charging -current is less than predefined limit, this timer will be started. -If timer reaches 0, charging will be stopped (it should be according to -some English descriptions, but I observed it very rarely). -
    • -
    - -

    In Nokia 3110 this menu looks as follows: - -

    - - - - - - -
    - - - - -
      aaa  bbbbb
    - Tccc   ddd
    - Ceee  Wfff
    -w gggg hhhh z
    -
    - - - - -
    BatVol ChMode
    -BTemp ChrTime
    -ChrgVol  Pwm
    -S 4BSI BFDC B
    -
    - -

    -

      -
    • -bbbbb - in N3110 this field can additionally contain NOTCH (no charging)
    • -
    - -

    In Nokia 9110 this menu looks as follows: - -

    - - - - - - -
    - - - - -
    aaa   bbbbbb
    -Tccc    ddd
    -i Ceee  Wfff
    - gggg   hhhh
    -
    - - - - -
    BatVol  ChMod
    -BTemp   ChTime
    -ChrgVol Pwm
    -BTyp    BFDC
    -
    - -

    -

      -
    • -i - information, whether travel charger is connected (1) or not (0)
    • -
    - -

    Fast charging (FastC in NetMonitor) means charging with bigger current -and with clever charger it doesn't damage your battery. - -

    When battery charging is ended, maintenance charging starts -(it's normal, that phone uses some energy and battery's discharging process -starts; still connected charger can complete energy losses). - -

    In Polish version of this manual you can also find links to some pages -in Polish language explaining some topics connected with charging and batteries. - -

    For curious people: some of the data, which are displayed here, can also be -found in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). - -

    - - - - - - -
    This test allows us to check the charger. You can also verify some of the battery parameters like: -
      -
    • -capacity
    • - -
    • -efficiency (of the battery cells)
    • - -
    • -voltage (if you are - say - on a trip, here you can check whether battery voltage is suitable for your flashlight)
    • -
    -
    - -

    Test 21 -
    Charging parameters (I noticed, that these values are correct only after -making a call while charging - they change only then (after ending call display -last registred values)) - -

    - - - - - - -
    - - - - -
     aaaa  bbbb 
    -  ccc   ddd
    -  eee   fff
    -
    - - - - -
    MTDif MPDif
    -BUpV  BDownV
    -AverV SumMF
    -
    - -

    -

      -
    • -aaaa - difference between measured and required charging voltage
    • - -
    • -bbbb - difference between measured voltage and the result of the -previous measurement, fraction is not displayed
    • - -
    • -ccc - the highest measured voltage in battery (with charging battery and -using it in the same time it can change) -
    • - -
    • -ddd - the lowest measured voltage in battery
    • - -
    • -eee - average voltage
    • - -
    • -fff - the sum of the parameters from test 22 -(range 0.00 - 9.99, for example 1.53 is displayed as 153) - my own observations -show, that DerivCount (Eaaa) parameter is not counted here. If this counter -reaches 1.00 or 0.99, 'Battery full' message is displayed and bar indicator -on the right side of the display stops. -
    • -
    - -

    Test 22 -
    Charging parameters and indicators - -

    - - - - - - -
    - - - - -
     Eaaa  Cbbb 
    - Dccc  Rddd 
    - Ieee  Afff 
    - Tggg  Vhhh
    -
    - - - - -
    DeriC ChAm
    - VDif VDrop 
    - VDTi AvDif
    - Temp Volt
    -
    - -

    -

      -
    • aaa - DerivCount
    • -
    • bbb - ChargeAmount
    • -
    • ccc - VolDiffToMax
    • -
    • ddd - VolDropCnt
    • -
    • eee - VolDiffTime
    • -
    • fff - AverDiff
    • -
    • ggg - temperature
    • -
    • hhh - voltage
    • -
    - -

    Here you can find several charging parameters and indicators. -All these fields (except for DerivCount) range is from 0.00 to 1.00 -(dot is not shown - for example 0.23 is displayed as 023). After disconnecting -the charger these fields can contain various values. Letters E, C, D, R, I, -A, T and V are displayed when the number is shorter than four digits. - -

    I received info, that in some (all ?) Nokia 6150 phones with firmware 4.13 -(LiION battery) there are ALWAYS displayed these values (is it bug in this -version of firmware ?): - -

    - - - - -
    - E251  C254 
    - 6399  6896
    - I255  A256
    - 1024  8447
    -
    - -

    Test 23 -
    Information about the battery - -

    - - - - - - -
    - - - - -
     aaaa  bbbb
    - cccc  dddd
    -eee fff gggg
    -hhh iiiijjjj
    -
    - - - - -
    TxOn   TxOff
    -ChCur  Stdby
    -Age CAP Curr
    -Tmp CmAhTarg
    -
    - -

    -

      -
    • -aaaa - voltage from the battery when transmitter is active (a.aaa mV)
    • - -
    • -bbbb - voltage from the battery when transmitter is inactive (b.bbb mV)
    • - -
    • -cccc - charging current (c.ccc mA). If the charger is not connected, 0 is shown. -In Nokia 3210 ALWAYS equal 0 (I think, that firmware in this model has some bug).
    • - -
    • -dddd - expected voltage from the battery in standby mode (d.ddd mV). You can -check whether your SIM card 's clock can be stopped in -test 51.
    • - -
    • -eee - estimate battery age (0 - new, 100 - old) for LiION batteries (the -value of this counter is probably based on measurements of work/discharging -time of the battery and its capacity (shown in test 20); -this is only a reference!) or 33 for NiMH batteries.
    • - -
    • -fff - battery charge level in percent (in older phones, like Nokia 5110, -25 - 1 bar, 50 - 2 bars, 75 - 3, 100 - 4 bars on -the right side of the screen; in never, like Nokia 6210 - 100 - 6 bars, -80 - 4 bars, 60 - 3 bars, 40 - 2 bars, 20 - 1 bar). -This indicator (and parameter) is very -inaccurate during charging process (it reaches 100 almost immediately) - -better use ii and jjj parameters then. -
    • - -
    • -gggg - temporary power consumption indicated by PSM (according to some -English descriptions in decimal parts of mA; I think that this field shows -values in mA - see on calculation of approximate battery work time below) -
    • - -
    • -hhh - LiION battery temperature (also shown in test 20 -- sometimes both these indicators are different) or 0 (for NiMH battery) -
    • - -
    • -iiii - how many mAh were "loaded" to the battery until now. If it is approximately -equal to jjj, the latter parameter raises (or charging is complete). This parameter -is cleared after each use of TCH channel -(for example: after a call) while charging (with NiMH battery) - you can use -this tip to extend charging time almost ad infinitum. I noticed it with Nokia 6110 -and LiION battery (when I turned off and on phone during charging process) too. -This value is updated every 14 seconds (Nokia 5110 with standard charger). -
    • - -
    • -jjjj - battery capacity value (in mAh) by which next charging stage is complete -(see description of the previous parameter). I noticed, that it's cleared -during LiION battery charging (when I turned off and on phone during charging -process) in Nokia 6110. -
    • -
    - -

    For curious: some of the data, which are displayed here, can also be found -in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). - -

    - - - - - - -
    Here you can check your battery type (LiION or NiMH). -
    - -

    Approximate power consumption (this can be changed and modified by many other factors) while using individual channels -(Nokia 5xxx and 6xxx): - -

    -

      -
    • -during transmission (TX parameter value - phone transmission power - can be -checked in test 1) - using -SDCC and TFR channels (Nokia 6110): - -

      - - - - - - - - - - - - - - -
      TXpower consumption (gg parameter)
      over 1992
      16-1899
      14-15105
      13114
      12123
      11136
      10151
      9173
      8198
      7232
      6269
      5300
      - -

      Conclusion: battery work time depends in a very high degree on the network -parameters (most advertising materials contain standby time measured for the -phone transmitting with lowest power (highest TX)). -

    • - -
    • -AGCH: 310 mA in Nokia 5110 and 6110
    • - -
    • -CCCH i CBCH: -Nokia 6110 phones with older software (like 4.73) show 20 and 34 accordingly. -I don't know whether this is caused by some bug in their firmware (these values -are most probably given in mA/10) or the power consumption is really that high -(because Nokia 5130 shows 34 too). -Anyway, I checked, that Nokia 5110 (and 6110 v5.31) phones display 3 mA while -using CCCH channel. I think that turning off -"cell broadcasting" (if it is not supported by your network) can be very -"profitable" for your phone (longer standby time etc.) - look -here). When the phone collects -BTS identification data -(for BTS, which will be now used - has stronger -signal than previous - see C2 description -for details), this value changes to 220 mA (but only for a short while). -
    • - -
    • -NSPS: 55 in both Nokia 5110 and 6110 (is this value -in mA or in mA/10 ?) -
    • -
    - -

    Turning on backlight takes 90 mA more, and while charging another 17 mA should be added. - -

    In Nokia 3210 these data are different for different person (does it depend on firmware version, -frequency ?) - - - - - - -
    standbyreading BTS identification dataturning on backlight
    52 mA90 mA+155 mA
    8 or 9 mA?+159 or +160 mA
    53, sometimes (rarely, during short time) 8 mA93 mA+158 or +159 mA
    8 mA?+154 mA
    - -

    - - - - - - -
    If you know the power consumption, you can calculate approximate battery work time: -
      -
    • -900 mAh / 225 mA = 4 hours of talk time (on average)
    • - -
      Please note, that when using SDCC channel -the phone initially uses full power and the gradually reduces it. - -
    • -900 mAh / 5,45 mA = 165 hours of standby time (on average)
    • - -
      Remember, that the phone makes PLU even in standby mode. -
    -
    - -

    Test 24 - -

    - - - - - - -
    - - - - -
    -3476    3481
    -BSI:     551
    -ET:        9
    -  111      1
    -
    - - - - -
    V_inst V_avg
    -BSI value
    -Elapsed time
    -RST_m  RST_h
    -
    - -

    This is probably meaning of these parameters: - -

    -

      -
    • bbbb - (Voltage average ?) average value of voltage from battery ?
    • -
    • ccc - (Battery Size Indicator) info connected with battery
    • -
    • dddd - how many minutes phone work from enabling ? (minutes)
    • -
    • eeee - (Rest Standby Time minutes ?) -does phone estimate here, how long phone can be in standby up to -next charging ? (minutes)
    • -
    • ffff - (Rest Standby Time hours ?) -does phone estimate here, how long phone can be in standby up to -next charging ? (hours)
    • -
    - -

    Test 25 - -

    - - - - - - -
    - - - - -
    -    0      1
    -10059
    - 5664    641
    -    1      0 -
    -
    - - - - -
    -Chrgtp #Bars
    -alpha
    -zeta     phi
    -noblw  nobcr -
    -
    - -
    -Back to the top
    - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    - -

    Marcin Wiacek (WWW) -
    Last modification: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (4/7) + + + + + +

    Main page

    +
    NetMonitor in Nokia phones (4/7) +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    + +
    + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    + +
    + +

    Test 8 + +

    In Nokia 6185/6188 it looks like follows: + +

    + + + +
    CDMA
    + + + + +
    +TADD TDROP
    +TCOMP TTDROP
    +WW1 WW2 WW3
      +
    +
    AMPS
    + + + + +
    +1STBY_RX7244
    +XNRML_RX006C
    +X_N_RX_O004C
    +X_N_RX_F0020
    +
    +

    CDMA

    +

      +
    • TADD - threshold to add a new active PN (raw value ex: 28 = Ec/Io at -14 dB), [TDROP] : threshold to drop an active PN (raw value ex: 32 = Ec/Io at -16 dB)
    • +
    • TCOMP - an other threshold to add an active PN when a candidate PN becomes stronger than an active PN
    • +
    • TTROP - timer to drop a PN when power of this PN goes below TDROP
    • +
    • WW1 - value of the seach window for the active PN
    • +
    • WW2 - value of the seach window for the neighbour PN
    • +
    • WW3 - value of the seach window for the remaining PN.
    • +
    +
    + +
    In Nokia 6210: + +

    + + + + + + + + +
    + + + + +
    +CCCH
    +Ts  01234567
    +Rx  xxxxxxxx
    +Tx  xxxxxxxx
    +mCh x mPw xx +
    +
    + + + + +
    +9600/14000

    +TS for Rx
    +TS for Tx
    +MainCh/PwrLv +
    +
    + +

    it is connected with data transmission. +In line with Rx and Tx you see, which Time Slots are used for it +(for receiving and transmiting). + +

    When phone doesn't use HSCSD (High Speed Circuit Switched Data), +only one time slot is used both for transmiting and receiving +(it's visible also in test 1 then). + +

    When use HSCSD, only this test gives full information about it... +You can check here, what can be maximal theoretical speed for downloading +and uploading data (number_of_used_slots * 9600 or number_of_used_slots * 14000)... + +
    mCh seems to be "main" time slot among them used for transmission +(one that seems to be always used for both ways - probably can be viewed as the slot +that would be used if no HSCSD were used, and all other slots are "extra" slots to +increase number of sent/received data). It seems to be displayed in +test 1 too... + +
    mPw seems to be the power level for the "main" time slot +(it seems to be displayed in test 1 too - units +are the same).... +The power levels for all 8 individual slots can be found in +test 9. + +

    First line shows channel displayed in test 1 too. +It's available in new firmware only (5.02). + +

    In Nokia 9210: + +

    + + + + + + + + +
    + + + + +
    +Ts  01234567
    +Rx  xxxxxxxx
    +Tx  xxxxxxxx
    +mCh x mPw xx +
    +
    + + + + +
    +HSCSD call
    +Rx timeslots
    +Tx timeslots
    +MainCh TS Pw +
    +
    + +

    Test 9 + +

    In Nokia 6185/6188 it looks like follows: + +

    + + + +
    CDMA
    + + + + +
    +006 330 270
    +047 062 062
    +342 102 030
    +062 062 062
    +
    +
    AMPS
    + + + + +
    +1PT_1_OK724E
    +RPT_1_FA0042
    +TIME__2_0000
    +MER2HIGH0002
    +
    +

    CDMA

    +Tracked PN Offsets (lines 1,3) and EC/SO (Energy per chip per noise). +An EC/SO of 062 likely means not really usable? lower numbers are better +strengths). See test 2 for PN offset information. +

    + +
    In Nokia 6210: + +

    + + + + + + + + +
    + + + + +
    +mCh x mPw xx
    + xx xx xx xx
    + xx xx xx xx
      +
    +
    + + + + +
    +MainCh/PwrLv
    +PwrLv TS 0-3
    +PwrLv TS 4-7
    +  +
    +
    + +

    and is connected with HSCSD (High Speed Circuit Switched Data) +and shows power levels for each time slot +used in data transmission +(more info about data transmission in Nokia 6210 is visible also in +Test 8). Units here seems to be the same to units +in test 1 (power level used for "main" +time slot in transmission is displayed also there). + +

    In Nokia 9210 test looks like in 6210, help is different: + +

    + + + + +
    +MainCh Tw Pw
    +TS1  2  3  4
    +  5  6  7  8
    +HSCSD PW Lev +
    + +

    Test 10 +
    Network information (concern current or recently monitored network) + +

    + + + + + + +
    + + + + +
    TMSIaaaaaaaa
    +T321:bbb/ccc
    +PRP:d  ee ff
    + ggggg  hhh 
    +
    + + + + +
    TMSI(hex)
    +T3212ctr/tim
    +PaRP DSF AGC
    +  AFC   Ch
    +
    + +

    +

      +
    • +aaaaaaaa - TMSI: +a number assigned to each phone logged to the network (it can be done, for +example, after power on, a call, sending/receiving SMS, requesting some services, +PLU). Value from the SIM card +(each new number is written there) in hexadecimal format. If assigning this +number fails (for example because transmitter was turned off in +test 45 or SIM card is not active), +'xxxxxxxx' is shown here and the phone displays 'No network coverage' message (when you try +to make a call). +
    • + +
    • +bbb - value of the so called T3212 counter: the phone periodically informs +the network about its location +(makes a PLU). 'bbb' counter means time from +last update and can be a value from 1 to 'ccc' (where 1 means 6 minutes, 2 - +2 * 6 min = 12 min, etc.). This counter is also cleared after each connection, +sending/receiving SMS or requesting a network services - for example call +diverting (but the counters from test 64 +don't change). The value doesn't change (it's always equal 0) with not active +SIM card.
    • + +
    • +ccc - max T3212 counter value: period of time, after which the phone sends +information about its location - makes a PLU +(range from 1 to 240, where 1 means 6 min between updates and 240 means +24 hours (240*6min)). This value is received from the network (if it is 0, +the network doesn't require information about phone location). For Polish +networks Era GSM and +Plus GSM it's equal 30 (3h), for +Idea 2h. Displayed normally +even, when SIM card is not active. +
    • + +
    • +d - Paging Repeat Period, sometimes called DRX (Dincontinuous Receive): +period of time, after which the phone turns its receiver on to check whether +someone is calling us (range from 2 to 9 - the higher, the longer time between +these checks so the phone uses less power: +PRP=2 means about 0.95 s, a PRP=9 equal 4.25 s.). +Interesting thing is that max standby times are usually calculated by the manufacturers +for this parameter equal 9. +
    • + +
    • +ee - DSF (Downlink Signalling Failure). If it is negative, +0 is shown. Max value of this parameter is 45. When the phone uses +TCH channel, xx is displayed. +
    • + +
    • +ff - AGC (Automatic Gain Control) - automatic gain control +of the phone receiver. The stronger the signal from BTS, +the lower this value. It is displayed correctly only when the phone uses +TCH/SDCCH channel +(for example: during a call) and can be a value from 0 to 96 (dB ?). +
    • + +
    • +ggggg - in some English descriptions it's "VCTCXO AFC DAC control" - a value +between -1024 and 1023. In help it's described as AFC +(Automatic Frequency Control) - automatic adjusting phone's +receiver to the frequency of the signal transmitted by BTS. +The more this value differs from 0, the more frequency corrections have to be +made by the receiver (it depends on the channel used in communication with +BTS - see test 1) +to "match" the BTS. +
    • + +
    • +hhh - CH (channel): number of channel used in communication with cell (decimal) +
    • +
    + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +Pagrepp. d
    +T:aaaaaaaa
    +T3212: bbb +
    +
    + + + + +
    +PagRepPer.
    +TMSI
    +T3212 +
    +
    + +

    In Nokia 3110 this test looks like follows: + +

    + + + + + + +
    + + + + +
    TMSI:aaaaaaaa
    +T3212:bbb/ccc
    +PRP:d  ee ff
    +w gggg  hhh z
    +
    + + + + +
    TMSI(hex)
    +T3212 ctr/tim
    +PagRP DSF AGC
    +S AFC   CH  B
    +
    + +

    If the phone after power on wasn't logged to any network, +some default values are displayed here (except for TMSI). + +

    Some of these values can be also found in Nokia service programs +(for example in WinTesla - in menu "Testing" / "RF Information"). + +

    + + + + + + +
    In test 64 you can check, +how many times your phone has sent an information about its location. +If you have sent an SMS, you can check (exact to 6 min), when you did it +(if it wasn't earlier than value 'ccc' for your network) - check 'bbb' parameter value. +
    + +

    And here is this test for Nokia 6185/6188: + +

    + + + +
    CDMA
    + + + + +
    +414 084 222
    +062 060 062
    +420 366 252
    +062 062 062 +
    +
    +
    AMPS
    + + + + +
    +1X_XSTBY000D
    +SYNC_LOS0031
    +DEC_SAME0000
    +VOTED_BT0000
    +
    +

    CDMA

    +Tracked PN Offsets (lines 1,3) and signal strengths. +

    + +

    Test 11 +
    Identification of the currently used (last monitored) network + +

    + + + + + + +
    + + + + +
    CC:aaa NCbbb
    +  LAC:ccccc
    +  CH : deee
    +  CID:fffff
    +
    + + + + +
     MCC    MNC
    +LocAreaCode 
    +ServChannel
    +   CellId
    +
    + +

    +

      +
    • +aaa - MCC (Mobile Country Code): code of the network home +country (260 for Poland) - decimal. +
    • + +
    • +bbb - MNC (Mobile Network Code): network code +(different for networks with the same MCC - for example, in Poland: +01 for Plus GSM, 02 for Era GSM and +03 for Idea). + +

      Generally values here are decimal. Sometimes are exceptions (when and why ?) +and you can find hexadecimal value here: if you will convert it into +decimal and result treat as hexadecimal value (convert it into decimal value +again), you will have decimal value of this parameter (for example, +3F hex=63 dec; 63 hex=99 dec). + +

      When you use phone working in PCS 1900 +system (for example, Nokia 6190), this number can be 3-digit long. It's decimal (always ?). +If it consist of two digits, you will see "?" instead of last (for example, +you will see "37?" for "37")

      +

    • + +
    • +ccccc - LAC (Location Area Code): code of the current +cell area (decimal or hexadecimal). The size of this area (with the same LAC) +depends on the network. After changing LAC, the phone makes +Location Update.
    • + +
    • +d - H, if frequency hopping is enabled (otherwise empty). This information +can be also found in test 1 and +test 12.
    • + +
    • +eee - CH (channel): number of channel used in communication with cell (decimal) +
    • + +
    • +fffff - CID (Cell Identifier): number of the current cell +(each cell in given area has its own unique ID number) - shown decimal or hexadecimal. +
    • +
    + +

    LAC and CID format (if they're displayed decimal or hexadecimal) depends +on your phone's model and its software version (for instance: Nokia 3210 +and Nokia 5110 with newer software display decimal values, while Nokia 5110 +with 4.59 (and older) firmware and some previous models (like Nokia 3110) +use hexadecimal format). + +

    GSM phones recognize the network using MCC and MNC codes +(list of these codes can be found at +http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html). +Network names shown on phone's display (like 'ERA GSM', +'Plus GSM' or 'Idea') +are stored in phone's memory (they're set by the producer - cellular network doesn't +send any name, just these two numbers). In order to correctly recognize a +new network, you must upgrade the firmware of the phone (or it won't display +network name). Some older phones, like Nokia 2110i (or newer models +without firmware upgrade) display names like PL-03 (they recognize that +MCC=260 is Poland (which has international code PL), but they don't know +the network name - only its MNC). One (?) text name can also be changed +using appropriate programs: + +

    + +

    In Polish version of this manual the description of BTSes contains +URLs of pages with BTSes lists - with their locations, LAC and CID +(for Polish networks). + +

    If the phone after power on wasn't logged to any network, some default values are displayed here. + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +aaa eee bb
    +LAC:  cccc
    +CellI:ffff +
    +
    + + + + +
    +MCC CH MNC
    +LocAreaCod
    +CELL IDent +
    +
    + +

    In Nokia 3110 this menu looks like follows: + +

    + + + + + + +
    + + + + +
    CC:aaa NC:bbb
    +  LAC:cccc
    +  CH :deee
    +w CID:ffff  z
    +
    + + + + +
     MCC     MNC
    + LocAreaCode
    + ServChannel
    +S CellId    B
    +
    + +

    And here is for Nokia 6185/6188: + +

    + + + +
    CDMA
    + + + + +
    +162 054    
    +062 062
    +186 084
    +062 051 +
    +
    +
    AMPS
    + + + + +
    +11_BETTR0000
    +SYNC_SAM0000
    +MSG__BTR0000
    +SFLG_BTR0000
    +
    +

    CDMA

    +Tracked PN Offsets (lines 1,3) and signal strengths (only, when phone is in CONV state) +

    + +

    Test 12 +
    Parameters of currently used (last monitored) network + +

    + + + + + + +
    + + + + +
    CIPHER :aaa 
    +HOPPING:bbb
    +DTX    :ccc
    +IMSI   :ddd
    +
    + + + + +
    CipherValue
    +HoppingValue
    +DTXValue
    +IMSIAttach
    +
    + +

    +

      +
    • +aaa: + +

      +

        +
      • +OFF: phone doesn't transmit
      • + +
      • +A51: phone transmits, data are coded using A5/1 algorithm (more complicated version)
      • + +
      • +A52: phone transmits, data are coded using A5/2 algorithm (a version designed +for use in some "doubtful" countries - potential future enemies (like Iraq)). It's easier to +decode and crack, but still secure (not cracked) - but I can be wrong ! +
      • +
      +

      +

    • + +
    • +bbb - informs, whether frequency hopping is enabled (ON) or disabled (OFF) +
    • + +
    • +ccc - informs, whether DTX is used (ON) or not (OFF) by phone +
    • + +
    • +ddd - informs, whether IMSI attach is allowed (ON) +
    • +
    + +

    All the values in this menu are updated only when the phone uses TCH +channel. + +

    If the phone after power on wasn't logged to any network, some default values are displayed here. + +

    More information about A5/1 and A5/2 algorithms can be found at www.scard.org/gsm/. + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +CIPHER aaa
    +HOPPIN bbb
    +DTX    ccc +
    +
    + + + + +
    +CIPHERING
    +HOPPING
    +DTX ON/OFF +
    +
    + +

    In Nokia 3110 this test looks as follows: + +

    + + + + + + +
    + + + + +
    CIPHER :aaa
    +HOPPING:bbb
    +DTX    :ccc
    +w IMSI :ddd z
    +
    + + + + +
    CipheringValu
    +HoppingValue
    +DTXValue
    +S IMSIAttachB
    +
    + +

    In Nokia 6185/6188 in AMPS it looks different: + +

    + + + + +
    +1IN_FAIL0044
    +DYN_FAIL01C7
    +MIN2_FAI0045
    +DYN2_FAI01CB
    +
    + +

    Test 13 +
    Information about DTX in currently used (last monitored) network + +

    + + + + + + +
    + + + + +
    aaaaaaaaaa 
    +DTX(DEF):bbb
    +DTX(BS) :ccc
    +
    + + + + +
    DTXMode
    +DefaulDTXSta
    +DTXValFromBS
    +
    + +

    +

      +
    • +aaaaaaaaaaaa: information, whether the phone uses DTX: + +

      +

        +
      • DTX:ON - yes, it uses
      • +
      • DTX:OFF - no, it doesn't use
      • +
      • DTX:DEF - yes or not (depends on default setting - bbb parameter)
      • +
      • NOTALLOWED - the phone cannot independently decide to use DTX or not (BTS doesn't allow this)
      • +
      +

      +

    • + +
    • bbb - default DTX setting: ON or OFF.
    • + +
    • +ccc - DTX value from BTS +(on uplink - a channel used in communication in direction phone-BTS): + +

      +

        +
      • MAY - BTS lets the phone "decide", whether to use DTX or not
      • +
      • USE - BTS forces DTX usage
      • +
      • NOT - BTS doesn't allow to use DTX
      • +
      +

      +

    • + +
    + +

    If the phone after power on wasn't logged to any network, some default values are displayed here. + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +cccccccccc
    +MS DEF:bbb
    +dddddddddd +
    +
    + + + + +
    +DTX STATUS
    +DEF STATE
    +BS PARAM +
    +
    + +

    +

      +
    • cccccccccc - the same to aaaaaaaaaa. Values: "DTX  ON", "DTX OFF", "DTX DEF" lub "NOTALLOWED"
    • +
    • dddddddddd - the same to ccc. Values "MS MAY USE", "SHALL USE" or "SHALL NOT"
    • +
    + +

    + + + + + + +
    If BTS allows this (if the last parameter's +value is MAY), you can decide whether to use DTX +or not by entering this menu in a direct mode. +
    + +

    Test 14 +
    By entering this menu in direct mode, you can change aa parameter value from 01 (default) to 00 (or vice versa). + +

    + + + + + + +
    + + + + +
     SCREENING  
    + INDICATOR
    +   IS aa
    +
    + + + + +
    Use menu to 
    +  change
    + Screening
    + indicator
    +
    + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +SCREEN IND
    +SET TO  aa
      +
    +
    + + + + +
    +CHANGE
    +SCREENING 
    +INDICATOR +
    +
    + +

    Test 15 + +

    In Nokia 5190/6190: + +

    + + + + + + +
    + + + + +
    +aaa bbb cccc
    +ddd eee f
    +gg hh ii
    +jjjjjjjjjj +
    +
    + + + + +
    +CH RxL TxPwr
    +MdSt SAT DCC
    +ST   TxA RxA
    +  CS STATE +
    +
    + +

    When you don't have additional module +(it's between "main" phone and battery), you will see "AMPS display not available" +here. After connecting it you will see values connected +AMPS: + +

    +

      +
    • aaa - channel used for communication with cell (0 during standby)
    • +
    • bbb - level of received signal in dB
    • +
    • ccc - level of the transmitted signal (0 during standby)
    • +
    • eee - SAT, x during standby
    • +
    • f - DCC (Digital Color Code) on the +ACCH channel (0-3, - = not locked), x during standby
    • +
    • jjjjjjjjjj - cellular state: +

      +

        +
      • IDLE - standby
      • +
      • CALL GOING - exchange of data required to make call
      • +
      • IN CALL - during call
      • +
      • PCH INIT - scanning available paging channels ? (for example, after call)
      • +
      • CCH INIT - scanning control channels ?
      • +
      • ACCESS - accesing network ?
      • +
      +
    • +
    + +

    and 6210: + +

    + + + + + + + + +
    + + + + +
    +  Tx27178506
    +ReTx42645758
    +  Rx27178505
    +RTRq27178504 +
    +
    + + + + +
    +Sent frames
    +Re-transmis.
    +Rec. frames
    +Re-send reqs +
    +
    + +

    In Nokia 6250 help is the same to help from 6210, but screen with values is EMPTY. + +

    In Nokia 2110i/2140: + +

    + + + + + + +
    + + + + +
    +xxx SIM yy
    +LAC:  zzzz
    +wwwwwwwwww +
    +
    + + + + +
    +MCC    MNC
    +LocAreaCod
    +Upd status +
    +
    + +

    Values here can be different from these in test 11. +They're taken from file Location information (6F7E) on SIM card. + +

    +

      +
    • xxx - MCC
    • +
    • yy - MNC
    • +
    • zzzz - LAC (hexadecimal)
    • +
    • wwww - state of Location Update +
        +
      • +Updated - value from SIM (bits b3 - b1) 0 0 0, meaning: done Location Update in Location Area, +which is shown on the screen +
      • +
      • NotUpdated - value 0 0 1, meaning: Location Update not done or didn't end with success
      • +
      • PLMN Not A - value 0 1 0, meaning: LPLMN not allowed
      • +
      • LA Not All - value 0 1 1, meaning: Location Area not allowed
      • +
      • Reserved - value 1 1 1, reserved for future use
      • +
      • Undefined0 - value 1 0 0, undefined value
      • +
      • Undefined1 - value 1 0 1, undefined value
      • +
      • Undefined2 - value 1 1 0, undefined value
      • +
      • LA NotRead - file wasn't read from SIM
      • +
      +
    • +
    + +

    Test 17 + +

    +USERS OF NOKIA 6210 HAVE TO READ FIRST NOTES WRITTEN ON THE END OF DESCRIPTION +FOR THIS TEST. IN OTHER CASE THEY CAN DAMAGE THEIR PHONES. + + +

    This menu lets the phone test one concrete channel used in communication +with cell (the phone doesn't seek channel with the strongest signal, but uses +the channel chosen by you: you can use channels 1-124 for GSM 900 +and 512-885 for GSM 1800). Each GSM network has its own assigned channels +from these ranges (which means that each two networks in one country can't +use the same channels - for example, in Poland Plus GSM +cannot use Era GSM channels and vice versa). + +

    +

    + + + + + + + + + +
    GSM 900 (1-124)
    GSM 1800 (512-885)
    TIM (222-01)
    8-64 (16 most important cities) or 8-50 (outside them)
    736-760
    Omnitel (222-10)
    66-118 (16 most important cities) or 77-118 (outside them)
    861-885
    Wind (222-88)
    52-75 (outside 16 most important cities)
    761-810
    Blu (222-??)
    -
    811-860
    Plus GSM (260-01)
    1-14 and 37-67 (37 and 67 for testing)
    749 - 760, 850 - 884 ?
    Era GSM (260-02)
    15-36 and 68-90 (15 and 36 for testing)
    736 - 748, 811 - 847 ?
    Idea (260-03)
    91-114, 115-124 from January 2004
    733, 763 - 810
    +
    + +

    You can enter numbers of channels belonging to any network (if you enter +a channel of forbidden network, you will see all network parameters, +but obviously you won't be able to establish connection (except for +emergency calls)). After enabling this test your phone won't be able to make +handovers. + +

    To enable this test, proceed as follows (sometimes this procedure doesn't +work - but turning the phone off and then on often helps; I don't know why): + +

    +

      +
    • +save (change) desired channel number on position number 33 of the SIM card's +phone book in decimal format (not in phone's memory!) - +if you save '0' there, this test will be inactive! +However, this step is not necessary, if this number was stored there earlier - +you can check this with 33# code). Remember, that phone checks used format. Here are +some examples of correct entries: "1", "700".
    • + +
    • go to test 17
    • + +
    • once again enter test 17 directly
    • + +
    • switch your phone off and then back on
    • +
    + +

    To disable this test: + +

    +

      +
    • enter test 17 directly
    • + +
    • switch the phone off and back on (sometimes it isn't needed - +phone should disable test, when loose signal on this channel; +but it's better to do that to avoid potential problems) +
    • +
    + +

    Some interesting results can be achieved, when (guess why ?): + +

    +

      +
    • you enable this test
    • + +
    • then you switch test 19 to REVERSE
    • + +
    • turn off the test, but not the phone (by entering test 17 one time in a direct mode)
    • +
    + +

    In this case the phone "jumps" from one channel to another and monitors +channels of different networks - you can see LAC and CID codes of the cells. +Furthermore, the phone cannot log to its home network (though it displays +parameters of its channels). Several times I got "Insert SIM card" or +"SIM card rejected" messages - it may be some bug in firmware. After turning +the phone off and then on everything works fine. + +

    + + + + + + +
    The above tip can be used for fast battery discharging (however your phone +won't be accesible in the network). + +

    If you want to check some informations about different than your network, you +can use different tip too: + +

      +
    1. select the test, where will be displayed interesting for you information +about this network
    2. +
    3. go to the manual network selection (for example, Menu 4-2-4-2 in Nokia +5110)
    4. +
    5. select interesting for you network
    6. +
    7. wait few seconds (some time is required to start logging into this network) +and press "Quit" (NOT (c) key) or wait, until phone will display any message +(for example, that logging wasn't successfull)
    8. +
    9. press fast (c) key to leave phone's menu
    10. +
    + +

    Information about interesting for you network will be displayed during few seconds... + +

    + +

    I heard about some cases, when this test turned itself spontaneously on +after loosing the signal by the phone. I didn't experience this, but if this +has ever happened to you, just save 0 on 33rd position of the SIM card's phone +book. + +

    + + + + + + +
    Since Nokia 51xx/61xx phones don't allow choosing the position for the phonebook entry, +I want to suggest: + +
      +
    1. check whether you already have some number stored on this position +(using 33# code)
    2. + +
    3. +if the phone displays 'Invalid location', you have to add new entries to the +phonebook until you hit this position and the phone doesn't display this +message (repeating 1st step after each new entry) +
    4. + +
    5. +after displaying the number, you have to find out who's number is this. +You can do it in two ways: + +

      +

        +
      1. +just recall (or check the whole phonebook) +
      2. + +
      3. +turn off the transmitter in +test 45 and call this number +(the name assigned to this number will be show on screen - you will also find +it on the 'Last dialed' list) +
      4. +
      +

      +

    6. + +
    7. +edit the phone book (this position) - you can change the name or the (channel) number +
    8. + +
    9. +if the phone asks you, whether to replace the old number or to save it on new location, choose the former option +
    10. +
    + +

    +To store number on chosen location you can also use other Nokia phone +(for example 2110), other cellular phones or appropriate software. +For example: in Nokia Cellular Data Suite you can export list of phone numbers +to file, open it in editor, change and upload to phone. It's simple, isn't it ? +

    + +

    +

    + + + + + +
    + + + + +
    +
      BTS TEST  
    +    aaa
    +
    + + + + +
    Use menu to 
    +toggle BTS
    +test ON/OFF
    +
    + +

    +

      +
    • +aaa - can be set to "ON" or "OFF"
    • +
    + +

    + + + + + + +
    This test can be very usefull when: + +

    +

      +
    • +you want to use some particular cell (for example to test whether it is +possible to use a cell located 20 km away) +
    • + +
    • +you'd like to avoid roaming (which is much more expensive) - for example +when you are close to the border (and the phone constantly logs to the network +of the neighbor country, because it has a stronger signal) - you just switch +your phone to the channel used by your network... +
    • + +
    • +other available network has very strong signal (for example -85 dBm) and the +signal of your home network is very weak (-100 dBm) - your phone can have +serious problems with logging to your network until you use this test +
    • + +
    • +you want to monitor the state of some very weak channel - I received some mails, that +the lowest measured with this method signal strength was -118 dBm +
    • +
    +
    + +

    In Nokia 2110i/2140: + +

    +

    + + + + + +
    + + + + +
    + +BTSTESTaaa +

      +

    +
    + + + + +
    +Tells if
    +BTS test
    +is ON/OFF  +
    +
    + +

    Number of channel must be saved in 98 position of B memory. + +

    Many users of Nokia 3210 say, that in this model there are problems with enabling +and disabling this test - part of firmware connected with it has probably some bug(s)... +I read even in one newsgroup such post (here is in translation): + +

    +Few people after enabling test 17 made reclamations in service, that phone +doesn't work. The most interesting is (I'm sure, that in one case) reclamation +was taken into consideration !!!! - phone was exchanged !!! + + +

    In new models (Nokia 3310, 6210, 6250, 8210) it's a little different: + +

    +

    + + + + +
    + + + + +
    +BTS TEST
    +   aaa

    +CH :  bbbb   +
    +
    + +

    ...but you can use it very similiar (to enable): + +

    + +

      + +
    • enter it directly. You should see: + +

      + + + + +
      +BTS TEST
      +REQUESTED

      +CH :  bbbb   +
      + +

      where instead of "bbbb" parameter you should see value read from position 33 +from phonebook from SIM card (or "xxxx", when value there was wrong, SIM card +was not ready, etc. - of course, you will not enable this test then). +

    • +
    • restart phone - "aaa" parameter should change to "ON"
    • +
    + +

    To disable this test you should: +

      +
    • enter directly into it
    • +
    • restart phone - "aaa" parameter should change to "OFF"
    • +
    + +

    BE CAREFULL IN MODEL 6210 WITH THIS TEST +In firmware 4.27 (older probably too, I don't know, if it's corrected in newer) +phone can display CONTACT SERVICE after using it or +there could be different problems with it. Here are three known examples: + +

      +
    • after enabling test everything was correct. After writting number 0 +and resetting phone (it was one method for disabling this test in older models) +CONTACT SERVICE was displayed. User put SIM card into another phone, changed +33 position in phonebook to CORRECT channel number +(1-124, 512-885), put SIM back to 6210 and normally used it (second +6210 with the same symptoms wasn't repaired after making it). +
    • +
    • in this concrete example Nokia 6210 displayed info about finding channel 79. +User written its' number in phonebook on 33'th position. After third reset +of phone CONTACT SERVICE was displayed. SIM card was put into Nokia 5110 and +channel number was changed to 76 (this channel was visible in this phone). +When SIM card was put back into Nokia 6210 phone, it was possible to enable +it. In this test phone displayed 'BTS TEST ON CH:79' (channel 79 was also visible +in test 3).
    • +
    • after enabling this test phone was restarted. After entering PIN it hanged, +"Code accepted" was displayed and it squeaked. And the same problem +was visible after each reset. User disabled netmonitor via cable. +After it phone phone very often wasn't able to find network and user had +to disable it. Solution was disconnecting battery for about 1 hour. +Problems with finding +network were visible during about next 2 weeks.
    • +
    + +

    In Nokia 9210 help looks like follows: + +

    + + + + +
    +  BTS TEST
    +    mode

      +carrier no.

    + +

    Test 18 + +

    + + + + + + +
    This menu allows you to turn on constant backlight of the screen and keyboard +(LIGHTS ON). This can be used for very fast battery discharging. We can also +use it as a flashlight - for example to check a schedule, your location on a +map, to be visible on the road :-), etc. But there is one condition: +any of the NetMonitor tests must be visible on the screen. + +

    If you turn this test on and then back off, the light will go out +(it won't react on key presses) for several minutes (good for games - +saves battery)... + +

    The light can be also constantly enabled, if you connect a car kit +(or simulate it - check test 75) +and "Light" setting (Menu 2-5 in Nokia 5110) will be set to "All". +This will work without NetMonitor (and any of its test) enabled! +

    + +

    Changes to this menu can be made by entering it directly. + +

    +

    + + + + + +
    + + + + +
    +
       LIGHTS   
    +    aaa
    +
    + + + + +
    Use menu to 
    +  toggle
    +  lights
    +  ON/OFF
    +
    + +

    +

      +
    • +aaa - can be set to either "ON" or "OFF" (default)
    • +
    + +

    In Nokia 2110i/2140: + +

    +

    + + + + + +
    + + + + +
    + +LIGHTS aaa

      +

    +
    + + + + +
    +Control   
    +Lights
    Status +
    +
    + +

    Test 19 + +

    + + + + + + +
    Each operator before giving a new or repaired base station +(BTS) for normal use, tests its cells. +GSM phones read this information and avoid using these cells. However, using +this menu, you can set your phone to use such cells, too +(DISCARD option) - sometimes it allows you to "improve" the coverage and range of your +network . + +

    If you want your phone to use only such barred cells, just set this menu to +REVERSE (but you won't be able to make or receive calls if there are no tested +cells in your neighborhood - good phone lock ?). + +

    ACCEPTED means that your phone uses only normal cells, which are allowed for use +(it works like any other phone). +

    + +

    Information about cell status is broadcasted on BCCH +channel as a CELL_BARRED parameter value. The settings of this menu can be +changed by entering it directly (but if you have previously enabled test in +test 17, current cell may have other status +than the chosen here (for example: you chosen barred cells only, but the phone +uses a normal one)). + +

    New settings are applied during next signal quality measurements (you can +advance this by making a call, forcing the phone to search for a network or +by holding the antenna with fingers for certain amount of time). + +

    Sometimes your phone may not be able to find cells with particular status +- it will show parameters of the cells with such status belonging to other +network (once I've set this menu to REVERSE and the phone started displaying +data of barred cells in forbidden for my SIM card network, because there were +no tested my home network cells in my neighborhood). Information about cell +status can be found in test 1 to +test 5. + +

    +

    + + + + + + + + + +
    + + + + +
    +
      CELL BARR 
    +  ACCEPTED
    + +

    The phone works as any other GSM phone (default) - only normal cells +

    + + + + +
    +
      CELL BARR 
    +  REVERSE
    + +

    The phone uses only tested cells

    + + + + +
    +
      CELL BARR 
    +  DISCARD
    + +

    The phone uses all existing cells (both normal and barred ones)

    + + + + +
    Use menu to 
    +toggle cell
    +barr status
    +DIS/ACC/REV
    +
    + +

    In Nokia 2110i/2140: + +

    +

    + + + + + + + + + +
    + + + + +
    +CELL
    +BARRING
    +ACCEPTED   +
    + +
    + + + + +
    +CELL
    BARRING
    +REVERSED  
    + +
    + + + + +
    +CELL
    BARRING
    +DISCARDED 
    + +
    + + + + +
    + DISCARD  
    + CELL
    + BARRING +
    +
    + +

    Test 20 +
    Information about battery and phone charger mode + +

    + + + + + + +
    + + + + +
     aaa   bbbbb
    +Tccc     ddd
    +Ceee    Wfff
    +gggg    hhhh
    +
    + + + + +
    BatVol ChMod
    +BTemp ChTime
    +ChrgVol Pwm
    + BTyp  BFDC
    +
    + +

    +

      +
    • +aaa - battery voltage (V/100 - for instance 7.19V is displayed as 719). +Range 0.00 - 9.99 V. When value decreases, your battery is more discharged +- you have less standby/speech time to next charging... +
    • + +
    • +bbbbb - information about battery charging: + +

      +

        +
      • xxxxx - charger not connected or charging disabled
      • +
      • BatCk - checking battery charge level (after each +TCH channel usage (a call) when charging NiMH battery)
      • +
      • BSIFa - charging interrupted (battery BSI +(Battery Size Indicator: one of battery connectors connected +with ground (BGND) to resistor inside battery - phone measure its +opór and can read battery type)) +measurement failed) +
      • +
      • CelBr - charging interrupted (one or more cells broken inside battery)
      • +
      • ChaCk - EM checks charger
      • +
      • Charg - charging
      • +
      • ColdC - charging a cold battery
      • +
      • ColdM - battery is cold, maintenance charging
      • +
      • CurFa - charging interrupted (charger current measurement failed)
      • +
      • DisCh - discharging
      • +
      • Faile - error
      • +
      • FastC - fast charging
      • +
      • FullM - battery full, maintenance charging
      • +
      • F_Che - checking fast charging process
      • +
      • HotM  - battery is hot, maintenance charging
      • +
      • I_Che - initialization of charging parameters test (then the phone displays 'Charging')
      • +
      • InitC - charging process initialization
      • +
      • L_Che - checking parameters of LiIon battery charging
      • +
      • LiAFu - fff parameter (Pwm) level is higher than max limit for a full battery
      • +
      • LiDCH - DCH charging (some kind of maintenance charging ?) of LiION battery
      • +
      • LiFul - fff (Pwm) parameter exceeded the max limit for a full battery during given period of time
      • +
      • LiHot - charging hot (warm) LiION battery
      • +
      • LithC - charging LiION battery
      • +
      • LiTxO - charging LiION battery, transmitter active (connection in progress)
      • +
      • LNFTx - charging LiION battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
      • +
      • M_Che - maintenance charging process test
      • +
      • MaBFD - maintenance charging (BFD)
      • +
      • Maint - maintenance charging
      • +
      • TmpFa - charging interrupted (phone's wasn't able to read natê¿enie +of resistor NTC inside battery connected to BTEMP and BGND battery connectors +and wasn't able to calculate battery temperature)
      • +
      • TxNoF - charging NiMH battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
      • +
      • TxOnC - charging NiMH battery, transmitter active (connection in progress)
      • +
      • VolFa - charging interrupted (error checking voltage from charger)
      • +
      +

      +

    • + +
    • +ccc - battery temperature (for example T+27 means +27 degrees centigrade). +Sometimes (when the phone was turned off and not used for a long time +(no connections, low power consumption), this parameter can match outdoor +temperature (so you will have a thermometer). If you need a temperature in +Fahrenheit degrees, you can use following formula: F = 32 + 9C/5 +(where F and C are Fahrenheit and Celsius degrees). The temperature of LiION +battery is also given in test 23.
    • + +
    • +ddd - charging time in hours (first digit) and minutes (2 last digits). +This counter is cleared when charging process begins (but not always - +it doesn't happen if: + +

      +

        +
      • +previous charging process wasn't complete +
      • + +
      • +mains parameters don't meet some requirements +
      • +
      + +

      I have also experienced that Nokia 6110 doesn't clear this counter after +changing the battery (for example from LiION to NiMH). It continues after +connecting the charger and stops when the battery is full or when you +disconnect the charger. +

    • + +
    • +eee - charging voltage (V/100). The battery isn't charged with a direct +current, but with a pulse current (this indicator constantly changes). +Range 0.0 - 18.7 V. When charging is complete, maintenance charging begins. +
    • + +
    • +fff - Charge control output (decimal - range 000 - 255)
    • + +
    • +ggg - capacity of the battery in mAh (some English descriptions and +NetMonitor help in Nokia 3110 write, that it's BSI battery multiplied by 4): +in case of LiION battery you will find here the same value as on battery casing +in NiMH batteries this value can differ even by 200 mAh and change depending +on the temperature (it it connected with battery's memory effect ?). +Unfortunately, it doesn't change always immedietaly after changing battery... +See also question +Netmonitor shows different battery capacity than info on it... +
    • + +
    • +hhhh - this counter lets us calculate remaining charging time: when charging +current is less than predefined limit, this timer will be started. +If timer reaches 0, charging will be stopped (it should be according to +some English descriptions, but I observed it very rarely). +
    • +
    + +

    In Nokia 3110 this menu looks as follows: + +

    + + + + + + +
    + + + + +
      aaa  bbbbb
    + Tccc   ddd
    + Ceee  Wfff
    +w gggg hhhh z
    +
    + + + + +
    BatVol ChMode
    +BTemp ChrTime
    +ChrgVol  Pwm
    +S 4BSI BFDC B
    +
    + +

    +

      +
    • +bbbbb - in N3110 this field can additionally contain NOTCH (no charging)
    • +
    + +

    In Nokia 9110 this menu looks as follows: + +

    + + + + + + +
    + + + + +
    aaa   bbbbbb
    +Tccc    ddd
    +i Ceee  Wfff
    + gggg   hhhh
    +
    + + + + +
    BatVol  ChMod
    +BTemp   ChTime
    +ChrgVol Pwm
    +BTyp    BFDC
    +
    + +

    +

      +
    • +i - information, whether travel charger is connected (1) or not (0)
    • +
    + +

    Fast charging (FastC in NetMonitor) means charging with bigger current +and with clever charger it doesn't damage your battery. + +

    When battery charging is ended, maintenance charging starts +(it's normal, that phone uses some energy and battery's discharging process +starts; still connected charger can complete energy losses). + +

    In Polish version of this manual you can also find links to some pages +in Polish language explaining some topics connected with charging and batteries. + +

    For curious people: some of the data, which are displayed here, can also be +found in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). + +

    + + + + + + +
    This test allows us to check the charger. You can also verify some of the battery parameters like: +
      +
    • +capacity
    • + +
    • +efficiency (of the battery cells)
    • + +
    • +voltage (if you are - say - on a trip, here you can check whether battery voltage is suitable for your flashlight)
    • +
    +
    + +

    Test 21 +
    Charging parameters (I noticed, that these values are correct only after +making a call while charging - they change only then (after ending call display +last registred values)) + +

    + + + + + + +
    + + + + +
     aaaa  bbbb 
    +  ccc   ddd
    +  eee   fff
    +
    + + + + +
    MTDif MPDif
    +BUpV  BDownV
    +AverV SumMF
    +
    + +

    +

      +
    • +aaaa - difference between measured and required charging voltage
    • + +
    • +bbbb - difference between measured voltage and the result of the +previous measurement, fraction is not displayed
    • + +
    • +ccc - the highest measured voltage in battery (with charging battery and +using it in the same time it can change) +
    • + +
    • +ddd - the lowest measured voltage in battery
    • + +
    • +eee - average voltage
    • + +
    • +fff - the sum of the parameters from test 22 +(range 0.00 - 9.99, for example 1.53 is displayed as 153) - my own observations +show, that DerivCount (Eaaa) parameter is not counted here. If this counter +reaches 1.00 or 0.99, 'Battery full' message is displayed and bar indicator +on the right side of the display stops. +
    • +
    + +

    In Nokia 9210 help looks like follows: + +

    + + + + +
    MTDif MPDif
    +BUpV  BDownV
    +AverV SumMF
    +Charger type
    + +

    Last line has such values like "NoChrgr" (no connected charger), +"ACP-9" (ACP-9E charger) + +

    Test 22 +
    Charging parameters and indicators + +

    + + + + + + +
    + + + + +
     Eaaa  Cbbb 
    + Dccc  Rddd 
    + Ieee  Afff 
    + Tggg  Vhhh
    +
    + + + + +
    DeriC ChAm
    + VDif VDrop 
    + VDTi AvDif
    + Temp Volt
    +
    + +

    +

      +
    • aaa - DerivCount
    • +
    • bbb - ChargeAmount
    • +
    • ccc - VolDiffToMax
    • +
    • ddd - VolDropCnt
    • +
    • eee - VolDiffTime
    • +
    • fff - AverDiff
    • +
    • ggg - temperature
    • +
    • hhh - voltage
    • +
    + +

    Here you can find several charging parameters and indicators. +All these fields (except for DerivCount) range is from 0.00 to 1.00 +(dot is not shown - for example 0.23 is displayed as 023). After disconnecting +the charger these fields can contain various values. Letters E, C, D, R, I, +A, T and V are displayed when the number is shorter than four digits. + +

    I received info, that in some (all ?) Nokia 6150 phones with firmware 4.13 +(LiION battery) there are ALWAYS displayed these values (is it bug in this +version of firmware ?): + +

    + + + + +
    + E251  C254 
    + 6399  6896
    + I255  A256
    + 1024  8447
    +
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
    +   15   00  
    +    0   0
    +    0   0
    +        0
    +
    +
    + + + + +
    +SlPer  SysSt
    + N/A  N/A
    + N/A  N/A
    +RtcError +
    +
    + +

    Test 23 +
    Information about the battery + +

    + + + + + + +
    + + + + +
     aaaa  bbbb
    + cccc  dddd
    +eee fff gggg
    +hhh iiiijjjj
    +
    + + + + +
    TxOn   TxOff
    +ChCur  Stdby
    +Age CAP Curr
    +Tmp CmAhTarg
    +
    + +

    +

      +
    • +aaaa - voltage from the battery when transmitter is active (a.aaa mV)
    • + +
    • +bbbb - voltage from the battery when transmitter is inactive (b.bbb mV)
    • + +
    • +cccc - charging current (c.ccc mA). If the charger is not connected, 0 is shown. +In Nokia 3210 ALWAYS equal 0 (I think, that firmware in this model has some bug).
    • + +
    • +dddd - expected voltage from the battery in standby mode (d.ddd mV). You can +check whether your SIM card 's clock can be stopped in +test 51.
    • + +
    • +eee - estimate battery age (0 - new, 100 - old) for LiION batteries (the +value of this counter is probably based on measurements of work/discharging +time of the battery and its capacity (shown in test 20); +this is only a reference!) or 33 for NiMH batteries.
    • + +
    • +fff - battery charge level in percent (in older phones, like Nokia 5110, +25 - 1 bar, 50 - 2 bars, 75 - 3, 100 - 4 bars on +the right side of the screen; in never, like Nokia 6210 - 100 - 6 bars, +80 - 4 bars, 60 - 3 bars, 40 - 2 bars, 20 - 1 bar). +This indicator (and parameter) is very +inaccurate during charging process (it reaches 100 almost immediately) - +better use ii and jjj parameters then. +
    • + +
    • +gggg - temporary power consumption indicated by PSM (according to some +English descriptions in decimal parts of mA; I think that this field shows +values in mA - see on calculation of approximate battery work time below) +
    • + +
    • +hhh - LiION battery temperature (also shown in test 20 +- sometimes both these indicators are different) or 0 (for NiMH battery) +
    • + +
    • +iiii - how many mAh were "loaded" to the battery until now. If it is approximately +equal to jjj, the latter parameter raises (or charging is complete). This parameter +is cleared after each use of TCH channel +(for example: after a call) while charging (with NiMH battery) - you can use +this tip to extend charging time almost ad infinitum. I noticed it with Nokia 6110 +and LiION battery (when I turned off and on phone during charging process) too. +This value is updated every 14 seconds (Nokia 5110 with standard charger). +
    • + +
    • +jjjj - battery capacity value (in mAh) by which next charging stage is complete +(see description of the previous parameter). I noticed, that it's cleared +during LiION battery charging (when I turned off and on phone during charging +process) in Nokia 6110. +
    • +
    + +

    For curious: some of the data, which are displayed here, can also be found +in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). + +

    + + + + + + +
    Here you can check your battery type (LiION or NiMH). +
    + +

    Approximate power consumption (this can be changed and modified by many other factors) while using individual channels +(Nokia 5xxx and 6xxx): + +

    +

      +
    • +during transmission (TX parameter value - phone transmission power - can be +checked in test 1) - using +SDCC and TFR channels (Nokia 6110): + +

      + + + + + + + + + + + + + + +
      TXpower consumption (gg parameter)
      over 1992
      16-1899
      14-15105
      13114
      12123
      11136
      10151
      9173
      8198
      7232
      6269
      5300
      + +

      Conclusion: battery work time depends in a very high degree on the network +parameters (most advertising materials contain standby time measured for the +phone transmitting with lowest power (highest TX)). +

    • + +
    • +AGCH: 310 mA in Nokia 5110 and 6110
    • + +
    • +CCCH i CBCH: +Nokia 6110 phones with older software (like 4.73) show 20 and 34 accordingly. +I don't know whether this is caused by some bug in their firmware (these values +are most probably given in mA/10) or the power consumption is really that high +(because Nokia 5130 shows 34 too). +Anyway, I checked, that Nokia 5110 (and 6110 v5.31) phones display 3 mA while +using CCCH channel. I think that turning off +"cell broadcasting" (if it is not supported by your network) can be very +"profitable" for your phone (longer standby time etc.) - look +here). When the phone collects +BTS identification data +(for BTS, which will be now used - has stronger +signal than previous - see C2 description +for details), this value changes to 220 mA (but only for a short while). +
    • + +
    • +NSPS: 55 in both Nokia 5110 and 6110 (is this value +in mA or in mA/10 ?) +
    • +
    + +

    Turning on backlight takes 90 mA more, and while charging another 17 mA should be added. + +

    In Nokia 3210 these data are different for different person (does it depend on firmware version, +frequency ?) + + + + + + +
    standbyreading BTS identification dataturning on backlight
    52 mA90 mA+155 mA
    8 or 9 mA?+159 or +160 mA
    53, sometimes (rarely, during short time) 8 mA93 mA+158 or +159 mA
    8 mA?+154 mA
    + +

    + + + + + + +
    If you know the power consumption, you can calculate approximate battery work time: +
      +
    • +900 mAh / 225 mA = 4 hours of talk time (on average)
    • + +
      Please note, that when using SDCC channel +the phone initially uses full power and the gradually reduces it. + +
    • +900 mAh / 5,45 mA = 165 hours of standby time (on average)
    • + +
      Remember, that the phone makes PLU even in standby mode. +
    +
    + +

    Power consumption in Nokia 6185/6188: + +

    +digital, idle, backlight off = 0011;
    +digital, idle, backlight = 0093;
    +analog, idle, backlight off = 0103;
    +analog, idle, backlight on = 0187;
    +searching, backlight off = 0160-0200;
    +analog (fringe), talk = 0933;
    +digital, talk, backlight on = 0275 + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
    + 640  3775  
    +   0  3775
    + 8  49   0
    +46   0   0 +
    +
    + + + + +
    +CmAh   Vbatt
    +ChCur  Stdby
    +Tle CAP Warn
    +CMT PDA Tot +
    +
    + +

    Test 24 + +

    + + + + + + +
    + + + + +
    +3476    3481
    +BSI:     551
    +ET:        9
    +  111      1
    +
    + + + + +
    V_inst V_avg
    +BSI value
    +Elapsed time
    +RST_m  RST_h
    +
    + +

    This is probably meaning of these parameters: + +

    +

      +
    • bbbb - (Voltage average ?) average value of voltage from battery ?
    • +
    • ccc - (Battery Size Indicator) info connected with battery
    • +
    • dddd - how many minutes phone work from enabling ? (minutes)
    • +
    • eeee - (Rest Standby Time minutes ?) +does phone estimate here, how long phone can be in standby up to +next charging ? (minutes)
    • +
    • ffff - (Rest Standby Time hours ?) +does phone estimate here, how long phone can be in standby up to +next charging ? (hours)
    • +
    + +

    Test 25 + +

    + + + + + + +
    + + + + +
    +    0      1
    +10059
    + 5664    641
    +    1      0 +
    +
    + + + + +
    +Chrgtp #Bars
    +alpha
    +zeta     phi
    +noblw  nobcr +
    +
    + +
    +Back to the top
    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net4.htm b/Docs/en_US/gsm/netmon/faq_net4.htm index ebda570..2ff9098 100644 --- a/Docs/en_US/gsm/netmon/faq_net4.htm +++ b/Docs/en_US/gsm/netmon/faq_net4.htm @@ -1,2144 +1,2325 @@ - - - - - - - - - - NetMonitor in Nokia phones (5/7) - - - - - -

    Main page

    - -
    NetMonitor in Nokia phones (5/7) - -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] - -

    - -
    - - - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    -
    -
    - -

    Test 30 -
    Audio API register display - -

    - - - - - - -
    - - - - -
     aaaa bbbb
    - cccc dddd
    - eeee ffff
    - gggg hhhh  
    -
    - - - - -
    A1Cnf  A2Cnf
    -  ST   AU3
    -1Tone  2Tone
    - Conf  HFVol
    -
    - -

    -

      -
    • aaaa - API_AUD1_CTRL
    • -
    • bbbb - API_AUD2_CTRL
    • -
    • cccc - API_SIDETONE
    • -
    • dddd - API_AU3
    • -
    • eeee and ffff - API_1_TONE and API_2_TONE (see description below)
    • - -
    • -gggg - API_CONFIG: connected with sound setting from -test 71 and 72: -you will see here number (hexadecimal), -which was displayed there below AUDIO ENHANCEMENT (in last selected menu). -Here are some examples: - -

      - - - - - - - - - - -
      normally (for example during standby)wybieranie numerucall
      5148 (cracks) - 20808 decimal51495140
      851A - 34074 decimal851B8512
      C6A4 (cracks) - 50852 decimalC6ADC6A4
      DB34 (cracks) - 56116 decimalDB3DDB34
      DF29 (after enabling phone) - 57129 decimalDF29DF20
      F436 - 62518 decimalF43FF436
      F437 - 62519 decimalF43FF436
      -

      -

    • - -
    • -

      hhhh - API_HF_VOL: volume during call - you will count it from -the "110 - hhhh" formula (subtract value of this parameter from 110). -It's displayed too (during call only) in -test 76. -When you connect headset, values here change - volume can be count -from "510 - hhhh" formula then (for car kit use "2210 - hhhh"). -Type of connected audio accesories can be checked in -test 75 too. -Phone remembers volume for each audio accesory separately. -

    • -
    - -

    When you press any key, phone generates sound, which consist of two tones. -Parameters eeee and ffff change then. First tone is short, second is emited -all time, when you press key. When you press C, NaviKey, Up or Down -keys, change parameter eeee only (value 0E10 - 3600 decimal) - -sound consist of one tone only. And now the most important thing: -you will divide displayed in these parameters values by 4, -you will have frequencies in Hz conncected with pressing adequate keys in -DTMF (Dual Tone Multi Frequency) system. -I think, you use DTMF very often - it's used in tone system in all -modern phones during calling number. Adequate values are in table (decimal) -- parameter eeee is connected with vertical values, ffff with horizontal: - -

    - - - - - - -
    1209 Hz1336 Hz1477 Hz
    697 Hz123
    770 Hz456
    852 Hz789
    941 Hz#0*
    - -

    Test 32 - -

    Test from Nokia 6250 (no help): - -

    - - - - -
    -     0      
    -0002922
    -3000
    -0205714 -
    - -

    In 4'th line there is clock. Example: -0205714 means 20 hours 57 minutes 14 seconds of the day ... - -

    Test 34 -
    Information about FBUS connection between phone and computer. - -

    - - - - - - -
    - - - - -
    aa bb cc dd
    -eee fff ggg
    -hhh iii jjj 
    -k
    -
    - - - - -
    CM LD LM NM 
    -PEC FEC OEC
    -ACC RXS TXS 
    -Mod
    -
    - -

    -

      -
    • aa - current fbus media in hex
    • -
    • bb - last sender dev in hex
    • -
    • cc - last sender media in hex
    • -
    • dd - next media to be connected. Same as aa if the connection is not pending
    • -
    • eee - fbus parity error counter
    • -
    • fff - fbus framing error counter
    • -
    • ggg - fbus overrun error counter
    • -
    • hhh - fbus alive check counter
    • -
    • iii - received sequence number
    • -
    • jjj - sent sequence number
    • -
    • k - phone mode: S=slave, H=host
    • -
    - -

    Description above is from some English documents. As you can see in some phones -(like Nokia 5110) values in this test looks rather different, but help is the same. -But, when you make connection with FBUS cable and make transmission, first line of values -in this test changes to "1E0C1E -". When you will look into some -FBUS protocol descriptions, -you will see, that: - -

      -
    • "1E" could mean datas send with FBUS protocol over cable
    • -
    • "0C" could mean, that FBUS cable is connected to phone
    • -
    - -

    and it's the truth. So, it means, that this description is real (even, that -test looks a little different). - -

    Observation from Nokia 6150: - -

    - - - - -
    -aabbccdd    
    -eeffgghh i j
    -kk
    -l-m
    - -

    -

      -
    • aabbcc: -
        -
      • 000000 - no transmission after enabling phone
      • -
      • 1E0C1E - there was FBUS transmission
      • -
      • 140000 - there was infrared connection using NBS (business card, calendar entry, etc.)
      • -
      • 1C7F1C - there was 2-players snake game (host)
      • -
      • 1C001C - there was 2-players snake game (slave)
      • -
      -
    • -
    • hh: 0 - no infrared transmission in this moment
    • -
    • i: increases for example after each sending data using infrared and NBS or ending -transmission
    • -
    • j: P - infrared enabled, searching next device (blinking indicator in phone)
    • -
    • l: H - host in infrared transmission; S - slave in infrared transmission
    • -
    • m: T - infrared enabled, connection terminated (blinking indicator in phone)
    • -
    - -

    In Nokia 9110 this menu looks different: - -

    - - - - - - -
    - - - - -
    ll mm nn oo 
    -ee ff gg
    -p  q
    -r s tt
    -
    - - - - -
    PA RS DR PR 
    -PE FE OE
    -Rx Tx
    -D U DC
    -
    - -

    -

      -
    • -p and q are probably iii and jjj
    • -
    - -

    Links to pages with FBUS (MBUS) protocol are in the question 25. - -

    - - - - - - -
    If values in this test changed after enabling phone, it means, that -it was connected to computer and datas were transmitted with -FBUS protocol (not MBUS).
    - -

    Test 35 -
    Reason of last reboting internal firmware of phone. - -

    - - - - - - -
    - - - - -
     aaaaa      
    - bbbbbbbb

    -
    - - - - -
    Reset reason
    -Task name

    -
    - -

    -

      -
    • aa - reason: - -

      -

        -
      • NORM: probably normal power up
      • -
      • UNKNO: default value, reset reason is unknown
      • -
      • SWSIM: SIM contact failure reset. Shown, when phone has simlock and wrong mastercode was entered.
      • -
      • STACK: task stack overflow
      • -
      • SWIDL: idle task not running reset
      • -
      • HW lub WD: ASIC watchdog timeout. SW WD in Nokia 3310 ?
      • -
      • SWDSP: restart DSP recovery reset
      • -
      -

      -

    • - -
    • -bbbbbbbb - name of running task before reset (for example, -"AUD TASK", -"CC TASK" (confirmed), -"DDI TASK", -"DEV IO" (confirmed), -"EM TASK", -"FBUSTASK" (confirmed - after errors in cable transmission), -"L1 CONTR", -"L1 MEAS", -"L1 SYSPA" (confirmed), -"L2 TASK", -"LOCAL" (confirmed - shown, for example, when phone had to restart because of error in firmware), -"MDI RECE" (confirmed), -"MDI SEND" (confirmed), -"MM TASK" (confirmed), -"OS IDLE" (confirmed), -"PN TASK" (confirmed), -"RR TASK" (confirmed), -"RM TASK", -"SIM L2" (confirmed), -"SIM UPL" (confirmed), -"SMS TASK" (confirmed), -"TONETASK", -"UI TASK" (confirmed) -"PND TASK" (for example Nokia 6210), -"WMLSTASK" (for example Nokia 6210), -"IRDATASK" (for example Nokia 6210), -"IRDA MGR" (for example Nokia 6210), -"PH TASK" (for example Nokia 6210), -"DGC TASK" (for example Nokia 6210), -"DGNTB TA" (for example Nokia 6210), -"DGFAX TA" (for example Nokia 6210), -"SCKT SRV" (for example Nokia 6210), -"PMM CLUP" (for example Nokia 6210), -"PMM WRBA" (for example Nokia 6210), -"ND TASK" (for example Nokia 6210), -"PPC TASK" (for example Nokia 6210), -"No task!" (for example Nokia 6210) -or "UNKNOWN" (confirmed - after normal phone enabling)). We can notice, that tasks names are similiar to -names in help to tests 84-86.
    • -
    - -

    Test 36 -
    Reasons of last reboting internal firmware of phone (you will -find here information, how many times phone made restarts because of reasons -from previous test). - -

    - - - - - - -
    - - - - -
     aa  bb  cc 
    - dd  ee  ff

    -
    - - - - -
     UN  WD DSP 
    -SIM IDL STK

    -
    - -

    -

      -
    • aa - unknown resets
    • - -
    • bb - ASIC watchdog timeout resets (in some -you can simulate it - see question 9 for details)
    • - -
    • cc - DSP recovery resets. In Nokia 3310 displayed also -in test 130.
    • - -
    • -dd - some English descriptions say, that it's connected with -SIM contact failure reset (in some phones you can force reset because of this reason -- see question 9). I noticed too, that this counter -increases when to try to enter mastercode connected with simlock level 1 -using #pw+2222222222+1# code (where mastercode is instead of 2222222222), when -your phone has simlock. -
    • - -
    • ee - idle task not running resets
    • - -
    • ff - task stack overflow resets
    • -
    - -

    Counters are stored to EEPROM. - -

    In Nokia 3310 some counters (DSP only ?) are displayed from end (for example, 01 is displayed as 10, -02 as 20, etc.) - -

    - - - - - - -
    You can reset counters from this menu using some Nokia service programs -- for example, in Pc-Locals 1.3 enter to menu 8 ("Event Trace"), -menu 5 ("Permanent Counter Table...") and press F6 key ("Clear Counters"). -Unfortunatelly :(, "real" counters connected with mastercode entering attempts -(Counter for example in WinTesla and WinLock) don't reset then... -
    - -

    Test 38 -
    Memory dump - -

    - - - - - - -
    - - - - -
    aaaaaaaaaaaa
    -aaaaaaaaaaaa
    -aaaaaaaaaaaa
    -aaaaaaaaaaaa
    -
    - - - - -
    Memory dump 

    -
    - -

    -

      -
    • aaaa.... - hex dump of 24 successive memory locations
    • -
    - -

    The start address of the dump is entered as 6 digit address value -into location 30 into phonebook on SIM card (information, how to make it, -are in test 17). -An example: for address 0x0C89AB enter 0C2089AB value there... -Dump address is changed only when you directly enter to this menu. - -

    This display rather is not included in offcial firmware (I found only one -phone with it). It can be switched on by defining flag DEV_FT_MEMORY_DUMP_IN_USE in ftd_conf.h. - -

    Test 39 -
    Reason of last connection end (asterisk means, that the diagnosis won't be sent to the -network - it'll be only shown in phone) and making -Location Update: - -

    - - - - - - -
    - - - - -
     CC:   aaa  
    - MM:   bbb
    - RR:   ccc
    -
    - - - - -
    CC CauseValu
    -MM CauseValu
    -RR CauseValu
    -
    - -

    -

      -
    • -reason from the CallControl-Layer - it's displayed in -test 2 and -test 63 too: - -

      -

        -
      1. -from the GSM specifications (section 10.5.4.11/GSM 04.08): - -

        -

          -
        • - 1: unassigned (unallocated) number
        • - -
        • - 3: no route to destination
        • - -
        • - 8: operator determined barring
        • - -
        • -16: normal end of call (you were speaking or you heard some -text - that dialled number was busy or something similiar) -
        • - -
        • -17: user busy - -

          -

            -
          • -if it was outgoing call, dialled number was busy (phone even displayed -'Number busy')
          • - -
          • -if it was incoming call, a man, who dialled to you, heard busy signal -- you were speaking or you rejected it (in Nokia 5110 or 5130 to make -it you have to press C key, in Nokia 6110, 6130 or 6150 red receiver) -
          • -
          -

          -

        • - -
        • -18: no user responding
        • - -
        • -19: user alerting (from specification - I had it -with normal connection too (phone displayed -'No answer' ('Nie odpowiada')) or when incoming call was diverted to -voice mailbox), no answer -
        • - -
        • -21: call rejected - -

          -

            -
          • -phone wasn't in network coverage (message 'No coverage network'), when you -tried to make call -
          • - -
          • -you tried to call to non existing phone number or you heard busy signal -
          • -
          -

          -

        • - -
        • -22: number changed
        • - -
        • -27: destination out of order
        • - -
        • -28: invalid number format/number incomplete. Phone displayed -'Invalid phone number'
        • - -
        • -31: unspecidied. It seems, that with this error connection -is end by network (for example, when it's overcharged). -Shown sometimes too, when you call for not supported for some tariffs numbers. -
        • - -
        • -34: no circuit/channel available to make call. Phone displayed -'Network busy'. I noticed too, that in my network RR value changed to -1 with this error. More about situations, when network is busy, I write -in TS description.
        • - -
        • -38: network out of order
        • - -
        • -41: temporary failure
        • - -
        • -42: switching equipment congestion -(message "Network busy") -
        • - -
        • -44: requested channel not available
        • - -
        • -47: ressource unavailable. I had it, when connection was "brutal" broken. -Concrete: during call phone of my interlocutor disabled because of empty battery. -My phone displayed 'Error in connection'
        • - -
        • -50: requested facility not subscribed -(you must subscribe it to use it) -In some networks shown too, when you set not supported by network function -(for example, "Own number sending" in Era-GSM network). -Message "Check operator services". -
        • - -
        • -65: bearer service not implemented
        • - -
        • -68: ACM equal to or greater than ACMmax
        • - -
        • -69: requested facility not implemented
        • - -
        • -88: incompatible destination
        • - -
        -

        -

      2. - -
      3. -from mine (and not only) experiences: - -

        -

          - -
        •  28: I had it, when phone number was too long
        • - -
        •  57: no asynchronous data transmission allowed (concrete: -phone wasn't able to connect to WAP from this concrete SIM card)
        • - -
        •  63: "Poza zasiêgiem sieci"
        • - -
        • -79: error with message 'Check operator services'. -You have it, when you enable ALS (Alternative Line Service) function, -don't have second number on SIM card, select it and try to make call -
        • - -
        • -111:'Error in connection'
        • - -
        -

        -

      -
    • - - -
    • -reason from the MobilityManagement-Layer -- it's shown in test 64 too. -It's from GSM specification (section 10.5.3.6/GSM 04.08): - -

      -

        -
      • - 2: IMSI unknown in HLR -(SIM card not active in network)
      • - -
      • - 3: illegal phone
      • - -
      • - 4: IMSI unknown in VLR
      • - -
      • - 5: phone's IMEI was not accepted
      • - -
      • - 6: illegal ME
      • - -
      • -11: PLMN not allowed (you tried to log into -network, which doesn't have roaming convention with your home network - your phone -displays 'No access', when you try to select it manually; I don't know only, if -this code is displayed only, when this network is saved on forbidden list on SIM -card (see test 6)
      • - -
      • -12: Location Area not allowed. You can check it in test 11.
      • - -
      • -13: roaming not allowed in this Location Area
      • - -
      • -17: network failure
      • - -
      • -22: network congestion
      • - -
      • -32: service option not supported
      • - -
      • -33: service option not subscribed
      • - -
      • -34: service temporarily out of order
      • - -
      • -38: call cannot be identified (call RE)

      • - -
      - -
    • -reason from RadioRessourceManagement-Layer) -- see GSM specifications: section 10.5.2.31/GSM 04.08: - -

      -

        -
      • -  0: normal release
      • - -
      • -  1: unspecified
      • - -
      • -  2: channel unacceptable
      • - -
      • -  3: timer expired
      • - -
      • -  4: no activity on the radio path
      • - -
      • -  5: Pre-emptive release
      • - -
      • -  8: handover impossible, -TA out of range
      • - -
      • -  9: channel mode unacceptable
      • - -
      • - 10: frequency not implemented
      • - -
      • - 65: call already cleared
      • - -
      • - 97: message type not compatible with protocol state
      • - -
      • -101: no cell allocation available
      • - -
      • -111: protocol error unspecified
      • -
      -
    • -
    - -

    When you will see "*" before third parameter from this test, it means -(the most often), that call is in progress. Sometimes phone displays different -values - I don't know their meaning :-(. - -

    Values of counters are not saved in EEPROM. When phone makes another measure, -doesn't reset them (changes only these values during next measure, which are connected -with it; doesn't change the rest of them). - -

    - - - - - - -
    This test allows to find, why exactly your phone doesn't want to work -- doesn't want to make calls.
    - -

    Test 40 -
    Resets handover counters (by direct enter)... - -

    - - - - - - -
    - - - - -
       RESET
    -  HANDOVER  
    -  COUNTERS
    -
    - - - - -
      Use menu  
    -  to reset
    -  handover
    -  counters
    -
    - -

    Test 41 -
    Information about handover - -

    Handover - it's transfer of radio connection -(between phone and cell) from one cell to another (without breaking call). -It's made, when: - -

    -

      -
    1. -new radio connecting will give better quality (it's parameters are all the time -checked by phone and base station) -
    2. - -
    3. -when phone is between few cells and can use "new" cells for him -(it frees some place for phones, which can use "old" cell only) -
    4. -
    - -

    When they're problems with transmission, decision about handover is made -by phone (otherwise it's made by BSC). -If you enabled using one channel by phone (test 17), -handovers are not made. - -

    There are 4 types of handovers: - -

    -

      -
    • -Intra cell - Intra BSC -handover (called handoff too): it's the smallest handover -inside one cell. Receiver is "thrown over" from one channel to another -(gennerally to another frequency inside one cell). Decision, if it should -be done, is made by BSC.
    • - -
    • -Inter cell - Intra BSC handover: -receiver is moved from one cell to another. Decision about it -is made by BSC. Connection with first cell -is broken after moment, when connection with another is made (displacement -between two BTSes inside one -BSC).
    • - -
    • -Inter cell - Inter BSC handover: -displacement of connection between two cells, which are not served by -the same BSC. In this case handover is moved -by MSC, but decision about it made -by first BSC. Connection with first -BSC (and BTS) -is broken before moment, when connection with another BSC -(and BTS) is made. -
    • - -
    • -Inter MSC handover: receiver moves from -cell served by MSC/VLR -to another controlled by another MSC/VLR. -It's more complicated situation. We can notice, that -MSC is connected to GSMc over PSTN. -In this case is visible, that another MSC -can't receive information from first normally. - -

      What will happen, when connection will be moved to target -MSC/VLR ? - -

      Because both MSC belongs to the same network, -connection is kept. To move it from one to another MSC -special number HON (HON=CC+NDC+SN, CC - country code, NDC - network code, -SN - subscriber's number) must be generated. It's similiar to roaming number -(it's connection between two MSC too). During -handover between two MSC connection can't be -broken (phone connection realised by network's subscriber). -

    - -

    - - - - - - -
    - - - - -
    HandOOk: aaa
    -PrevCh : bbb
    -HONotOK: ccc
    -HOIntra: ddd
    -
    - - - - -
    HandOvOKCntr
    -PrevChanCntr
    -HandOvNOKCnt
    -HOIntraOKCnt
    -
    - -

    -

      -
    • -aaa - counter for successful handovers
    • - -
    • -bbb - counter for successful back to previous channel attempts -(number of actual used channel is displayed, for example, in -test 1)
    • - -
    • -ccc - counter for failed handovers
    • - -
    • ddd - counter for successful Intra cell - Intra BSC handovers -or assignments
    • -
    - -

    Counters will stop when they reach their maximum (999). To initialize them -to zero, use test 40 (or -test 60). - -

    In dual phones (like Nokia 6150 or 3210) test 41 looks -different and is connected with Inter cell - Intra BSC, -Inter cell - Inter BSC and Inter MSC handovers: - -

    - - - - - - -
    - - - - -
     aaaa  bbbb
    - cccc  dddd
    -eeefffggghhh
    -iiijjjkkklll
    -
    - - - - -
    G>G InterD>D
    -G>D  OK  D>G
    -InterHoFail
    -BackToPrev
    -
    - -

    -

      -
    • aaa - counter of successful handovers from GSM 900 to GSM 900
    • -
    • bbb -counter of successful handovers from GSM 1800 to GSM 1800
    • -
    • ccc - counter of successful handovers from GSM 900 to GSM 1800
    • -
    • ddd - counter of successful handovers from GSM 1800 to GSM 900
    • -
    • eee - counter of failed handovers from GSM 900 to GSM 900
    • -
    • fff - counter of failed handovers from GSM 1800 to GSM 1800
    • -
    • ggg -counter of failed handovers from GSM 900 to GSM 1800
    • -
    • hhh - counter of failed handovers from GSM 1800 to GSM900
    • - -
    • -iii - counter of successful back to previous channel attempts -(number of actual used channel is displayed, for example, in -test 1) -from GSM 900 to GSM 900
    • - -
    • jjj - counter of successful back to previous channel attempts from GSM 1800 to GSM 1800
    • - -
    • kkk - counter of successful back to previous channel attempts from GSM 900 to GSM 1800
    • - -
    • lll - counter of successful back to previous channel attempts from GSM 1800 to GSM 900
    • -
    - -

    Counters will stop when they reach their maximum (9999 dla dwóch pierwszych -linii, 999 dla dwóch ostatnich). To initialize them to zero, use test 40 -(or test 60). - -

    In Nokia 3310 sum of all handovers is also -displayed in test 131 (?). - -

    In Nokia 3110 this test looks like follows: - -

    - - - - - - -
    - - - - -
    HandOOk: aaa 
    -PrevCh : bbb 
    -HONotOK: ccc 
    -T200: eeee
    -
    - - - - -
    HandOvOKCntr 
    -PrevChanCntr 
    -HandOvNOKCnt 
    -T200Cntr
    -
    - -

    -

      -
    • -eeee - I write about T200 counter in test 43
    • -
    - -

    and here's for Nokia 6185/6188: - -

    - - - - -
    -BSI 01000
    -VBAT 388
    -BTEMP 018
    -BATT 2 CHG 0
    -
    - -

      -
    • VBAT - battery voltage (/100V)
    • -
    • BTEMP - battery temperature in C
    • -
    • CHG - battery charge status: 1 - charging, 0 - not charging
    • -
    - -

    Test 42 -
    This test is in dual phones (for example, Nokia 6150 or 3210) only -and is connected with first kind of handovers -(Intra cell - Intra BSC): - -

    - - - - - - -
    - - - - -
     aaaa  bbbb
    - cccc  dddd
    -eeefffggghhh
    -iiijjjkkklll
    -
    - - - - -
    G>G IntraD>D
    -G>D  OK  D>G
    -IntraHoFail
    -BackToPrev
    -
    - -

    -

    - -

    Counters will stop when they reach their maximum (9999 for two first lines, -999 for two last). To initialize them -to zero, use test 40 -(or test 60). - -

    In Nokia 6185/6188 this test looks like test 20. - -

    Test 43 - -

    Some English descriptions write about this test: - -

    - - - - - - -
    - - - - -
    T200MS: aaaa
    -T200BS: bbbb
    -T200MS: cccc
    -T200BS: dddd
    -
    - - - - -
    T200 MS GSM 
    -T200 BS GSM
    -T200 MS DCS
    -T200 BS DCS
    -
    - -

    -

      -
    • -aaaa - for GSM 900: counts how many times T200 in phone has expired and -therefore L2 transmission has been repeated.
    • - -
    • -bbbb - for GSM 900: counts how many times T200 in BTS (network) has expired -and therefore L2 transmission has been repeated. -
    • - -
    • -cccc - for GSM 1800 called earlier DCS (in dual phones only): counts how many times T200 in phone -has expired and therefore L2 transmission has been repeated. -
    • - -
    • -dddd - for GSM 1800 (in dual phone only): counts how many times T200 in BTSie -(network) has expired and therefore L2 transmission has been repeated.
    • -
    - -

    Counters will stop when they reach their maximum (9999 for two first lines, -999 for two last). To initialize them to zero, use test -40 (or test 60). - -

    I noticed, that some things are a little different: in all 900, 1800, 900/1800 MHz -phones, I saw, info is displayed ONLY in two first lines. Help is a little different too: - -

    - - - - - - - - - - - - - -
    - - - - -
    -T200 MS     
    -T200 BS

    -  -

    -
    -or: - - - - - -
    -T200Cntr MS
    -T200Cntr Net

    -  -

    -
    -or: - - - - - -
    -T200Cutr MS
    -T200Cutr Net

    -  -

    -
    - -

    In Nokia 6185/6188 this test looks like test 21. - -

    Test 44 -
    You change value from 01 (default) to 00 (or vice versa) by direct enter to this test. - -

    - - - - - - -
    - - - - -
    -
     REVISION
    -LEVEL IS aa 
    -
    - - - - -
    Use menu to 
    -   change
    -  Revision
    -   Level
    -
    - -

    In Nokia 6185/6188 this test looks like test 22. - -

    Test 45 -
    This test allows to simulate situations. when phone can normally -receive network signal (but network can't receive any information from phone). -It's very realistic (even in test -1 in ddd parameter an asterisk (*) is displayed, when -you try to make connection), but not always (in -test 10 you will see -'xxxxxxxx' instead of TMSI, when T3212 counter in first -parameter will be expired). - -

    You can change it by direct enter. - -

    -

    - - - - - - - -
    - - - - -
    -
    TRANSMITTER 
    -  ENABLED
    - -

    (default setting)

    - - - - -
    -
    TRANSMITTER 
    -  DISABLED
    -
    - - - - -
    Use menu to 
    - enable or
    -  disable
    -transmitter
    -
    - -

    - - - - - - -
    When you enable it, phone won't be able, for example, to update -location (see test 64) and -make calls. It will allow to: - -
      -
    • "blockade" phone to the moment of another enabling it (for example, -when you want to observe network parameters, but you don't want to be -accessible for others - when somebody will call to you, for network -your phone will be outside range) -
    • - -
    • -fast remind you of number written to phonebook (it's written on leaf, -but you don't remember name of person assigned to): simple call it. -When phone will choose number, it will display this name; it will be written -on list odf last dialed numbers too. -
    • -
    -
    - -

    This test DOESN'T WORK CORRECTLY in Nokia 3210, 3310 and 7110 (you change setting, -but it doesn't give described above results). - -

    In Nokia 6185/6188 this test looks like test 23. - -

    Test 46 - -

    - - - - -
    -BAND CLASS a
    -CS SUBSTATE
    -EM STATEnnn
    -TX POWER DB
    -
    - -

    Test 48 -
    In Nokia 3110 this test looks like test 7. - -

    Test 51 -
    Information about SIM card - -

    - - - - - - -
    - - - - -
    aaa bbb ccc 
    - dddddddd
    - e f  gg hh
    -  i   jjjj
    -
    - - - - -
    VSel Bau SAl
    -SCond  CStop
    -PIN12  PUK12
    - ATR  FE/PE
    -
    - -

    -

      -
    • -aa - SIM voltage selection type (3, 3/5 or 5)
    • - -
    • -bbb - division coefficient, which define speed of communication phone with -SIM card (372, 64, 32 or 0) saved in ATR (first sequence send by SIM card -after reset - Answer To Reset). -When you will divide clock frequency (maximal 3,25 MHz = 3 250 000 Hz) -by it, you will have speed of transmission -(for example, 3 250 000 Hz / 372 = 8736,5 bods) -WARNING ! YOU CAN'T CHANGE SPEED OF COMMUNICATION PHONE WITH SIM CARD -AND VALUE OF THIS PARAMETER ! -
    • - -
    • -ccc - information, whether SIM clock stop is allowed (it saves energy) -during standby (YES or NOT - possible or not). This information is displayed -(in Nokia phones and not only) using *#SIM0CLOCK# code -- when you will see "SIM clock stop allowed", SIM card allows to make it. -Some Nokia 6110 phones (it depeneds on their firmware) can not support -correctly this code - they display, for example, "Result unknown". -Phone disables SIM card clock automatically - you can't make it manually ! -
    • - -
    • -dddd - information about clock stop condition: - -

      -

        -
      • UP
      • -
      • DOWN
      • -
      • DOWN(UP) - in tested by me SIM cards
      • -
      • UP(DOWN)
      • -
      • xxxxxxxx
      • -
      -

      -

    • - -
    • -e - number of left PIN1 code entering attempts. When it's bigger than 9, -you will see only last digit of it (for example, I found some prepaid cards -with 10 value). Maximal number of entering code attempts depends on concrete -SIM card (it can be set to any value), but the most often it's equal 3. In some SIM cards -you can disable answering for this code (for example, you can select it in -Menu 4-3-1 in Nokia 5110). When it's equal 0, phone shows -"Sim card blocked" and asks for PUK1. If it was entered correctly, this counter -is reset to maximal value. Disabling and enabling phone doesn't reset it ! -
    • - -
    • -f - number of left PIN2 code entering attempts (when SIM card doesn't support -PIN2 functions, you will see "x" here). You can check, if these functions are supported, -using call cost function too (if they're not, phone displays "Not allowed"). -If you wanted to use them and your card doesn't support them (you will see "x" -here), you (or your operator ;-) rather) have to change it. -Maximal number of entering code attempts depends on concrete -SIM card (it can be set to any value), but the most often it's equal 3. When this counter -is equal 0, phone asks for PUK2. When this code was entered correctly, counter -is reset to maximal value. Of course, even when it's equal 0, you can normally -use SIM card (PIN2/PUK2 are independent of PIN1/PUK1), when you know PIN1. -Disabling and enabling phone doesn't reset it ! -If SIM card has blocked PIN2/PUK2 codes, you can enter to the menus contains supported -by these codes functions (but after changing next settings you will see error). -
    • - -
    • -gg - number of left PUK1 code entering attempts. -Maximal number of entering code attempts depends on concrete -SIM card (it can be set to any value), but the most often it's equal 10. -Phone asks for it, when counter of left PIN1 code entering attempts is equal 0 -(phone shows "Sim card blocked"). When this counter is equal 0 too, SIM card -can be blocked (phone shows "Sim card rejected") or (it depends on card) -asks for PUK2. When this code was entered correctly, counters of left PIN1 and -PUK1 codes entering attempts are reset to maximal values. -Disabling and enabling phone doesn't reset it ! -
    • - -
    • -hh - number of left PUK2 code entering attempts (when SIM card doesn't support -PIN2 functions, you will see "x" here). -Maximal number of entering code attempts depends on concrete -SIM card (it can be set to any value), but the most often it's equal 10. -When it's equal 0, using PIN2 functions can be impossible on this SIM card (ask operator for help). -Additionaly, when you were asked for PUK2, when counters of left PIN1 and -PUK1 codes entering attempts were equal 0 and now left PUK2 code entering attempts -is equal 0 too, using this SIM card can be impossible (you have to replace it to new). -When it was entered correctly, counters for this code and PIN2 (when you entered -PUK2, because PIN2 was blocked) are reset to maximal values or counters for this, -PIN1 and PUK1 are reset (when you entered PUK2, because PIN1 and PUK1 were blocked). -Disabling and enabling phone doesn't reset it ! -
    • - -
    • -i - ATR repeat counter (ATR is first sequence sent by SIM card in answet to reset - -Answer To Reset) (0-9)
    • - -
    • -jjjj - number of retransmissions/parity errors in transmission with SIM card -(when the happen, two first chars are equals FE (Frame Error) or -PE (Parity Error), two last number of retransmission/errors)
    • -
    - -

    If you don't have SIM card in the phone, you will see "ERROR1" in this test. - -

    If phone has problems with communication with SIM card, this test can look like -follows (i and jjjj parameters are described above): - -

    - - - - - -
    - - - - -
    ERROR1 5  55
    -55
    -  i   jjjj
    -  -
    -
    - -

    CStop parameter (information, if SIM card clock is disabled in this moment) -is displayed in help only. Why ? Probably somebody didn't remember about it... - -

    Here are some observations for SIM voltage selection type (first parameter) -Nokia 5110 and tested SIM cards: - -

    After enabling phone reads some information from SIM card (for example, -number saved on it SMS messages, numbers from phonebook) - when you try to read -something, what is written there (for example, phonebook), -"SIM card not ready" message is displayed then (and first parameter shows 3). -I noticed, that phone can't display names assigned to numbers in phonebook too -(for example, when you call somebody) and shows, that "Inbox" and "Outbox" -are empty (even, when some messages are saved there). - -

    Later value of parameter changes to 3/5 - I suppose, SIM card clock is -enabled then. - -

    Phone disables it (in test value 3), when communicates with network -(requesting services, sending or receiving SMS messages) because of saving -energy (the same in NSPS state). - -

    When you call to number assigned to name in phonebook (or phone -recognizes incoming number), value to the end of call is equal 3/5 -(otherwise it changes to 3). After end of call is always equal 3. Logical -conclusion: after enabling phone saves in own memory checksum for -all numbers from phonebook (it's enought to make for 7 last digits - they're -used to identify number in Nokia phones). If this checksum is the same to -checksum for number, you're calling (or incoming number), phone reads name -from phonebook... - -

    And the last observation: without connection (see above) value of first -parameter is equal 3/5 (is some energy loose ? Probably yes... But why counter from -test 20 doesn't show any change in their -consumption ?) - -

    When you try to open "Outbox" or "Inbox", phone doesn't enable clock, -when they're empty (that's why I think, that phone saves into own memory -number of saved SMS messages too). - -

    Many information about SIM card are displayed by -SIMedit (unfortunatelly, in Czech language only :-( )... -Parameters like ATR you can study using SIM Scan (it's on the www.net.yu/~dejan -or http://members.tripod.com/~dejank/ pages). They both work with -SIM card readers only... - -

    - - - - - - -
    -If you want to see "Insert SIM card" and (sometimes) "SIM card rejected" -messaeges, try to make such activities (checked for Nokia 5110): - -

    Press very delicately the locking catch of the battery and start to slide the battery -downwards very slowly (stop, when you will hear silently crack). - -

    In this moment you should see first message and phone will start to inform -about problems with communication with SIM card (you will see "ERROR1" here)... -

    - -

    In Nokia 6185/6188 this test looks like follows: - -

    - - - - -
    -TASK0 0134  
    -TASK1 015C
    -TASK2 0138
    -TASK3 0170
    -
    - -

    Test 52 -
    Reads datafield from SIM card - -

    - - - - - - -
    - - - - -
    -Read SIM-
    -data field  
    -to SIM-SCM
    -
    - - - - -
    -Use menu to 
    -read SIM-
    -data field
    -to SIM-SCM
    -
    - -

    This display reads a binary datafield from SIM card to SIM SCM memory -(SCM = Short Code Memory and it means phonebook on SIM card). - -

    Prior using this display the identifier of datafield has to be stored as an -alpha-identifier of SCM location number 34 of SIM memory. The datafield -must be written in hexadecimal notation. The identifiers can be found from -the GSM 11.11. - -

    The contents of datafield is stored as a data-identifier of SCM location -number 35 of SIM memory. The contents are displayed in hexadecimal notation. -The maximum length of the datafield is 10 bytes, but the length depends on -the name length of the SIM memory. In case the datafield cannot be read the -alpha-identifier of SCM location is NOT DONE. - -

    The information of how the read succeeded can be read from the SCM location -36 of SIM memory and on the display for a short period. - -

    The following results are possible: - -

    - - - - - - - - - -
    OKdatafield was read correctly
    NOT BINARYdatafield is either formatted or cyclic
    NOT FOUNDdatafield was not found from SIM card
    CARD ERRORsomething weird happened, card did not respond as expected
    NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
    NOT STOREDcould not store into the result memory place
    NO ADDRESScould not read the address from the SCM-location
    UNKNOWNunidentified error
    - -

    For the time being following binary datafields exist in SIM. In future -there could be more. All of these are not necessarily on all SIM cards. - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    2FE2ICC identification(10 bytes)
    6F05Language preference(variable length)
    6F07IMSI(9 bytes)
    6F20Ciphering key Kc (it's read from card after entering PIN)(9 bytes)
    6F30PLMN selector(variable length)
    6F31HPLMN (home network ?) search period(1 byte)
    6F37ACM maximum value(3 bytes)
    6F38SIM service table(2-4 bytes)
    6F41Price per unit and currency table(5 bytes)
    6F45Cell broadcast message identifier selection(variable length)
    6F74Broadcast control channels(16 bytes)
    6F78Access control class(2 bytes)
    6F7BForbidden PLMNs (see test 7)(12 bytes)
    6F7ELocation information -(TMSI, -Local Area Information (consist of MCC, MNC & LAC - -see test 11 for them), -last Location Update status)(11 bytes)
    6FADAdministrative data(variable length)
    6FAEPhase identification(1 byte)
    6F43SMS status(variable length)
     

    Next two binary datafields are phase 2+ features which are not currently in use

     

    6F3EGroup Identifier Level 1(variable length)
    6F3FGroup Identifier Level 2(variable length)
    - -

    In Nokia 6185/6188 this test looks like follows: - -

    - - - - -
    -TASK4 0134  
    -TASK5 015C
    -TASK6 0138
    -TASK7 0170
    -
    - -

    Test 53 -
    Writes datafield into SIM card - -

    - - - - - - -
    - - - - -
    -    Write
    - data field
    -from SIM-SCM
    -  to SIM
    -
    - - - - -
    -Use menu to
    -write data
    -field to SIM
    -  -
    -
    - -

    This display writes data for a binary datafield in SIM card by using data -in SCM memory of SIM card. - -

    Prior using this display the identifier of datafield has to be stored as an -alpha-identifier of SCM location number 34 of SIM memory. The datafield -must be written in hexadecimal notation. The identifiers can be found from -the GSM 11.11. In addition the data to be stored into SIM card has to be -entered as an alpha-identifier of SCM location number 35 of SIM memory. -The data has to be stored in hexadecimal notation. - -

    The result of write operation can be seen from the alpha-identifier of -SCM-location 36 of SIM-memory and on the display for a short period. - -

    The following results are possible: - -

    - - - - - - - - - - -
    OKdatafield was read correctly
    NOT BINARYdatafield is either formatted or cyclic
    NOT FOUNDdatafield was not found from SIM card
    CARD ERRORsomething weird happened, card did not respond as expected
    NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
    DATA ERRORthe data contents in SCM location is coded wrongly
    NOT STOREDcould not store into the result memory place
    NO ADDRESScould not read the address from the SCM location
    UNKNOWNunidentified error
    - -

    If you want to see changes, often you have to restart your phone. - -

    In Nokia 6185/6188 this test looks like follows: - -

    - - - - -
    -TASK8 0134  
    -TASK9 015C
    -TASK10 0138
    -TASK11 0170
    -
    - -

    Test 54 -
    Information about memory blocks - -

    - - - - - - -
    - - - - -
    aa bb  aa bb
    -aa bb  aa bb
    -aa bb  aa bb
    -aa bb  aa bb
    -
    - - - - -
    ResF1  ResF2
    -ResF3  ResF4
    -ResF5  ResF6
    -ResF7  ResF8
    -
    - -

    Meaning of the individual lines (information about another blocks): - -

    -

      -
    1. 1, 2
    2. -
    3. 3, 4
    4. -
    5. 5, 6
    6. -
    7. 7, 8
    8. -
    - -

    -

      -
    • aa - number of reserved blocks
    • -
    • bb - number of free blocks in worst case
    • -
    - -

    In Nokia 6185/6188 this test looks like follows: - -

    - - - - -
    -TASK12 0134 
    -TASK13 015C
    -TASK14 0138
    -TASK15 0170
    -
    - -

    Test 55 -
    Information about memory blocks (some phones don't have this test - -they don't have such big memory) - -

    - - - - - - -
    - - - - -
    aa bb  aa bb
    -aa bb  aa bb
    -aa bb  aa bb
    -aa bb  aa bb
    -
    - - - - -
    ResF9 ResF10
    -ResF11ResF12
    -ResF13ResF14
    -ResF15ResF16
    -
    - -

    Meaning of the individual lines (information about another blocks): - -

    -

      -
    1. 9, 10
    2. -
    3. 11, 12
    4. -
    5. 13, 14
    6. -
    7. 15, 16
    8. -
    - -

    -

      -
    • aa - number of reserved blocks
    • -
    • bb - number of free blocks in worst case
    • -
    - -

    In Nokia 7110 counters end on ResF11, in 6210/6250 on ResF15. - -

    In Nokia 3110 this test looks like test 56. - -

    In Nokia 8210/3310 help to this test is a little -different (another firmware "bug" ? ;-))): - -

    -

    - - - -
    - - - - -
    - -ResF9 ResF10
    -ResF11ResF12
    -ResF13ResF14
    -ResSF15ResF1
    -
    -
    -
    - -

    and values are displayed in first line only... - -

    Test 56 -
    Block display - -

    - - - - - - -
    - - - - -
     aaaaaa bbb 
    - cccccccc

    -
    - - - - -
     Ptr   Cntr 
    - Task

    -
    - -

    -

      -
    • -aaaaaa - pointer to memory where double deallocation was called, in hex -format.
    • - -
    • -bbb - counter for failed deallocations.
    • - -
    • -cccccccc - name of task which last tried to double deallocate a block -(you can find their list in test 35 description). - - - -
    • -
    - -

    This test has correct values only, when counter bbb is different from 0. - -

    In Nokia 3110 it looks like test 57. - -

    Test 57 -
    Memory status before reset - -

    - - - - - - -
    - - - - -
    aaaaaaaaaaaa
    -aaaaa...
    -bbbbbbbb
    -
    - - - - -
     Status of
    - stacks
    - Block sets 
    -
    - -

    -

      -
    • -aaaaaa... - Status of each stack before reset. First position contains -the status of stack 0, second position the status of -stack 1 and so on. The last position contains the status -of System stack. Number of stacks depends on the current -configuration of software. Possible values for each stack are: - -

      -

        -
      • 0: status OK, no overflow - it's normally !
      • -
      • 1: status not OK, stack overflow
      • -
      -

      -

    • - -
    • -bbbbbbb - status of each block set before reset. First position -contains the status of block set 1, second position the -status of block set 2 and so on. Possible values for each -block set are: - -

      -

        -
      • 0: status OK
      • -
      • 1: block set full - it's normally !
      • -
      • 2: (de)allocation error or total memory corruption
      • -
      -
    • - -
    - -

    This display is only valid when a unknown or -a stack overflow interrupt has occured. In some phones you can make -restart connected with stack overflow (see question 9) -and see this test in "action"... - -

    In Nokia 6210 this test is bigger and displayed on full screen... - -

    In Nokia 6185/6188 this test is different: - -

    - - - - -
    - -16:3A 32:26
    -64:18 128:21
    -168:14
    -264:0E -
    -
    - - -
    Back to the top
    - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    -
    - -

    Marcin Wiacek (WWW) -
    Last modifcation: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (5/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (5/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    Test 30 +
    Audio API register display + +

    + + + + + + +
    + + + + +
     aaaa bbbb
    + cccc dddd
    + eeee ffff
    + gggg hhhh  
    +
    + + + + +
    A1Cnf  A2Cnf
    +  ST   AU3
    +1Tone  2Tone
    + Conf  HFVol
    +
    + +

    +

      +
    • aaaa - API_AUD1_CTRL
    • +
    • bbbb - API_AUD2_CTRL
    • +
    • cccc - API_SIDETONE
    • +
    • dddd - API_AU3
    • +
    • eeee and ffff - API_1_TONE and API_2_TONE (see description below)
    • + +
    • +gggg - API_CONFIG: connected with sound setting from +test 71 and 72: +you will see here number (hexadecimal), +which was displayed there below AUDIO ENHANCEMENT (in last selected menu). +Here are some examples: + +

      + + + + + + + + + + +
      normally (for example during standby)wybieranie numerucall
      5148 (cracks) - 20808 decimal51495140
      851A - 34074 decimal851B8512
      C6A4 (cracks) - 50852 decimalC6ADC6A4
      DB34 (cracks) - 56116 decimalDB3DDB34
      DF29 (after enabling phone) - 57129 decimalDF29DF20
      F436 - 62518 decimalF43FF436
      F437 - 62519 decimalF43FF436
      +

      +

    • + +
    • +

      hhhh - API_HF_VOL: volume during call - you will count it from +the "110 - hhhh" formula (subtract value of this parameter from 110). +It's displayed too (during call only) in +test 76. +When you connect headset, values here change - volume can be count +from "510 - hhhh" formula then (for car kit use "2210 - hhhh"). +Type of connected audio accesories can be checked in +test 75 too. +Phone remembers volume for each audio accesory separately. +

    • +
    + +

    When you press any key, phone generates sound, which consist of two tones. +Parameters eeee and ffff change then. First tone is short, second is emited +all time, when you press key. When you press C, NaviKey, Up or Down +keys, change parameter eeee only (value 0E10 - 3600 decimal) - +sound consist of one tone only. And now the most important thing: +you will divide displayed in these parameters values by 4, +you will have frequencies in Hz conncected with pressing adequate keys in +DTMF (Dual Tone Multi Frequency) system. +I think, you use DTMF very often - it's used in tone system in all +modern phones during calling number. Adequate values are in table (decimal) +- parameter eeee is connected with vertical values, ffff with horizontal: + +

    + + + + + + +
    1209 Hz1336 Hz1477 Hz
    697 Hz123
    770 Hz456
    852 Hz789
    941 Hz#0*
    + +

    Test 31 + +

    + + + + + + + + +
    + + + + +

    Serial port  +
       mode
     
    +
    +
    + + + + +

       FBUS      +
       mode
     
    +
    +
    + + + + +
    +Use menu to
    + activate
    + FBUS mode
    +for tracking +
    +
    + +

    Test 32 + +

    Test from Nokia 6250 (no help): + +

    + + + + +
    +     0      
    +0002922
    +3000
    +0205714 +
    + +

    In 4'th line there is clock. Example: +0205714 means 20 hours 57 minutes 14 seconds of the day ... + +

    Test 34 +
    Information about FBUS connection between phone and computer. + +

    + + + + + + +
    + + + + +
    aa bb cc dd
    +eee fff ggg
    +hhh iii jjj 
    +k
    +
    + + + + +
    CM LD LM NM 
    +PEC FEC OEC
    +ACC RXS TXS 
    +Mod
    +
    + +

    +

      +
    • aa - current fbus media in hex
    • +
    • bb - last sender dev in hex
    • +
    • cc - last sender media in hex
    • +
    • dd - next media to be connected. Same as aa if the connection is not pending
    • +
    • eee - fbus parity error counter
    • +
    • fff - fbus framing error counter
    • +
    • ggg - fbus overrun error counter
    • +
    • hhh - fbus alive check counter
    • +
    • iii - received sequence number
    • +
    • jjj - sent sequence number
    • +
    • k - phone mode: S=slave, H=host
    • +
    + +

    Description above is from some English documents. As you can see in some phones +(like Nokia 5110) values in this test looks rather different, but help is the same. +But, when you make connection with FBUS cable and make transmission, first line of values +in this test changes to "1E0C1E -". When you will look into some +FBUS protocol descriptions, +you will see, that: + +

      +
    • "1E" could mean datas send with FBUS protocol over cable
    • +
    • "0C" could mean, that FBUS cable is connected to phone
    • +
    + +

    and it's the truth. So, it means, that this description is real (even, that +test looks a little different). + +

    Observation from Nokia 6150: + +

    + + + + +
    +aabbccdd    
    +eeffgghh i j
    +kk
    +l-m
    + +

    +

      +
    • aabbcc: +
        +
      • 000000 - no transmission after enabling phone
      • +
      • 1E0C1E - there was FBUS transmission
      • +
      • 140000 - there was infrared connection using NBS (business card, calendar entry, etc.)
      • +
      • 1C7F1C - there was 2-players snake game (host)
      • +
      • 1C001C - there was 2-players snake game (slave)
      • +
      +
    • +
    • hh: 0 - no infrared transmission in this moment
    • +
    • i: increases for example after each sending data using infrared and NBS or ending +transmission
    • +
    • j: P - infrared enabled, searching next device (blinking indicator in phone)
    • +
    • l: H - host in infrared transmission; S - slave in infrared transmission
    • +
    • m: T - infrared enabled, connection terminated (blinking indicator in phone)
    • +
    + +

    In Nokia 9110 this menu looks different: + +

    + + + + + + +
    + + + + +
    ll mm nn oo 
    +ee ff gg
    +p  q
    +r s tt
    +
    + + + + +
    PA RS DR PR 
    +PE FE OE
    +Rx Tx
    +D U DC
    +
    + +

    +

      +
    • +p and q are probably iii and jjj
    • +
    + +

    Links to pages with FBUS (MBUS) protocol are in the question 25. + +

    + + + + + + +
    If values in this test changed after enabling phone, it means, that +it was connected to computer and datas were transmitted with +FBUS protocol (not MBUS).
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
    +00 00 00
    +000 000 000 
    +- - 00
    +H - - +
    +
    + + + + +
    CM LD LM    
    +PEC FEC OEC
    +RS TS RESND
    +Mode TXB RXB
    +
    + +

    Test 35 +
    Reason of last reboting internal firmware of phone. + +

    + + + + + + +
    + + + + +
     aaaaa      
    + bbbbbbbb

    +
    + + + + +
    Reset reason
    +Task name

    +
    + +

    +

      +
    • aa - reason: + +

      +

        +
      • NORM: probably normal power up
      • +
      • UNKNO: default value, reset reason is unknown
      • +
      • SWSIM: SIM contact failure reset. Shown, when phone has simlock and wrong mastercode was entered.
      • +
      • STACK: task stack overflow
      • +
      • SWIDL: idle task not running reset
      • +
      • HW lub WD: ASIC watchdog timeout. SW WD in Nokia 3310 ?
      • +
      • SWDSP: restart DSP recovery reset
      • +
      +

      +

    • + +
    • +bbbbbbbb - name of running task before reset (for example, +"AUD TASK", +"CC TASK" (confirmed), +"DDI TASK", +"DEV IO" (confirmed), +"EM TASK", +"FBUSTASK" (confirmed - after errors in cable transmission), +"L1 CONTR", +"L1 MEAS", +"L1 SYSPA" (confirmed), +"L2 TASK", +"LOCAL" (confirmed - shown, for example, when phone had to restart because of error in firmware), +"MDI RECE" (confirmed), +"MDI SEND" (confirmed), +"MM TASK" (confirmed), +"OS IDLE" (confirmed), +"PN TASK" (confirmed), +"RR TASK" (confirmed), +"RM TASK", +"SIM L2" (confirmed), +"SIM UPL" (confirmed), +"SMS TASK" (confirmed), +"TONETASK", +"UI TASK" (confirmed) +"PND TASK" (for example Nokia 6210), +"WMLSTASK" (for example Nokia 6210), +"IRDATASK" (for example Nokia 6210), +"IRDA MGR" (for example Nokia 6210), +"PH TASK" (for example Nokia 6210), +"DGC TASK" (for example Nokia 6210), +"DGNTB TA" (for example Nokia 6210), +"DGFAX TA" (for example Nokia 6210), +"SCKT SRV" (for example Nokia 6210), +"PMM CLUP" (for example Nokia 6210), +"PMM WRBA" (for example Nokia 6210), +"ND TASK" (for example Nokia 6210), +"PPC TASK" (for example Nokia 6210), +"No task!" (for example Nokia 6210), +"START UP" (for example Nokia 9210) +or "UNKNOWN" (confirmed - after normal phone enabling)). We can notice, that tasks names are similiar to +names in help to tests 84-86.
    • +
    + +

    Test 36 +
    Reasons of last reboting internal firmware of phone (you will +find here information, how many times phone made restarts because of reasons +from previous test). + +

    + + + + + + +
    + + + + +
     aa  bb  cc 
    + dd  ee  ff

    +
    + + + + +
     UN  WD DSP 
    +SIM IDL STK

    +
    + +

    +

      +
    • aa - unknown resets
    • + +
    • bb - ASIC watchdog timeout resets (in some +you can simulate it - see question 9 for details)
    • + +
    • cc - DSP recovery resets. In Nokia 3310 displayed also +in test 130.
    • + +
    • +dd - some English descriptions say, that it's connected with +SIM contact failure reset (in some phones you can force reset because of this reason +- see question 9). I noticed too, that this counter +increases when to try to enter mastercode connected with simlock level 1 +using #pw+2222222222+1# code (where mastercode is instead of 2222222222), when +your phone has simlock. +
    • + +
    • ee - idle task not running resets
    • + +
    • ff - task stack overflow resets
    • +
    + +

    Counters are stored to EEPROM. + +

    In Nokia 3310 some counters (DSP only ?) are displayed from end (for example, 01 is displayed as 10, +02 as 20, etc.) + +

    + + + + + + +
    You can reset counters from this menu using some Nokia service programs +- for example, in Pc-Locals 1.3 enter to menu 8 ("Event Trace"), +menu 5 ("Permanent Counter Table...") and press F6 key ("Clear Counters"). +Unfortunatelly :(, "real" counters connected with mastercode entering attempts +(Counter for example in WinTesla and WinLock) don't reset then... +
    + +

    In Nokia 9210 help is different: + +

    + + + + +
    + UN  WD DSP 
    +SIM IDL STK
    +   Reset
    +  counters +
    + +

    Test 37 +
    Reset (Nokia 9210) + +

    + + + + + + +
    + + + + +
    +   Causes a  
    +  divide by
    +    zero
    +    reset +
    +
    + + + + +
    +  Use menu  
    +  to cause
    +  div by 0
      +
    +
    + +

    You can restart your system by direct enter + +

    Test 38 +
    Memory dump + +

    + + + + + + +
    + + + + +
    aaaaaaaaaaaa
    +aaaaaaaaaaaa
    +aaaaaaaaaaaa
    +aaaaaaaaaaaa
    +
    + + + + +
    Memory dump 

    +
    + +

    +

      +
    • aaaa.... - hex dump of 24 successive memory locations
    • +
    + +

    The start address of the dump is entered as 6 digit address value +into location 30 into phonebook on SIM card (information, how to make it, +are in test 17). +An example: for address 0x0C89AB enter 0C2089AB value there... +Dump address is changed only when you directly enter to this menu. + +

    This display rather is not included in offcial firmware (I found only one +phone with it). It can be switched on by defining flag DEV_FT_MEMORY_DUMP_IN_USE in ftd_conf.h. + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
    +  Causes a  
    + data abort
    +   reset
      +
    +
    + + + + +
    +  Use menu  
    +  to cause
    +  data abort
    +  reset +
    +
    + +

    You can restart system by direct enter + +

    Test 39 +
    Reason of last connection end (asterisk means, that the diagnosis won't be sent to the +network - it'll be only shown in phone) and making +Location Update: + +

    + + + + + + +
    + + + + +
     CC:   aaa  
    + MM:   bbb
    + RR:   ccc
    +
    + + + + +
    CC CauseValu
    +MM CauseValu
    +RR CauseValu
    +
    + +

    +

      +
    • +reason from the CallControl-Layer - it's displayed in +test 2 and +test 63 too: + +

      +

        +
      1. +from the GSM specifications (section 10.5.4.11/GSM 04.08): + +

        +

          +
        • + 1: unassigned (unallocated) number
        • + +
        • + 3: no route to destination
        • + +
        • + 8: operator determined barring
        • + +
        • +16: normal end of call (you were speaking or you heard some +text - that dialled number was busy or something similiar) +
        • + +
        • +17: user busy + +

          +

            +
          • +if it was outgoing call, dialled number was busy (phone even displayed +'Number busy')
          • + +
          • +if it was incoming call, a man, who dialled to you, heard busy signal +- you were speaking or you rejected it (in Nokia 5110 or 5130 to make +it you have to press C key, in Nokia 6110, 6130 or 6150 red receiver) +
          • +
          +

          +

        • + +
        • +18: no user responding
        • + +
        • +19: user alerting (from specification - I had it +with normal connection too (phone displayed +'No answer' ('Nie odpowiada')) or when incoming call was diverted to +voice mailbox), no answer +
        • + +
        • +21: call rejected + +

          +

            +
          • +phone wasn't in network coverage (message 'No coverage network'), when you +tried to make call +
          • + +
          • +you tried to call to non existing phone number or you heard busy signal +
          • +
          +

          +

        • + +
        • +22: number changed
        • + +
        • +27: destination out of order
        • + +
        • +28: invalid number format/number incomplete. Phone displayed +'Invalid phone number'
        • + +
        • +31: unspecidied. It seems, that with this error connection +is end by network (for example, when it's overcharged). +Shown sometimes too, when you call for not supported for some tariffs numbers. +
        • + +
        • +34: no circuit/channel available to make call. Phone displayed +'Network busy'. I noticed too, that in my network RR value changed to +1 with this error. More about situations, when network is busy, I write +in TS description.
        • + +
        • +38: network out of order
        • + +
        • +41: temporary failure
        • + +
        • +42: switching equipment congestion +(message "Network busy") +
        • + +
        • +44: requested channel not available
        • + +
        • +47: ressource unavailable. I had it, when connection was "brutal" broken. +Concrete: during call phone of my interlocutor disabled because of empty battery. +My phone displayed 'Error in connection'
        • + +
        • +50: requested facility not subscribed +(you must subscribe it to use it) +In some networks shown too, when you set not supported by network function +(for example, "Own number sending" in Era-GSM network). +Message "Check operator services". +
        • + +
        • +65: bearer service not implemented
        • + +
        • +68: ACM equal to or greater than ACMmax
        • + +
        • +69: requested facility not implemented
        • + +
        • +88: incompatible destination
        • + +
        +

        +

      2. + +
      3. +from mine (and not only) experiences: + +

        +

          + +
        •  28: I had it, when phone number was too long
        • + +
        •  57: no asynchronous data transmission allowed (concrete: +phone wasn't able to connect to WAP from this concrete SIM card)
        • + +
        •  63: "Poza zasiêgiem sieci"
        • + +
        • +79: error with message 'Check operator services'. +You have it, when you enable ALS (Alternative Line Service) function, +don't have second number on SIM card, select it and try to make call +
        • + +
        • +111:'Error in connection'
        • + +
        +

        +

      +
    • + + +
    • +reason from the MobilityManagement-Layer +- it's shown in test 64 too. +It's from GSM specification (section 10.5.3.6/GSM 04.08): + +

      +

        +
      • + 2: IMSI unknown in HLR +(SIM card not active in network)
      • + +
      • + 3: illegal phone
      • + +
      • + 4: IMSI unknown in VLR
      • + +
      • + 5: phone's IMEI was not accepted
      • + +
      • + 6: illegal ME
      • + +
      • +11: PLMN not allowed (you tried to log into +network, which doesn't have roaming convention with your home network - your phone +displays 'No access', when you try to select it manually; I don't know only, if +this code is displayed only, when this network is saved on forbidden list on SIM +card (see test 6)
      • + +
      • +12: Location Area not allowed. You can check it in test 11.
      • + +
      • +13: roaming not allowed in this Location Area
      • + +
      • +17: network failure
      • + +
      • +22: network congestion
      • + +
      • +32: service option not supported
      • + +
      • +33: service option not subscribed
      • + +
      • +34: service temporarily out of order
      • + +
      • +38: call cannot be identified (call RE)

      • + +
      + +
    • +reason from RadioRessourceManagement-Layer) +- see GSM specifications: section 10.5.2.31/GSM 04.08: + +

      +

        +
      • +  0: normal release
      • + +
      • +  1: unspecified
      • + +
      • +  2: channel unacceptable
      • + +
      • +  3: timer expired
      • + +
      • +  4: no activity on the radio path
      • + +
      • +  5: Pre-emptive release
      • + +
      • +  8: handover impossible, +TA out of range
      • + +
      • +  9: channel mode unacceptable
      • + +
      • + 10: frequency not implemented
      • + +
      • + 65: call already cleared
      • + +
      • + 97: message type not compatible with protocol state
      • + +
      • +101: no cell allocation available
      • + +
      • +111: protocol error unspecified
      • +
      +
    • +
    + +

    When you will see "*" before third parameter from this test, it means +(the most often), that call is in progress. Sometimes phone displays different +values - I don't know their meaning :-(. + +

    Values of counters are not saved in EEPROM. When phone makes another measure, +doesn't reset them (changes only these values during next measure, which are connected +with it; doesn't change the rest of them). + +

    + + + + + + +
    This test allows to find, why exactly your phone doesn't want to work +- doesn't want to make calls.
    + +

    Test 40 +
    Resets handover counters (by direct enter)... + +

    + + + + + + +
    + + + + +
       RESET
    +  HANDOVER  
    +  COUNTERS
    +
    + + + + +
      Use menu  
    +  to reset
    +  handover
    +  counters
    +
    + +

    Test 41 +
    Information about handover + +

    Handover - it's transfer of radio connection +(between phone and cell) from one cell to another (without breaking call). +It's made, when: + +

    +

      +
    1. +new radio connecting will give better quality (it's parameters are all the time +checked by phone and base station) +
    2. + +
    3. +when phone is between few cells and can use "new" cells for him +(it frees some place for phones, which can use "old" cell only) +
    4. +
    + +

    When they're problems with transmission, decision about handover is made +by phone (otherwise it's made by BSC). +If you enabled using one channel by phone (test 17), +handovers are not made. + +

    There are 4 types of handovers: + +

    +

      +
    • +Intra cell - Intra BSC +handover (called handoff too): it's the smallest handover +inside one cell. Receiver is "thrown over" from one channel to another +(gennerally to another frequency inside one cell). Decision, if it should +be done, is made by BSC.
    • + +
    • +Inter cell - Intra BSC handover: +receiver is moved from one cell to another. Decision about it +is made by BSC. Connection with first cell +is broken after moment, when connection with another is made (displacement +between two BTSes inside one +BSC).
    • + +
    • +Inter cell - Inter BSC handover: +displacement of connection between two cells, which are not served by +the same BSC. In this case handover is moved +by MSC, but decision about it made +by first BSC. Connection with first +BSC (and BTS) +is broken before moment, when connection with another BSC +(and BTS) is made. +
    • + +
    • +Inter MSC handover: receiver moves from +cell served by MSC/VLR +to another controlled by another MSC/VLR. +It's more complicated situation. We can notice, that +MSC is connected to GSMc over PSTN. +In this case is visible, that another MSC +can't receive information from first normally. + +

      What will happen, when connection will be moved to target +MSC/VLR ? + +

      Because both MSC belongs to the same network, +connection is kept. To move it from one to another MSC +special number HON (HON=CC+NDC+SN, CC - country code, NDC - network code, +SN - subscriber's number) must be generated. It's similiar to roaming number +(it's connection between two MSC too). During +handover between two MSC connection can't be +broken (phone connection realised by network's subscriber). +

    + +

    + + + + + + +
    + + + + +
    HandOOk: aaa
    +PrevCh : bbb
    +HONotOK: ccc
    +HOIntra: ddd
    +
    + + + + +
    HandOvOKCntr
    +PrevChanCntr
    +HandOvNOKCnt
    +HOIntraOKCnt
    +
    + +

    +

      +
    • +aaa - counter for successful handovers
    • + +
    • +bbb - counter for successful back to previous channel attempts +(number of actual used channel is displayed, for example, in +test 1)
    • + +
    • +ccc - counter for failed handovers
    • + +
    • ddd - counter for successful Intra cell - Intra BSC handovers +or assignments
    • +
    + +

    Counters will stop when they reach their maximum (999). To initialize them +to zero, use test 40 (or +test 60). + +

    In dual phones (like Nokia 6150 or 3210) test 41 looks +different and is connected with Inter cell - Intra BSC, +Inter cell - Inter BSC and Inter MSC handovers: + +

    + + + + + + +
    + + + + +
     aaaa  bbbb
    + cccc  dddd
    +eeefffggghhh
    +iiijjjkkklll
    +
    + + + + +
    G>G InterD>D
    +G>D  OK  D>G
    +InterHoFail
    +BackToPrev
    +
    + +

    +

      +
    • aaa - counter of successful handovers from GSM 900 to GSM 900
    • +
    • bbb -counter of successful handovers from GSM 1800 to GSM 1800
    • +
    • ccc - counter of successful handovers from GSM 900 to GSM 1800
    • +
    • ddd - counter of successful handovers from GSM 1800 to GSM 900
    • +
    • eee - counter of failed handovers from GSM 900 to GSM 900
    • +
    • fff - counter of failed handovers from GSM 1800 to GSM 1800
    • +
    • ggg -counter of failed handovers from GSM 900 to GSM 1800
    • +
    • hhh - counter of failed handovers from GSM 1800 to GSM900
    • + +
    • +iii - counter of successful back to previous channel attempts +(number of actual used channel is displayed, for example, in +test 1) +from GSM 900 to GSM 900
    • + +
    • jjj - counter of successful back to previous channel attempts from GSM 1800 to GSM 1800
    • + +
    • kkk - counter of successful back to previous channel attempts from GSM 900 to GSM 1800
    • + +
    • lll - counter of successful back to previous channel attempts from GSM 1800 to GSM 900
    • +
    + +

    Counters will stop when they reach their maximum (9999 dla dwóch pierwszych +linii, 999 dla dwóch ostatnich). To initialize them to zero, use test 40 +(or test 60). + +

    In Nokia 3310 sum of all handovers is also +displayed in test 131 (?). + +

    In Nokia 3110 this test looks like follows: + +

    + + + + + + +
    + + + + +
    HandOOk: aaa 
    +PrevCh : bbb 
    +HONotOK: ccc 
    +T200: eeee
    +
    + + + + +
    HandOvOKCntr 
    +PrevChanCntr 
    +HandOvNOKCnt 
    +T200Cntr
    +
    + +

    +

      +
    • +eeee - I write about T200 counter in test 43
    • +
    + +

    and here's for Nokia 6185/6188: + +

    + + + + +
    +BSI 01000
    +VBAT 388
    +BTEMP 018
    +BATT 2 CHG 0
    +
    + +

      +
    • BSI - Battery capacity. Example: +'1600' for 1500 mAh; '984' for 900 mAh, and '1000' for 880 mAh
    • +
    • VBAT - battery voltage (/100V).
    • +
    • BTEMP - battery temperature in C
    • +
    • BATT - type of battery: 1500 mAh=2; 900 mAh=1; 880 mAh=5
    • +
    • CHG - battery charge status: 2 - charging with desktop charger, +1 - charging with fast charger, 0 - not charging
    • +
    + +

    Test 42 +
    This test is in dual phones (for example, Nokia 6150 or 3210) only +and is connected with first kind of handovers +(Intra cell - Intra BSC): + +

    + + + + + + +
    + + + + +
     aaaa  bbbb
    + cccc  dddd
    +eeefffggghhh
    +iiijjjkkklll
    +
    + + + + +
    G>G IntraD>D
    +G>D  OK  D>G
    +IntraHoFail
    +BackToPrev
    +
    + +

    +

    + +

    Counters will stop when they reach their maximum (9999 for two first lines, +999 for two last). To initialize them +to zero, use test 40 +(or test 60). + +

    In Nokia 6185/6188 this test looks like test 20. + +

    Test 43 + +

    Some English descriptions write about this test: + +

    + + + + + + +
    + + + + +
    T200MS: aaaa
    +T200BS: bbbb
    +T200MS: cccc
    +T200BS: dddd
    +
    + + + + +
    T200 MS GSM 
    +T200 BS GSM
    +T200 MS DCS
    +T200 BS DCS
    +
    + +

    +

      +
    • +aaaa - for GSM 900: counts how many times T200 in phone has expired and +therefore L2 transmission has been repeated.
    • + +
    • +bbbb - for GSM 900: counts how many times T200 in BTS (network) has expired +and therefore L2 transmission has been repeated. +
    • + +
    • +cccc - for GSM 1800 called earlier DCS (in dual phones only): counts how many times T200 in phone +has expired and therefore L2 transmission has been repeated. +
    • + +
    • +dddd - for GSM 1800 (in dual phone only): counts how many times T200 in BTSie +(network) has expired and therefore L2 transmission has been repeated.
    • +
    + +

    Counters will stop when they reach their maximum (9999 for two first lines, +999 for two last). To initialize them to zero, use test +40 (or test 60). + +

    I noticed, that some things are a little different: in all 900, 1800, 900/1800 MHz +phones, I saw, info is displayed ONLY in two first lines. Help is a little different too: + +

    + + + + + + + + + + + + + +
    + + + + +
    +T200 MS     
    +T200 BS

    +  +

    +
    +or: + + + + + +
    +T200Cntr MS
    +T200Cntr Net

    +  +

    +
    +or: + + + + + +
    +T200Cutr MS
    +T200Cutr Net

    +  +

    +
    + +

    In Nokia 6185/6188 this test looks like test 21. + +

    Test 44 +
    You change value from 01 (default) to 00 (or vice versa) by direct enter to this test. + +

    + + + + + + +
    + + + + +
    +
     REVISION
    +LEVEL IS aa 
    +
    + + + + +
    Use menu to 
    +   change
    +  Revision
    +   Level
    +
    + +

    In Nokia 6185/6188 this test looks like test 22. + +

    Test 45 +
    This test allows to simulate situations. when phone can normally +receive network signal (but network can't receive any information from phone). +It's very realistic (even in test +1 in ddd parameter an asterisk (*) is displayed, when +you try to make connection), but not always (in +test 10 you will see +'xxxxxxxx' instead of TMSI, when T3212 counter in first +parameter will be expired). + +

    You can change it by direct enter. + +

    +

    + + + + + + + +
    + + + + +
    +
    TRANSMITTER 
    +  ENABLED
    + +

    (default setting)

    + + + + +
    +
    TRANSMITTER 
    +  DISABLED
    +
    + + + + +
    Use menu to 
    + enable or
    +  disable
    +transmitter
    +
    + +

    + + + + + + +
    When you enable it, phone won't be able, for example, to update +location (see test 64) and +make calls. It will allow to: + +
      +
    • "blockade" phone to the moment of another enabling it (for example, +when you want to observe network parameters, but you don't want to be +accessible for others - when somebody will call to you, for network +your phone will be outside range) +
    • + +
    • +fast remind you of number written to phonebook (it's written on leaf, +but you don't remember name of person assigned to): simple call it. +When phone will choose number, it will display this name; it will be written +on list odf last dialed numbers too. +
    • +
    +
    + +

    This test DOESN'T WORK CORRECTLY in Nokia 3210, 3310 and 7110 (you change setting, +but it doesn't give described above results). + +

    In Nokia 6185/6188 this test looks like test 23. + +

    Test 46 + +

    + + + + +
    +BAND CLASS a
    +CS SUBSTATE
    +EM STATEnnn
    +TX POWER DB
    +
    + +

      +
    • BAND - used cellular system: C= 800MHz CDMA, P=1.9GHz CDMA, A=800MHz AMPS
    • +
    • CS SUBSTATE - cellular state: IDLE, CONVE, PAGE, PILOS, TIME_, SYNC_, RELE, etc
    • +
    • EM STATE - emiter state: SLOT 1, SCANNING, RATE 1 (8k codec), RATE 2 (13k codec) or EVRC.
    • +
    • TX POWER DB - TX power: usually between -75dB and +4dB
    • +
    + +

    Test 48 +
    In Nokia 3110 this test looks like test 7. + +

    Test 51 +
    Information about SIM card + +

    + + + + + + +
    + + + + +
    aaa bbb ccc 
    + dddddddd
    + e f  gg hh
    +  i   jjjj
    +
    + + + + +
    VSel Bau SAl
    +SCond  CStop
    +PIN12  PUK12
    + ATR  FE/PE
    +
    + +

    +

      +
    • +aa - SIM voltage selection type (3, 3/5 or 5)
    • + +
    • +bbb - division coefficient, which define speed of communication phone with +SIM card (372, 64, 32 or 0) saved in ATR (first sequence send by SIM card +after reset - Answer To Reset). +When you will divide clock frequency (maximal 3,25 MHz = 3 250 000 Hz) +by it, you will have speed of transmission +(for example, 3 250 000 Hz / 372 = 8736,5 bods) +WARNING ! YOU CAN'T CHANGE SPEED OF COMMUNICATION PHONE WITH SIM CARD +AND VALUE OF THIS PARAMETER ! +
    • + +
    • +ccc - information, whether SIM clock stop is allowed (it saves energy) +during standby (YES or NOT - possible or not). This information is displayed +(in Nokia phones and not only) using *#SIM0CLOCK# code +- when you will see "SIM clock stop allowed", SIM card allows to make it. +Some Nokia 6110 phones (it depeneds on their firmware) can not support +correctly this code - they display, for example, "Result unknown". +Phone disables SIM card clock automatically - you can't make it manually ! +
    • + +
    • +dddd - information about clock stop condition: + +

      +

        +
      • UP
      • +
      • DOWN
      • +
      • DOWN(UP) - in tested by me SIM cards
      • +
      • UP(DOWN)
      • +
      • xxxxxxxx
      • +
      +

      +

    • + +
    • +e - number of left PIN1 code entering attempts. When it's bigger than 9, +you will see only last digit of it (for example, I found some prepaid cards +with 10 value). Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 3. In some SIM cards +you can disable answering for this code (for example, you can select it in +Menu 4-3-1 in Nokia 5110). When it's equal 0, phone shows +"Sim card blocked" and asks for PUK1. If it was entered correctly, this counter +is reset to maximal value. Disabling and enabling phone doesn't reset it ! +
    • + +
    • +f - number of left PIN2 code entering attempts (when SIM card doesn't support +PIN2 functions, you will see "x" here). You can check, if these functions are supported, +using call cost function too (if they're not, phone displays "Not allowed"). +If you wanted to use them and your card doesn't support them (you will see "x" +here), you (or your operator ;-) rather) have to change it. +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 3. When this counter +is equal 0, phone asks for PUK2. When this code was entered correctly, counter +is reset to maximal value. Of course, even when it's equal 0, you can normally +use SIM card (PIN2/PUK2 are independent of PIN1/PUK1), when you know PIN1. +Disabling and enabling phone doesn't reset it ! +If SIM card has blocked PIN2/PUK2 codes, you can enter to the menus contains supported +by these codes functions (but after changing next settings you will see error). +
    • + +
    • +gg - number of left PUK1 code entering attempts. +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 10. +Phone asks for it, when counter of left PIN1 code entering attempts is equal 0 +(phone shows "Sim card blocked"). When this counter is equal 0 too, SIM card +can be blocked (phone shows "Sim card rejected") or (it depends on card) +asks for PUK2. When this code was entered correctly, counters of left PIN1 and +PUK1 codes entering attempts are reset to maximal values. +Disabling and enabling phone doesn't reset it ! +
    • + +
    • +hh - number of left PUK2 code entering attempts (when SIM card doesn't support +PIN2 functions, you will see "x" here). +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 10. +When it's equal 0, using PIN2 functions can be impossible on this SIM card (ask operator for help). +Additionaly, when you were asked for PUK2, when counters of left PIN1 and +PUK1 codes entering attempts were equal 0 and now left PUK2 code entering attempts +is equal 0 too, using this SIM card can be impossible (you have to replace it to new). +When it was entered correctly, counters for this code and PIN2 (when you entered +PUK2, because PIN2 was blocked) are reset to maximal values or counters for this, +PIN1 and PUK1 are reset (when you entered PUK2, because PIN1 and PUK1 were blocked). +Disabling and enabling phone doesn't reset it ! +
    • + +
    • +i - ATR repeat counter (ATR is first sequence sent by SIM card in answet to reset - +Answer To Reset) (0-9)
    • + +
    • +jjjj - number of retransmissions/parity errors in transmission with SIM card +(when the happen, two first chars are equals FE (Frame Error) or +PE (Parity Error), two last number of retransmission/errors)
    • +
    + +

    If you don't have SIM card in the phone, you will see "ERROR1" in this test. + +

    If phone has problems with communication with SIM card, this test can look like +follows (i and jjjj parameters are described above): + +

    + + + + + +
    + + + + +
    ERROR1 5  55
    +55
    +  i   jjjj
    +  +
    +
    + +

    CStop parameter (information, if SIM card clock is disabled in this moment) +is displayed in help only. Why ? Probably somebody didn't remember about it... + +

    Here are some observations for SIM voltage selection type (first parameter) +Nokia 5110 and tested SIM cards: + +

    After enabling phone reads some information from SIM card (for example, +number saved on it SMS messages, numbers from phonebook) - when you try to read +something, what is written there (for example, phonebook), +"SIM card not ready" message is displayed then (and first parameter shows 3). +I noticed, that phone can't display names assigned to numbers in phonebook too +(for example, when you call somebody) and shows, that "Inbox" and "Outbox" +are empty (even, when some messages are saved there). + +

    Later value of parameter changes to 3/5 - I suppose, SIM card clock is +enabled then. + +

    Phone disables it (in test value 3), when communicates with network +(requesting services, sending or receiving SMS messages) because of saving +energy (the same in NSPS state). + +

    When you call to number assigned to name in phonebook (or phone +recognizes incoming number), value to the end of call is equal 3/5 +(otherwise it changes to 3). After end of call is always equal 3. Logical +conclusion: after enabling phone saves in own memory checksum for +all numbers from phonebook (it's enought to make for 7 last digits - they're +used to identify number in Nokia phones). If this checksum is the same to +checksum for number, you're calling (or incoming number), phone reads name +from phonebook... + +

    And the last observation: without connection (see above) value of first +parameter is equal 3/5 (is some energy loose ? Probably yes... But why counter from +test 20 doesn't show any change in their +consumption ?) + +

    When you try to open "Outbox" or "Inbox", phone doesn't enable clock, +when they're empty (that's why I think, that phone saves into own memory +number of saved SMS messages too). + +

    Many information about SIM card are displayed by +SIMedit (unfortunatelly, in Czech language only :-( )... +Parameters like ATR you can study using SIM Scan (it's on the www.net.yu/~dejan +or http://members.tripod.com/~dejank/ pages). They both work with +SIM card readers only... + +

    + + + + + + +
    +If you want to see "Insert SIM card" and (sometimes) "SIM card rejected" +messaeges, try to make such activities (checked for Nokia 5110): + +

    Press very delicately the locking catch of the battery and start to slide the battery +downwards very slowly (stop, when you will hear silently crack). + +

    In this moment you should see first message and phone will start to inform +about problems with communication with SIM card (you will see "ERROR1" here)... +

    + +

    In Nokia 9210 help looks like follows: + +

    + + + + +
    VSel Bau SAl
    +SCond(CStop)
    +PIN12  PUK12
    + ATR  FE/PE
    + +

    In Nokia 6185/6188 this test looks like follows: + +

    + + + + +
    +TASK0 0134  
    +TASK1 015C
    +TASK2 0138
    +TASK3 0170
    +
    + +

    Test 52 +
    Reads datafield from SIM card + +

    + + + + + + +
    + + + + +
    +Read SIM-
    +data field  
    +to SIM-SCM
    +
    + + + + +
    +Use menu to 
    +read SIM-
    +data field
    +to SIM-SCM
    +
    + +

    This display reads a binary datafield from SIM card to SIM SCM memory +(SCM = Short Code Memory and it means phonebook on SIM card). + +

    Prior using this display the identifier of datafield has to be stored as an +alpha-identifier of SCM location number 34 of SIM memory. The datafield +must be written in hexadecimal notation. The identifiers can be found from +the GSM 11.11. + +

    The contents of datafield is stored as a data-identifier of SCM location +number 35 of SIM memory. The contents are displayed in hexadecimal notation. +The maximum length of the datafield is 10 bytes, but the length depends on +the name length of the SIM memory. In case the datafield cannot be read the +alpha-identifier of SCM location is NOT DONE. + +

    The information of how the read succeeded can be read from the SCM location +36 of SIM memory and on the display for a short period. + +

    The following results are possible: + +

    + + + + + + + + + +
    OKdatafield was read correctly
    NOT BINARYdatafield is either formatted or cyclic
    NOT FOUNDdatafield was not found from SIM card
    CARD ERRORsomething weird happened, card did not respond as expected
    NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
    NOT STOREDcould not store into the result memory place
    NO ADDRESScould not read the address from the SCM-location
    UNKNOWNunidentified error
    + +

    For the time being following binary datafields exist in SIM. In future +there could be more. All of these are not necessarily on all SIM cards. + +

    + + + + + + + + + + + + + + + + + + + + + + + +
    2FE2ICC identification(10 bytes)
    6F05Language preference(variable length)
    6F07IMSI(9 bytes)
    6F20Ciphering key Kc (it's read from card after entering PIN)(9 bytes)
    6F30PLMN selector(variable length)
    6F31HPLMN (home network ?) search period(1 byte)
    6F37ACM maximum value(3 bytes)
    6F38SIM service table(2-4 bytes)
    6F41Price per unit and currency table(5 bytes)
    6F45Cell broadcast message identifier selection(variable length)
    6F74Broadcast control channels(16 bytes)
    6F78Access control class(2 bytes)
    6F7BForbidden PLMNs (see test 7)(12 bytes)
    6F7ELocation information +(TMSI, +Local Area Information (consist of MCC, MNC & LAC - +see test 11 for them), +last Location Update status)(11 bytes)
    6FADAdministrative data(variable length)
    6FAEPhase identification(1 byte)
    6F43SMS status(variable length)
     

    Next two binary datafields are phase 2+ features which are not currently in use

     

    6F3EGroup Identifier Level 1(variable length)
    6F3FGroup Identifier Level 2(variable length)
    + +

    In Nokia 6185/6188 this test looks like follows: + +

    + + + + +
    +TASK4 0134  
    +TASK5 015C
    +TASK6 0138
    +TASK7 0170
    +
    + +

    Test 53 +
    Writes datafield into SIM card + +

    + + + + + + +
    + + + + +
    +    Write
    + data field
    +from SIM-SCM
    +  to SIM
    +
    + + + + +
    +Use menu to
    +write data
    +field to SIM
    +  +
    +
    + +

    This display writes data for a binary datafield in SIM card by using data +in SCM memory of SIM card. + +

    Prior using this display the identifier of datafield has to be stored as an +alpha-identifier of SCM location number 34 of SIM memory. The datafield +must be written in hexadecimal notation. The identifiers can be found from +the GSM 11.11. In addition the data to be stored into SIM card has to be +entered as an alpha-identifier of SCM location number 35 of SIM memory. +The data has to be stored in hexadecimal notation. + +

    The result of write operation can be seen from the alpha-identifier of +SCM-location 36 of SIM-memory and on the display for a short period. + +

    The following results are possible: + +

    + + + + + + + + + + +
    OKdatafield was read correctly
    NOT BINARYdatafield is either formatted or cyclic
    NOT FOUNDdatafield was not found from SIM card
    CARD ERRORsomething weird happened, card did not respond as expected
    NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
    DATA ERRORthe data contents in SCM location is coded wrongly
    NOT STOREDcould not store into the result memory place
    NO ADDRESScould not read the address from the SCM location
    UNKNOWNunidentified error
    + +

    If you want to see changes, often you have to restart your phone. + +

    In Nokia 6185/6188 this test looks like follows: + +

    + + + + +
    +TASK8 0134  
    +TASK9 015C
    +TASK10 0138
    +TASK11 0170
    +
    + +

    Test 54 +
    Information about memory blocks + +

    + + + + + + +
    + + + + +
    aa bb  aa bb
    +aa bb  aa bb
    +aa bb  aa bb
    +aa bb  aa bb
    +
    + + + + +
    ResF1  ResF2
    +ResF3  ResF4
    +ResF5  ResF6
    +ResF7  ResF8
    +
    + +

    Meaning of the individual lines (information about another blocks): + +

    +

      +
    1. 1, 2
    2. +
    3. 3, 4
    4. +
    5. 5, 6
    6. +
    7. 7, 8
    8. +
    + +

    +

      +
    • aa - number of reserved blocks
    • +
    • bb - number of free blocks in worst case
    • +
    + +

    In Nokia 6185/6188 this test looks like follows: + +

    + + + + +
    +TASK12 0134 
    +TASK13 015C
    +TASK14 0138
    +TASK15 0170
    +
    + +

    Test 55 +
    Information about memory blocks (some phones don't have this test - +they don't have such big memory) + +

    + + + + + + +
    + + + + +
    aa bb  aa bb
    +aa bb  aa bb
    +aa bb  aa bb
    +aa bb  aa bb
    +
    + + + + +
    ResF9 ResF10
    +ResF11ResF12
    +ResF13ResF14
    +ResF15ResF16
    +
    + +

    Meaning of the individual lines (information about another blocks): + +

    +

      +
    1. 9, 10
    2. +
    3. 11, 12
    4. +
    5. 13, 14
    6. +
    7. 15, 16
    8. +
    + +

    +

      +
    • aa - number of reserved blocks
    • +
    • bb - number of free blocks in worst case
    • +
    + +

    In Nokia 7110 counters end on ResF11, in 6210/6250 on ResF15. + +

    In Nokia 3110 this test looks like test 56. + +

    In Nokia 8210/3310 help to this test is a little +different (another firmware "bug" ? ;-))): + +

    +

    + + + +
    + + + + +
    + +ResF9 ResF10
    +ResF11ResF12
    +ResF13ResF14
    +ResSF15ResF1
    +
    +
    +
    + +

    and values are displayed in first line only... + +

    Test 56 +
    Block display + +

    + + + + + + +
    + + + + +
     aaaaaa bbb 
    + cccccccc

    +
    + + + + +
     Ptr   Cntr 
    + Task

    +
    + +

    +

      +
    • +aaaaaa - pointer to memory where double deallocation was called, in hex +format.
    • + +
    • +bbb - counter for failed deallocations.
    • + +
    • +cccccccc - name of task which last tried to double deallocate a block +(you can find their list in test 35 description). + + + +
    • +
    + +

    This test has correct values only, when counter bbb is different from 0. + +

    In Nokia 3110 it looks like test 57. + +

    Test 57 +
    Memory status before reset + +

    + + + + + + +
    + + + + +
    aaaaaaaaaaaa
    +aaaaa...
    +bbbbbbbb
    +
    + + + + +
     Status of
    + stacks
    + Block sets 
    +
    + +

    +

      +
    • +aaaaaa... - Status of each stack before reset. First position contains +the status of stack 0, second position the status of +stack 1 and so on. The last position contains the status +of System stack. Number of stacks depends on the current +configuration of software. Possible values for each stack are: + +

      +

        +
      • 0: status OK, no overflow - it's normally !
      • +
      • 1: status not OK, stack overflow
      • +
      +

      +

    • + +
    • +bbbbbbb - status of each block set before reset. First position +contains the status of block set 1, second position the +status of block set 2 and so on. Possible values for each +block set are: + +

      +

        +
      • 0: status OK
      • +
      • 1: block set full - it's normally !
      • +
      • 2: (de)allocation error or total memory corruption
      • +
      +
    • + +
    + +

    This display is only valid when a unknown or +a stack overflow interrupt has occured. In some phones you can make +restart connected with stack overflow (see question 9) +and see this test in "action"... + +

    In Nokia 6210 this test is bigger and displayed on full screen... + +

    In Nokia 6185/6188 this test is different: + +

    + + + + +
    + +16:3A 32:26
    +64:18 128:21
    +168:14
    +264:0E +
    +
    + + +
    Back to the top
    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modifcation: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net5.htm b/Docs/en_US/gsm/netmon/faq_net5.htm index 3c34bf1..e7e4173 100644 --- a/Docs/en_US/gsm/netmon/faq_net5.htm +++ b/Docs/en_US/gsm/netmon/faq_net5.htm @@ -1,2281 +1,2499 @@ - - - - - - - - - - FAQ - monitor sieci w Nokiach (czê¶æ 6/7) - - - - - -

    Strona g³ówna

    - -
    Monitor sieci w telefonach Nokia (6/7) - -

    [Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] - -

    - -
    - - - -
      -
    1. Co to jest ?
    2. -
    3. Czy jest mi potrzebny ?
    4. -
    5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
    6. -
    7. Jak go w³±czyæ ?
    8. -
    9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
    10. -
    11. Czy w³±czenie monitora powoduje utratê gwarancji ?
    12. -
    13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
    14. -
    15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
    16. -
    17. Jak siê nim pos³ugiwaæ ?
    18. -
    19. Czy mogê zepsuæ sobie telefon ?
    20. -
    21. S³owniczek
    22. -
    23. Znaczenie poszczególnych testów
    24. -
    25. Mo¿na te¿ u¿yæ programu...
    26. -
    27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
    28. -
    29. W jaki sposób mogê wy³±czyæ monitor sieci ?
    30. -
    31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
    32. -
    33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
    34. -
    35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
    36. -
    37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
    38. -
    39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
    40. -
    41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
    42. -
    43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
    44. -
    45. Co to s± kody monitora sieci ?
    46. -
    47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
    48. -
    49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
    50. -
    51. Na li¶cie sieci zabronionych mam nieistniej±ce sieci...
    52. -
    53. Jak sprawdziæ, w jakim pasmie czêstotliwo¶ci (900 czy 1800 Mhz) dzia³a telefon ?
    54. -
    55. Czy mogê u¿yæ kabla DLR-2/DLR-3 do aktywacji monitora ?
    56. -
    57. Czy mogê u¿yæ aktywowaæ monitor sieci korzystaj±c z Init File Editor (Nokia 9110) ?
    58. -
    59. Czy mogê zmusiæ telefon do u¿ywania konkretnego pasma czêstotliwo¶ci (900 lub 1800 Mhz) ?
    60. -
    61. Jak zmieniaæ ustawienia w testach ?
    62. -
    63. Mój telefon ma bardzo krótki czas czuwania - czy mo¿na sprawdziæ, co jest tego przyczyn± ?
    64. -
    65. Czy monitor sieci dostêpny jest tylko po angielsku ?
    66. -
    67. U¿yte materia³y
    68. -
    69. Dodatkowe informacje
    70. -
    71. Czy u¿ywanie/aktywacja monitora co¶ kosztuje ?
    72. -
    73. Czy u¿ywanie monitora jest legalne ?
    74. -
    75. Które komórki na karcie SIM s± u¿ywane w testach monitora ?
    76. -
    77. Czy mogê netmonitora w 3310 uaktywniæ programem do 3210?
    78. -
    79. Po uaktywnieniu netmonitora/BTS TEST telefon "gubi" sieæ komórkow±...
    80. -
    81. Netmonitor pokazuje inn± pojemno¶æ baterii ni¿ informacja na niej...
    82. -
    -
    -
    - -

    Test 58 - - - - - -
    -384:02      
    -512:02
    -752:02
     
    -
    - -

    Test 59 - - - - - -
    - -0087
    -00 00 00 00 

      - -

    - -

    Test 60 - -

    - - - - - - -
    - - - - -
     FIELD TEST 
    -  DISPLAY 
    - COUNTERS 
    -   RESET
    -
    - - - - -
    Use menu to
    -reset field
    -test display
    -counters
    -
    - -

    Przez bezpo¶rednie wej¶cie do tego menu mo¿esz wyzerowaæ liczniki od -testu 41 do testu 43 -i od testu 61 do testu 66. - -

    - - - - - - -
    Je¿eli wyzerujesz te liczniki na pocz±tku ka¿dego miesi±ca, to bêdziesz -móg³(mog³a) porównaæ ilo¶æ wys³anych SMSów -(test 65) i rozmów (test 63) -z Twoim rachunkiem telefonicznym. -Dodatkowo (w niektórych kartach prepaid - np. Tak-Tak) pobierana jest z góry -op³ata za wys³anie pewnej ilo¶ci SMSów -- je¿eli wyzerujesz te liczniki na pocz±tku "cyklu", bêdzie wiedzieæ, kiedy -z Twojego konta zostan± odjête kolejne pieni±dze... -
    - -

    Test 61 - -

    - - - - - - -
    - - - - -
    NOPSW  :aaaa
    -SYNCR  :bbbb
    -RESELEC:cccc
    -
    - - - - -
    PSWMesgCntr
    -SyncMeasCntr
    -CellReselCtr
    -
    - -

    -

      -
    • -aaaa - licznik (szesnastkowy) zliczaj±cy komunikaty MDI_NO_PSW_FOUND -z DSP
    • - -
    • -bbbb - licznik (dziesiêtny) prób zmierzenia synchronizacji. Je¿eli przekroczy -9999, pokazywane s± cztery x.
    • - -
    • -cccc - licznik (szesnastkowy) powtórnych wyborów komórki
    • -
    - -

    Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je -wyzerowaæ u¿ywaj±c testu 60. S± one zerowane, -gdy osi±gn± warto¶ci maksymalne. - -

    W telefonach dualnych pojawi siê takie test 61: - -

    - - - - - - -
    - - - - -
    aaaaa  bbbbb
    -ccccc  ddddd
    -eeeee  fffff
    -ggggg  hhhhh
    -
    - - - - -
    NOPswGSM DCS
    -Sync GSM DCS
    -reselG>G D>D
    -reselG>D D>G
    -
    - -

    -

      -
    • -aaaaa - dla GSM 900: licznik (dziesiêtny) zliczaj±cy komunikaty MDI_NO_PSW_FOUND -z DSP
    • - -
    • -bbbb - dla GSM 1800: licznik (dziesiêtny) zliczaj±cy komunikaty MDI_NO_PSW_FOUND -z DSP
    • - -
    • -ccccc - dla GSM 900: licznik (dziesiêtny) prób zmierzenia synchronizacji. -Je¿eli przekroczy 99999, pokazywane jest piêæ x.
    • - -
    • -ddddd - dla GSM 1800: licznik (dziesiêtny) prób zmierzenia synchronizacji. -Je¿eli przekroczy 99999, pokazywane jest piêæ x.
    • - -
    • -eeeee - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 900 - GSM -900
    • - -
    • -fffff - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 1800 - GSM -1800
    • - -
    • -ggggg - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 900 - GSM -1800
    • - -
    • -hhhhh - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 1800 - GSM -900
    • -
    - -

    Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je -wyzerowaæ u¿ywaj±c testu 60. S± one zerowane, -gdy osi±gn± warto¶ci maksymalne. - -

    W Nokii 6210/8210: - -

    - - - - - - -
    - - - - -
    -NOPSW: 008A
    -SYNCR: 766
    -RESELEC:872D
    -RmMonTO:0000 -
    -
    - - - - -
    -PSWMesgCntr
    -SyncMeasCntr
    -CellReselCtr
    -RM Mon TOuts -
    -
    - -

    Natomiast w Nokii 3310 pomoc wygl±da jak pomoc w modelu 6210/8210, natomiast warto¶ci -mniej wiêcej tak: - -

    - - - - -
    -  17
    - 135        
    -5112
    -  -
    - -

    W Nokii 6185/6188 jest on jeszcze inny: - -

    - - - - -
    -V
    -aaaaaaaaaaaa
    -bbbbbbbbbb
    -ccccccc -
    - -

      -
    • aaaaaaaaaaaa - wersja oprogramowania telefonu
    • -
    • bbbbbbbbbb - data oprogramowania telefonu
    • -
    • ccccccc - oznaczenie kodowe telefonu (NSD-3AX)
    • -
    - -

    - - - - - - -
    Ten telefon pokazuje te informacje równie¿ po u¿yciu kodu *#837#. -Je¿eli chcesz siê wiêcej dowiedzieæ o wewnêtrznym oprogramowaniu telefonów Nokia -(ró¿nice, wersje, itd.), kliknij tutaj.
    - -

    Test 62 - -

    - - - - - - -
    - - - - -
     PSW  :aaaa 
    - SYNCR:bbbb
    - BCCH :cccc 
    - BCCHE:dddd
    -
    - - - - -
    NeghbrPSWCtr
    -SyncMeasCntr
    -BCCHMeasAtmp
    -BCCHExtMeAtm
    -
    - -

    -

      -
    • -aaaa - ilo¶æ prób pomiarów PSW w s±siednich komórkach
    • - -
    • -bbbb - ilo¶æ prób zmierzenia synchronizacji w s±siednich komórkach
    • - -
    • -cccc - ilo¶æ prób pomiarów kana³ów -BCCH -(tzn. jako¶ci transmisji z nimi) w s±siednich komórkach (patrz opis C1)
    • - -
    • -dddd - ilo¶æ prób rozszerzonych pomiarów kana³ów BCCH -(tzn. jako¶ci transmisji z nimi) w s±siednich komórkach (patrz opis C1)
    • -
    - -

    Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je -wyzerowaæ u¿ywaj±c testu 60. S± one zerowane, -gdy osi±gn± warto¶ci maksymalne. - -

    W Nokii 3310 warto¶ci liczników s± piêciocyfrowe i wyrównane do prawej strony ekranu... - -

    W Nokii 6185/6188 ten test wygl±da inaczej: - -

    - - - - -
    -DSP ROM 2   
    -VERS 430
    -BETA 0014
     
    -
    - -

    Test 63 - -

    - - - - - - -
    - - - - -
      aa    bb
    -  ccc   ddd 
    -  eee   fff
    -
    - - - - -
    CalRel RelDi
    -MOCAtmp MOOK
    -AllMT   MTOK
    -
    - -

    -

      -
    • -aa - tutaj znajdziesz przyczynê zakoñczenia ostatniego po³±czenia (parametr -ten jest równie¿ podawany w te¶cie 2 -i te¶cie 39 (w tym ostatnim menu -znajdziesz wyja¶nienia - patrz opis pierwszego parametru))
    • - -
    • -bb - kolejna informacja o zakoñczeniu ostatniego po³±czenia: - -

      -

        -
      • -UN: nieznana (przyk³adowo: od w³±czenia Twojego telefonu nie by³y wykonywane -¿adne po³±czenia)
      • - -
      • -IN: przyczyna wewnêtrzna (przyk³adowo: w³±czy³e¶(a¶) w te¶cie 17 -test BTSa, telefon nie odnalaz³ -sieci na podanym kanale, a Ty próbowa³e¶(a¶) wykonaæ po³±czenie)
      • - -
      • -MT: przerwanie przez sieæ
      • - -
      • -MO: nast±pi³o roz³±czenie (od³o¿enie s³uchawki) z którego¶ telefonu
      • -
      -

      -

    • - -
    • -ccc - ilo¶æ wybieranych po³±czeñ z Twojego telefonu
    • - -
    • -ddd - ilo¶æ poprawnie zrealizowanych po³±czeñ wychodz±cych z Twojego telefonu -(tzn. ile razy dodzwoni³e¶(a¶) siê do Twojego rozmówcy). W Nokii 3310 równie¿ -w te¶cie 132.
    • - -
    • -eee - ilo¶æ wszystkich rozmów przychodz±cych
    • - -
    • -fff - ilo¶æ odebranych rozmów przychodz±cych. W Nokii 3310 równie¿ -w te¶cie 132.
    • -
    - -

    Po osi±gniêciu warto¶ci maksymalnej liczniki s± zerowane (mo¿esz to te¿ -zrobiæ w te¶cie 60). Ich warto¶ci (od licznika -ccc w³±cznie) s± zapamiêtywane przy wy³±czaniu telefonu. - -

    W Nokii 3310 parametry s± nieco poprzesuwane w stosunku do rysunku powy¿ej. - -

    W Nokii 6185/6188 ten test wygl±da inaczej: - -

    - - - - -
    - -C1M 00      
    -C1L 00
    -C2M 00
    -C2L 03 -
    -
    - -

    Test 64 -
    Zawiera m.in. informacje, ile razy Twój telefon informowa³ sieæ o swoim -po³o¿eniu (patrz równie¿ opis test 10) - -

    - - - - - - -
    - - - - -
     aa bbb ccc 
    - dd eee fff 

    -
    - - - - -
    Nfai NL NLOK
    -PFai PL PLOK
    - Loc update
    -  counters
    -
    - -

    -

      -
    • -aaa - kod b³êdu (zerowany po w³±czeniu telefonu) przy ostatnim b³êdnym -Location -Update (tzn. zmienia siê tylko wtedy, gdy gdy wyst±pi³ b³±d przy jego -wykonywaniu). Znajdziesz go równie¿ w te¶cie 39 -- jest to warto¶æ parametru MM (tam podane s± równie¿ warto¶ci -kodów z wyja¶nieniami).
    • - -
    • -bbb - ile razy próbowano wykonaæ Location -Update
    • - -
    • -ccc - ilo¶æ prób wykonania Location -Update zakoñczonych sukcesem
    • - -
    • -ddd - b³±d przy ostatnim PLU lub IMSI -Attach (17 oznacza prawdopodobnie zajêto¶æ sieci)
    • - -
    • -eee - ile razy telefon próbowa³ wykonaæ PLU lub -IMSI Attach
    • - -
    • -fff - ilo¶æ udanych prób wykonania PLU lub -IMSI Attach
    • -
    - -

    Warto¶ci tych liczników (z wyj±tkiem kodów b³êdów) s± zapamiêtywane przy -wy³±czaniu telefonu. Mo¿esz je wyzerowaæ w te¶cie 60 -(jest robione równie¿, gdy osi±gn± warto¶ci maksymalne). - -

    W Nokii 3310 parametry s± nieco poprzesuwane w stosunku do rysunku powy¿ej. - -

    - - - - - - -
    Je¿eli nie wy³±czasz telefonu i jeste¶ ca³y czas w zasiêgu swojej sieci, -to z tego menu mo¿esz siê dowiedzieæ (w przybli¿eniu), jak d³ugo jest w³±czony -(musisz w -te¶cie 10 sprawdziæ, -co ile jest zerowany licznik T3212 (parametr ccc) i pomno¿yæ tamten czas -przez parametr eee z tego menu). Mo¿esz u¿yæ do tego celu równie¿ licznika -z testu 82 (jest dok³adniejszy, ale wymaga -w³±czenia którego¶ testu) albo menu serwisowego (Nokia 6130 lub 3210).
    - -

    W Nokii 6185/6188 ten test wygl±da inaczej: - -

    - - - - -
    - -C3M 00      
    -C3L 00
    -C4M 00
    -C4L 03 -
    -
    - -

    Test 65 -
    Menu zwi±zane z wiadomo¶ciami SMS -(raporty nie s± uwzglêdniane) - -

    - - - - - - -
    - - - - -
     aa bbb ccc 
    - dd eee fff
    - gggg
    -
    - - - - -
    SFai MO MOOK
    -RFai MT MTOK
    -Sched Msgs
    -SMS counters
    -
    - -

    -

      -
    • -aaa - numer b³êdu przy wysy³aniu ostatniego SMSa -(zerowany po w³±czeniu telefonu): - -

      -

        -
      • -  1: 'Nie ma takiego numeru' ('Number not in use')
      • - -
      • - 21: 'Wys³anie nieudane tym razem' ('Message not sent this -time'). B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka -(gdy nie mo¿na jeszcze by³o ich by³o z niego wysy³aæ - przed 28.04.2000), -wysy³aniu pod b³êdny numer (dobre SMSC), przez SMSC zablokowane na -Twoj± sieæ albo przy próbie wys³ania SMS z numerem alfanumerycznym -przez SMSC nieobs³uguj±ce tego formatu
      • - -
      • - 28: 'Nie ma takiego numeru' ('Number not in use')
      • - -
      • - 38: 'Wys³anie nieudane tym razem' ('Message not sent this -time'). B³±d przy wysy³aniu wiadomo¶ci przez SMSC zablokowane na Twoj± -sieæ.
      • - -
      • - 42: prawdopodobnie b³±d ten pojawia siê, gdy u¿yte SMSC -jest przeci±¿one (za du¿o wys³anych na raz wiadomo¶ci przez u¿ytkowników) -i nie mo¿e wys³aæ Twojej wiadomo¶ci
      • - -
      • - 50: "Sprawd¼ us³ugi operatora" ("Check operator services"). -B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka -(gdy nie mo¿na jeszcze by³o ich by³o z niego wysy³aæ - przed 28.04.2000). -
      • - -
      • - 96: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -Przyczyn± jest niew³a¶ciwy numer SMSC (+1)
      • - -
      • -111: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -Przyczyn± jest niew³a¶ciwy numer, pod który wysy³a³e¶ wiadomo¶æ (albo numer -SMSC)
      • - -
      • -166: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -Pokazuje siê przy b³êdnym numerze SMSC albo SMSC zablokowanym na Twoj± -sieæ.
      • - -
      • -169: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -Brak pieniêdzy przy karcie prepaid.
      • - -
      • -178: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka -(gdy nie mo¿na tego jeszcze by³o z niego robiæ - przed 28.04.2000).
      • - -
      • -252: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). -Pojawia siê, gdy zosta³ wy³±czony nadajnik telefonu w te¶cie 45 -albo telefon nie móg³ znale¼æ sieci (w te¶cie BTSa -z testu 17 zosta³ ustawiony -taki kana³).
      • - -
      • -253: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). Pokazuje -siê przy b³êdnym numerze SMSC.
      • -
      -

      -

    • - -
    • -bbb - ilo¶æ prób wys³ania SMSów. -Nale¿y pamiêtaæ, ¿e raport o oczekiwaniu SMSa na dostarczenie -(pending albo oczekuje) nie jest nigdzie -wysy³any z telefonu i uwzglêdniany w tym parametrze -(natomiast informacja o jego (nie)dostarczeniu -przes³ana z SMSC ju¿ tak - patrz opis parametru eee i fff). Przyk³adowo: -w opcjach telefonu zaznaczy³e¶, ¿e chcesz otrzymywaæ raporty. Wysy³asz SMSa -- telefon zwiêksza warto¶æ tego parametru. Je¿eli pokaza³, ¿e wys³anie jest udane, -zwiêksza równie¿ warto¶æ parametru ccc o 1 i zapisuje raport dotycz±cy oczekiwania -na dostarczenie wys³anego SMSa. Je¿eli SMSC go dostarczy³o (lub nie) i wysy³a -o tym raport (Nieudane/Failed lub Delivered/Dostarczono), zwiêksza siê warto¶æ parametru eee. -Je¿eli odebranie tego raportu -powiedzie siê, zwiêksza siê o 1 równie¿ warto¶æ parametru fff (telefon sprawdza -teraz wszystkie zapisane raporty. W wiêkszo¶ci Nokii: je¿eli w którym¶ z -raportów dotycz±cym oczekiwania na dostarczenie zgadza siê numer SMSC i -numer, pod który wysy³ano wiadomo¶æ, telefon kasuje tamten i zapisuje na jego miejsce -otrzymany). -
    • - -
    • -ccc - ilo¶æ poprawnie wys³anych SMSów -(tzn. takich, które zosta³y zaakceptowane przez u¿yte centrum SMS - tylko -za nie zap³aci³e¶(a¶)). Uwagi dotycz±ce tego parametru s± podane przy opisie -poprzedniego.
    • - -
    • -ddd - numer b³êdu przy otrzymywaniu ostatniego SMSa -(zerowany po w³±czeniu telefonu): - -

      -

        -
      • -22: pe³na pamiêæ przeznaczona na wiadomo¶ci (telefon próbowa³ -przyj±æ SMSa - zwiêkszy³a -siê warto¶æ licznika eee, nie zmieni³a siê warto¶æ fff). Informuje o tym -równie¿ mrugaj±ca koperta na samym górze wy¶wietlacza, a telefon pokaza³ -równie¿ oddzielny komunikat 'Brak miejsca na wiêcej wiadomo¶ci' ('No space -for new messages'). Je¿eli zapisujesz wiadomo¶ci na karcie SIM, ich ³±czna -ilo¶æ w 'Skrzynce nadawczej' ('Outbox') i 'Skrzynce odbiorczej' ('Inbox') -zale¿y w³a¶nie od niej (w ró¿nych sieciach komórkowych oferowane s± karty -SIM z ró¿n± ilo¶ci± mo¿liwych do zapisania wiadomo¶ci SMS -- dla kart Plusa wynosi ona 10 lub 25, Ery -15, a Idei 30). Nie mo¿esz -wiêc dopisywaæ nowych wiadomo¶ci (komunikat 'Pe³na pamiêæ wiadomo¶ci' ('Message -memory full')). Je¿eli nie wykasujesz której¶ z ju¿ zapisanych wiadomo¶ci, -mo¿esz utraciæ te przychodz±ce (je¿eli sieæ nie dostarczy ich przez czas -okre¶lony przez ich nadawcê, zostan± bezpowrotnie wykasowane).
      • -
      -

      -

    • - -
    • -eee - ilo¶æ prób odebrania SMSów. -Uwaga podana przy opisie nastêpnego parameteru dotyczy równie¿ tego.
    • - -
    • -fff - ilo¶æ poprawnie odebranych SMSów. -Nale¿y pamiêtaæ, ¿e raporty o (nie)dostarczeniu SMSa, -loga, dzwonki, wizytówki i wiadomo¶ci graficzne s± równie¿ dostarczane w tej formie -(jako odpowiedni SMS) -i uwzglêdnianie w tym parametrze -(przy czym ka¿da wiadomo¶æ graficzna wys³ana np. z Nokii 3210 zajmuje -a¿ 3 SMSy)
    • - -
    • -gggg - ilo¶æ odebranych komunikatów nadawania komórkowego (czy obs³uguje je aktualnie u¿ywany -BTS, sprawdzisz w te¶cie 7): -ile razy Twój telefon odebra³ komunikaty tzw. cell-info (w³±czasz jego odbiór w Menu 4-2-2 w Nokii 5110) -oraz cell-broadcast (Menu 2-5 w Nokii 5110).
    • -
    - -

    Warto¶ci tych liczników (z wyj±tkiem kodów b³êdów) s± zapamiêtywane przy -wy³±czaniu telefonu. Mo¿esz je wyzerowaæ w te¶cie 60 -(jest to robione równie¿, gdy osi±gn± maksymalne warto¶ci). - -

    Otrzyma³em równie¿ informacje, ¿e w niektórych (?) Nokiach 6150 z oprogramowaniem 4.13 -nie zmienia siê warto¶æ licznika gggg pomimo otrzymywania komunikatów -(czy jest to b³±d w tej wersji oprogramowania ?) - -

    W Nokii 3310 parametry s± nieco poprzesuwane w stosunku do rysunku powy¿ej. - -

    Je¿eli chcesz siê dowiedzieæ troszkê wiêcej o wysy³aniu SMSów -(albo poznaæ numery SMSC operatorów), zajrzyj pod adres www.vdheyden.demon.nl/sms/index1.htm. - -

    - - - - - - -
    Spora czê¶æ programów komputerowych nie sygnalizuje u¿ytkownikowi, czy -wiadomo¶æ zosta³a poprawnie wys³ana - Ty bêdziesz móg³ to natomiast sprawdziæ -dziêki temu testowi.
    - -

    W Nokii 3110 test ten wygl±da jak test 64. - -

    W Nokii 6185/6188 ten test wygl±da inaczej: - -

    - - - - -
    - -C5M 00      
    -C5L 00
    -C6M 00
    -C6L 03 -
    -
    - -

    Test 66 -
    Liczniki przekroczenia czasu zwi±zane z SMSami -(jak wiadomo, przy wysy³aniu takiej wiadomo¶ci mo¿na ustaliæ czas, przez -jaki czas sieæ bêdzie próbowa³a j± dostarczyæ do telefonu odbiorcy - przypuszczam, -¿e te liczniki s± w jaki¶ sposób z tym zwi±zane). - -

    - - - - - - -
    - - - - -
     aaa bbb cc 
    - ddd eee ff

    -
    - - - - -
    TR1 TR2 TRA 
    -TC1 TC2 SCH 
    -SMS timeout
    -  counters
    -
    - -

    -

      -
    • aaa - licznik przekroczenia czasu dla TR1M
    • -
    • bbb - licznik przekroczenia czasu dla TR2M
    • -
    • cc - licznik przekroczenia czasu dla TRAM
    • -
    • ddd - licznik przekroczenia czasu dla TC1M
    • -
    • eee - licznik przekroczenia czasu dla TC2M
    • -
    • ff - licznik przekroczenia czasu dla nadawania komórkowego
    • -
    - -

    Warto¶ci liczników za zapamiêtywane przy wy³±czaniu telefonu. Je¿eli osi±gn± -warto¶ci maksymalne, s± zerowane. Mo¿esz je równie¿ wyzerowaæ w -te¶cie 60. - -

    W Nokii 6185/6188 ten test wygl±da inaczej: - -

    - - - - -
    - -CT1 82      
    -CT2 00
    -RF 23
      -
    -
    - -

    Test 67 - -

    - - - - -
    - -REC 00
    -SEND 00     
    -CTR 4C
    -STA 68 -
    -
    - -

    Test 68 - -

    - - - - -
    - -CNT 00      
    -ACK 00

    -M1M B3 -
    -
    - -

    Test 70 -
    Zawarto¶æ tymczasowych liczników DSP (szesnastkowe -warto¶ci komórek pamiêci oznaczanych w opisach jako r_dsp2ftd+0, r_dsp2ftd+1, -r_dsp2ftd+2, itd.) - -

    - - - - - - -
    - - - - -
    aaaaa  bbbbb
    -ccccc  ddddd
    -eeeee  fffff
    -ggggg  hhhhh
    -
    - - - - -
     Temporary
    -DSP counters
    - R DSP2FTD
    -
    - -

    Ten test jest u¿ywany przez debuggery -oprogramowania DSP. Mog± one wstawiaæ pewne -u¿yteczne informacje do okre¶lonych komórek pamiêci. Kiedy ten test jest wybrany, -MCU pokazuje zawarto¶æ tych komórek pamiêci -na wy¶wietlaczu w podanym wy¿ej formacie. - -

    W Nokii 3110 test ten wygl±da jak test 80. - -

    Test 71, 72 -
    Oba menu pozwalaj± kontrolowaæ ustawienia DSP - -

    Je¿eli wejdziesz bezpo¶rednio do którego z nich, w obu zmieniaj± siê -cyferki pod AUDIO ENHANCEMENT - ich warto¶ci zale¿± od w³o¿onej karty SIM. -W zale¿no¶ci od tego, które z nich teraz ogl±da³e¶(a¶) (u¿ywaj±c strza³ek), -zmieni siê d¼wiêk (mog± siê np. pojawiæ okropne szumy i trzaski). Mo¿esz -mieæ wp³yw na te warto¶ci (mog± mieæ maksymaln± warto¶æ 65536) - wystarczy -je zapisaæ odpowiednio w 31 i 32 pozycji ksi±¿ki telefonicznej na karcie -SIM (jak to zrobiæ ? opis znajdziesz przy te¶cie 17). -Parametr Conf z testu 30 -pokazuje natomiast wybran± tutaj warto¶æ. ¯eby wróciæ do stanu wyj¶ciowego, -musisz wy³±czyæ i w³±czyæ telefon. Na jako¶æ d¼wiêku (tzn. czy przy pewnych -ustawieniach pojawiaj± siê zak³ócenia) nie wp³ywa pod³±czenie zestawu s³uchawkowego -i samochodowego. - -

    - - - - - - -
    - - - - -
        AUDIO
    - ENHANCEMENT
    -    aaaaa
    -
    - - - - -
    Use menu to
    -control DSP
    -   audio
    -enhancements
    -
    - -

    W Nokii 3110 test 71 wygl±da jak test 81. - -

    Test 73 -
    Ogólne informacje o ustawieniach DSP - -

    - - - - - - -
    - - - - -
     aaa bb  aaa
    -cccc bb cccc
    -cccc bb cccc
    - cccc cccc
    -
    - - - - -
    DB1  B1  DB2
    -HEX1 B2 HEX2
    -HEX3 B3 HEX4
    -  HEX5 HEX6
    -
    - -

    -

      -
    • -aaa - g³ówna g³o¶no¶æ (poziom sygna³u) w dB. Znak czê¶ci u³amkowej i znak -nie jest pokazywany (np. zamiast -10.5 zobaczysz 105)
    • - -
    • -bb - g³ówna warto¶æ (podana szesnastkowo) bajtu (u¿ywana dla mieszanych -znaczników).
    • - -
    • -cccc - g³ówna warto¶æ szesnastkowa
    • -
    - -

    Angielskie opisy pisz± o tym te¶cie: -
    "Warto¶ci liczników s± pokazywane tylko w czasie rozmowy -(gdy w³±czone s± testy monitora). Je¿eli po³±czenie -jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci -nie s± zapamiêtywane przy wy³±czaniu telefonu." - -

    ...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    W Nokii 3110 test ten wygl±da jak test 82. - -

    Test 74 -
    Informacje o g³o¶no¶ci podczas rozmowy - -

    - - - - - - -
    - - - - -
      aaa  bbb  
    -       ccc
    -  dd    ee
    -
    - - - - -
    DSigL USigL
    -      NseLvl
    - DTbl  UTbl
    -
    - -

    -

      -
    • -aaa - g³o¶no¶æ sygna³u z telefonu naszego rozmówcy.
    • - -
    • -bbb - g³o¶no¶æ sygna³u z Twojego telefonu.
    • - -
    • -ccc - g³o¶no¶æ tzw. "komfortowego szumu" (patrz opis DTX).
    • - -
    • -dd - warto¶æ DRC dla sygna³u z telefonu naszego rozmówcy (dwucyfrowa liczba -ca³kowita)
    • - -
    • -ee - warto¶æ DRC dla sygna³u z Twojego telefonu (dwucyfrowa liczba ca³kowita)
    • -
    - -

    Pierwsze trzy parametry s± podawane w dB i obliczane na podstawie DRC. -Znak czê¶ci u³amkowej i znak liczby nie s± pokazywane (np. zamiast --10.5 zobaczysz 105). - -

    Angielskie opisy pisz± o tym te¶cie: -
    "Warto¶ci liczników s± pokazywane tylko w czasie rozmowy -(gdy w³±czone s± testy monitora). Je¿eli po³±czenie -jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci -nie s± zapamiêtywane przy wy³±czaniu telefonu." - -

    ...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    W Nokii 3110 test ten wygl±da jak test 72. - -

    Test 75 -
    Informacje o trybie pracy pod³±czonych akcesoriów d¼wiêkowych - -

    - - - - - - -
    - - - - -
    Mod:aaaaaaa
    -AudReq: bbbb
    -AccMod: cccc
    -H2Path: dddd
    -
    - - - - -
    ExtAudStatus
    -AudioRequest
    -AccAudMode
    -
    - -

    -

      -
    • -aaaaa - rodzaj pod³±czonych do telefonu akcesoriów d¼wiêkowych -(dla niektórych telefonów mo¿liwe warto¶ci to: -HP, HF, HEADSET, EXT albo HP_OFFHO). W Nokii 7110 podawany w test 99. - -

      Je¶li chodzi o Nokiê 5110, przyjmowane by³y nastêpuj±ce -warto¶ci: - -

      - - - - - - - - - - - - -
      warto¶æ
      stan normalny (nie pod³±czono nic, jest kabel FBUS/M2BUS albo ³adowarka)HP
      zestaw s³uchawkowy (telefon wy¶wietla Mikrozestaw (Headset)) -
      Mo¿esz go zasymulowaæ -
      ³±cz±c piny 1-2 z³±cza na dole telefonu -
      (patrz±c od lewej strony, gdy telefon le¿y wy¶wietlaczem do góry). -
      W Nokii 9110 mo¿esz do tego u¿yæ równie¿ testu 92.
      HD (skrót od HeaDset)
      zestaw samochodowy (telefon wy¶wietla Samochód (Car)) -
      Mo¿esz go zasymulowaæ -
      ³±cz±c piny 2-3 z³±cza na dole telefonu -
      (patrz±c od lewej strony, gdy telefon le¿y wy¶wietlaczem do góry)
      HFU 1 (skrót od Hands Free Unit 1)
      - -

      Powy¿sze metody symulacji zestawów s± poprawne dla Nokii 5xxx, 6xxx -i zapewne 9110 (u¿ywasz ich na W£ASN¡ odpowiedzialno¶æ). - -

      Po pod³±czeniu (symulacji) obu zestawów w telefonie uaktywnia³a siê funkcja -"Odbiór samoczynny" ("Automatic answer") - Menu 4-1-6 w Nokii 5110 - dziêki -której telefon mo¿e automatycznie odbieraæ przychodz±ce po³±czenie. W Nokii 9110 -mo¿esz j± uaktywniæ równie¿ m.in. u¿ywaj±c testu 92. -

      -

    • - -
    • -bbbb - audio_request bitmap in hex
    • - -
    • -cccc - tryb pracy akcesoriów d¼wiêkowych
    • - -
    • -dd - ¶cie¿ka dla HFU-2 (Hands Free Unit-2)
    • -
    - -

    W Nokii 3110 test ten wygl±da jak test 73. - -

    Test 76 -
    Informacje o d¼wiêku, który Ty s³yszysz w swoim telefonie - -

    - - - - - - -
    - - - - -
     Vab  Pccc
    - Cddd CAeee
    -PAfff
    -
    - - - - -
    EVol PeakVal
    -CutOff COAve
    -PkAver
    -
    - -

    -

      -
    • -ab - g³o¶no¶æ (poni¿sze informacje s± na pewno poprawne dla Nokii 5110): - - - - - - - - - - - - - - - - - - - - -
      ab
      g³o¶nik wy³±czony0F
      wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 1)08
      wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 2)04
      wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 3 albo -w³±czone g³o¶ne d¼wiêki)00
      - -

      W czasie po³±czenia parametr a przyjmuje warto¶æ "A", natomiast parametr -b pozwala obliczyæ ustawion± g³o¶no¶æ d¼wiêku (musisz przeliczyæ go na -warto¶æ dziesiêtn± i odj±æ od niego 11) - tê ostatni± mo¿esz równie¿ sprawdziæ -w te¶cie 30. Przy pod³±czonym -zestawie s³uchawkowym parametr a przyjmuje natomiast warto¶æ "C" (wzór do obliczenia -g³o¶no¶ci rozmowy przyjmuje wtedy warto¶æ 10 - b). Je¿eli do telefonu pod³±czony -jest zestaw samochodowy, parametr a jest równy "2", a wzór na g³o¶no¶æ podczas rozmowy -przyjmuje warto¶æ 10 - b. - -

      Je¿eli kto¶ do Ciebie dzwoni (nie odebra³e¶(a¶) jeszcze po³±czenia), -telefon nie zawsze pokazuje g³o¶no¶æ emitowanego d¼wiêku (zachowuje siê -tak jak przy wy³±czonym g³o¶niku) - nie wiem, czy jest to b³±d w oprogramowaniu -testuj±cym (wersja 5.07), czy co¶ innego. Tylko bowiem przy pewnych kombinacjach -ustawieñ rodzaju dzwonka (ci±g³y, wzrastaj±cy, itp.) i jego g³o¶no¶ci jest -ona pokazywana (podajê od razu warto¶ci obu parametrów): poziom 1 - A7, -poziom 2 - A6, poziom 4 - A4, poziom 5 - A0. -

    • - -
    • -

      ccc - maksymalna g³o¶no¶æ sygna³u z telefonu Twojego rozmówcy w czasie -ostatniej ramki (podawana w dB). Znak i znak czê¶ci dziesiêtnej nie s± -pokazywane (np. zamiast -10.5 zobaczysz 105).

    • - -
    • -

      ddd - licznik pokazuj±cy ilo¶æ próbek sygna³u akustycznego, w których nast±pi³o -przepe³nienie (tak jak przesterowanie), w czasie ostatniej ramki.

    • - -
    • -

      eee - ¶rednia licznika podawanego jako poprzedni parametr. Znak i znak -czê¶ci dziesiêtnej nie s± pokazywane (np. zamiast -10.5 zobaczysz 105).

    • - -
    • -

      fff - ¶rednia g³o¶no¶æ s³yszanego przez Ciebie d¼wiêku

    • -
    - -

    Angielskie opisy pisz± o tym te¶cie: -
    "Warto¶ci liczników s± pokazywane tylko w czasie rozmowy -(gdy w³±czone s± testy monitora). Je¿eli po³±czenie -jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci -nie s± zapamiêtywane przy wy³±czaniu telefonu." - -

    ...ale ja tego nie zauwa¿y³em i u mnie zawsze (bez pierwszego) by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    Test 77 -
    Informacje o d¼wiêku, który s³yszy Twój rozmówca (tzn. parametry d¼wiêku -wysy³anego przez Twój telefon) - -

    - - - - - - -
    - - - - -
     Paaa  Abbb 
    - Cccc CAddd

    -
    - - - - -
    MicPeak MAve
    -CutOff COAve

    -
    - -

    -

      -
    • -aaa - maksymalna g³o¶no¶æ wysy³anego d¼wiêku w czasie ostatniej ramki w -dB. Znak czê¶ci u³amkowej i znak liczby nie s± pokazywane (np. zamiast --10.5 zobaczysz 105).
    • - -
    • -bbb - przeciêtna g³o¶no¶æ wysy³anego d¼wiêku w dB. Znak czê¶ci u³amkowej -i znak liczby nie s± pokazywane (np. zamiast -10.5 zobaczysz 105).
    • - -
    • -ccc - licznik pokazuj±cy ilo¶æ próbek sygna³u akustycznego, w których nast±pi³o -przepe³nienie (tak jak przesterowanie), w czasie ostatniej ramki.
    • - -
    • -ddd - ¶rednia licznika podawanego jako poprzedni parametr.
    • -
    - -

    Angielskie opisy pisz± o tym te¶cie: -
    "Warto¶ci liczników s± pokazywane tylko w czasie rozmowy -(gdy w³±czone s± testy monitora). Je¿eli po³±czenie -jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci -nie s± zapamiêtywane przy wy³±czaniu telefonu." - -

    ...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    W Nokii 3110 test ten wygl±da jak test 75. - -

    Test 78 -
    Kolejne parametry DSP - -

    - - - - - - -
    - - - - -
    aaa bbb ccc 
    -ddd eee fff
    -ggg h i jjj
    - kkkk llll
    -
    - - - - -
    EAA Ada ERL 
    -RxG TxG GLi
    -TxN Sta Mod
    - RVAD TVAD
    -
    - -

    -

      -
    • -aaa - poziom cyfrowego t³umienia echa z punktu widzenia DSP -:-) w dB. Znak liczby i czê¶ci u³amkowej nie s± pokazywane (np. -10.5 dB -bêdzie wy¶wietlane jako "105", -0.5 dB za¶ jako "  5"). 20*log10( -Q15 )
    • - -
    • -bbb - poziom adaptacyjnego t³umienia echa (znak czê¶ci u³amkowej nie jest -pokazywany). 20*log10( Q15 )
    • - -
    • -ccc - poziom st³umienia sygnalu, który wraca po odbiciu (znak czê¶ci u³amkowej -nie jest pokazywany). 20*log10( Q15 )
    • - -
    • -ddd - t³umienie t³umika sygna³u odbieranego (akustyczne) w dB. Znak liczby -i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_rx_gain )
    • - -
    • -eee - t³umienie t³umika sygna³u nadawanego (akustyczne) w dB. Znak liczby -i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_tx_gain )
    • - -
    • -fff - ograniczenie dla dwóch powy¿szych parametrów (ddd i eee) - znak liczby -i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_gain_limit )
    • - -
    • -ggg - g³o¶no¶æ nadawanego "komfortowego szumu" (patrz opis DTX) -w dB. Znak czê¶ci u³amkowej i znak liczny nie s± pokazywane. 20*log10( -Q15 aec_tx_noise)
    • - -
    • -h - stan filtru adaptacyjnego. (Q0 aec_nlms_state) (bit UPDATE << -2) | (bit NLMS2 << 1) | (bit NLMS1)
    • - -
    • -i - informacja, o tym czy jest generowany tzw. "komfortowy szum" - patrz -opis DTX (warto¶ci 0 lub 1) (Q0 AEC_TX_COMF_GEN)
    • - -
    • -jjj - tryb pracy uk³adu t³umików i filtru adaptacyjnego (AEC) (byte Q0 -s_AEC_mode)
    • - -
    • -kkkk - ostatnich 16 decyzji uk³adu wykrywania g³osu dla sygna³u odbieranego -(RX VAD) w formacie szesnastkowym. Hex( Q0 aec_rx_vadreg )
    • - -
    • -llll - ostatnich 16 decyzji uk³adu wykrywania g³osu dla sygna³u nadawanego -(TX VAD) w formacie szesnastkowym. Hex( Q0 aec_tx_vadreg )
    • -
    - -

    U mnie warto¶ci tych liczników zawsze by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    W Nokii 3110 test ten wygl±da jak test 76. - -

    Test 79 -
    Wy¶wietlacz equalizera audio - -

    - - - - - - -
    - - - - -
    aaaaa bbbbb
    -ccccc ddddd
    --ee.e -ff.f 
    -
    - - - - -
    MiCutB MiCTA
    -EpCutB EPCTA
    -MiCLev EarLv
    -
    - -

    -

      -
    • -aaaaa - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie -(tak jak przesterowanie), przed przej¶ciem przez equalizer mikrofonowy -w postaci 16-bitowej ca³kowitej (dziesiêtnej) liczby.
    • - -
    • -bbbbb - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie -(tak jak przesterowanie), po przej¶ciu przez equalizer mikrofonowy w postaci -16-bitowej ca³kowitej (dziesiêtnej) liczby.
    • - -
    • -ccccc - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie -(tak jak przesterowanie), przed przej¶ciem przez equalizer g³o¶nikowy w -postaci 16-bitowej ca³kowitej (dziesiêtnej) liczby.
    • - -
    • -ddddd - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie -(tak jak przesterowanie), po przej¶ciu przez equalizer g³o¶nikowy w postaci -16-bitowej ca³kowitej (dziesiêtnej) liczby.
    • - -
    • --ee.e - g³o¶no¶æ d¼wiêku wychwytywanego przez mikrofon w formacie dB. Wymaga -funkcji matematycznej log10 w MCU. -16 bitowa warto¶æ w DSP, -0 dB = 32768.
    • - -
    • --ff.f - g³o¶no¶æ sygna³u po przej¶ciu przez equalizer g³o¶nikowy w formacie -dB. Wymaga funkcji matematycznej log10 w MCU. -16 bitowa warto¶æ w DSP, -0 dB = 32768.
    • -
    - -

    Angielskie opisy pisz± o tym te¶cie: -
    "Warto¶ci liczników s± pokazywane tylko w czasie rozmowy. Je¿eli po³±czenie -jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. -Ich warto¶ci nie s± zapamiêtywane przy wy³±czaniu telefonu. Warto¶ci liczników -aaaaa-ddddd s± obliczane w DSP (i tylko -nowe s± wysy³ane do MCU. Poziomy sygna³u -mikrofonowego i g³o¶nikowego s± obliczane w DSP, -który wysy³a liniowe warto¶ci do MCU, który z kolei -dokonuje liniowej transformacji dB (20*log10(x)) do warto¶ci g³o¶no¶ci". - -

    ...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 -(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) - -

    W Nokii 3110 test ten wygl±da jak test 77. - -

    Test 80 - -

    - - - - - - -
    - - - - -
    -
       TIMERS   
    -   RESET 
    -
    - - - - -
      Use menu
    -  to reset
    - field test 
    -   timers
    -
    - -

    Przez bezpo¶rednie wej¶cie do tego menu mo¿esz wyzerowaæ liczniki z testu 82. -Telefon robi to automatycznie, gdy od³±czasz od niego ³adowarkê. -Wed³ug opisów angielskich, dzieje siê tak równie¿, gdy akumulator jest -na³adowany (ja tego nie zaobserwowa³em). - -

    W niektórych nowych telefonach (np. Nokii 3310 z oprogramowaniem 4.45) -po u¿yciu tego testu zeruj± siê -ORAZ w³±czaj± (test ten dzia³a wiêc równie¿ jak -test 81) -liczniki testu 82. - -

    W Nokii 3110 test ten wygl±da jak test 83. - -

    Test 81 - -

    -

    - - - - - -
    - - - - -
    -
       TIMERS   
    -  aaaaaaaa
    -
    - - - - -
    Use menu to
    -control test
    -  display
    -  timers
    -
    - -

    Przez bezpo¶rednie wej¶cie do tego menu mo¿esz w³±czyæ (aaaaaaaa=ENABLED) lub -wy³±czyæ (aaaaaaaa=DISABLED) licznik z testu 82. - -

    W Nokii 3110 test ten wygl±da jak test 84. - -

    Test 82 - -

    - - - - - - -
    - - - - -
    aaaaa bbbbb 
    -ccccc ddddd
    - TIMERS eee
    -
    - - - - -
    PwrOn InServ
    -NSPS  TxON
    -   Timers
    -   Status
    -
    - -

    -

      -
    • -aaaaa - informacja, ile d³ugo telefon by³ w³±czony
    • - -
    • -bbbbb - informacja, jak d³ugo telefon by³ zalogowany do sieci
    • - -
    • -ccccc - informacja, jak d³ugo -telefon by³ w stanie NSPS
    • - -
    • -ddddd - informacja, jak d³ugo by³ w³±czony nadajnik telefonu
    • - -
    • -eee - informacja, czy liczniki s± w³±czone (ON) czy wy³±czone (OFF) (zmieniæ -to mo¿na w te¶cie 81)
    • -
    - -

    Ka¿dy z tych liczników ma formê aaabb - liczba bb zmienia siê w zakresie -od 0 do 60 jednostek; po osi±gniêciu warto¶ci 60 -jest zerowana - równocze¶nie zwiêksza siê o 1 liczba aaa. -W wiêkszo¶ci modeli jednostk± jest minuta (tzn. ka¿dy z liczników pokazuje czas -jako minuty i godziny), wyj±tkiem jest Nokia 7110, gdzie jednostk± jest 30 sekund -i niektóre Nokie 3310 (jednostka=1 minuta 7 sekund)... - -

    Wed³ug angielskich opisów maksymalna warto¶æ wynosi 99 h i 59 minut. Je¿eli -pierwszy (aaaaa) licznik osi±gnie tê warto¶æ, wszystkie liczniki stan±. - -

    Niestety liczniki dzia³aj± tylko wtedy, gdy w³±czysz jaki¶ test w monitorze -sieci (tzn. gdy wy³±czysz testy, nie bêd± odmierzaæ czasu pomimo wy¶wietlonej -informacji, ¿e s± w³±czone). Oznacza to, ¿e faktycznie mo¿esz tutaj -znale¼æ informacjê o tym, ile korzystasz z monitora sieci (pierwszy parametr), -ile czasu telefon by³ w tym czasie zalogowany do sieci (nastêpny), itd. - -

    - - - - - - -
    Je¿eli nie mo¿esz zrezygnowaæ z odmierzania czasu, proponujê w -te¶cie 83 wybraæ SHOW TASK MSG BUFS i w³±czyæ -test 87 (wy¶wietlacz bêdzie pusty). -Jedyn± niedogodno¶ci± tego rozwi±zania -bêdzie to, ¿e nie bêdziesz mia³(a) identyfikacji osób dzwoni±cych do Ciebie. - -

    W menu serwisowym Nokii 6130 (kod *#WARRANTY#) i 3210 (kod *#WAR0ANTY#) pod -pozycj± "Life Timer" znajdziesz informacjê ile czasu rozmawia³e¶(a¶) - cyfry przed -dwukropkiem oznaczaj± godziny, cyfry po nim minuty. Przyk³adowo, 0011:34 to 11 h 34 -minuty czasu rozmowy. W Nokii 3310 (równie¿ kod *#WAR0ANTY#) -na samym pocz±tku pokazywana jest tam liczba 65536, a licznik zaczyna -dzia³aæ, gdy przez telefon rozmawiano d³u¿ej ni¿ 1 h. -

    - -

    W Nokii 3110 test ten wygl±da jak test 85. - -

    Test 83 - -

    -

    - - - - - - - - - -
    - - - - -
    -
     SHOW TASK 
    - STACKS
    -
    - - - - -
    -
     SHOW TASK 
    - MSG BUFS
    -
    - - - - -
    -
     SHOW TASK 
    - FAST BUFS
    -
    - - - - -
    Use menu to
    -select shown
    - task info
    -
    - -

    Przez bezpo¶rednie wej¶cie do tego menu mo¿na spowodowaæ, ¿e w Menu -10-84, test 85, test 86, test 87 s± pokazywane -warto¶ci innych liczników: - -

    -

      -
    • -"STACKS" - pokazuje wolne miejsce w bloku pamiêci w najgorszym razie
    • - -
    • -"MSG BUFS" - pokazuje najwy¿sz± ilo¶æ bêd±cych w takcie realizacji wiadomo¶ci.
    • - -
    • -"FAST BUFS" - pokazuje najwy¿sz± ilo¶æ bed±cych w trakcie realizacji szybkich -wiadomo¶ci.
    • -
    - -

    W Nokii 3110 test ten wygl±da jak test 86. - -

    Test 84, 85, 86 -
    Tak ogólnie wygl±daj± te menu: - -

    - - - - -
     aaaa bbbb  
    - cccc dddd
    - eeee ffff
    - gggg hhhh
    - -

    A tak wygl±da ich pomoc: - -

    - - - - - - - - -
    - - - - -
    IDLE  DEV_IO
    -LOCAL MDISND
    -MDIRCV  UI
    - TONE   PN
    - -

    albo (w Nokii 6210/8210): -

    - - - - -
    IDLE  DEV_IO
    -LOCAL MDISND
    -MDIRCV  UI
    - TONE   PND
    - -

    albo (w Nokii 6250): -

    - - - - -
    IDLE  DEV?IO
    -LOCAL MDISND
    -MDIRCV  UI
    - TONE   PND
    - -

    - - - - -
     FBUS   AUD
    -L1CTRL L1MEA
    -L1SYSP  L2
    - CC     MM
    - -

    albo (w Nokii 3210): -

    - - - - -
    IRDA  FBUS
    -AUD  L1CTRL
    -L1MEA L1SYSP
    -L2    CC
    - -

    albo (w Nokii 6210/6250): -

    - - - - -
    -WMLS    PN
    -IRDA IRDAMGR
    -FBUS    AUD
    -PHCTRL  L2 -
    - -

    albo (w Nokii 8210): -

    - - - - -
    -IRDA IRDAMGR
    -FBUS     AUD
    -PHCTRL    L2
    -CC        MM
    -
    - -

    albo (w Nokii 8810): -

    - - - - -
    IRDA  IRMGR
    -FBUS  AUD
    -L1CTRL L1MEA
    -L1SYSP  L2
    - -

    - - - - -
     RR     RM
    - SMS    EM
    -SIMUPL SIML2
    - DDI
    - -

    albo (w Nokii 3210): -

    - - - - -
    MM    RR
    -RM    SMS
    -EM    SIMUPL
    -SIML2 DDI
    - -

    albo (w Nokii 6210/6250): -

    - - - - -
    - CC   MM  RR
    -RMC  SMS  EM
    -SIM SIM2 DDI
    -DGC  NTB FAX -
    - -

    albo (w Nokii 8210): -

    - - - - -
    -RR        RM
    -SMS       EM
    -SIMUPL SIML2
    -DDI      DGC
    -
    - -

    albo (w Nokii 8810): -

    - - - - -
    CC     MM
    -RR     RM
    -SMS    EM
    -SIMUPL SIML2
    - -

    albo (w Nokii 9110): -

    - - - - -
     RR     RM
    -SMS     EM
    -SIMUPL SIML2
    - DGC  DGNTB
    - -

    - -

    -

      -
    • -aaaa, bbbb,... - zadanie 0, 1, itd.
    • -
    - -

    Liczby okre¶laj±ce, jak bardzo komórki pamiêci zwi±zane ze stosami s± puste -w najgorszym wypadku (je¿eli pokazuje siê 0, stos jest pe³ny). Warto¶ci -nie s± zapisywane w pamiêci przy wy³±czaniu telefonu. - -

    W Nokii 3110 test 86 wygl±da nastêpuj±co: - -

    - - - - - - -
    - - - - -
    MCUSW  aaaaa
    -DATE   cccccc
    -CHKSUM dddd
    -DSP    eee
    -
    - - - - -
    MCUSWVersion
    -DateOfMCUSW
    -MCUSWChecksum
    -DSPSWVersion
    -
    - -

    Znaczenie parametrów aaaaa,cccccc, dddd i eee znajdziesz w te¶cie 88. - -

    Test 87 - -

    - - - - - - -
    - - - - -
     aaaa  bbbb 

    -
    - - - - -
      FIQ  IRQ  

    -
    - -

    -

      -
    • -aaaa - OS_SYSTEM_STACK
    • -
    - -

    W Nokii 8810 menu to wygl±da tak: - -

    - - - - - - -
    - - - - -
    - ffff  gggg
    - eeee  dddd 
    - aaaa  bbbb 
    -
    - - - - -
    - DDI   DGC
    - DGNTB DGFAX
    - FIQ   IRQ
    -
    - -

    W Nokii 9110 menu to wygl±da natomiast tak: - -

    - - - - - - -
    - - - - -
     cccc  dddd 
    - aaaa  bbbb 

    -
    - - - - -
     DGTB  DGFAX
    - FIQ   IRQ

    -
    - -

    W Nokii 7110 jest jeszcze trochê inne: - -

    - - - - - - -
    - - - - -
    -1040010363800
    -  700  800
    -  220
    -    476   480 -
    -
    - - - - -
    -DGN  DGF  SCKT
    -PCL  PWB
    -PPC
    -FIQ    IRQ -
    -
    - -

    i w Nokii 6210/6250: - -

    - - - - -
    - - - - -
    -SRVSCK PMMCL
    -PMMWR   ND
    -PPC
    -FIQ    IRQ -
    -
    - -

    i w Nokii 8210: - -

    - - - - -
    - - - - -
    -NTB      FAX
    -PMMWR     ND
    -FIQ      IRQ
      -
    -
    - -

    Stan licznika nie jest zapisywany przy wy³±czaniu telefonu. - -

    Test 88 - -

    - - - - - - -
    - - - - -
    aaaaa bbbbbb
    -Date  cccccc
    -ChkSum dddd
    -eeeeeeeeeeee
    -
    - - - - -
    MCUSW  PPM
    -MCUSW_Date
    -MCU_Checksum
    -DSP_Version
    -
    - -

    -

      -
    • -aaaaa i cccccc - wersja i data oprogramowania MCU -(kody do ich sprawdzenia i ró¿nice miêdzy ró¿nymi ich wersjami -s± szczegó³owo opisane na tej stronie)
    • - -
    • -bbbbbb - wersja wgranego do telefonu pakietu PPM (Post-programming Memory): -firma Nokia przygotowywuje ró¿ne wersje jêzykowe -oprogramowania do swoich telefonów. S± one zapisywane w "paczkach" - ka¿da z nich -zawiera komunikaty i obs³ugê kilku jêzyków. -Powód takiego postêpowania jest prosty: komunikaty we wszystkich jêzykach ¶wiata -nie zmie¶ci³yby siê w pamiêci telefonów. -Tutaj zobaczysz w³a¶nie wersjê wgranego pakietu PPM: jest to liczba -zgodna z wersj± oprogramowania MCU, po której -pojawia siê litera (mo¿e to byæ "A", "B", itd. - jêzyk polski jest dostêpny w pakiecie "B"). -I st±d zapewne jasne jest, ¿e je¿eli Twój telefon zosta³ przywieziony z zagranicy -i nie ma obs³ugi jakiego¶ jêzyka (polskiego ?), trzeba wgraæ do niego inny pakiet PPM. - -

      Dla ciekawych: je¿eli chodzi o starsze modele (np. Nokiê 2110i) - tam nie by³o pakietów -PPM, a zmiana wersji jêzykowej wi±za³a siê z wymian± CA£EGO oprogramowania s³uchawki. -Czyta³em równie¿, i¿ sprzedawane telefony z "ogólnym" oprogramowaniem mia³y fabrycznie -deaktywowan± obs³ugê niektórych jêzyków (np. greckiego) - mo¿na by³o j± w³±czyæ przy u¿yciu -niektórych programów serwisowych (np. PC-Locals 0.6). -

      -

    • - -
    • -dddd - suma kontrolna pamiêci MCU -(gdy jest b³êdna, telefon wy¶wietla CONTACT SERVICE)
    • - -
    • -eeeeeeeeeeee - wersja oprogramowania DSP
    • -
    - -

    Informacje z tego menu s± równie¿ podawane w ró¿nych programach serwisowych (np. -PC-Locals 1.3 albo WinTesli). - -

    W Nokii 6210 zamiast znaków "_" w pomocy pokazywane s± "?" - -

    Test 89 - -

    - - - - - - -
    - - - - -
    HW: aaaa 
    -TXT: Ubbbbbb

    -
    - - - - -
    HW version
    -Text version

    -
    - -

    -

      -
    • -aaaa - wersja sprzêtowa telefonu (np. najnowsze mi znane Nokie 5110 pokazuj± -tutaj 4220)
    • - -
    • -bbbbbb - informacja, kiedy zosta³y opracowane teksty (prawdopodobnie nazwy operatorów) -wy¶wietlane przez telefon
    • -
    - - -

    Na pocz±tek
    - -

    -

    [Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] -

    -
    -
    - -

    Marcin Wi±cek (WWW) -
    Ostatnia aktualizacja: 5 stycznia 2002
    - - + + + + + + + + + + NetMonitor in Nokia phones (6/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (6/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    Test 58 + +

    + + + + +
    +384:02      
    +512:02
    +752:02
     
    +
    + +

    Test 59 + +

    + + + + +
    + +0087
    +00 00 00 00 

      + +

    + +

    Test 60 + +

    + + + + + + +
    + + + + +
     FIELD TEST 
    +  DISPLAY 
    + COUNTERS 
    +   RESET
    +
    + + + + +
    Use menu to
    +reset field
    +test display
    +counters
    +
    + +

    By direct enter to this test you can reset counters from +test 41 to test 43 and from +test 61 to test 66. + +

    + + + + + + +
    If you reset these counters at the beginning of each month, you can compare +the number of sent SMSes (test 65) +and made calls (test 63) with your billing. +Additionaly (in some prepaid cards - for example, in Polish Tak-Tak) +you pay to your operator for few SMS messages (in this example 10), when you +send first of them. When you will clear these counters in start of this period +(before first SMS), you will know, when another money will be taken from your account... +
    + +

    Test 61 + +

    + + + + + + +
    + + + + +
    NOPSW  :aaaa
    +SYNCR  :bbbb
    +RESELEC:cccc
    +
    + + + + +
    PSWMesgCntr
    +SyncMeasCntr
    +CellReselCtr
    +
    + +

    +

      +
    • +aaaa - hexadecimal counter of MDI_NO_PSW_FOUND messages from +DSP
    • + +
    • +bbbb - decimal counter for synchronization measurement attempts. +If value is over 9999 then four x are shown +
    • + +
    • +cccc - hexadecimal counter for cell reselections
    • +
    + +

    Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using test 60. They're reset too, when +they exceed their maximal values. + +

    In dual phones you will have such test 61: + +

    + + + + + + +
    + + + + +
    aaaaa  bbbbb
    +ccccc  ddddd
    +eeeee  fffff
    +ggggg  hhhhh
    +
    + + + + +
    NOPswGSM DCS
    +Sync GSM DCS
    +reselG>G D>D
    +reselG>D D>G
    +
    + +

    +

      +
    • +aaaaa - for GSM 900: counter (decimal) for MDI_NO_PSW_FOUND messages +from DSP
    • + +
    • +bbbb - for GSM 1800: counter (decimal) for MDI_NO_PSW_FOUND +from DSP
    • + +
    • +ccccc - for GSM 900: counter (decimal) for +synchronization measurement attempts. +If this value is over 99999, then five x are shown.
    • + +
    • +ddddd - for GSM 1800: counter (decimal) for +synchronization measurement attempts. +If this value is over 99999, then five x are shown. +
    • + +
    • +eeeee - counter (decimal) for cell reselections GSM 900 - GSM 900
    • + +
    • +fffff - counter (decimal) for cell reselections GSM 1800 - GSM 1800
    • + +
    • +ggggg - counter (decimal) for cell reselections GSM 900 - GSM 1800
    • + +
    • +hhhhh - counter (decimal) for cell reselections GSM 1800 - GSM 900
    • +
    + +

    Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using test 60. +They're reset too, when they exceed their maximal values. + +

    In Nokia 6210/8210: + +

    + + + + + + +
    + + + + +
    +NOPSW: 008A
    +SYNCR: 766
    +RESELEC:872D
    +RmMonTO:0000 +
    +
    + + + + +
    +PSWMesgCntr
    +SyncMeasCntr
    +CellReselCtr
    +RM Mon TOuts +
    +
    + +

    In Nokia 3310 help is like in models 6210/8210, but displayed values are different: + +

    + + + + +
    +  17
    + 135        
    +5112
    +  +
    + +

    In Nokia 6185/6188 it's different: + +

    + + + + +
    +V
    +aaaaaaaaaaaa
    +bbbbbbbbbb
    +ccccccc +
    + +

      +
    • aaaaaaaaaaaa - version of phone's firmware
    • +
    • bbbbbbbbbb - date of phone firmware
    • +
    • ccccccc - phone's codename (NSD-3AX)
    • +
    + +

    + + + + + + +
    This phone displays this info too, when you enter *#837# code. For more +information about firmware in Nokia phones (including 6185/6188 models) click here.
    + +

    Test 62 + +

    + + + + + + +
    + + + + +
     PSW  :aaaa 
    + SYNCR:bbbb
    + BCCH :cccc 
    + BCCHE:dddd
    +
    + + + + +
    NeghbrPSWCtr
    +SyncMeasCntr
    +BCCHMeasAtmp
    +BCCHExtMeAtm
    +
    + +

    +

      +
    • +aaaa - counter for neighbour PSW measurement attempts
    • + +
    • +bbbb - counter for neighbour synchronization measurement attempts
    • + +
    • +cccc - counter for neighbour cells BCCH +(quality of trasmission with them) measurement attempts +(see description C1)
    • + +
    • +dddd - counter for extended neighbour cells BCCH +(quality of trasmission with them) measurement attempts +(see description C1)
    • +
    + +

    Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using test 60. +They're reset too, when they exceed their maximal values. + +

    In Nokia 3310 each counter is 5-digit number. Values are also aligned to right. + +

    In Nokia 6185/6188 this test looks different: + +

    + + + + +
    +DSP ROM 2   
    +VERS 430
    +BETA 0014
     
    +
    + +

    Test 63 + +

    + + + + + + +
    + + + + +
      aa    bb
    +  ccc   ddd 
    +  eee   fff
    +
    + + + + +
    CalRel RelDi
    +MOCAtmp MOOK
    +AllMT   MTOK
    +
    + +

    +

      +
    • +aa - you will find reason of last call release here (it's displayed in +test 2 +and test 39 too (in this +last test you will find more explanations - see description of first +parameter)) +
    • + +
    • +bb - another information about end of last call: + +

      +

        +
      • +UN: unknown (for example: you didn't make any calls after enabling phone) +
      • + +
      • +IN: internal reason (for example: you enabled in +test 17 BTS test, +phone didn't find network on given channel and you tried to make call) +
      • + +
      • +MT: broken by network
      • + +
      • +MO: disconnection (ending call) from one of the phones
      • +
      +

      +

    • + +
    • +ccc - how many times you tried to make outgoing call from your phone +
    • + +
    • +ddd - number of succesfull outgoing calls (how many times calls were really +realised)
    • + +
    • +eee - number of all incoming calls (missed too)
    • + +
    • +fff - number of received incoming calls
    • +
    + +

    When counters exceed their maximal values, they're reset (you can make it +using test 60 too). Their values (it's +about ccc and next counters only) are written to EEPRM, when phone is disabled. + +

    In Nokia 3310 parameters are a little different located on the screen (when compare to info above). + +

    In Nokia 6185/6188 this test looks different: + +

    + + + + +
    + +C1M 00      
    +C1L 00
    +C2M 00
    +C2L 03 +
    +
    + +

    Test 64 +
    It contains, for example, information, how many times you phone +informed network about position (see description of +test 10 too) + +

    + + + + + + +
    + + + + +
     aa bbb ccc 
    + dd eee fff 

    +
    + + + + +
    Nfai NL NLOK
    +PFai PL PLOK
    + Loc update
    +  counters
    +
    + +

    +

      +
    • +aaa - error code (reset after enabling phone) of last incorrect +Location Update +(it changes only then, when some error happened during it). +It can be found in test 39 too +- it's value of MM parameter (there are code values with their description too) +
    • + +
    • +bbb - how many times phone tried to make +Location Update
    • + +
    • +ccc - how many times attempts of making +Location Update +were successfull
    • + +
    • +ddd - error during last PLU or IMSI Attach +(17 means probably network busy) +
    • + +
    • +eee - how many times phone tried to make PLU +or IMSI Attach
    • + +
    • +fff - how many times attemps of making PLU +or IMSI Attach were successfull
    • +
    + +

    Values of these counters (excluding error codes) are stored in EEPROM, +when phone is disabled. You can reset them using +test 60 (it's made too, +when they exceed their maximal values). + +

    In Nokia 3310 parameters are a little different located on the screen (when compare to info above). + +

    + + + + + + +
    If you don't disable your phone and all time you are in +your network time range, in this menu you will find information (in +approximation), how long it's enabled (check in +test 10, how often +is reset T3212 counter (ccc parameter) and multiply that time by +eee parameter from this menu). You can use to make it counter from +test 82 too (it's more precise, but require +enabling some test) or service menu (in phones like Nokia 6130 or 3210). +
    + +

    In Nokia 6185/6188 this test looks different: + +

    + + + + +
    + +C3M 00      
    +C3L 00
    +C4M 00
    +C4L 03 +
    +
    + +

    Test 65 +
    Test connected with SMS messages (without reports) + +

    + + + + + + +
    + + + + +
     aa bbb ccc 
    + dd eee fff
    + gggg
    +
    + + + + +
    SFai MO MOOK
    +RFai MT MTOK
    +Sched Msgs
    +SMS counters
    +
    + +

    +

      +
    • +aaa - error code during sending last SMS message (reset after enabling phone): + +

      +

        +
      • +  1: 'Number not in use'
      • + +
      • + 21: 'Message not sent this time'. This error happens, when +you try to send messages from prepaid card without this possibility, +when you send message for incorrect number (SMSC is correct), SMSC is blocked +on your network or when you send SMS with alphanumeric number over SMSC, which +doesn't support it. +
      • + +
      • + 28: 'Number not in use'
      • + +
      • + 38: 'Message not sent this time'. Error with sending message during SMSC blocked on your network. +
      • + +
      • + 42: probably phone shows this error, when used SMSC +is overworked (too many sent messages in the same time) and can't send +your message in this moment +
      • + +
      • + 50: 'Check operator services'. Error displayed after sending +SMS from some prepaid cards without this possibility.
      • + +
      • + 96: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). +The reason is wrong number of SMSC (+1). +
      • + +
      • +111: 'Message sending failed'. +The reason is wrong target number or wrong number of SMSC +
      • + +
      • +166: 'Message sending failed'. +Displayed when SMSC number was wrong or SMSC is blocked for your network. +
      • + +
      • +169: 'Message sending failed'. +No money on prepaid account.
      • + +
      • +178: 'Message sending failed'. Error displayed after sending +SMS from some prepaid cards without this possibility.
      • + +
      • +252: 'Message sending failed'. Displayed, when phone's transmitter +was disabled in test 45 or +phone can't find network (when BTS test +in test 17 was enabled on channel +without network)
      • + +
      • +253: 'Message sending failed'. Displayed, when SMSC number was wrong.
      • +
      +

      +

    • + +
    • +bbb - number of SMS sending attempts. +You should remember, that report about waiting for delivering SMS (pending) +isn't sent from your phone and is not taken into consederation in this parameter +(but information about success/defeat in its' delivering is taken - see description +for eee and fff parameters). For example: you enabled in phone's menu function +connected with SMS raports. You send SMS message now - phone increases this parameter. +If it showed, that sending of message was successfull, increases value of ccc +parameter too and phone saves report waiting for delivering sent SMS. +If SMSC delivered it (or not) and sents about it report (Failed or Delivered), +value of eee parameter increases too. If receiving or report was successfull, +increases value of fff parameter too (phone checks all saved reports now. +In majority of Nokia phones: if in some report with "pending" text SMSC and number, +where SMS was sent, is the same to SMSC and number from received report, +phone deletes "pending" report and saves received report into this place). +
    • + +
    • +ccc - number of succesfull sent SMS messages (which were accepted by used +SMSC and you will pay for them). For more info see description of previous +parameter. +
    • + +
    • +ddd - code of error during receiving last SMS message (reset, when phone is +enabled): + +

      +

        +
      • +22: full memory for SMS messages (phone tried to receive message +- increased value of eee counter, fff value didn't change). Information about +it is on the top of phone's screen too (blinking envelope) and phone showed +'No space for new messages' message. When you save messages on SIM card, +their sum in 'Outbox' and 'Inbox' depends on it (card). The most often, different +networks gives SIM card with different space for SMS messages (for example, +for Polish Plus GSM it's 10, for +Era GSM +15 and for Idea 30). When you don't have +space for messages, you can't add new (message 'Message memory full'). +You have to delete one of saved messages there - when you won't make it, +you can loose some incoming (remember, that sender of SMS message can set time, +when network will try to delivery it; after it it will be deleted and you won't +be able to receive it !). +
      • +
      +

      +

    • + +
    • +eee - number of SMS messages receiving attempts. For more info see description of next +parameter.
    • + +
    • +fff - number of correctly received SMS messages. Of course, all raports +about success/defeat in SMS delivering, logos, ringtones, business cards and +picture messages are sent in this form too (like adequate coded SMS) and are +taken into consideration in this parameter (but each picture message sent, for example, +from Nokia 3210 is written in 3 SMS messages !) +
    • + +
    • +gggg - number of received cell broadcast messages (if they're supported by actual +used BTS, you can check in test 7): +how many times your phone received cell-info (in Nokia 5110 it can be enabled in Menu 4-2-2) +and cell-broadcast (Menu 2-5 in Nokia 5110) messages
    • +
    + +

    Values of these counters (excluding error codes) are written to EEPROM, +when phone is disabled. You can reset them using test 60 +(it's made too, when they exceed their maximal values). + +

    I received info, that in some (all ?) Nokia 6150 phones +with 4.13 firmware doesn't change value of gggg counter instead that they receive +cellinfo messages (is it bug in this firmware version ?) + +

    In Nokia 3310 parameters are a little different located on the screen (when compare to info above). + +

    In Nokia 9210 parameters are 4 digits long... + +

    If you want to know a little more about sending SMS messages +(or find SMSC of different operators), visit +www.vdheyden.demon.nl/sms/index1.htm +site. + +

    + + + + + + +
    Majority of computer programs don't write to their users, if SMS message +sending was successfull - this test will be only way to check it. +
    + +

    In Nokia 3110 this test looks like test 64. + +

    In Nokia 6185/6188 this test looks different: + +

    + + + + +
    + +C5M 00      
    +C5L 00
    +C6M 00
    +C6L 03 +
    +
    + +

    Test 66 +
    Timeout counters connected with SMS messages (as you know, when you send them, +you can set, how long network will try to delivery them - I suppose, that these +counters are connected with it). + +

    + + + + + + +
    + + + + +
     aaa bbb cc 
    + ddd eee ff

    +
    + + + + +
    TR1 TR2 TRA 
    +TC1 TC2 SCH 
    +SMS timeout
    +  counters
    +
    + +

    +

      +
    • aaa - timeout counter for TR1M
    • +
    • bbb - timeout counter for TR2M
    • +
    • cc - timeout counter for TRAM
    • +
    • ddd - timeout counter for TC1M
    • +
    • eee - timeout counter for TC2M
    • +
    • ff - timeout counter for cell broadcast
    • +
    + +

    Values of these counters are written to EEPROM, when phone is disabled. +You can reset them using test 60 +(it's made too, when they exceed their maximal values). + +

    In Nokia 6185/6188 this test looks different: + +

    + + + + +
    + +CT1 82      
    +CT2 00
    +RF 23
      +
    +
    + +

    Test 67 + +

    + + + + +
    + +REC 00
    +SEND 00     
    +CTR 4C
    +STA 68 +
    +
    + +

    Test 68 + +

    + + + + +
    + +CNT 00      
    +ACK 00

    +M1M B3 +
    +
    + +

    Test 70 +
    Temporary counters of DSP (contents of API memory locations +r_dsp2ftd+0, r_dsp2ftd+1, r_dsp2ftd+2, etc. in hex format) + +

    + + + + + + +
    + + + + +
    aaaaa  bbbbb
    +ccccc  ddddd
    +eeeee  fffff
    +ggggg  hhhhh
    +
    + + + + +
     Temporary
    +DSP counters
    + R DSP2FTD
    +
    + +

    The display is to be used by special debugging DSP +software which can put some useful information to the memory locations on +API RAM. When this display is selected then MCU +copies the contents of those memory locations into display with format specified above. + +

    In Nokia 3110 this test looks like test 80. + +

    Test 71, 72 +
    Both tests allow to set DSP settings. + +

    When you will directly enter to one of them, in both of them number below AUDIO +ENHANCEMENT change - values depends on SIM card. You can now enter to one of them +using arrows - sound emited by phone will change then (you can hear +horrible noises and cracks). You can set values below AUDIO ENHANCEMENT too +- save them (in decimal - maximal value is 65536) in 31 or 32 position +in phonebook on SIM card (how to do it ? see description in +test 17). +Conf parameter from test 30 +shows, what value was choosen here. You can back to normal sound, when +you will disable and enable phone. Connecting headset or cat kit don't change +sound effects with concrete values set here. + +

    + + + + + + +
    + + + + +
        AUDIO
    + ENHANCEMENT
    +    aaaaa
    +
    + + + + +
    Use menu to
    +control DSP
    +   audio
    +enhancements
    +
    + +

    In Nokia 9210 these tests look like follows: + +

    + + + + + + +
    + + + + +
    AUDIO
    +ENHANCEMENT 
    +DISPLAY 1
    +    aaaaa
    +
    + + + + +
    Display 1
    +DSP audio
    +enhancements
     
    +
    + +

    In Nokia 3110 test 71 looks like test 81. + +

    Test 73 +
    Generic display for DSP Audio Enhancements + +

    + + + + + + +
    + + + + +
     aaa bb  aaa
    +cccc bb cccc
    +cccc bb cccc
    + cccc cccc
    +
    + + + + +
    DB1  B1  DB2
    +HEX1 B2 HEX2
    +HEX3 B3 HEX4
    +  HEX5 HEX6
    +
    + +

    +

      +
    • +aaa - general dB value, e.g. signal level in dB. decimal point and sign is not shown, ie. -10.5 is show 105.
    • + +
    • bb - general byte value, used for combined flags. Value is in hex format.
    • + +
    • cccc - general hex value.
    • +
    + +

    Some English sources write about this test: +
    "The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

    ...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

    In Nokia 3110 this test looks like test 82. + +

    Test 74 +
    DSP audio enhancements 1 (DRC) + +

    + + + + + + +
    + + + + +
      aaa  bbb  
    +       ccc
    +  dd    ee
    +
    + + + + +
    DSigL USigL
    +      NseLvl
    + DTbl  UTbl
    +
    + +

    +

      +
    • aaa - downlink (received by your phone) signal level.
    • +
    • bbb - uplink (sent by your phone) signal level
    • +
    • ccc - background noise (see description of DTX) signal level.
    • +
    • dd - downlink (received by your phone) DRC table value, shown in decimal integer, two digits.
    • +
    • ee - uplink (sent by your phone) DRC table value, decimal integer, two digits.
    • +
    + +

    Three first parameters are in dB calculated using DRC level +measuring block. Decimal point and sign is not shown, +ie. -10.5 is show 105. + +

    Some English sources write about this test: +
    "The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

    ...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

    In Nokia 3110 this test looks like test 72. + +

    Test 75 +
    Audio path status + +

    + + + + + + +
    + + + + +
    Mod:aaaaaaa
    +AudReq: bbbb
    +AccMod: cccc
    +H2Path: dddd
    +
    + + + + +
    ExtAudStatus
    +AudioRequest
    +AccAudMode
    +
    + +

    +

      +
    • +aaaaa - external audio status (for some phones possible values are: HP, HF, HEADSET, EXT and HP_OFFHO) + +

      With Nokia 5110 these values vere observed: + +

      + + + + + + + + + + + +
      value
      normal state (nothing connected, cable MBUS/FBUS or changer connected)HP
      headset (phone displays Headset) +
      You can simulate it +
      connecting pins 1-2 on the connector on the bottom of the phone +
      (when you see from the left side, when phone's screen is on the top) +
      In Nokia 9110 you can use to make it +test 92 too.
      HD (shortcut from HeaDset)
      car kit (phone displays Car) +
      You can simulate it +
      connecting pins 2-3 on the connector on the bottom of the phone +
      (when you see from the left side, when phone's screen is on the top) +
      HFU 1 (shortcut from Hands Free Unit 1)
      + +

      Described above methods of simulating presence sound accesories are correct +for Nokia 5xxx, 6xxx and probably 9110 (but REMEMBER: you use them on YOUR OWN risk) + +

      When you connect (simulate) both accesories you have in phone function +"Automatic answer" (Menu 4-1-6 in Nokia 5110) - it allows phone +to answer automatically (without pressing key) incoming calls. In Nokia 9110 +you can activate it using test 92 too. +

      +

    • + +
    • +bbbb - audio_request bitmap in hex
    • + +
    • +cccc - accessory audio mode
    • + +
    • +dd - path for HFU-2 (Hands Free Unit-2)
    • +
    + +

    In Nokia 9210 help looks like follows: + +

    + + + + +
    ExtAudStatus
    +AudioRequest
    +AccAudMode
    +HFU2Path
    + +

    In Nokia 3110 this test looks like test 73. + +

    Test 76 +
    Ear (= downlink) audio display + +

    + + + + + + +
    + + + + +
     Vab  Pccc
    + Cddd CAeee
    +PAfff
    +
    + + + + +
    EVol PeakVal
    +CutOff COAve
    +PkAver
    +
    + +

    +

      +
    • +ab - volume level (below information are correct for Nokia 5110): + + + + + + + + + + + + + + + + + + + + +
      ab
      speaker disabled0F
      sound like after pressing key (volume level 1)08
      sound like after pressing key (volume level 2)04
      sound like after pressing key (volume level 3 or enable loud sounds) +00
      + +

      During connection a parameter has "A" value, parameter b allows to +calculate set volume level (count it to the decimal value and substract 11 from it) +- this last parameter can be checked in +test 30 too. When you connect headset, +parameter a has "C" value (formula for counting volume level during call is +"10 - b" then). With car kit, a parameter is equal "2" and formula is "10 - b" too. + +

      When somebody calls to you (you didn't receive it yet), phone doesn't +show volume of sound always (displayed valued are for disabled speaker) - +I don't know, if it's firmware bug (5.07) or something different. +Phone shows it (volume) only with some combinations of types of rings (Ringing, Asceding) +and volume ring (I write values for both of these parameters: level 1 - A7, +level 2 - A6, level 4 - A4, level 5 - A0). +

    • + +
    • +

      ccc - peak value of downlink audio signal during last frame in dB, +decimal point and sign is not shown, ie. -10.5 is show 105. +

    • + +
    • +

      ddd - cut off counter value of last frame. This counter counts +how many samples are saturated during last frame. +

    • + +
    • +

      eee - moving average of cut off counter, decimal point and sign is +not shown, ie. -10.5 is show 105. +

    • + +
    • +

      fff - moving average of peak levels

    • +
    + +

    Some English sources write about this test: +
    "The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

    ...but I haven't seen it my phone and they were equal 0 (without first) all the time +(is something additionaly required to enable this test ?) + +

    Test 77 +
    Microphone (= uplink) audio display + +

    + + + + + + +
    + + + + +
     Paaa  Abbb 
    + Cccc CAddd

    +
    + + + + +
    MicPeak MAve
    +CutOff COAve

    +
    + +

    +

      +
    • +aaa - peak value of uplink audio signal during last frame in dB, +decimal point and sign is not shown, ie. -10.5 is show 105. +
    • + +
    • +bbb - moving average of peak levels, decimal point and sign is not +shown, ie. -10.5 is show 105..
    • + +
    • +ccc - cut off counter value of last frame. This counter counts +how many samples are saturated during last frame. +
    • + +
    • +ddd - moving average of cut off counter
    • +
    + +

    Some English sources write about this test: +
    "The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

    ...but I haven't seen it my phone and they were equal 0 all the time +(is something additionaly required to enable this test ?) + +

    In Nokia 3110 this test looks like test 75. + +

    Test 78 +
    DSP audio enhancements (AEC) + +

    + + + + + + +
    + + + + +
    aaa bbb ccc 
    +ddd eee fff
    +ggg h i jjj
    + kkkk llll
    +
    + + + + +
    EAA Ada ERL 
    +RxG TxG GLi
    +TxN Sta Mod
    + RVAD TVAD
    +
    + +

    +

      +
    • +aaa - electro-acoustic attenuation of echo from DSP point of view +in dB. Decimal point and sign is not shown. E.g. -10.5dB +would be displayed as "105", -0.5 dB would be displayed +as " 5". 20*log10( Q15 )
    • + +
    • +bbb - adaptive attenuation of echo. Decimal point is not shown. 20*log10( Q15 ) +
    • + +
    • +ccc - total echo return loss. Decimal point is not shown. 20*log10( Q15 ) +
    • + +
    • +ddd - RX (received) attenuator gain in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_rx_gain ) +
    • + +
    • +eee - TX (sent) attenuator gain in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_tx_gain ) +
    • + +
    • +fff - gain limit for RX and TX. Decimal point and sign is not shown. 20*log10( Q15 aec_gain_limit ) +
    • + +
    • +ggg - TX (sent) noise level (see DTX description for more info) +in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_tx_noise) +
    • + +
    • +h - adaptive filter status. (Q0 aec_nlms_state) (bit UPDATE << 2) | (bit NLMS2 << 1) | (bit NLMS1) +
    • + +
    • +i - comfort noise (see DTX description for details) +generation (0 or 1) (Q0 AEC_TX_COMF_GEN) +
    • + +
    • +jjj - AEC mode. (byte Q0 s_AEC_mode)
    • + +
    • +kkkk - shows 16 last RX VAD decisions in HEX format. Hex( Q0 aec_rx_vadreg ) +
    • + +
    • +llll - shows 16 last TX VAD decisions in HEX format. Hex( Q0 aec_tx_vadreg ) +
    • +
    + +

    In my phone all these counters were equal 0 all the time +(is something additionaly required to enable this test ?) + +

    In Nokia 3110 this test looks like test 76. + +

    Test 79 +
    Audio equalizer display + +

    + + + + + + +
    + + + + +
    aaaaa bbbbb
    +ccccc ddddd
    +-ee.e -ff.f 
    +
    + + + + +
    MiCutB MiCTA
    +EpCutB EPCTA
    +MiCLev EarLv
    +
    + +

    +

      +
    • aaaaa - saturated samples before microphone equalizer in decimal 16 bit
    • +
    • bbbbb - saturated samples after microphone equalizer in decimal 16 bit unsigned integer format.
    • +
    • ccccc - saturated samples before earpiece equalizer in decimal 16 bit unsigned integer format.
    • +
    • ddddd - saturated samples after earpiece equalizer in decimal 16 bit unsigned integer format.
    • + +
    • -ee.e - level of the microphone signal level detector in dB format. Requires log10 function in MCU. +16 bit signed value in DSP, 0 dB = 32768. +
    • + +
    • +-ff.f - Level of the signal after earpiece equalizer in dB format. Requires log10 function in MCU. +16 bit signed value in DSP, 0 dB = 32768. +
    • +
    + +

    Some English sources write about this test: +
    "The display is reset and restarted when call is taken. When call is +terminated the display is frozen to show last values. Display will not be +saved to EEPROM. Saturated sample counters aaaaa - ddddd are counted in DSP +and only the new counter value is sent to MCU. The microphone and earpiece +signal levels are calculated in DSP and it sends the linear values to +MCU which makes the linear to dB transformation (20*log10(x)) for the level +values." + +

    ...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

    In Nokia 3110 this test looks like test 77. + +

    Test 80 + +

    + + + + + + +
    + + + + +
    +
       TIMERS   
    +   RESET 
    +
    + + + + +
      Use menu
    +  to reset
    + field test 
    +   timers
    +
    + +

    By direct enter to this test you can reset counters from +test 82. Phone makes it too, when you connect +charger. Some English descriptions write, that it's made too, when battery is full +(I didn't notice it). + +

    In some new phones (like Nokia 3310 4.45) after using this test counters +from test 82 +are reset AND enabled (so, this test works as +test 81 too). + +

    In Nokia 3110 this test looks like test 83. + +

    In Nokia 6185: + +

    + + + + +
    + +RLP RESET 00
    +RX 00 00 00
    +TX 00 00 00
    +FER  000 +
    + +

    Test 81 + +

    +

    + + + + + +
    + + + + +
    +
       TIMERS   
    +  aaaaaaaa
    +
    + + + + +
    Use menu to
    +control test
    +  display
    +  timers
    +
    + +

    By direct enter to this test you enable (aaaaaaaa=ENABLED) or +disables (aaaaaaaa=DISABLED) counters from test 82. + +

    In Nokia 3110 this test looks like test 84. + +

    In Nokia 6185: + + + + + +
    + + +NXT 0       
    +NEW 0
    +UNA 0
    +TMR 0 +
    +
    + +

    Test 82 + +

    + + + + + + +
    + + + + +
    aaaaa bbbbb 
    +ccccc ddddd
    + TIMERS eee
    +
    + + + + +
    PwrOn InServ
    +NSPS  TxON
    +   Timers
    +   Status
    +
    + +

    +

      +
    • +aaaaa - how long phone was enabled +
    • + +
    • +bbbbb - how long phone was logged into network +
    • + +
    • +ccccc - how long phone was in +NSPS state
    • + +
    • +ddddd - how long phone's transmitter was enabled +
    • + +
    • +eee - information, whether counters are enabled (ON) or not (OFF) (you can set +it using test 81)
    • +
    + +

    Each of these counters display time in aaabb format - bb changes in +range 0-60 units; when reaches 60 units, it's reset to 0 and +aaa increases by 1. In majority of models unit is 1 minute (each of counters +display time as minutes and hours). In Nokia 7110 unit is half of minute, +in some Nokia 3310 one minute and 7 seconds... + +

    Some English descriptions write, that maximal value for counters is 99 h and 59 minutes. +When first of them (aaaaa) will have this value, all of them will stop. + +

    Unfortunatelly, these counters work only, when you have some test in netmonitor +enabled (it means: when you will disable tests, values won't change even, when +counters are enabled). It means, that you can have information here, +how long you use netmonitor (first parameter), how long phone logged into network +during this time (next)... + +

    + + + + + + +
    You you still want to measure time using this test, in +test 83 select SHOW TASK MSG BUFS and enable +test 87 (display will be empty then). +Of course, there disadvantiges of it: you won't have identification incoming calls. + +

    In service menu in Nokia 6130 (*#WARRANTY# code) and 3210 +(*#WAR0ANTY# code) in "Life Timer" position you will find information, +how long you make calls - digits before ":" mean hours, digits after it minutes). +For example, 0001:35 means 1 h 35 minutes of calls. +In Nokia 3310 (*#WAR0ANTY# code too) on start there is shown value 65536 there, +and counter starts working, when calls were longer than 1 h. +

    + +

    In Nokia 3110 this test looks like test 85. + +

    In Nokia 6185: + + + + + +
    + + +QU 00  DL000
    +NACK 00000
    +RC00 BR00000
    +W0000 C0000 +
    +
    + +

    Test 83 + +

    +

    + + + + + + + + + +
    + + + + +
    +
     SHOW TASK 
    + STACKS
    +
    + + + + +
    +
     SHOW TASK 
    + MSG BUFS
    +
    + + + + +
    +
     SHOW TASK 
    + FAST BUFS
    +
    + + + + +
    Use menu to
    +select shown
    + task info
    +
    + +

    By direct enter to this test you can make, that in +test 84, test 85, test 86 and test 87 +are displayed values of different counters: + +

    +

      +
    • +"STACKS" - shows free stack space in worst case
    • + +
    • +"MSG BUFS" - shows the peak number of pending messages
    • + +
    • +"FAST BUFS" - shows the peak number of pending fast messages
    • +
    + +

    In Nokia 3110 this test looks like test 86. + +

    In Nokia 6185: + + + + + +
    + + +S00000 DL000
    +N00000 00000
    +R00000 D0000
    +00000 +
    +
    + +

    Test 84, 85, 86 +
    Here is generally view of these tests: + +

    + + + + +
     aaaa bbbb  
    + cccc dddd
    + eeee ffff
    + gggg hhhh
    + +

    and here is their help: + +

    + + + + + + + + +
    + + + + +
    IDLE  DEV_IO
    +LOCAL MDISND
    +MDIRCV  UI
    + TONE   PN
    + +

    or (Nokia 6210/8210): +

    + + + + +
    IDLE  DEV_IO
    +LOCAL MDISND
    +MDIRCV  UI
    + TONE   PND
    + +

    or (Nokia 6250): +

    + + + + +
    IDLE  DEV?IO
    +LOCAL MDISND
    +MDIRCV  UI
    + TONE   PND
    + +

    or (Nokia 9210): +

    + + + + +
    IDLE  STRTUP
    +DEV_IO LOCAL
    +MDISND  -RCV
    +UI      TONE
    + +

    + + + + +
     FBUS   AUD
    +L1CTRL L1MEA
    +L1SYSP  L2
    + CC     MM
    + +

    or (Nokia 3210): +

    + + + + +
    IRDA  FBUS
    +AUD  L1CTRL
    +L1MEA L1SYSP
    +L2    CC
    + +

    or (Nokia 6210/6250): +

    + + + + +
    +WMLS    PN
    +IRDA IRDAMGR
    +FBUS    AUD
    +PHCTRL  L2 +
    + +

    or (Nokia 8210): +

    + + + + +
    +IRDA IRDAMGR
    +FBUS     AUD
    +PHCTRL    L2
    +CC        MM
    +
    + +

    or (Nokia 8810): +

    + + + + +
    IRDA  IRMGR
    +FBUS  AUD
    +L1CTRL L1MEA
    +L1SYSP  L2
    + +

    or (Nokia 9210): +

    + + + + +
    +PN     MBUS
    +FBUS    AUD
    +AUDCOMM  PH
    +L2       CC +
    + +

    + + + + +
     RR     RM
    + SMS    EM
    +SIMUPL SIML2
    + DDI
    + +

    or (Nokia 3210): +

    + + + + +
    MM    RR
    +RM    SMS
    +EM    SIMUPL
    +SIML2 DDI
    + +

    or (Nokia 6210/6250): +

    + + + + +
    + CC   MM  RR
    +RMC  SMS  EM
    +SIM SIM2 DDI
    +DGC  NTB FAX +
    + +

    or (Nokia 8210): +

    + + + + +
    +RR        RM
    +SMS       EM
    +SIMUPL SIML2
    +DDI      DGC
    +
    + +

    or (Nokia 8810): +

    + + + + +
    CC     MM
    +RR     RM
    +SMS    EM
    +SIMUPL SIML2
    + +

    or (Nokia 9110): +

    + + + + +
     RR     RM
    +SMS     EM
    +SIMUPL SIML2
    + DGC  DGNTB
    + +

    or (Nokia 9210): +

    + + + + +
    +MM        RR
    +RM       SMS
    +EM    SIMUPL
    +SIML2    DGC +
    + +

    + +

    +

      +
    • +aaaa, bbbb,... - task 0, 1, ...
    • +
    + +

    Numbers tell how many stack memory locations have been empty in the worst +case. So, if number is zero, stack has been full. Values are not written into +EEPROM, when phone is disabled. + +

    In Nokia 3110 test 86 looks like follow: + +

    + + + + + + +
    + + + + +
    MCUSW  aaaaa
    +DATE   cccccc
    +CHKSUM dddd
    +DSP    eee
    +
    + + + + +
    MCUSWVersion
    +DateOfMCUSW
    +MCUSWChecksum
    +DSPSWVersion
    +
    + +

    Meaning of parameters aaaaa,cccccc, dddd and eee you will find in test +88. + +

    Test 87 + +

    + + + + + + +
    + + + + +
     aaaa  bbbb 

    +
    + + + + +
      FIQ  IRQ  

    +
    + +

    +

      +
    • +aaaa - OS_SYSTEM_STACK
    • +
    + +

    In Nokia 8810 it looks different: + +

    + + + + + + +
    + + + + +
    + ffff  gggg
    + eeee  dddd 
    + aaaa  bbbb 
    +
    + + + + +
    + DDI   DGC
    + DGNTB DGFAX
    + FIQ   IRQ
    +
    + +

    In Nokia 9110 this test is different: + +

    + + + + + + +
    + + + + +
     cccc  dddd 
    + aaaa  bbbb 

    +
    + + + + +
     DGTB  DGFAX
    + FIQ   IRQ

    +
    + +

    In Nokia 9210: + +

    + + + + +
    +DGNTB  DGFAX
    +DCS   PMMCLE
    +PMMWR HELPER
    +  +
    + +

    In Nokia 7110 looks like follows: + +

    + + + + + + +
    + + + + +
    +1040010363800
    +  700  800
    +  220
    +    476   480 +
    +
    + + + + +
    +DGN  DGF  SCKT
    +PCL  PWB
    +PPC
    +FIQ    IRQ +
    +
    + +

    and in Nokia 6210/6250: + +

    + + + + +
    + + + + +
    +SRVSCK PMMCL
    +PMMWR   ND
    +PPC
    +FIQ    IRQ +
    +
    + +

    and in Nokia 8210: + +

    + + + + +
    + + + + +
    +NTB      FAX
    +PMMWR     ND
    +FIQ      IRQ
      +
    +
    + +

    Values of counters are not saved to EEPROM, when phone is disabled. + +

    Test 88 + +

    + + + + + + +
    + + + + +
    aaaaa bbbbbb
    +Date  cccccc
    +ChkSum dddd
    +eeeeeeeeeeee
    +
    + + + + +
    MCUSW  PPM
    +MCUSW_Date
    +MCU_Checksum
    +DSP_Version
    +
    + +

    +

      +
    • +aaaaa i cccccc - version and release date of MCU software +(codes for their checking and changes among their different versions are here)
    • + +
    • +bbbbbb - version of downloaded PPM (Post-programming Memory) packet: +Nokia Mobile Phones prepares different language versions +of firmware for phones. They're saved in "packets" - each of them contains messages and support +for few languages. Why is it done ? It's simple: internal memory in our phones is still +too small for all languages support. You will see version of PPM packet: +it's the same number as version of MCU firmware. After it +you have char (it can be "A", "B", etc. - for example, Polish language is in "B" packet). + +

      For curious: in older models (like Nokia 2110i) nobody prepared PPM packets and +preparing another language version was connected with modyfing ALL firmware. I readed too, +that phones with "generic" firmware had normally disabled services for some languages +(for example, Greek) - it could be enabled with some Nokia service programs (like Pc-Locals 0.6). +

      +

    • + +
    • +dddd - MCU memory checksum +(when it's wrong, phone display CONTACT SERVICE)
    • + +
    • +eeeeeeeeeeee - DSP software version
    • +
    + +

    Information from this test are displayed in some Nokia service programs +(like PC-Locals 1.3 or WinTesla) too. + +

    In Nokia 6210 there are displayed "?" chars instead of "_" in help for this test... + +

    In Nokia 9210: + +

    + + + + + + + + + +
    + + + + +
    +Linda SW
    +aaaaa bbbbbb
    +ChkSum: cccc
    +HW: dddd +
    +
    + + + + + +
    +Linda SW
    +03.62 011009
    +ChkSum: 5324
    +HW: 4000 +
    +
    + + + + +
    +Linda SW
    +Version Date
    +Checksum
    +HW Version +
    +
    + +

    +

      +
    • aaaaa - firmware in PDA
    • +
    • bbbbbb - date of PDA firmware
    • +
    • cccc - checksum
    • +
    • dddd - hardware version
    • +
    + +

    Test 89 + +

    + + + + + + +
    + + + + +
    HW: aaaa 
    +TXT: Ubbbbbb

    +
    + + + + +
    HW version
    +Text version

    +
    + +

    +

      +
    • +aaaa - phone hardware version (for example, the nevest Nokia 5110 I saw, display +here 4220)
    • + +
    • +bbbbbb - information, when were prepared texts (probably operator names) +displayed by phone +
    • +
    + +

    In Nokia 9210: + +

    + + + + + + + + + +
    + + + + +
    +CMT SW
    +aaaaa bbbbbb
    +PPM:  cccccc
    + dddddddd +
    +
    + + + + + +
    +CMT SW
    +03.21 011009
    +PPM:  03.62A
    + 40.1.501 +
    +
    + + + + +
    +CMT SW
    +Version Date
    +PPM Version
    +DSP Version +
    +
    + +

    +

      +
    • aaaaa - version of firmware in phone module
    • +
    • bbbbbb - date of firmware in phone module
    • +
    • cccccc - PPM with firmware in phone module
    • +
    • dddddddd - DSP firmware version
    • +
    + + +

    Back to the top
    + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/faq_net6.htm b/Docs/en_US/gsm/netmon/faq_net6.htm index a405444..68d84df 100644 --- a/Docs/en_US/gsm/netmon/faq_net6.htm +++ b/Docs/en_US/gsm/netmon/faq_net6.htm @@ -1,2852 +1,3225 @@ - - - - - - - - - - NetMonitor in Nokia phones (7/7) - - - - - -

    Main page

    - -
    NetMonitor in Nokia phones (7/7) - -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] - -

    - -
    - - - -
      -
    1. What is it ?
    2. -
    3. Do I need it ?
    4. -
    5. Does my phone use more power with NetMonitor enabled ?
    6. -
    7. How to activate it ?
    8. -
    9. Which NetMonitor version can be activated in my phone ?
    10. -
    11. Does NetMonitor activation void warranty ?
    12. -
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. -
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. -
    17. How to use it ?
    18. -
    19. Can I damage my phone ?
    20. -
    21. Glossary
    22. -
    23. Description of the individual tests
    24. -
    25. You can also use a program...
    26. -
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. -
    29. How can I disable NetMonitor ?
    30. -
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. -
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. -
    35. Is NetMonitor available in analog Nokia phones ?
    36. -
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. -
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. -
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. -
    43. Does NetMonitor allow to identify place, where am I ?
    44. -
    45. What are NetMonitor codes ?
    46. -
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. -
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. -
    51. I have non existing networks on the list of forbidden networks...
    52. -
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. -
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. -
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. -
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. -
    61. How to change settings in tests ?
    62. -
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. -
    65. Is netmonitor available in English version only ?
    66. -
    67. Information sources
    68. -
    69. Additional information
    70. -
    71. Does using/activating netmonitor cost anything ?
    72. -
    73. Does using netmonitor is legall ?
    74. -
    75. Which entries on SIM card are used in netmonitor tests ?
    76. -
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. -
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. -
    81. Netmonitor shows different battery capacity than info on it...
    82. -
    -
    -
    - -

    Test 90 - -

    In Nokia 9110 this test looks like follows: - -

    - - - - - - -
    - - - - -
     Cover  aaaa
    - CarKit bbbb
    - Heads  cccc
    -
    - - - - -
    CoverCnt
    -CarKitCnt
    -HeadsetCnt  
    -
    - -

    -

      -
    • aaaa - how many times Communicator's cover was opened
    • -
    • bbbb - how many times carkit was connected
    • -
    • cccc - how many times headset was used
    • -
    - -

    Because Nokia 9110 seems to be 100% hardware compatible with 6110, -method of simulating headset and car kit should be the same -(see test 75). -First of them you can simulate using -test 92 too (when you use it, value of the counter -from this test doesn't change !). I recommend to read -page http://my-communicator.com/, -where you will find more informations about it (for example, another ways -to simulate them)... - -

    here's for Nokia 5190: - -

    - - - - - - -
    - - - - -
    M:DCS:DO4100
    -D:HPA:NTM:NC
    -D:REA:OFS:RU
    -0000000:000
    -
    - - - - -
    -MODESERVSIM 
    -DCS AMPSMOD
    -DPWRAPWRSMC
    -PRILIST -
    -
    - -

    and in Nokia 7110/8210/6210/6250/3310 looks like follows: - -

    - - - - - - - - - -
    - - - - -
    -PS0 aaaa
    -EC0 bbbbbbbb
    -PS1 cccc
    -EC1 dddddddd
    -
    - - - - -
    -PS0 FFFE
    -EC0 00000003
    -PS1 FFF8
    -EC1 00000002
    -
    - - - - -
    -Page0 Status
    -EraseCounter
    -Page1 Status
    -EraseCounter -
    -
    - -

    -

      -
    • aaaa - the same to the parameter bbbb from test 92
    • -
    • bbbbbbbb - the same to the parameter dddddddd from test 92
    • -
    • cccc - the same to the parameter bbbb from test 93
    • -
    • dddddddd - the same to the parameter dddddddd from test 93
    • -
    - -

    Probably it's about one of phone's memory. Parameters -"aaaa" and "cccc" show, whether banks of this memory are free -(fffe) or not (fff8). Parameters "bbbbbbbb" and "dddddddd" show, -how many times they were erased. - -

    Test 91 - -

    In Nokia 9110: - -

    - - - - - - -
    - - - - -
       RESET 
    -   MISC
    -  COUNTERS  
    -
    - - - - -
      Use menu  
    -  to reset
    -    misc
    -  counters
    -
    - -

    By direct enter to this test you can reset counters from -test 90. - -

    In Nokia 7110/8210/6210/6250/3310 this test is different: - -

    - - - - - - -
    - - - - -
    -FL  005FC998
    -E2    0    0
    -PR   30    1
    -OM    0 0000
    -
    -
    -
    - -Help from Nokia 7110: -

    - - - -
    -NextEntry
    -Addr  Length
    -Small   Long
    -ErCnt ErMask
    -
    - -

    and 8210/6210/6250/3310: -

    - - - -
    - NextEntry
    -Addr  Length
    -Small Long  
    -ErCnt ErMask
    -
    -

    -
    - -

    Test 92 - -

    In Nokia 9110 it looks different: - -

    - - - - - - -
    - - - - -

      Headset   
    -    xxx
    -
    - - - - -
     Use menu to
    -   toggle
    -   headset
    -   ON/OFF
    -
    - -

    By direct enter to this test you can enable "headset" profile -normally accesible after connecting headset (of course, -you don't have to have it ;-)) - xxx can have ON or OFF values. -When you will use it, value of counter from test 90 -don't change. I recommend to read -page http://my-communicator.com/, -where you will find more informations about it (for example, another ways -to simulate them)... - -

    - - - - - - -
    Use this test, when you need 'Automatic Answer' function, which allow -to receive incoming call without pressing phone's key. This function is normally -enable in never Nokia phones with connected set only (in older phones - like -Nokia 2110i - it's always visible) -
    - -

    and in Nokia 7110/8210/6210/6250/3310 it looks like follows: - -

    - - - - - - - - - -
    - - - - -
    -EP aaaa bbbb
    -#0      cccc
    -    dddddddd
    -eeeeffffffff -
    -
    - - - - -
    -EP F0F0 FFFE
    -#0      0000
    -    00000003
    -FFFFFFFFFFFF
    -
    -
    -
    -Help from Nokia 7110: -

    - - - -
    -EMark PgStat
    -PgType
    -EraseCount
    -PpInd PpECnt -
    -

    and 8210/6210/6250/3310: -

    - - - -
    -EMark PgStat
    -      PgType
    -  EraseCount
    -PpInd PpECnt -
    -

    -
    - -

    -

      -
    • bbbb - the same to the parameter aaaa from test 90
    • -
    • dddddddd - the same to the parameter bbbbbbbb from test 90
    • -
    - -

    It's info about first bank of one of phone's memories. When it's free (parameter -bbbb=FFFE), parameters "eeeeffffffff" are equal "FFFFFFFFFFFF". -Parameter "dddddddd" shows, how many times bank was erased. - -

    Test 93 - -

    - - - - - - - - - -
    - - - - -
    -EP aaaa bbbb
    -#1      cccc
    -    dddddddd
    -eeeeffffffff -
    -
    - - - - -
    -EP F0F0 FFF8
    -#1      0001
    -    00000002
    -000000000002
    -
    -
    -
    -Help from Nokia 7110: -

    - - - -
    -EMark PgStat
    -PgType
    -EraseCount
    -PpInd PpECnt -
    -

    and 8210/6210/6250/3310: -

    - - - -
    -EMark PgStat
    -      PgType
    -  EraseCount
    -PpInd PpECnt -
    -

    -
    - -

    -

      -
    • bbbb - the same to the parameter cccc from test 90
    • -
    • dddddddd - the same to the parameter dddddddd from test 90
    • -
    - -

    It's info about second bank of one of phone's memories. When it's free (parameter -bbbb=FFFE), parameters "eeeeffffffff" are equal "FFFFFFFFFFFF". -Parameter "dddddddd" shows, how many times bank was erased. - -

    Test 94 - -

    Test in Nokia 3210: - -

    - - - - - - -
    - - - - -
    Vo:  aaa bbb
    -Pins:      c
    -Mode:   dddd
    -State:  eeee
    -
    - - - - -
    V: Req ADC  
    -Pin Status
    -Mode
    -Band Ch
    -
    - -

    -

      -
    • dddd - one of values is AUTO
    • -
    • eeee - example values are GS05, GS09, PS01
    • -
    - -

    and 7110/6210/6250: - -

    - - - - - - -
    - - - - -
    - -IN E111 F000
    -ST      0000
    -        0000
    -        0000 -
    -
    -
    - -

    Help from Nokia 7110: -

    - - - -
    -InExc  InRec
    -      EmuErr
    -      EnvErr
    -      RecEr -
    - -

    and Nokia 6210/6250: -

    - - - -
    -InExc InRec
    -      EmuErr
    -      EnvErr
    -      RecErr -
    -

    -
    - -

    Test 95 - -

    In Nokia 3210 - -

    - - - - - - -
    - - - - -
    1:aaa 4:ddd 
    -2:bbb 5:eee
    -3:ccc 6:fff
    -
    - - - - -
    6 lowest
    -values at   
    -shut down
    -
    - -

    and newer versions of firmware in Nokia 6210 (confirmed for 5.17 and higher): - -

    - - - - - - -
    - - - - -
    -GSM pwrcls: 
    -4(2W)
    -Modified:No
    -
    -
    - - - - -
    -Curr Band-3 
    -Pwr-Cls
    -(Watt)
    -Pwr-Cls Mod -
    -
    - -

    Test 96 - -

    In Nokia 3210: - -

    - - - - - - -
    - - - - -
    VCX0ADC: aaa
    -TEMP(C):  bb
    -TEMP(K): ccc
    -
    - - - - -
    ADC VALUE
    -RF TEMP(C)
    -RF TEMP(K)  
    -
    - -

    -

      -
    • -ccc - temperature of bb counter (in Kelvin degrees: K = C + 273)
    • -
    - -

    and 7110: - -

    - - - - - - -
    - - - - -
    -Co: 49 A: 279
    -Tu: 49 K: 305
    -Of:  0  C:+32
    -V5:  2 -
    -
    - - - - -
    -Contrast ADC
    -Tuned Kelvin
    -Offset     C
      -
    -
    - -

    Test 98 - -

    - - - - - - -
    - - - - -
    -WR  00000000
    -      0 0000
    -ER  00000000
    -        0000 -
    -
    - -
    -

    Help from Nokia 7110: -

    - - - -
    -WrErrCnt    
    -WrRtry WrSta
    -ErErrCnt
    -ErSta
    -
    - -

    and 6210/6250: -

    - - - -
    -    WrErrCnt
    -WrRtry WrSta
    -    ErErrCnt
    -       ErSta
    -
    -

    -
    - -

    Test 99 - -

    For Nokia 8810: - -

    - - - - - - -
    - - - - -
    -ENTERING   
    -FBUS
    -MODE
    -
    -
    - - - - -
    -Switches    
    -phone
    -to FBUS
    -mode -
    -
    - -

    It's probably for enabling FBUS protocol instead of normal used infrared -connection. I don't have additional info... - -

    And here is for Nokia 7110: - -

    - - - - - - -
    - - - - -
    -Ead:aaaa    
    -Mod:bb
    -MODE: cccc
      -
    -
    - - - - -
    -EAD value   
    -Acc. status
    -FBUS mode
      -
    -
    - -

      -
    • bb - type of connected sound accesories (example values: -HP in normal state, HD with headset - for example, HDC-9P). -In other phones this information is displayed in -test 75
    • -
    • cccc - "FBUS" in connection made during FBUS or MBUS cable from older -Nokia phone (5xxx, 6xxx) or during Irda connection
    • -
    - -

    Very similiar is in Nokia 6210/6250: - -

    - - - - - - - - -
    - - - - -
    -Ead: 03FF   
    -Mod: HP
    -

      -

    -
    - - - - -
    -EAD value   
    -Acc. status
    -

      -

    -
    - -

    Test 100 - -

    Test from Nokia 9110: - -

    - - - - - - -
    - - - - -
    a  b 
    -c  ddd    e 

    -
    - - - - -
    UWS DWS
    -T1   N1   T2

    -
    - -

    and 7110/6210/6250: - -

    - - - - - - -
    - - - - -
    -004D63   5.0
    -0018D1   1.6
    -05B1DD  94.0
      -
    -
    - - - - -
    -MemUseT %Use
    -MemRelT %Rel
    -MemUnuT %Unu
      -
    -
    - -

    Information about using phone's memory. I'm not sure exactly, what memory -(when position to phonebook is added, information displayed here is probably about -phonebook memory). - -

    And in Nokia 8210/3310 is different (they're -information about the voice dialling feature): - -

    - - - - - - - - - -
    - - - - -
    -ND  a  b  c
    -    d  e  f
     
    -ggggg hhhhhh -
    -
    - - - - -
    -ND  2  1  0
    -    0  0  0
     
    -02.81 120399 -
    -
    - - - - -
    -ND mm cs ps 
    -   ss po da
     
    -Vers: Date: -
    -
    - -

      -
    • a - number of recorded voice tags in phone. -Maximal value is 8 (for Nokia 8210/3310) or 10 (for Nokia 6210). -It's displayed in test 101 and test 102 -(Nokia 8210/3310) or test 108 and test 109 (Nokia 6210)
    • -
    • c - info about using voice dialling engine: -
        -
      • 0 - it wasn't used after enabling phone
      • -
      • 1 - voice tag was not recognized or Play/Save function were used
      • -
      • 5 - voice tag was recognized
      • -
      • 7 - user was in voice dialling function menu and selected Cancel function
      • -
      • 8 - voice dial in progress (in use)
      • -
      -
    • -
    • ggggg - version of voice dialling engine (?)
    • -
    • hhhhhh - date of releasing voice dialling engine (?)
    • -
    - -

    Values of counters (without "a" parameter) are not saved to EEPROM, when phone is disabled. - -

    WARNING: in some phones (like Nokia 3310), if you want to give phone -to service for upgrading firmware, remove earlier ALL voice tags from its' memory. -In other case memory for them can be decreased for so many voice tags, as were saved in memory -in the moment, when it was given to service (example: -in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible -to save maximal 6 voice tags, counter "a" showed 2, but phone in Menu 1-10 displayed, -that memory for them is empty) - - -

    Test 101 - -

    Test from Nokia 9110: - -

    - - - - - - -
    - - - - -
      aaaaaaaa
    -  bbbbbbbb
    -  cccccccc  
    -  dddddddd
    -
    - - - - -
    TX Frame Cnt
    -RX Frame Cnt
    -TX Retx Cnt
    -RX Tetx Cnt
    -
    - -

    All values are in hexadecimal values. - -

    and 7110/6210/6250: - -

    - - - - - - -
    - - - - -
    -#0  0  #1  0
    -#2  0  #3  0
    -#4  0  #5  0
      -
    -
    - - - - -
    -Pn LoCPn LoC
    -Pn LoCPn LoC
    -Pn LoCPn LoC
      -
    -
    - -

    In Nokia 8210/3310 it's different (information about the recording voice -tags in voice dialling feature): - -

    - - - - - - - - - -
    - - - - -
    -Train
    -   a   b   c
    -dddd    eeee
    -ffff    gggg -
    -
    - - - - -
    -Train
    -   0   0   2
    -   0       0
    -0000    0000 -
    -
    - - - - -
    -Train
    -   r  ii  mm
    -strt    durn
    -minm    maxm -
    -
    - -

      -
    • a - number of voice tags failed to record -(it increases for example, when phone didn't recognize any voice to record)
    • -
    • b - number of recorded tags, when this test was enabled
    • -
    • c - number of recorded tags in phone. Maximal value is 8 (for Nokia 8210/3310) -or 10 (for Nokia 6210). It's displayed in test 100 and -test 102 (Nokia 8210/3310) or -test 107 and test 109 (Nokia 6210).
    • -
    • dddd - how loud was start of recorded voice during last recording -(the higher, the more loud) (?)
    • -
    • eeee - how loud was recorded voice during last recording -(the higher, the more loud) (?)
    • -
    • ffff,gggg - another parameters unique to each recorded voice (hex values ?)
    • -
    - -

    Values of counters (without "c" parameter) are not saved to EEPROM, when -phone is disabled. - -

    WARNING: in some phones (like Nokia 3310), if you want to give phone -to service for upgrading firmware, remove earlier ALL voice tags from its' memory. -In other case memory for them can be decreased for so many voice tags, as were saved in memory -in the moment, when it was given to service (example: -in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible -to save maximal 6 voice tags, counter "c" showed 2, but phone in Menu 1-10 displayed, -that memory for them is empty) - - -

    Test 102 - -

    Test from Nokia 9110: - -

    - - - - - - -
    - - - - -
    aaaaaaaaaa
    -bbbbbbbbbbbb
    -ccccccccccc
    -
    - - - - -
    Data call
    -flow control
    -info
    -
    - -

    In Nokia 8210/3310 it's different (information about the recognizing voice tags -in voice dialling feature): - -

    - - - - - - - - - -
    - - - - -
    -Recog a    b
    - c dddd eeee
    - f gggg hhhh
    - i jjjj kkkk -
    -
    - - - - -
    -Recog 0    2
    - 0 0000 0000
    - 0 0000 0000
    - 0 0000 0000 -
    -
    - - - - -
    -Recog r   mm
    -i1 scr1 minm
    -i2 penH maxm
    -i3 penL penC -
    -
    - -

    b - number of recorded tags in phone. Maximal value is 8 (for Nokia 8210/3310) -or 10 (for Nokia 6210). It's displayed in test 100 and -test 101 (Nokia 8210/3310) or -test 107 and test 108 (Nokia 6210) - -

    2'nd line - info about last recognized by phone voice tag (c=number of voice tag) -
    3'nd line - info about previous recognized by phone voice tag (f=number of voice tag) -
    4'td line - info about previous recognized by phone voice tag (i=number of voice tag) - -

    Values of counters (without "b" parameter) are not saved to EEPROM, when phone is disabled. - -

    WARNING: in some phones (like Nokia 3310), if you want to give phone -to service for upgrading firmware, remove earlier ALL voice tags from its' memory. -In other case memory for them can be decreased for so many voice tags, as were saved in memory -in the moment, when it was given to service (example: -in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible -to save maximal 6 voice tags, counter "b" showed 2, but phone in Menu 1-10 displayed, -that memory for them is empty) - - -

    and from Nokia 6210/6250: - -

    - - - - - - -
    - - - - -
    -Pn LoCPn LoC
    -Pn LoCPn LoC
    -Pn LoC
      -
    -
    - -

    Test 103 - -

    In Nokia 7110: - -

    - - - - - - -
    - - - - -
    -100    0  00
    -PoolS 01EA6E
    -RsrvS 031386
      -
    -
    - - - - -
    -%FW %BW FrCo
    -PoolSizeLeft
    -Reservations
      -
    -
    - -

    and 6210/6250: - -

    - - - - - - - -
    - - - - -
    -92   8  00  


      -

    -
    - - - - -
    -%FW %BW FrCo


      -

    -
    - -

    Test 104 - -

    - - - - - - -
    - - - - -
    -LOG 00000000
    -COD 00000000
    -WrA 00000000
    -RdA 00000000 -
    -
    - - - - -
    -ErrorLogAddr
    -ErrorCode
    -WrErrorAddrs
    -RdErrorAddrs -
    -
    - -

    Test 105 - -

    - - - - - - -
    - - - - -
    -WrC 00000000
    -RdC 00000000
    -Group     00
    -Index   0000 -
    -
    - - - - -
    -DevWrErrorCo
    -DevRdErrorCo
    -CallingGroup
    -CallingIndex -
    -
    - -

    Test 106 - -

    In Nokia 7110: - -

    - - - - - - -
    - - - - -
    -RtyDaRd 0000
    -RtyDaWr 0000
    -RtyHeRd 0000
    -RtyHeWr 0000 -
    -
    - - - - -
    -RtyDataRead
    -RtyDataWrite
    -RtyHeadRead
    -RtyHeadWrite -
    -
    - -

    and 6210/6250: - -

    - - - - - - - - -
    - - - - -
    -GT-Call 0000
    -GT-Ok   0000
    -Cl-Task 0000
    -RtyHewr 0000 -
    -
    - - - - -
    -Call To BGOT
    -Success BGOT
    -CleanUpTask
    -RtyHeadWrite -
    -
    - -

    Test 107 - -

    In Nokia 7110: - -

    - - - - - - -
    - - - - -
    -  1  1  1  1
    -LLRS: 000000
    -DchsmEr:0000
      -
    -
    - - - - -
    -PB GB  HB PB
    -LastLostSize
    -DtChsmErrCo
      -
    -
    - -

    In Nokia 6210/6250 contains information about the voice dialling feature: - -

    - - - - - - - - - -
    - - - - -
    -ND  a  b  c
    -    d  e  f
    -ggggg hhhhhh
    -  -
    -
    - - - - -
    -ND  2  1  0
    -    0  0  0
    -02.93 030300
    -  -
    -
    - - - - -
    -ND mm cs ps 
    -   ss po da
    -Ver   Date
    -  -
    -
    - -

      -
    • a - number of recorded voice tags in phone. -Maximal value is 8 (for Nokia 8210/3310) or 10 (for Nokia 6210). -It's displayed in test 101 and test 102 -(Nokia 8210/3310) or test 108 and test 109 (Nokia 6210)
    • -
    • c - info about using voice dialling engine: -
        -
      • 0 - it wasn't used after enabling phone
      • -
      • 1 - voice tag was not recognized or Play/Save function were used
      • -
      • 5 - voice tag was recognized
      • -
      • 7 - user was in voice dialling function menu and selected Cancel function
      • -
      • 8 - voice dial in progress (in use)
      • -
      -
    • -
    • ggggg - version of voice dialling engine (?)
    • -
    • hhhhhh - date of releasing voice dialling engine (?)
    • -
    - -

    Values of counters (without "a" parameter) are not saved to EEPROM, when phone is disabled. - -

    Test 108 - -

    In Nokia 7110: - -

    - - - - - - -
    - - - - -
    -FF:FF FF:FF 
    -FF:FF 00:00
    -FF:FF FF:FF
    -FF:FF FF:FF -
    -
    - - - - -
    -Link&LID 0-1
    -Link&LID 2-3
    -Link&LID 4-5
    -Link&LID 6-7 -
    -
    - -

    In Nokia 6210/6250 it's like test 101 in Nokia 8210... - -

    Test 109 - -

    - - - - -
    - - - - -
    -Recog r   mm
    -i1 scr1 minm
    -i2 penu maxm
    -i3 penl curp -
    -
    - -

    and is connected with recognizing numbers in voice dialing... - -

    Test 110, 111, 112, 113, 114, 115 (115 ONLY IN NOKIA 7110 !) - -

    - - - - - - - - - -
    - - - - -
    - a bbbbccccc
    -dddddd eeeee
    -ffffff ggggg
    - h  i j kkkk -
    -
    - - - - -
    - 0 FFFE  0.0
    -000002   0.0
    -000000 100.0
    - 3  1 0 FFE0 -
    -
    -
    -

    Help from Nokia 7110: -

    - - - -
    -Pn  Sta %Use
    -EraseCn %Rel
    -NextRec %Unu
    -Cu Cl Cc MmC -
    - -

    and 6210/6250: -

    - - - -
    - Pn Sta %Use
    -EraseCn %Rel
    -NextRec %Unu
    -Cu Sl Cc MnC -
    - -

    -
    - -

    New generation of Nokia phones (6210/6250/7110 and compatible) -save ALL settings and datas (phonebook, SMS, ringtones, WAP, etc.) -in one memory. It's called -PMM (I don't know official meaning - unofficial it can be -"Post Multiple Memory"). These tests show probably info about next banks of -this memory: - -

    -

      -
    • a - number of bank
    • -
    • bbbb - shows, if bank is used (fff8 in Nokia 6210/7110) or not -(fff0 in Nokia 6210, fffe in Nokia 7110)
    • -
    • ccccc - how many percent of memory is used
    • -
    • dddddd - erase counter
    • -
    • eeeee - how many percent of memory was free
    • -
    • ffffff - next (free in bank ?) position shown as absolute address
    • -
    • ggggg - how many percent of memory is free (when add to ccccc, you have 100%)
    • -
    - -

    Test 130 - -

    Test from Nokia 7110: - -

    - - - - - - -
    - - - - -
    -aaa   bbbbbb

     
      -

    -
    - - - - -
    -Slide   Open

     
      -

    -
    - -

      -
    • bbbbbb - how many times phone's sliding cover was opened (hex value)
    • -
    - -

    and 3310: - -

    - - - - - - - - - -
    - - - - -
    -DSP_RST:aaaa
    -CS: bbbbbbbb
    - cc dd ee ff
    -0000    gggg -
    -
    - - - - -
    -DSP_RST:0000
    -CS: 00000000
    - 00 00 00 00
    -0000    0000
    -
    -
    - - - - -
    -DSP resetcnt
    -CStandbyLoss
    - sw as pw st
    -BadPwr insim -
    -
    - -

    -

      -
    • aaaa - number of DSP resets. Displayed also in -test 36
    • -
    - -

    and newer versions of firmware in Nokia 6210 (confirmed for 5.17 and higher): - -

    - - - - - - -
    - - - - -
    - -LRW-1 SW:
    -XXXXXX
    -PN mode
    -NOT DETECTED -
    -
    -
    - - - - -
    -Shows
    -Connectivity
    -Battery
    -information. -
    -
    - -

    Connected with BlueTooth module (in this phone it wasn't available). - -

    Test 131 - -

    - - - - - - - - - -
    - - - - -
    -STO:aaaaaaaa
    -NB:bbLB:cc
    -HOF:dddddddd
    -eeee ZR:ffff -
    -
    - - - - -
    -STO:00000000
    -NB:00LB:00
    -HOF:00000005
    -0000 ZR:05CA -
    -
    -
    - - - - -
    -Stack overfl
    -NoBuf LongBu
    -HandOver Cnt
    -HOfail ZonFa -
    -
    - -

    -

      -
    • dddddddd - sum of handovers from -test 41 (?). Unfortunately, values don't match -always (firmware bug ?) -
    • -
    - -

    Counters are in hexadecimal form... - -

    Test 132 - -

    - - - - - - - - - -
    - - - - -
    -BS: aaaaaaaa
    -MO: bbbbbbbb
    -DRC:cccccccc
    -TIM:dddddddd -
    -
    - - - - -
    -BS: 00000000
    -MO: 00000005
    -DRC:00000000
    -TIM:00000000 -
    -
    -
    - - - - -
    -BS_Call Cnt
    -MO_Call cnt
    -Dropped call
    -Call time -
    -
    - -

    -

      -
    • aaaaaaaa - how many times you received call. Please notice one difference to -MTOK parameter from test 63 - you can't reset -this value from phone's menu
    • -
    • bbbbbbbb - how many times you made successfull outgoing call from your phone. -Please notice one difference to MOOK parameter from test 63 -- you can't reset this value from phone's menu. One interesting thing: this counter -can have bigger value than MOOK from -test 63 (firmware bug ?)
    • -
    • dddddddd - counter shows, how long (in second) there were calls made. -Doesn't work in all firmware versions
    • -
    - -

    Counters are in hexadecimal form... - -

    Test 133 - -

    - - - - - - - - - -
    - - - - -
    -BFu:aaaaaaaa
    -ChC:bbbb  cc
    -StB:
    -NSe: -
    -
    - - - - -
    -BFu:00000002
    -ChC:0004  00
    -StB:
    -NSe: -
    -
    -
    - - - - -
    -FullChargCnt
    -ChaCon Wrong
    -Standby time
    -NoServTimer -
    -
    - -

    -

      -
    • aaaaaaaa - how many times info about full charged battery was displayed -(when it was done correctly - for example FullM info in -test 20...or not - for example MaBFD info -in the same test). -Counter doesn't increase value, when phone is disabled.
    • -
    • bbbb - how many times charger was connected. Counter increases value, when (each -time, when you will do it): -
        -
      1. phone is enabled, you connect charger
      2. -
      3. phone is disabled, you connect changer and enable phone
      4. -
      -Counter doesn't increase, when phone is disabled. -
    • -
    - -

    Test 140 - -

    Test from Nokia 6250: - -

    - - - - - - - - -
    - - - -
    -AVC:  02    
    -SLM:  00
    -VOL:  09
     
    -
    -
    -
    - - - -
    -AVC state
    -SLM  state
    -BIAS  volume
      -
    -
    -
    -
    - -

    Second line changes to 02, when phone measure noise level. - -

    and 8210: - -

    - - - - - - - - -
    - - - -
    -Driver nr:01
    -ManuDeviAddi
    -00B000480000
    -  -
    -
    -
    -
    - - - -
    -Return value
    -from MFS

      - - -

    -
    - -

    Test 240 -
    It doesn't show any values, but: - -

    -

    - -

    Test 241 -
    -NetMonitor menu in Nokia 5110 -Disables netmonitor (it means, deactivates its' menu) ! -To again activate it you will have to use methods described in -How to activate it ? -Probably after using it you will have to disable and enable phone (to -make arrows up/down usable). It's possible too, that these arrows will work -only, when you will deactivate netmonitor from computer... - -

    Test 242 -
    Enables limited netmonitor -(tests from 1 to 19 only). To enable full netmonitor version -you will have to use methods described in -How to activate it ? question -(phone doesn't allow to use it from its' menu -test 243, which normally enable full -netmonitor version - you will be able to enter it in program enabling -netmonitor in computer only). - - -

    Test 243 -
    Enables full netmonitor. - -

    Test 250 -
    Some English descriptions write, that this test cleans information from -test 57 (I didn't notice it). - -

    Test 497 -
    It should deactivate -netmonitor like test 241 (497-256=241). -But some sites (for example, -www.versamart.com/Nokia5110/nokia5110code.shtml) -show, that it could make more: - -

    The tips needs Net Monitor enabled. -
    Be aware that the trick wil remove Netmonitor in some -
    sw versions like v4.73 and v5.04. - -

    -

      -
    1. Laungh the NetMonitor in your Nokia 51xx / 61xx
    2. -
    3. Execute the test number 497
    4. -
    5. Free calling for about 90 sec should now have been activated.
    6. -
    - -

    The trick has not been comfirmed working yet. - -

    For me, it's rather joke... - - -

    Back to the top - - -

    13. You can also use a program...
    -


    - -

    There are programs, which allow to track some of these parameters on computer's screen -(of course, phone must be connected to computer): - -

    -

      -
    • -program created by Andreas Schmidt (www.aschmidt.de/): -shows values displayed by phone in given test and allows to track -BTSes (for example, compare their signal level) -
    • - -
    • -gnokii: it's the name of project (official page - www.gnokii.org) -and software (nevest versions - ftp://ftp.linux.cz/pub/linux/people/pavel_janik/Gnokii/), -which want to be Nokia Cellular Data Suite for Unix and Linux. In this moment -it displays information similiar to these displayed by program described earlier. -
    • - -
    • Logo Manager (http://www.logomanager.co.uk/) -it shows view of netmonitor tests.
    • - -
    • -created by N. Hüttisch (www.nobbi.com/). -It can work with differenet phones (for example, Siemens C10). -When you want to use it with Nokia, Nokia Cellular Data Suite is required -(program communicates using AT commands). When you will unpack it, in file -monitor.ini (it's in archive with program) -change comport parameter (you will give there name of port, where -'Nokia GSM Data' and 'Nokia GSM Voice' modems are installed). And that's all... -
    • - -
    • http://www.club.cz/nokia.monitor/ -- it has the similiar possibilities to program below. - -
    • -Logo Express (http://memsu1.iam.ntu.edu.tw/~jrywu/ -or http://logoexpress.bizland.com/): -shows LAC and CID.
    • - -
    • -from http://members.tripod.com/smssend/gsm_csq.htm -(versions for PSION, DOS and Windows): display chart of signal level -(besed on signal from phone), work probably with Nokia 6xxx phones only. -
    • - -
    • -WinTesla: this commercional service program displays many detailed information -(for details search some description on pages somewhere in Internet) -
    • - -
    • software from -http://members.tripod.de/gsmplanet/psion.html for Psion 5mx (MX 218) and Psion Revo. -It requires additional software supporting IrDa -(see http://www.symbiandevnet.com/downloads/opl/projectopx/scomms.zip) -Works with Nokia 7110, 6210, 8210 and with Siemens S35i, S25. -Options depends on phone.
    • - -
    • -version 1.3 of PC-Locals: there two ways to make it: - -

      -

        -
      1. -in the window, where netmonitor is normally activated, enter number of -test - computer will display everything, what could be displayed by phone -in this test. -
      2. - -
      3. enabling internal program's netmonitor: - -

        -

          -
        1. select menu 8 (Event Trace)
        2. - -
        3. select menu 9 (Load TRC file)
        4. - -
        5. -write name of TRC file (with PC-Locals 1.3 in Internet you can find -nse3_433.trc file for Nokia 6110 firmware 4.33) -correct for phone's model and firmware (or press Enter and select adequate -file). When version from file and phone's version is not the same, computer -will confirm, that you really want to load it (it won't damage phone, -but parameters displayed by program will be different than adequate parameters -from netmonitor in phone). -
        6. - -
        7. -select menu 1 (MCU Events)
        8. - -
        9. -change status of events, which will be tracked in Trace window - you can make -it using gray + on the right side of keyboard (you can disable tracking, enable -normal or extended tracking). If you want to enable netmonitor displayed after -pressing F8 key, you have to enable tracking event CONSTANT_WINDOW_TRA -(change to NORM or EXT).
        10. - -
        11. -select menu 2 (Event Control) and change to On.
        12. - -
        -
      4. - -

        In "Trace" window you will see now tracked events. Network parameters can be -observed after pressing F8. Menu 6 (Break Trace Functions) -breakes tracking events.

      -
    • -
    - - -

    Back to the top - - -

    14. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    -


    - -

    GSM standards say, that cellular phone always should allow to make -emergency calls (usually 112) - even, when it's was blocked by GSM operator -(it means, when normally you can't use this phone - with this -IMEI - in network) or when it's without -SIM card (eventually it was blocked too). It makes, that after enabling your -Nokia looks for available cellular networks. There are some programs in this -moment (see in You can also use a program...), -which display on computer's screen everything, what could be displayed -by phone in this test. Or I will write it different: when you will connect your -Nokia to computer and use (for example) Pc-Locals 1.3 or program written -by Andreas Schmidt, you can -see some information given normally in "Net Monitor" menu. In some phones -(I checked it with Nokia 5110) you can have access to this menu (generally, -to phone's menu) using gnokii: you should send dtmf sequence to phone -(for example, run gnokii with parameter "--senddtmf sequence", where -sequence consists of some digits). - -

    When you will enter PIN code, you will be "normally" able to use "Net monitor" -menu from phone's keyboard (of course, if it was activated) and all settings -and tests inside (for example, not till then in -test 6 you will see -"preffered" and "forbidden" networks). You can still display tests using described -above programs (it can be usefull, when you want to monitor network state and when -you don't want to loose caller identification or when you want to check kind -of channel after entering PIN code) - they work independent of it, if you -have "Net monitor" menu activated and which test is displayed in phone... - -

    SIM card data can be readed in test 51 -(of course, if your phone supports this test) using these programs -independent of it, if you entered PIN code or not. When you don't have SIM -card in phone, you will see there "ERROR1". - -

    When you use deactived SIM card, you have access to tests in netmonitor -(of course, when its' menu was activated earlier). Network of SIM card is -normally monitored. Phone tries to communicate with it only once after -enabling phone (netmonitor shows, that -CCCH, AGCH, -SDCC (phone refreshes TA then), -BCCH and CCCH channels -are used then - like in normal SIM card). Later it's impossible. It's made againg -after reseting phone. Of course, you don't have name of monitored network -on screen or cellinfo. Interesting thing is, that, for example, -you can normally use BTS test... - - -

    Back to the top - - -

    15. How can I disable NetMonitor ?
    -


    - -

    GSM/DCS/PCS phones: - -

    -NetMonitor menu in Nokia 5110 -Enter 241 test in phone or use one of described in -question How to activate it ? programs -(you enter number 241 there, select "OFF" or something similiar...). - -

    TDMA 800/TDMA 1900 phones: - -

    Enter NAM programming menu (*3001#12345# code - -some sources write, that you have to write security code instead of 12345), set "Field Test display" to "Off"/"Disable" and reboot phone. - - -

    Na pocz±tek - - -

    16. Do I need to disable NetMonitor before sending my phone to the service ?
    -


    - -

    Normally Nokia phones don't have activated netmonitor. When you will give your -handy to service, somebody there can think, that you made some strange things with it -(of course, it isn't any maxim - it depends on concrete service and people, -who will repair your phone)... But I think, that it will be better to save -eventually problems connected with it and deactivate netmonitor's menu before -giving phone to service (I repeat: it isn't sometimes required, but it's better -to make it, when you don't want to have problems)... - - -

    Back to the top - - -

    17. Is it possible to re-activate NetMonitor after disabling it ?
    -


    - -

    YES ! You can activate (and deactivate) -netmonitor's menu repeat infinitely (and once more ;-)) - - -

    Back to the top - - -

    18. Is NetMonitor available in analog Nokia phones ?
    -


    - -

    Yes, it seems, that is available in majority of Nokia phones (working in different -cellular systems). - - -

    Back to the top - - -

    19. Does NetMonitor allow to use phone like broadcast station ?
    -


    - -

    No - if you want to speak without costs with people, which are near to you, -you have to use broadcasting station or walkie-takie. - - -

    Back to the top - - -

    20. I don't have all described tests in my phone. Why ? Can I increase their number ?
    -


    - -

    This FAQ describes tests from DIFFERENT Nokia phones (models). If you want -to increase number of available tests, you can only change your phone to -new, which has more tests (like Nokia 7110) or change it's firmware to never -- sometimes (like in Nokia 5110) you can have ONE :-) new test (firmware -5.04 and never has additionaly test 89). - -

    If you have ONLY 19 first tests, you have activated ONLY standard netmonitor -- enable full (here is more details). - -

    Sometimes you can find concrete copies of phones, where is really a little number of tests. -For example: I read about Nokia 6110 with 5.48 firmware, where it wasn't possible -to activate full netmonitor and where first tests didn't have some parameters -(for example, test 7 was empty). In such "cases" -I can find one explanation only: phone had not "full" firmware donwloaded. User -of such phone should take it to the service to download new firmware... - - -

    Back to the top - - -

    21. Does NetMonitor allow to identify place, where is my interlocutor ?
    -


    - -

    NO. This information are in networks registry, but they're not sent -to your phone. NetMonitor allows however (at least theoretically) -to look into parameters of sound, which is sent from his(her) phone... - - -

    Back to the top - - -

    22. Does NetMonitor allow to identify place, where am I ?
    -


    - -

    It's possible, but not too precisely. Why ? - -

    Phone can read such parameters required to identify (location of) BTSes -like their numbers (see test 11) or -TA (see test 1), -but readed TA couldn't have been distance -from BTS station in straight line (signal can break down) -and continuosly isn't possible finding, in what direction (what corner) -BTS stations are located (which are "seen" by your -phone). So, it's possible to identify area only, where you're (in cities, where -BTSes are located more close, it will be more -precisely). And it can be done by you or your operator... - -

    More info about implementing Mobile Station Location in GSM: -www.willassen.no/msl/ - - -

    Back to the top - - -

    23. What are NetMonitor codes ?
    -


    - -

    Sometimes I read advertisements with requests about NetMonitor codes and I don't know -exactly, what is it... It simple: in Poland (my country) rather only -GSM/DCS phones are used -and you don't have rather some special "secret" codes, which activate NetMonitor... When -you need it's description - it's in this FAQ. - - -

    Back to the top - - -

    24. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    -


    - -

    I didn't heard about such hardware. Article about it in Polish -Twoja Komorka number 4/2000 (page 18) -was only joke... - - -

    Back to the top - - -

    25. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    -


    - -

    There are not official information about it. All pages below were created by different people, -which observed work of compiled software: - -

    -

    - -

    On the pages above you will find information about commands connected with -NetMonitor for NSx models (if you don't know model of you phone, -read this page). Always you can use ready and free -ActiveX control (http://www.gertjaap.com) -working with these models too... - - -

    Back to the top - - -

    26. I have non existing networks on the list of forbidden networks...
    -


    - -

    You should remember, that it's possible to change list of forbidden and preffered networks, -for example, using SIM card readers ot some phones (it's possible, this "strange" -position was entered this way). - -

    When we speak about 260-99 network (260-3F position) - it was number of -test network run by the operator of Era GSM network on -the exhibition for Day of Telecommunication in Warsaw (May 2000). It presented -GPRS. - - -

    Back to the top - - -

    27. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    -


    - -

    Everything depends on used channel (for GSM 900 1-124, for GSM 1800 512-885) - -see description of 1'st test... - - -

    Back to the top - - -

    28. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    -


    - -

    Yes, Logo Manager (http://www.logomanager.co.uk) -works with DLR-3 cable. I don't know software supporting DLR-2... - - -

    Back to the top - - -

    29. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    -


    - -

    NO, Init File Editor is connected with PDA part of phone, netmonitor not... - - -

    Back to the top - - -

    30. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    -


    - -

    Unfortunatelly not (of course, some other phones - for example, Motorola - have such function). -The only thing, you can do: you can force phone to use one selected channel -from concrete frequency (see test 18). -Of course, there are some disadvantiges of it - for example, when phone will lost -signal on this channel, will report, that network not found (in normal situation -it would try to find another channel). - - -

    Back to the top - - -

    31. How to change settings in tests ?
    -


    - - - -
    -Netmonitor menu in Nokia 5110 -Netmonitor menu in Nokia 5110 -Netmonitor menu in Nokia 5110 - -By direct enter to them. How ? You should enter to phone's menu, go into -"Netmonitor/Field Test" menu, enter the number of test, where you want to change -setting and ENTER DIRECTLY INTO IT. It's described more detailed in -question 9. - -

    Sometimes (I write it in such tests) you have to change values in some -positions in phonebook before entering to them (see, for example, -test 18). - -

    - - -

    Back to the top - - -

    32. My phone has very short snandby time - it is possible to see the reason of it ?
    -


    - -

    Here are some possible to check reasons: - -

      -
    • if it depends of configuration of your network - see -test 10 (PRP parameter), -test 12 and -test 13 (DTX; -or test 2 in Nokia 2120/2160/6160)
    • - -
    • general energy consumption (it can depend on -older firmware version or enabled -"Info service") or "Cell info display") functions - -test 23 -(in Nokia 6185/6188 test 45)
    • - -
    • capacity of the battery (test 20; -in Nokia 6185/6188 test 42) -and their age (LiION) (test 23; -in Nokia 6185/6188 test 45)
    • -
    - - -

    Back to the top - - -

    33. Is netmonitor available in English version only ?
    -


    - - - -
    -Menu 9 in Nokia 3210 -Menu 11 in Nokia 3210 - -In Nokia phones only, in some other (for example, Motorola) in different languages... - -Menu 9 in Nokia 3210 -Menu 11 in Nokia 3210 -
    - - -

    Back to the top - - -

    34. Information sources
    -


    - -

    To make this FAQ I used: - -

    -

    - -

    People, which are not on this list, should write to me :-) ! - - -

    Back to the top - - -

    35. Additional information
    -


    - -

    -

    - -

    For links to pages and sources in Polish language see Polish version of this description. - - -

    Back to the top
    - -

    36. Does using/activating netmonitor cost anything ?
    -


    - -

    Your phone HAS TO monitor network state/signal level, etc. to normal work -(and your operator DOESN'T TAKE MONEY for it !). You only can decide, if info -about it will be displayed or not - it depends ONLY on you. The same situation -is with other parameters connected with phone (for example, battery charging). - -

    You can activate netmonitor FREE using methods from -How to activate it ?, eventually pay -somebody for it ANY money ;-)) - he will do it the same thing... - - -

    Back to the top - - -

    37. Does using netmonitor is legall ?
    -


    - -

    Pryvatly I think: I received (free ;-)) software for it and I don't -make anything wrong. So, why I can't observe parameters ? - -

    BTW - different thing is with simlocks (especially, when phone was bought -in promotion and signed agreement is not expired ;-)))) .... - - -

    Back to the top - - -

    38. Which entries on SIM card are used in netmonitor tests ?
    -


    - -

    In new Nokia phones you have to write/read some values changed in some tests -in/from some entries in phonebook on SIM card: - -

    -

      -
    • 31 - test 71 (AUDIO ENHANCEMENT). You should write value 0-65536 there
    • -
    • 32 - test 72 (AUDIO ENHANCEMENT). You should write value 0-65536 there
    • -
    • 33 - test 17 (BTS TEST). You should write -channel number (for GSM 900 1-124, for GSM 1800 512-885) there
    • -
    • 34, 35, 36 - test 52 (reading files from SIM) -and test 53 (writing files to SIM). In entry -34 will be put address of file, 35 its' contenst and in 36 info about -success/failure of reading/writing
    • -
    - -

    Similiar activities in older models (2110i, etc.) were connected with writing values -into (for example) internal phone phonebook in entry 98. - - -

    Back to the top - - -

    39. Can I activate netmonitor in 3310 using soft working with 3210 ?
    -


    - -

    YES - in all new models of Nokia phones you can use the same computer soft. -I advice reading point How to activate it ?... - - -

    Back to the top - - -

    40. After activating netmonitor/BTS TEST my phone can't find network...
    -


    - -

    Nokia phones had always good firmware without too many errors, bugs and mistakes. -Some new models (like 6210) make more problems, but even they're so good, that -simple activating netmonitor menu doesn't make problems. -They can be sometimes visible (like hanging phone) when use concrete tests. -It's good to update firmware of phone then and inform me about problem :-))) --> I collect firmware bugs in my pages. - -

    Finding and loosing network signal doesn't depend rather on netmonitor - -it's possible, that in concrete place and time you don't have transmitters -of your operator or network is busy. It happens and is rather normal. - -

    Different situation is, when BTS TEST is enabled. Your operator can use -set in test channel on small area only and outside it your phone will not show -network signal. So, disable it then (see description of test 17). - - -

    Back to the top - - -

    41. Netmonitor shows different battery capacity than info on it...
    -


    - -

    Phone takes info about battery capacity from resistor inside. -If it's different than should be, you see such incorrect info in netmonitor. -You can only check (and compare with original), if phone has longer standby/speech time. -If yes, you have bigger battery... - -

    You have to remember about one detail: -In case of LiION battery you will find in netmonitor -(test 20) -the same value as on battery casing, in NiMH batteries -this value can differ even by 200 mAh (and it changes)... - - -

    Back to the top - - -

    -

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] -

    -
    -
    - -

    Marcin Wiacek (WWW) -
    Last modification: 5 January 2002
    - - - + + + + + + + + + + NetMonitor in Nokia phones (7/7) + + + + + +

    Main page

    + +
    NetMonitor in Nokia phones (7/7) + +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

    + +
    + + + +
      +
    1. What is it ?
    2. +
    3. Do I need it ?
    4. +
    5. Does my phone use more power with NetMonitor enabled ?
    6. +
    7. How to activate it ?
    8. +
    9. Which NetMonitor version can be activated in my phone ?
    10. +
    11. Does NetMonitor activation void warranty ?
    12. +
    13. NetMonitor menu in my phone has different number than 10. Is it normal ?
    14. +
    15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
    16. +
    17. How to use it ?
    18. +
    19. Can I damage my phone ?
    20. +
    21. Glossary
    22. +
    23. Description of the individual tests
    24. +
    25. You can also use a program...
    26. +
    27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    28. +
    29. How can I disable NetMonitor ?
    30. +
    31. Do I need to disable NetMonitor before sending my phone to the service ?
    32. +
    33. Is it possible to re-activate NetMonitor after disabling it ?
    34. +
    35. Is NetMonitor available in analog Nokia phones ?
    36. +
    37. Does NetMonitor allow to use phone like broadcast station ?
    38. +
    39. I don't have all described tests in my phone. Why ? Can I increase their number ?
    40. +
    41. Does NetMonitor allow to identify place, where is my interlocutor ?
    42. +
    43. Does NetMonitor allow to identify place, where am I ?
    44. +
    45. What are NetMonitor codes ?
    46. +
    47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    48. +
    49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    50. +
    51. I have non existing networks on the list of forbidden networks...
    52. +
    53. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    54. +
    55. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    56. +
    57. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    58. +
    59. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    60. +
    61. How to change settings in tests ?
    62. +
    63. My phone has very short snandby time - it is possible to see the reason of it ?
    64. +
    65. Is netmonitor available in English version only ?
    66. +
    67. Information sources
    68. +
    69. Additional information
    70. +
    71. Does using/activating netmonitor cost anything ?
    72. +
    73. Does using netmonitor is legall ?
    74. +
    75. Which entries on SIM card are used in netmonitor tests ?
    76. +
    77. Can I activate netmonitor in 3310 using soft working with 3210 ?
    78. +
    79. After activating netmonitor/BTS TEST my phone can't find network...
    80. +
    81. Netmonitor shows different battery capacity than info on it...
    82. +
    83. NetMonitor in Nokia 6310, 8310,...
    84. +
    +
    +
    + +

    Test 90 + +

    In Nokia 9110 this test looks like follows: + +

    + + + + + + +
    + + + + +
     Cover  aaaa
    + CarKit bbbb
    + Heads  cccc
    +
    + + + + +
    CoverCnt
    +CarKitCnt
    +HeadsetCnt  
    +
    + +

    +

      +
    • aaaa - how many times Communicator's cover was opened
    • +
    • bbbb - how many times carkit was connected
    • +
    • cccc - how many times headset was used
    • +
    + +

    Because Nokia 9110 seems to be 100% hardware compatible with 6110, +method of simulating headset and car kit should be the same +(see test 75). +First of them you can simulate using +test 92 too (when you use it, value of the counter +from this test doesn't change !). I recommend to read +page http://my-communicator.com/, +where you will find more informations about it (for example, another ways +to simulate them)... + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
     Cover  aaaa
    + CarKit bbbb
    + Heads  cccc
    + Desks  dddd
    +
    + + + + +
    CoverCnt
    +CarKitCnt
    +HeadsetCnt  
    +DeskStandCnt
    +
    + +

    +

      +
    • aaaa - how many times Communicator's cover was opened
    • +
    • bbbb - how many times carkit was connected
    • +
    • cccc - how many times headset was used
    • +
    + +

    here's for Nokia 5190: + +

    + + + + + + +
    + + + + +
    M:DCS:DO4100
    +D:HPA:NTM:NC
    +D:REA:OFS:RU
    +0000000:000
    +
    + + + + +
    +MODESERVSIM 
    +DCS AMPSMOD
    +DPWRAPWRSMC
    +PRILIST +
    +
    + +

    and in Nokia 7110/8210/6210/6250/3310 looks like follows: + +

    + + + + + + + + + +
    + + + + +
    +PS0 aaaa
    +EC0 bbbbbbbb
    +PS1 cccc
    +EC1 dddddddd
    +
    + + + + +
    +PS0 FFFE
    +EC0 00000003
    +PS1 FFF8
    +EC1 00000002
    +
    + + + + +
    +Page0 Status
    +EraseCounter
    +Page1 Status
    +EraseCounter +
    +
    + +

    +

      +
    • aaaa - the same to the parameter bbbb from test 92
    • +
    • bbbbbbbb - the same to the parameter dddddddd from test 92
    • +
    • cccc - the same to the parameter bbbb from test 93
    • +
    • dddddddd - the same to the parameter dddddddd from test 93
    • +
    + +

    Probably it's about one of phone's memory. Parameters +"aaaa" and "cccc" show, whether banks of this memory are free +(fffe) or not (fff8). Parameters "bbbbbbbb" and "dddddddd" show, +how many times they were erased. + +

    Test 91 + +

    In Nokia 9110/9210: + +

    + + + + + + +
    + + + + +
       RESET 
    +   MISC
    +  COUNTERS  
    +
    + + + + +
      Use menu  
    +  to reset
    +    misc
    +  counters
    +
    + +

    By direct enter to this test you can reset counters from +test 90. + +

    In Nokia 7110/8210/6210/6250/3310 this test is different: + +

    + + + + + + +
    + + + + +
    +FL  005FC998
    +E2    0    0
    +PR   30    1
    +OM    0 0000
    +
    +
    +
    + +Help from Nokia 7110: +

    + + + +
    +NextEntry
    +Addr  Length
    +Small   Long
    +ErCnt ErMask
    +
    + +

    and 8210/6210/6250/3310: +

    + + + +
    + NextEntry
    +Addr  Length
    +Small Long  
    +ErCnt ErMask
    +
    +

    +
    + +

    Test 92 + +

    In Nokia 9110/9210 it looks different: + +

    + + + + + + +
    + + + + +

      Headset   
    +    xxx
    +
    + + + + +
     Use menu to
    +   toggle
    +   headset
    +   ON/OFF
    +
    + +

    By direct enter to this test you can enable "headset" profile +normally accesible after connecting headset (of course, +you don't have to have it ;-)) - xxx can have ON or OFF values. +When you will use it, value of counter from test 90 +don't change. I recommend to read +page http://my-communicator.com/, +where you will find more informations about it (for example, another ways +to simulate them)... + +

    + + + + + + +
    Use this test, when you need 'Automatic Answer' function, which allow +to receive incoming call without pressing phone's key. This function is normally +enable in never Nokia phones with connected set only (in older phones - like +Nokia 2110i - it's always visible) +
    + +

    and in Nokia 7110/8210/6210/6250/3310 it looks like follows: + +

    + + + + + + + + + +
    + + + + +
    +EP aaaa bbbb
    +#0      cccc
    +    dddddddd
    +eeeeffffffff +
    +
    + + + + +
    +EP F0F0 FFFE
    +#0      0000
    +    00000003
    +FFFFFFFFFFFF
    +
    +
    +
    +Help from Nokia 7110: +

    + + + +
    +EMark PgStat
    +PgType
    +EraseCount
    +PpInd PpECnt +
    +

    and 8210/6210/6250/3310: +

    + + + +
    +EMark PgStat
    +      PgType
    +  EraseCount
    +PpInd PpECnt +
    +

    +
    + +

    +

      +
    • bbbb - the same to the parameter aaaa from test 90
    • +
    • dddddddd - the same to the parameter bbbbbbbb from test 90
    • +
    + +

    It's info about first bank of one of phone's memories. When it's free (parameter +bbbb=FFFE), parameters "eeeeffffffff" are equal "FFFFFFFFFFFF". +Parameter "dddddddd" shows, how many times bank was erased. + +

    Test 93 + +

    + + + + + + + + + +
    + + + + +
    +EP aaaa bbbb
    +#1      cccc
    +    dddddddd
    +eeeeffffffff +
    +
    + + + + +
    +EP F0F0 FFF8
    +#1      0001
    +    00000002
    +000000000002
    +
    +
    +
    +Help from Nokia 7110: +

    + + + +
    +EMark PgStat
    +PgType
    +EraseCount
    +PpInd PpECnt +
    +

    and 8210/6210/6250/3310: +

    + + + +
    +EMark PgStat
    +      PgType
    +  EraseCount
    +PpInd PpECnt +
    +

    +
    + +

    +

      +
    • bbbb - the same to the parameter cccc from test 90
    • +
    • dddddddd - the same to the parameter dddddddd from test 90
    • +
    + +

    It's info about second bank of one of phone's memories. When it's free (parameter +bbbb=FFFE), parameters "eeeeffffffff" are equal "FFFFFFFFFFFF". +Parameter "dddddddd" shows, how many times bank was erased. + +

    In Nokia 9210 it's different: + +

    + + + + + + +
    + + + + + +
    +  Power on
    + CMT wakeup 
    +  enabled
     
    + +
    + + + + +
    Use menu to 
    +  toogle
    +   state
    +  ON/OFF
    +
    + +

    You can set here (by direct enter), that phone module will be automatically +enabled after each removing battery or software reset (for example, using +Task Manager). + +

    Test 94 + +

    Test in Nokia 3210: + +

    + + + + + + +
    + + + + +
    Vo:  aaa bbb
    +Pins:      c
    +Mode:   dddd
    +State:  eeee
    +
    + + + + +
    V: Req ADC  
    +Pin Status
    +Mode
    +Band Ch
    +
    + +

    +

      +
    • dddd - one of values is AUTO
    • +
    • eeee - example values are GS05, GS09, PS01
    • +
    + +

    and 7110/6210/6250: + +

    + + + + + + +
    + + + + +
    + +IN E111 F000
    +ST      0000
    +        0000
    +        0000 +
    +
    +
    + +

    Help from Nokia 7110: +

    + + + +
    +InExc  InRec
    +      EmuErr
    +      EnvErr
    +      RecEr +
    + +

    and Nokia 6210/6250: +

    + + + +
    +InExc InRec
    +      EmuErr
    +      EnvErr
    +      RecErr +
    +

    +
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + + +
    +DEALLOC:   0
    +EEPROM:    0

      +

    + +
    + + + + +
    +Error
    +counters    

      +

    +
    + +

    Test 95 + +

    In Nokia 3210 + +

    + + + + + + +
    + + + + +
    1:aaa 4:ddd 
    +2:bbb 5:eee
    +3:ccc 6:fff
    +
    + + + + +
    6 lowest
    +values at   
    +shut down
    +
    + +

    and newer versions of firmware in Nokia 6210 (confirmed for 5.17 and higher): + +

    + + + + + + +
    + + + + +
    +GSM pwrcls: 
    +4(2W)
    +Modified:No
    +
    +
    + + + + +
    +Curr Band-3 
    +Pwr-Cls
    +(Watt)
    +Pwr-Cls Mod +
    +
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + + +
    +   0      0
    +   0      0
    +00000000  00
    +00000000  00 +
    + +
    + + + + +
    +OpCod AccVio
    +Aligm PageFa
    +CodeAdd Exec
    +DataAdd CPSR +
    +
    + +

    Test 96 + +

    In Nokia 3210: + +

    + + + + + + +
    + + + + +
    VCX0ADC: aaa
    +TEMP(C):  bb
    +TEMP(K): ccc
    +
    + + + + +
    ADC VALUE
    +RF TEMP(C)
    +RF TEMP(K)  
    +
    + +

    +

      +
    • +ccc - temperature of bb counter (in Kelvin degrees: K = C + 273)
    • +
    + +

    and 7110: + +

    + + + + + + +
    + + + + +
    +Co: 49 A: 279
    +Tu: 49 K: 305
    +Of:  0  C:+32
    +V5:  2 +
    +
    + + + + +
    +Contrast ADC
    +Tuned Kelvin
    +Offset     C
      +
    +
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + + +
    +            

     
      +

    + +
    + + + + +
    +Crash Info  

     
      +

    +
    + +

    Test 98 + +

    + + + + + + +
    + + + + +
    +WR  00000000
    +      0 0000
    +ER  00000000
    +        0000 +
    +
    + +
    +

    Help from Nokia 7110: +

    + + + +
    +WrErrCnt    
    +WrRtry WrSta
    +ErErrCnt
    +ErSta
    +
    + +

    and 6210/6250: +

    + + + +
    +    WrErrCnt
    +WrRtry WrSta
    +    ErErrCnt
    +       ErSta
    +
    +

    +
    + +

    Test 99 + +

    For Nokia 8810: + +

    + + + + + + +
    + + + + +
    +ENTERING   
    +FBUS
    +MODE
    +
    +
    + + + + +
    +Switches    
    +phone
    +to FBUS
    +mode +
    +
    + +

    It's probably for enabling FBUS protocol instead of normal used infrared +connection. I don't have additional info... + +

    And here is for Nokia 7110: + +

    + + + + + + +
    + + + + +
    +Ead:aaaa    
    +Mod:bb
    +MODE: cccc
      +
    +
    + + + + +
    +EAD value   
    +Acc. status
    +FBUS mode
      +
    +
    + +

      +
    • bb - type of connected sound accesories (example values: +HP in normal state, HD with headset - for example, HDC-9P). +In other phones this information is displayed in +test 75
    • +
    • cccc - "FBUS" in connection made during FBUS or MBUS cable from older +Nokia phone (5xxx, 6xxx) or during Irda connection
    • +
    + +

    Very similiar is in Nokia 6210/6250: + +

    + + + + + + + + +
    + + + + +
    +Ead: 03FF   
    +Mod: HP
    +

      +

    +
    + + + + +
    +EAD value   
    +Acc. status
    +

      +

    +
    + +

    In Nokia 9210: + +

    + + + + + + +
    + + + + +
    + +    0    0  
    +    0    0
    +   24   24
    +    0    0 +
    +
    +
    + + + + +
    +CCove PDAdis
    +BatLatch BSI
    +Bmax    Bmin
    +TxOnTime MMC +
    +
    + +

    Test 100 + +

    Test from Nokia 9110: + +

    + + + + + + +
    + + + + +
    a  b 
    +c  ddd    e 

    +
    + + + + +
    UWS DWS
    +T1   N1   T2

    +
    + +

    and 7110/6210/6250: + +

    + + + + + + +
    + + + + +
    +004D63   5.0
    +0018D1   1.6
    +05B1DD  94.0
      +
    +
    + + + + +
    +MemUseT %Use
    +MemRelT %Rel
    +MemUnuT %Unu
      +
    +
    + +

    Information about using phone's memory. I'm not sure exactly, what memory +(when position to phonebook is added, information displayed here is probably about +phonebook memory). + +

    And in Nokia 8210/3310 is different (they're +information about the voice dialling feature): + +

    + + + + + + + + + +
    + + + + +
    +ND  a  b  c
    +    d  e  f
     
    +ggggg hhhhhh +
    +
    + + + + +
    +ND  2  1  0
    +    0  0  0
     
    +02.81 120399 +
    +
    + + + + +
    +ND mm cs ps 
    +   ss po da
     
    +Vers: Date: +
    +
    + +

      +
    • a - number of recorded voice tags in phone. +Maximal value is 8 (for Nokia 8210/3310) or 10 (for Nokia 6210). +It's displayed in test 101 and test 102 +(Nokia 8210/3310) or test 108 and test 109 (Nokia 6210)
    • +
    • c - info about using voice dialling engine: +
        +
      • 0 - it wasn't used after enabling phone
      • +
      • 1 - voice tag was not recognized or Play/Save function were used
      • +
      • 5 - voice tag was recognized
      • +
      • 7 - user was in voice dialling function menu and selected Cancel function
      • +
      • 8 - voice dial in progress (in use)
      • +
      +
    • +
    • ggggg - version of voice dialling engine (?)
    • +
    • hhhhhh - date of releasing voice dialling engine (?)
    • +
    + +

    Values of counters (without "a" parameter) are not saved to EEPROM, when phone is disabled. + +

    WARNING: in some phones (like Nokia 3310), if you want to give phone +to service for upgrading firmware, remove earlier ALL voice tags from its' memory. +In other case memory for them can be decreased for so many voice tags, as were saved in memory +in the moment, when it was given to service (example: +in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible +to save maximal 6 voice tags, counter "a" showed 2, but phone in Menu 1-10 displayed, +that memory for them is empty) + + +

    Test 101 + +

    Test from Nokia 9110/9210: + +

    + + + + + + +
    + + + + +
      aaaaaaaa
    +  bbbbbbbb
    +  cccccccc  
    +  dddddddd
    +
    + + + + +
    TX Frame Cnt
    +RX Frame Cnt
    +TX Retx Cnt
    +RX Tetx Cnt
    +
    + +

    All values are in hexadecimal values. + +

    and 7110/6210/6250: + +

    + + + + + + +
    + + + + +
    +#0  0  #1  0
    +#2  0  #3  0
    +#4  0  #5  0
      +
    +
    + + + + +
    +Pn LoCPn LoC
    +Pn LoCPn LoC
    +Pn LoCPn LoC
      +
    +
    + +

    In Nokia 8210/3310 it's different (information about the recording voice +tags in voice dialling feature): + +

    + + + + + + + + + +
    + + + + +
    +Train
    +   a   b   c
    +dddd    eeee
    +ffff    gggg +
    +
    + + + + +
    +Train
    +   0   0   2
    +   0       0
    +0000    0000 +
    +
    + + + + +
    +Train
    +   r  ii  mm
    +strt    durn
    +minm    maxm +
    +
    + +

      +
    • a - number of voice tags failed to record +(it increases for example, when phone didn't recognize any voice to record)
    • +
    • b - number of recorded tags, when this test was enabled
    • +
    • c - number of recorded tags in phone. Maximal value is 8 (for Nokia 8210/3310) +or 10 (for Nokia 6210). It's displayed in test 100 and +test 102 (Nokia 8210/3310) or +test 107 and test 109 (Nokia 6210).
    • +
    • dddd - how loud was start of recorded voice during last recording +(the higher, the more loud) (?)
    • +
    • eeee - how loud was recorded voice during last recording +(the higher, the more loud) (?)
    • +
    • ffff,gggg - another parameters unique to each recorded voice (hex values ?)
    • +
    + +

    Values of counters (without "c" parameter) are not saved to EEPROM, when +phone is disabled. + +

    WARNING: in some phones (like Nokia 3310), if you want to give phone +to service for upgrading firmware, remove earlier ALL voice tags from its' memory. +In other case memory for them can be decreased for so many voice tags, as were saved in memory +in the moment, when it was given to service (example: +in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible +to save maximal 6 voice tags, counter "c" showed 2, but phone in Menu 1-10 displayed, +that memory for them is empty) + + +

    Test 102 + +

    Test from Nokia 9110: + +

    + + + + + + +
    + + + + +
    aaaaaaaaaa
    +bbbbbbbbbbbb
    +ccccccccccc
    +
    + + + + +
    Data call
    +flow control
    +info
    +
    + +

    From Nokia 9210: + +

    + + + + + + +
    + + + + +
    +Data call   
    +type:
    +PSTN
      +
    +
    + + + + +
    +Data call   
    +type

      +

    +
    + +

    In Nokia 8210/3310 it's different (information about the recognizing voice tags +in voice dialling feature): + +

    + + + + + + + + + +
    + + + + +
    +Recog a    b
    + c dddd eeee
    + f gggg hhhh
    + i jjjj kkkk +
    +
    + + + + +
    +Recog 0    2
    + 0 0000 0000
    + 0 0000 0000
    + 0 0000 0000 +
    +
    + + + + +
    +Recog r   mm
    +i1 scr1 minm
    +i2 penH maxm
    +i3 penL penC +
    +
    + +

    b - number of recorded tags in phone. Maximal value is 8 (for Nokia 8210/3310) +or 10 (for Nokia 6210). It's displayed in test 100 and +test 101 (Nokia 8210/3310) or +test 107 and test 108 (Nokia 6210) + +

    2'nd line - info about last recognized by phone voice tag (c=number of voice tag) +
    3'nd line - info about previous recognized by phone voice tag (f=number of voice tag) +
    4'td line - info about previous recognized by phone voice tag (i=number of voice tag) + +

    Values of counters (without "b" parameter) are not saved to EEPROM, when phone is disabled. + +

    WARNING: in some phones (like Nokia 3310), if you want to give phone +to service for upgrading firmware, remove earlier ALL voice tags from its' memory. +In other case memory for them can be decreased for so many voice tags, as were saved in memory +in the moment, when it was given to service (example: +in Nokia 3310 with two voice tags before upgrading firmware, after it it was possible +to save maximal 6 voice tags, counter "b" showed 2, but phone in Menu 1-10 displayed, +that memory for them is empty) + + +

    and from Nokia 6210/6250: + +

    + + + + + + +
    + + + + +
    +Pn LoCPn LoC
    +Pn LoCPn LoC
    +Pn LoC
      +
    +
    + +

    Test 103 + +

    In Nokia 7110: + +

    + + + + + + +
    + + + + +
    +100    0  00
    +PoolS 01EA6E
    +RsrvS 031386
      +
    +
    + + + + +
    +%FW %BW FrCo
    +PoolSizeLeft
    +Reservations
      +
    +
    + +

    and 6210/6250: + +

    + + + + + + + +
    + + + + +
    +92   8  00  


      +

    +
    + + + + +
    +%FW %BW FrCo


      +

    +
    + +

    From Nokia 9210: + +

    + + + + + + +
    + + + + +
    +Incoming    
    +call type:
    +Speech
      +
    +
    + + + + +
    +Incoming
    +call type   

      +

    +
    + +

    Test 104 + +

    + + + + + + +
    + + + + +
    +LOG 00000000
    +COD 00000000
    +WrA 00000000
    +RdA 00000000 +
    +
    + + + + +
    +ErrorLogAddr
    +ErrorCode
    +WrErrorAddrs
    +RdErrorAddrs +
    +
    + +

    Test 105 + +

    + + + + + + +
    + + + + +
    +WrC 00000000
    +RdC 00000000
    +Group     00
    +Index   0000 +
    +
    + + + + +
    +DevWrErrorCo
    +DevRdErrorCo
    +CallingGroup
    +CallingIndex +
    +
    + +

    Test 106 + +

    In Nokia 7110: + +

    + + + + + + +
    + + + + +
    +RtyDaRd 0000
    +RtyDaWr 0000
    +RtyHeRd 0000
    +RtyHeWr 0000 +
    +
    + + + + +
    +RtyDataRead
    +RtyDataWrite
    +RtyHeadRead
    +RtyHeadWrite +
    +
    + +

    and 6210/6250: + +

    + + + + + + + + +
    + + + + +
    +GT-Call 0000
    +GT-Ok   0000
    +Cl-Task 0000
    +RtyHewr 0000 +
    +
    + + + + +
    +Call To BGOT
    +Success BGOT
    +CleanUpTask
    +RtyHeadWrite +
    +
    + +

    Test 107 + +

    In Nokia 7110: + +

    + + + + + + +
    + + + + +
    +  1  1  1  1
    +LLRS: 000000
    +DchsmEr:0000
      +
    +
    + + + + +
    +PB GB  HB PB
    +LastLostSize
    +DtChsmErrCo
      +
    +
    + +

    In Nokia 6210/6250 contains information about the voice dialling feature: + +

    + + + + + + + + + +
    + + + + +
    +ND  a  b  c
    +    d  e  f
    +ggggg hhhhhh
    +  +
    +
    + + + + +
    +ND  2  1  0
    +    0  0  0
    +02.93 030300
    +  +
    +
    + + + + +
    +ND mm cs ps 
    +   ss po da
    +Ver   Date
    +  +
    +
    + +

      +
    • a - number of recorded voice tags in phone. +Maximal value is 8 (for Nokia 8210/3310) or 10 (for Nokia 6210). +It's displayed in test 101 and test 102 +(Nokia 8210/3310) or test 108 and test 109 (Nokia 6210)
    • +
    • c - info about using voice dialling engine: +
        +
      • 0 - it wasn't used after enabling phone
      • +
      • 1 - voice tag was not recognized or Play/Save function were used
      • +
      • 5 - voice tag was recognized
      • +
      • 7 - user was in voice dialling function menu and selected Cancel function
      • +
      • 8 - voice dial in progress (in use)
      • +
      +
    • +
    • ggggg - version of voice dialling engine (?)
    • +
    • hhhhhh - date of releasing voice dialling engine (?)
    • +
    + +

    Values of counters (without "a" parameter) are not saved to EEPROM, when phone is disabled. + +

    Test 108 + +

    In Nokia 7110: + +

    + + + + + + +
    + + + + +
    +FF:FF FF:FF 
    +FF:FF 00:00
    +FF:FF FF:FF
    +FF:FF FF:FF +
    +
    + + + + +
    +Link&LID 0-1
    +Link&LID 2-3
    +Link&LID 4-5
    +Link&LID 6-7 +
    +
    + +

    In Nokia 6210/6250 it's like test 101 in Nokia 8210... + +

    Test 109 + +

    + + + + +
    + + + + +
    +Recog r   mm
    +i1 scr1 minm
    +i2 penu maxm
    +i3 penl curp +
    +
    + +

    and is connected with recognizing numbers in voice dialing... + +

    Test 110, 111, 112, 113, 114, 115 (115 ONLY IN NOKIA 7110 !) + +

    + + + + + + + + + +
    + + + + +
    + a bbbbccccc
    +dddddd eeeee
    +ffffff ggggg
    + h  i j kkkk +
    +
    + + + + +
    + 0 FFFE  0.0
    +000002   0.0
    +000000 100.0
    + 3  1 0 FFE0 +
    +
    +
    +

    Help from Nokia 7110: +

    + + + +
    +Pn  Sta %Use
    +EraseCn %Rel
    +NextRec %Unu
    +Cu Cl Cc MmC +
    + +

    and 6210/6250: +

    + + + +
    + Pn Sta %Use
    +EraseCn %Rel
    +NextRec %Unu
    +Cu Sl Cc MnC +
    + +

    +
    + +

    Nokia 6210/6250/7110 and newer (new generations) +save ALL settings and datas (phonebook, SMS, ringtones, WAP, etc.) +in flash memory as part of EEPROM. This part is called +PMM (I don't know official meaning - unofficial it can be +"Post Multiple Memory"). These tests show probably info about next banks of PMM: + +

    +

      +
    • a - number of bank
    • +
    • bbbb - shows, if bank is used (fff8 in Nokia 6210/7110) or not +(fff0 in Nokia 6210, fffe in Nokia 7110)
    • +
    • ccccc - how many percent of memory is used
    • +
    • dddddd - erase counter
    • +
    • eeeee - how many percent of memory was free
    • +
    • ffffff - next (free in bank ?) position shown as absolute address
    • +
    • ggggg - how many percent of memory is free (when add to ccccc, you have 100%)
    • +
    + +

    In Nokia 9210 test 110 looks like test 100 in Nokia 6210, +test 111 like test 101 in Nokia 6210, +test 112 is here: + +

    + + + + + + + +
    + + + + +
    +100   0  00
    +PoolS 003CC7
    +RsrvS 0022B6
      +
    +
    + +

    + + + +
    +%FW %BW FrCo
    +PoolSizeLeft
    +Reservations
      +
    + +

    + + +

    Test 117, 118, 119 + + +

    + + + + + + + + + +
    + + + + +
    +Ea bbbb     
    +cccccc

      +

    +
    + + + + +
    +E0 FFF8     
    +00001A

      +

    +
    + +

    + + + +
    +Ptn Sta     
    +EraseCount

      +

    + +

    + +

    Is it info about PMM banks ? + +

    +

      +
    • a - 0, 1 or 2
    • +
    • bbbb - FFFF8 (bank is used ?) or FFFE (bank is empty ?)
    • +
    • cccccc - 00001A or 00001B
    • +
    + +

    Test 120, 121, 122, 123 + +

    Info about PMM in Nokia 9210. These tests look like +tests 110-115, +empty bank is marked as FFFE (like in Nokia 7110) + +

    Test 130 + +

    Test from Nokia 7110: + +

    + + + + + + +
    + + + + +
    +aaa   bbbbbb

     
      +

    +
    + + + + +
    +Slide   Open

     
      +

    +
    + +

      +
    • bbbbbb - how many times phone's sliding cover was opened (hex value)
    • +
    + +

    and 3310: + +

    + + + + + + + + + +
    + + + + +
    +DSP_RST:aaaa
    +CS: bbbbbbbb
    + cc dd ee ff
    +0000    gggg +
    +
    + + + + +
    +DSP_RST:0000
    +CS: 00000000
    + 00 00 00 00
    +0000    0000
    +
    +
    + + + + +
    +DSP resetcnt
    +CStandbyLoss
    + sw as pw st
    +BadPwr insim +
    +
    + +

    +

      +
    • aaaa - number of DSP resets. Displayed also in +test 36
    • +
    + +

    and newer versions of firmware in Nokia 6210 (confirmed for 5.17 and higher): + +

    + + + + + + +
    + + + + +
    + +LRW-1 SW:
    +XXXXXX
    +PN mode
    +NOT DETECTED +
    +
    +
    + + + + +
    +Shows
    +Connectivity
    +Battery
    +information. +
    +
    + +

    Connected with BlueTooth module (in this phone it wasn't available). + +

    Test 131 + +

    + + + + + + + + + +
    + + + + +
    +STO:aaaaaaaa
    +NB:bbLB:cc
    +HOF:dddddddd
    +eeee ZR:ffff +
    +
    + + + + +
    +STO:00000000
    +NB:00LB:00
    +HOF:00000005
    +0000 ZR:05CA +
    +
    +
    + + + + +
    +Stack overfl
    +NoBuf LongBu
    +HandOver Cnt
    +HOfail ZonFa +
    +
    + +

    +

      +
    • dddddddd - sum of handovers from +test 41 (?). Unfortunately, values don't match +always (firmware bug ?) +
    • +
    + +

    Counters are in hexadecimal form... + +

    Test 132 + +

    + + + + + + + + + +
    + + + + +
    +BS: aaaaaaaa
    +MO: bbbbbbbb
    +DRC:cccccccc
    +TIM:dddddddd +
    +
    + + + + +
    +BS: 00000000
    +MO: 00000005
    +DRC:00000000
    +TIM:00000000 +
    +
    +
    + + + + +
    +BS_Call Cnt
    +MO_Call cnt
    +Dropped call
    +Call time +
    +
    + +

    +

      +
    • aaaaaaaa - how many times you received call. Please notice one difference to +MTOK parameter from test 63 - you can't reset +this value from phone's menu
    • +
    • bbbbbbbb - how many times you made successfull outgoing call from your phone. +Please notice one difference to MOOK parameter from test 63 +- you can't reset this value from phone's menu. One interesting thing: this counter +can have bigger value than MOOK from +test 63 (firmware bug ?)
    • +
    • dddddddd - counter shows, how long (in second) there were calls made. +Doesn't work in all firmware versions
    • +
    + +

    Counters are in hexadecimal form... + +

    Test 133 + +

    + + + + + + + + + +
    + + + + +
    +BFu:aaaaaaaa
    +ChC:bbbb  cc
    +StB:
    +NSe: +
    +
    + + + + +
    +BFu:00000002
    +ChC:0004  00
    +StB:
    +NSe: +
    +
    +
    + + + + +
    +FullChargCnt
    +ChaCon Wrong
    +Standby time
    +NoServTimer +
    +
    + +

    +

      +
    • aaaaaaaa - how many times info about full charged battery was displayed +(when it was done correctly - for example FullM info in +test 20...or not - for example MaBFD info +in the same test). +Counter doesn't increase value, when phone is disabled.
    • +
    • bbbb - how many times charger was connected. Counter increases value, when (each +time, when you will do it): +
        +
      1. phone is enabled, you connect charger
      2. +
      3. phone is disabled, you connect changer and enable phone
      4. +
      +Counter doesn't increase, when phone is disabled. +
    • +
    + +

    Test 140 + +

    Test from Nokia 6250: + +

    + + + + + + + + +
    + + + +
    +AVC:  02    
    +SLM:  00
    +VOL:  09
     
    +
    +
    +
    + + + +
    +AVC state
    +SLM  state
    +BIAS  volume
      +
    +
    +
    +
    + +

    Second line changes to 02, when phone measure noise level. + +

    and 8210: + +

    + + + + + + + + +
    + + + +
    +Driver nr:01
    +ManuDeviAddi
    +00B000480000
    +  +
    +
    +
    +
    + + + +
    +Return value
    +from MFS

      + + +

    +
    + +

    Test 240 +
    It doesn't show any values, but: + +

    +

    + +

    Test 241 +
    +NetMonitor menu in Nokia 5110 +Disables netmonitor (it means, deactivates its' menu) ! +To again activate it you will have to use methods described in +How to activate it ? +Probably after using it you will have to disable and enable phone (to +make arrows up/down usable). It's possible too, that these arrows will work +only, when you will deactivate netmonitor from computer... + +

    Test 242 +
    Enables limited netmonitor +(tests from 1 to 19 only). To enable full netmonitor version +you will have to use methods described in +How to activate it ? question +(phone doesn't allow to use it from its' menu +test 243, which normally enable full +netmonitor version - you will be able to enter it in program enabling +netmonitor in computer only). + + +

    Test 243 +
    Enables full netmonitor. + +

    Test 250 +
    Some English descriptions write, that this test cleans information from +test 57 (I didn't notice it). + +

    Test 497 +
    It should deactivate +netmonitor like test 241 (497-256=241). +But some sites (for example, +www.versamart.com/Nokia5110/nokia5110code.shtml) +show, that it could make more: + +

    The tips needs Net Monitor enabled. +
    Be aware that the trick wil remove Netmonitor in some +
    sw versions like v4.73 and v5.04. + +

    +

      +
    1. Laungh the NetMonitor in your Nokia 51xx / 61xx
    2. +
    3. Execute the test number 497
    4. +
    5. Free calling for about 90 sec should now have been activated.
    6. +
    + +

    The trick has not been comfirmed working yet. + +

    For me, it's rather joke... + + +

    Back to the top + + +

    13. You can also use a program...
    +


    + +

    There are programs, which allow to track some of these parameters on computer's screen +(of course, phone must be connected to computer): + +

    +

      +
    • +program created by Andreas Schmidt (www.aschmidt.de/): +shows values displayed by phone in given test and allows to track +BTSes (for example, compare their signal level) +
    • + +
    • +gnokii: it's the name of project (official page - www.gnokii.org) +and software (nevest versions - ftp://ftp.linux.cz/pub/linux/people/pavel_janik/Gnokii/), +which want to be Nokia Cellular Data Suite for Unix and Linux. In this moment +it displays information similiar to these displayed by program described earlier. +
    • + +
    • Logo Manager (http://www.logomanager.co.uk/) +it shows view of netmonitor tests.
    • + +
    • +created by N. Hüttisch (www.nobbi.com/). +It can work with differenet phones (for example, Siemens C10). +When you want to use it with Nokia, Nokia Cellular Data Suite is required +(program communicates using AT commands). When you will unpack it, in file +monitor.ini (it's in archive with program) +change comport parameter (you will give there name of port, where +'Nokia GSM Data' and 'Nokia GSM Voice' modems are installed). And that's all... +
    • + +
    • http://www.club.cz/nokia.monitor/ +- it has the similiar possibilities to program below. + +
    • +Logo Express (http://memsu1.iam.ntu.edu.tw/~jrywu/ +or http://logoexpress.bizland.com/): +shows LAC and CID.
    • + +
    • +from http://members.tripod.com/smssend/gsm_csq.htm +(versions for PSION, DOS and Windows): display chart of signal level +(besed on signal from phone), work probably with Nokia 6xxx phones only. +
    • + +
    • +WinTesla: this commercional service program displays many detailed information +(for details search some description on pages somewhere in Internet) +
    • + +
    • software from +http://members.tripod.de/gsmplanet/psion.html for Psion 5mx (MX 218) and Psion Revo. +It requires additional software supporting IrDa +(see http://www.symbiandevnet.com/downloads/opl/projectopx/scomms.zip) +Works with Nokia 7110, 6210, 8210 and with Siemens S35i, S25. +Options depends on phone.
    • + +
    • +version 1.3 of PC-Locals: there two ways to make it: + +

      +

        +
      1. +in the window, where netmonitor is normally activated, enter number of +test - computer will display everything, what could be displayed by phone +in this test. +
      2. + +
      3. enabling internal program's netmonitor: + +

        +

          +
        1. select menu 8 (Event Trace)
        2. + +
        3. select menu 9 (Load TRC file)
        4. + +
        5. +write name of TRC file (with PC-Locals 1.3 in Internet you can find +nse3_433.trc file for Nokia 6110 firmware 4.33) +correct for phone's model and firmware (or press Enter and select adequate +file). When version from file and phone's version is not the same, computer +will confirm, that you really want to load it (it won't damage phone, +but parameters displayed by program will be different than adequate parameters +from netmonitor in phone). +
        6. + +
        7. +select menu 1 (MCU Events)
        8. + +
        9. +change status of events, which will be tracked in Trace window - you can make +it using gray + on the right side of keyboard (you can disable tracking, enable +normal or extended tracking). If you want to enable netmonitor displayed after +pressing F8 key, you have to enable tracking event CONSTANT_WINDOW_TRA +(change to NORM or EXT).
        10. + +
        11. +select menu 2 (Event Control) and change to On.
        12. + +
        +
      4. + +

        In "Trace" window you will see now tracked events. Network parameters can be +observed after pressing F8. Menu 6 (Break Trace Functions) +breakes tracking events.

      +
    • +
    + + +

    Back to the top + + +

    14. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
    +


    + +

    GSM standards say, that cellular phone always should allow to make +emergency calls (usually 112) - even, when it's was blocked by GSM operator +(it means, when normally you can't use this phone - with this +IMEI - in network) or when it's without +SIM card (eventually it was blocked too). It makes, that after enabling your +Nokia looks for available cellular networks. There are some programs in this +moment (see in You can also use a program...), +which display on computer's screen everything, what could be displayed +by phone in this test. Or I will write it different: when you will connect your +Nokia to computer and use (for example) Pc-Locals 1.3 or program written +by Andreas Schmidt, you can +see some information given normally in "Net Monitor" menu. In some phones +(I checked it with Nokia 5110) you can have access to this menu (generally, +to phone's menu) using gnokii: you should send dtmf sequence to phone +(for example, run gnokii with parameter "--senddtmf sequence", where +sequence consists of some digits). + +

    When you will enter PIN code, you will be "normally" able to use "Net monitor" +menu from phone's keyboard (of course, if it was activated) and all settings +and tests inside (for example, not till then in +test 6 you will see +"preffered" and "forbidden" networks). You can still display tests using described +above programs (it can be usefull, when you want to monitor network state and when +you don't want to loose caller identification or when you want to check kind +of channel after entering PIN code) - they work independent of it, if you +have "Net monitor" menu activated and which test is displayed in phone... + +

    SIM card data can be readed in test 51 +(of course, if your phone supports this test) using these programs +independent of it, if you entered PIN code or not. When you don't have SIM +card in phone, you will see there "ERROR1". + +

    When you use deactived SIM card, you have access to tests in netmonitor +(of course, when its' menu was activated earlier). Network of SIM card is +normally monitored. Phone tries to communicate with it only once after +enabling phone (netmonitor shows, that +CCCH, AGCH, +SDCC (phone refreshes TA then), +BCCH and CCCH channels +are used then - like in normal SIM card). Later it's impossible. It's made againg +after reseting phone. Of course, you don't have name of monitored network +on screen or cellinfo. Interesting thing is, that, for example, +you can normally use BTS test... + + +

    Back to the top + + +

    15. How can I disable NetMonitor ?
    +


    + +

    GSM/DCS/PCS phones: + +

    +NetMonitor menu in Nokia 5110 +Enter 241 test in phone or use one of described in +question How to activate it ? programs +(you enter number 241 there, select "OFF" or something similiar...). + +

    TDMA 800/TDMA 1900 phones: + +

    Enter NAM programming menu (*3001#12345# code - +some sources write, that you have to write security code instead of 12345), set "Field Test display" to "Off"/"Disable" and reboot phone. + + +

    Na pocz±tek + + +

    16. Do I need to disable NetMonitor before sending my phone to the service ?
    +


    + +

    Normally Nokia phones don't have activated netmonitor. When you will give your +handy to service, somebody there can think, that you made some strange things with it +(of course, it isn't any maxim - it depends on concrete service and people, +who will repair your phone)... But I think, that it will be better to save +eventually problems connected with it and deactivate netmonitor's menu before +giving phone to service (I repeat: it isn't sometimes required, but it's better +to make it, when you don't want to have problems)... + + +

    Back to the top + + +

    17. Is it possible to re-activate NetMonitor after disabling it ?
    +


    + +

    YES ! You can activate (and deactivate) +netmonitor's menu repeat infinitely (and once more ;-)) + + +

    Back to the top + + +

    18. Is NetMonitor available in analog Nokia phones ?
    +


    + +

    Yes, it seems, that is available in majority of Nokia phones (working in different +cellular systems). + + +

    Back to the top + + +

    19. Does NetMonitor allow to use phone like broadcast station ?
    +


    + +

    No - if you want to speak without costs with people, which are near to you, +you have to use broadcasting station or walkie-takie. + + +

    Back to the top + + +

    20. I don't have all described tests in my phone. Why ? Can I increase their number ?
    +


    + +

    This FAQ describes tests from DIFFERENT Nokia phones (models). If you want +to increase number of available tests, you can only change your phone to +new, which has more tests (like Nokia 7110) or change it's firmware to never +- sometimes (like in Nokia 5110) you can have ONE :-) new test (firmware +5.04 and never has additionaly test 89). + +

    If you have ONLY 19 first tests, you have activated ONLY standard netmonitor +- enable full (here is more details). + +

    Sometimes you can find concrete copies of phones, where is really a little number of tests. +For example: I read about Nokia 6110 with 5.48 firmware, where it wasn't possible +to activate full netmonitor and where first tests didn't have some parameters +(for example, test 7 was empty). In such "cases" +I can find one explanation only: phone had not "full" firmware donwloaded. User +of such phone should take it to the service to download new firmware... + + +

    Back to the top + + +

    21. Does NetMonitor allow to identify place, where is my interlocutor ?
    +


    + +

    NO. This information are in networks registry, but they're not sent +to your phone. NetMonitor allows however (at least theoretically) +to look into parameters of sound, which is sent from his(her) phone... + + +

    Back to the top + + +

    22. Does NetMonitor allow to identify place, where am I ?
    +


    + +

    It's possible, but not too precisely. Why ? + +

    Phone can read such parameters required to identify (location of) BTSes +like their numbers (see test 11) or +TA (see test 1), +but readed TA couldn't have been distance +from BTS station in straight line (signal can break down) +and continuosly isn't possible finding, in what direction (what corner) +BTS stations are located (which are "seen" by your +phone). So, it's possible to identify area only, where you're (in cities, where +BTSes are located more close, it will be more +precisely). And it can be done by you or your operator... + +

    More info about implementing Mobile Station Location in GSM: +www.willassen.no/msl/ + + +

    Back to the top + + +

    23. What are NetMonitor codes ?
    +


    + +

    Sometimes I read advertisements with requests about NetMonitor codes and I don't know +exactly, what is it... It simple: in Poland (my country) rather only +GSM/DCS phones are used +and you don't have rather some special "secret" codes, which activate NetMonitor... When +you need it's description - it's in this FAQ. + + +

    Back to the top + + +

    24. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
    +


    + +

    I didn't heard about such hardware. Article about it in Polish +Twoja Komorka number 4/2000 (page 18) +was only joke... + + +

    Back to the top + + +

    25. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
    +


    + +

    There are not official information about it. All pages below were created by different people, +which observed work of compiled software: + +

    +

    + +

    On the pages above you will find information about commands connected with +NetMonitor for NSx models (if you don't know model of you phone, +read this page). Always you can use ready and free +ActiveX control (http://www.gertjaap.com) +working with these models too... + + +

    Back to the top + + +

    26. I have non existing networks on the list of forbidden networks...
    +


    + +

    You should remember, that it's possible to change list of forbidden and preffered networks, +for example, using SIM card readers ot some phones (it's possible, this "strange" +position was entered this way). + +

    When we speak about 260-99 network (260-3F position) - it was number of +test network run by the operator of Era GSM network on +the exhibition for Day of Telecommunication in Warsaw (May 2000). It presented +GPRS. + + +

    Back to the top + + +

    27. How to check frequency band (900 or 1800 Mhz), where phone work in this moment ?
    +


    + +

    Everything depends on used channel (for GSM 900 1-124, for GSM 1800 512-885) - +see description of 1'st test... + + +

    Back to the top + + +

    28. Can I use DLR-2/DLR-3 cables for activating netmonitor ?
    +


    + +

    Yes, Logo Manager (http://www.logomanager.co.uk) +works with DLR-3 cable. I don't know software supporting DLR-2... + + +

    Back to the top + + +

    29. Can I activate netmonitor using Init File Editor (Nokia 9110) ?
    +


    + +

    NO, Init File Editor is connected with PDA part of phone, netmonitor not... + + +

    Back to the top + + +

    30. Can I force phone to use one frequency band (900 or 1800 Mhz) only ?
    +


    + +

    Unfortunatelly not (of course, some other phones - for example, Motorola - have such function). +The only thing, you can do: you can force phone to use one selected channel +from concrete frequency (see test 18). +Of course, there are some disadvantiges of it - for example, when phone will lost +signal on this channel, will report, that network not found (in normal situation +it would try to find another channel). + + +

    Back to the top + + +

    31. How to change settings in tests ?
    +


    + + + +
    +Netmonitor menu in Nokia 5110 +Netmonitor menu in Nokia 5110 +Netmonitor menu in Nokia 5110 + +By direct enter to them. How ? You should enter to phone's menu, go into +"Netmonitor/Field Test" menu, enter the number of test, where you want to change +setting and ENTER DIRECTLY INTO IT. It's described more detailed in +question 9. + +

    Sometimes (I write it in such tests) you have to change values in some +positions in phonebook before entering to them (see, for example, +test 18). + +

    + + +

    Back to the top + + +

    32. My phone has very short snandby time - it is possible to see the reason of it ?
    +


    + +

    Here are some possible to check reasons: + +

      +
    • if it depends of configuration of your network - see +test 10 (PRP parameter), +test 12 and +test 13 (DTX; +or test 2 in Nokia 2120/2160/6160)
    • + +
    • general energy consumption (it can depend on +older firmware version or enabled +"Info service") or "Cell info display") functions - +test 23 +(in Nokia 6185/6188 test 45)
    • + +
    • capacity of the battery (test 20; +in Nokia 6185/6188 test 42) +and their age (LiION) (test 23; +in Nokia 6185/6188 test 45)
    • +
    + + +

    Back to the top + + +

    33. Is netmonitor available in English version only ?
    +


    + + + +
    +Menu 9 in Nokia 3210 +Menu 11 in Nokia 3210 + +In Nokia phones only, in some other (for example, Motorola) in different languages... + +Menu 9 in Nokia 3210 +Menu 11 in Nokia 3210 +
    + + +

    Back to the top + + +

    34. Information sources
    +


    + +

    To make this FAQ I used: + +

    +

    + +

    People, which are not on this list, should write to me :-) ! + + +

    Back to the top + + +

    35. Additional information
    +


    + +

    +

    + +

    For links to pages and sources in Polish language see Polish version of this description. + + +

    Back to the top
    + +

    36. Does using/activating netmonitor cost anything ?
    +


    + +

    Your phone HAS TO monitor network state/signal level, etc. to normal work +(and your operator DOESN'T TAKE MONEY for it !). You only can decide, if info +about it will be displayed or not - it depends ONLY on you. The same situation +is with other parameters connected with phone (for example, battery charging). + +

    You can activate netmonitor FREE using methods from +How to activate it ?, eventually pay +somebody for it ANY money ;-)) - he will do it the same thing... + + +

    Back to the top + + +

    37. Does using netmonitor is legall ?
    +


    + +

    Pryvatly I think: I received (free ;-)) software for it and I don't +make anything wrong. So, why I can't observe parameters ? + +

    BTW - different thing is with simlocks (especially, when phone was bought +in promotion and signed agreement is not expired ;-)))) .... + + +

    Back to the top + + +

    38. Which entries on SIM card are used in netmonitor tests ?
    +


    + +

    In new Nokia phones you have to write/read some values changed in some tests +in/from some entries in phonebook on SIM card: + +

    +

      +
    • 31 - test 71 (AUDIO ENHANCEMENT). You should write value 0-65536 there
    • +
    • 32 - test 72 (AUDIO ENHANCEMENT). You should write value 0-65536 there
    • +
    • 33 - test 17 (BTS TEST). You should write +channel number (for GSM 900 1-124, for GSM 1800 512-885) there
    • +
    • 34, 35, 36 - test 52 (reading files from SIM) +and test 53 (writing files to SIM). In entry +34 will be put address of file, 35 its' contenst and in 36 info about +success/failure of reading/writing
    • +
    + +

    Similiar activities in older models (2110i, etc.) were connected with writing values +into (for example) internal phone phonebook in entry 98. + + +

    Back to the top + + +

    39. Can I activate netmonitor in 3310 using soft working with 3210 ?
    +


    + +

    YES - in all new models of Nokia phones you can use the same computer soft. +I advice reading point How to activate it ?... + + +

    Back to the top + + +

    40. After activating netmonitor/BTS TEST my phone can't find network...
    +


    + +

    Nokia phones had always good firmware without too many errors, bugs and mistakes. +Some new models (like 6210) make more problems, but even they're so good, that +simple activating netmonitor menu doesn't make problems. +They can be sometimes visible (like hanging phone) when use concrete tests. +It's good to update firmware of phone then and inform me about problem :-))) +-> I collect firmware bugs in my pages. + +

    Finding and loosing network signal doesn't depend rather on netmonitor - +it's possible, that in concrete place and time you don't have transmitters +of your operator or network is busy. It happens and is rather normal. + +

    Different situation is, when BTS TEST is enabled. Your operator can use +set in test channel on small area only and outside it your phone will not show +network signal. So, disable it then (see description of test 17). + + +

    Back to the top + + +

    41. Netmonitor shows different battery capacity than info on it...
    +


    + +

    Phone takes info about battery capacity from resistor inside. +If it's different than should be, you see such incorrect info in netmonitor. +You can only check (and compare with original), if phone has longer standby/speech time. +If yes, you have bigger battery... + +

    You have to remember about one detail: +In case of LiION battery you will find in netmonitor +(test 20) +the same value as on battery casing, in NiMH batteries +this value can differ even by 200 mAh (and it changes)... + +

    42. NetMonitor in Nokia 6310, 8310,...
    +


    + +

    Problems with activating netmonitor started with DCT-4 generation of Nokia phones. +There are two possibilities: + +

    +

      +
    1. Nokia changed method of activation (if yes, earlier or later it will be +known)
    2. +
    3. in phones for "normal" users firmware is WITHOUT this function (no comments)
    4. +
    + +

    It's very difficult to say something about it without flash dump from +these phones for me + + +

    Back to the top + + +

    +

    [Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

    +
    +
    + +

    Marcin Wiacek (WWW) +
    Last modification: 10 March 2002
    + + + diff --git a/Docs/en_US/gsm/netmon/net_spis.htm b/Docs/en_US/gsm/netmon/net_spis.htm index ad9cf46..92a450b 100644 --- a/Docs/en_US/gsm/netmon/net_spis.htm +++ b/Docs/en_US/gsm/netmon/net_spis.htm @@ -1,136 +1,138 @@ - - - - - - Odsy³acze do testów monitora sieci - - - - - - -

    Wybierz numer testu

    - -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -17 -18 -19 -20 -21 -22 -23 -24 -25 -30 -32 -34 -35 -36 -38 -39 -40 -41 -42 -43 -44 -45 -46 -48 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110-115 -130 -131 -132 -133 -140 -240 -241 -242 -243 -250 -497 - -

    - - + + + + + Links of NetMonitor tests + + + + + + +
    Select test number

    + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +17 +18 +19 +20 +21 +22 +23 +24 +25 +30 +31 +32 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +48 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110-115 +117-119 +120-123 +130 +131 +132 +133 +140 +240 +241 +242 +243 +250 +497 + +

    + + diff --git a/Docs/en_US/gsm/sms/sms.htm b/Docs/en_US/gsm/sms/sms.htm index 5159073..ce45f75 100644 --- a/Docs/en_US/gsm/sms/sms.htm +++ b/Docs/en_US/gsm/sms/sms.htm @@ -1,157 +1,157 @@ - - - - - SMS FAQ - - - - - -

    Main page

    -
    SMS FAQ
    - -


    - -

    What is SMS ?
    -


    - -

    You can send from your phone short text letters. And this is SMS -(Short Messaging System). - -

    What is SMSC ?
    -


    - -

    This is Short Messaging System Centre. - -

    Idea is simple: when you write -your SMS, select recipient(s) and send your SMS, it's send to SMSC. -If you see "Message sent" ot something like that, don't worry. It means, -that your SMS was delivered to SMSC and SMSC try to delivery it to recipient(s). - -

    Why is it done this way ? Let's say, that recipient's phone is disabled. -If it will done this way, that your phone will try to delivery it directly, -it will loose energy during each try and you have to be in network coverage -during it. GSM network makes it easier - not you, but SMSC try to delivery it. -And of course, you can decide, how long it should be done (after it SMS will -deleted). - -

    What SMSC should I use ?
    -


    - -

    The most simple answer is: ask your operator and use its' own SMSC. - -

    But sometimes it's not so simple: it's possible, that SMSC of your operator -CAN'T send SMS to some other network. You should try to use different SMSC then. -But remember: if you will try to use SMSC from different country, you have -to have activated international calls. - -

    Can I use my own SMSC in roaming ?
    -


    - -

    Yes. - -

    Can SMS contains not only text ?
    -


    - -

    Of course. Each SMS contains some bytes filled with contest. Normally they're -filled with chars. But of course you can decide, that they have different meaning -and send +binary data this way too... - -

    In this moment we can classify SMS to: - -

    -

      -
    • 7 bit SMS - you can put each of 127 chars into it
    • -
    • Unicode SMS - you can each of 65550 chars into it
    • -
    • binary data SMS - ringtone, picture, etc.
    • -
    - -

    What is length of SMS ?
    -


    - -

    Each SMS can contains ONLY 140 8 bit chars. When you code it as 7 bit SMS, -you can save 160 chars (you have 140*8 bits inside and they're divided into -7 bits) and when code as Unicode SMS, 70 chars (each char in such SMS contains -of 2 8 bit chars). - -

    It's also possible to put into each sent SMS -special flag, which will mean: this -is first, second, third,... part of SMS. Some phones can display this info -(for example info "Linked: 1/...") or even display each SMS with such flag -as one long... Such SMS are called concatenated or linked. - -

    What is price for sending SMS ?
    -


    - -

    Ask your operator :-) - -

    Generally you pay for EACH SMS with 140 8 bit chars. It means, that -after sending Linked SMS consist of 2 such SMS, you will pay for 2. The similiar -thing is with Picture Images (each of them consist of 3 SMS) and Reminders -from Nokia 3310 (2 SMS). - -

    Something it's free. When ? When you are in roaming and network, you use, -write in logs, that sent SMS, when it was send ONLY over SMSC of this network (remember: -you can you SMSC from your home network). Or when SMSC, you used, gives info -to network about error during sending, but send it correctly ! - -

    What is price for receiving SMS ?
    -


    - -

    In many networks it's free... - -

    What is SMS class ?
    -


    - -

    Each SMS have flag with info, what should be done with it after delivering -to recipients' phone. There are 4 possiblities (classes): - -

      -
    • Class 0: displayed immedietaly after receiving - in display of SMS recipient
    • -
    • Class 1:
    • -
    • Class 2: saved in SIM card of recipient
    • -
    • Class 3:
    • -
    - -

    What is delivery time ?
    -


    - -

    This is the time, during it SMSC will try to delivery your SMS. - -

    What is delivery raport ?
    -


    - -

    You can know, if your SMS was delivered to recipients' phone -(don't misguide it with reading !). It's free. There are two ways -to do it: - -

    -

      -
    1. enable such option in your phone. Of course, it will work -only, when used SMSC will accept this feature
    2. -
    3. write special text on the start of SMS. It can be different for -each SMSC
    4. -
    - -

    What it "Reply via own centre" ?
    -


    - -

    Theoretically, when you send SMS with flag to somebody, it should -be able to send answer over your SMSC. Often it doesn't work (many SMSC -doesn't accept SMS from forbidden networks even with this flag). - -

    I have error, when answer to received SMS
    -


    - -

    -

      -
    • you don't have correct SMSC in phone
    • -
    • person, who sent SMS to you, marked "Reply via own center" option. -Try to send SMS over your own SMSC
    • -
    • you can't send SMS (don't have it activated in your operator)
    • -
    - - - + + + + + SMS FAQ + + + + + +

    Main page

    +
    SMS FAQ
    + +


    + +

    What is SMS ?
    +


    + +

    You can send from your phone short text letters. And this is SMS +(Short Messaging System). + +

    What is SMSC ?
    +


    + +

    This is Short Messaging System Centre. + +

    Idea is simple: when you write +your SMS, select recipient(s) and send your SMS, it's send to SMSC. +If you see "Message sent" ot something like that, don't worry. It means, +that your SMS was delivered to SMSC and SMSC try to delivery it to recipient(s). + +

    Why is it done this way ? Let's say, that recipient's phone is disabled. +If it will done this way, that your phone will try to delivery it directly, +it will loose energy during each try and you have to be in network coverage +during it. GSM network makes it easier - not you, but SMSC try to delivery it. +And of course, you can decide, how long it should be done (after it SMS will +deleted). + +

    What SMSC should I use ?
    +


    + +

    The most simple answer is: ask your operator and use its' own SMSC. + +

    But sometimes it's not so simple: it's possible, that SMSC of your operator +CAN'T send SMS to some other network. You should try to use different SMSC then. +But remember: if you will try to use SMSC from different country, you have +to have activated international calls. + +

    Can I use my own SMSC in roaming ?
    +


    + +

    Yes. + +

    Can SMS contains not only text ?
    +


    + +

    Of course. Each SMS contains some bytes filled with contest. Normally they're +filled with chars. But of course you can decide, that they have different meaning +and send +binary data this way too... + +

    In this moment we can classify SMS to: + +

    +

      +
    • 7 bit SMS - you can put each of 127 chars into it
    • +
    • Unicode SMS - you can each of 65550 chars into it
    • +
    • binary data SMS - ringtone, picture, etc.
    • +
    + +

    What is length of SMS ?
    +


    + +

    Each SMS can contains ONLY 140 8 bit chars. When you code it as 7 bit SMS, +you can save 160 chars (you have 140*8 bits inside and they're divided into +7 bits) and when code as Unicode SMS, 70 chars (each char in such SMS contains +of 2 8 bit chars). + +

    It's also possible to put into each sent SMS +special flag, which will mean: this +is first, second, third,... part of SMS. Some phones can display this info +(for example info "Linked: 1/...") or even display each SMS with such flag +as one long... Such SMS are called concatenated or linked. + +

    What is price for sending SMS ?
    +


    + +

    Ask your operator :-) + +

    Generally you pay for EACH SMS with 140 8 bit chars. It means, that +after sending Linked SMS consist of 2 such SMS, you will pay for 2. The similiar +thing is with Picture Images (each of them consist of 3 SMS) and Reminders +from Nokia 3310 (2 SMS). + +

    Something it's free. When ? When you are in roaming and network, you use, +write in logs, that sent SMS, when it was send ONLY over SMSC of this network (remember: +you can you SMSC from your home network). Or when SMSC, you used, gives info +to network about error during sending, but send it correctly ! + +

    What is price for receiving SMS ?
    +


    + +

    In many networks it's free... + +

    What is SMS class ?
    +


    + +

    Each SMS have flag with info, what should be done with it after delivering +to recipients' phone. There are 4 possiblities (classes): + +

      +
    • Class 0: displayed immedietaly after receiving + in display of SMS recipient
    • +
    • Class 1:
    • +
    • Class 2: saved in SIM card of recipient
    • +
    • Class 3:
    • +
    + +

    What is delivery time ?
    +


    + +

    This is the time, during it SMSC will try to delivery your SMS. + +

    What is delivery raport ?
    +


    + +

    You can know, if your SMS was delivered to recipients' phone +(don't misguide it with reading !). It's free. There are two ways +to do it: + +

    +

      +
    1. enable such option in your phone. Of course, it will work +only, when used SMSC will accept this feature
    2. +
    3. write special text on the start of SMS. It can be different for +each SMSC
    4. +
    + +

    What it "Reply via own centre" ?
    +


    + +

    Theoretically, when you send SMS with flag to somebody, it should +be able to send answer over your SMSC. Often it doesn't work (many SMSC +doesn't accept SMS from forbidden networks even with this flag). + +

    I have error, when answer to received SMS
    +


    + +

    +

      +
    • you don't have correct SMSC in phone
    • +
    • person, who sent SMS to you, marked "Reply via own center" option. +Try to send SMS over your own SMSC
    • +
    • you can't send SMS (don't have it activated in your operator)
    • +
    + + + diff --git a/Docs/en_US/index.htm b/Docs/en_US/index.htm index a45a54b..c86dc7a 100644 --- a/Docs/en_US/index.htm +++ b/Docs/en_US/index.htm @@ -1,52 +1,52 @@ - - - - - GNOKII/XGNOKII HELP - - - - - 
    -GNOKII/XGNOKII HELP - -

    Welcome in our help system. - -

    Gnokii related topics -

    - -

    If you want to know something more about Nokia/GSM mobile phones... -

    - - - - + + + + + GNOKII/XGNOKII HELP + + + + + 
    +GNOKII/XGNOKII HELP + +

    Welcome in our help system. + +

    Gnokii related topics +

    + +

    If you want to know something more about Nokia/GSM mobile phones... +

    + + + + diff --git a/Docs/en_US/styl.css b/Docs/en_US/styl.css index 02b023e..9c64b40 100644 --- a/Docs/en_US/styl.css +++ b/Docs/en_US/styl.css @@ -1,46 +1,46 @@ - - - + + + diff --git a/Docs/examples/gnokiirc b/Docs/examples/gnokiirc index 3106a75..13b4584 100644 --- a/Docs/examples/gnokiirc +++ b/Docs/examples/gnokiirc @@ -12,6 +12,7 @@ connection = fbus bindir = /usr/local/sbin/ synchronizetime = yes ;logfile = mygnokiilog +;use_locking = yes [gnokiid] @@ -130,6 +131,14 @@ path = c:\ # Method 1 is better. When not possible (for example, when have only # compiled binary version), use 2. +# USE_LOCKING +# ----------- +# Under Unix set this to 'yes' if you want gnokii to set and check the +# lock file in /var/lock directory. It avoids potential conflicts with +# other serial port software (eg. minicom). If you have wrong permissions +# for the directory, a warning will be generated. If you don't want a lockfile, +# set it to 'no'. + # EXAMPLES #1.Nokia 5110, fbus cable on "/dev/ttyS1" port with gnokii/xgnokii diff --git a/Docs/examples/test.vcs b/Docs/examples/test.vcs index 140418e..34b952d 100644 --- a/Docs/examples/test.vcs +++ b/Docs/examples/test.vcs @@ -30,11 +30,11 @@ DTSTART:19790806T031000 DALARM:20000806T100000 END:VEVENT -BEGIN:VEVENT -CATEGORIES:MISCELLANEOUS -SUMMARY;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:Wi=C4=85cek Marcin -DTSTART:19991111T235959 -DALARM:20010510T222200 -END:VEVENT +BEGIN:VEVENT +CATEGORIES:MISCELLANEOUS +SUMMARY;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:Wi=C4=85cek Marcin +DTSTART:19991111T235959 +DALARM:20010510T222200 +END:VEVENT END:VCALENDAR diff --git a/Docs/pl_PL/mygnokii.htm b/Docs/pl_PL/mygnokii.htm index 6320858..14f722f 100644 --- a/Docs/pl_PL/mygnokii.htm +++ b/Docs/pl_PL/mygnokii.htm @@ -1,974 +1,974 @@ - - - - - - - - - - - Nadzieja dla Kontestatorów - - - - - -
    Nadzieja dla Kontestatorów - -
    -
    Poni¿szy tekst jest rozwiniêciem artyku³u -opublikowanego na ³amach czasopisma Chip Special zima 2001.
    -
    - -
    - -

    Producenci telefonów komórkowych czêsto do³±czaj± do swoich produktów -oprogramowanie umo¿liwiaj±ce obs³ugê wiêkszo¶ci funkcji aparatu z klawiatury -komputera. K³opoty zaczyn± siê wówczas, je¿eli nasz komputer nie korzysta -z "jedynie s³usznych" systemów operacyjnych: MS Windows lub Mac OS ... -

    U¿ytkownicy systemów BSD i Linux s± w znacznie gorszej sytuacji. Jak -dotychczas ¿aden producent "komórek" nie zdoby³ siê na upublicznienie programów -dla tych systemów. ¯ycie jednak nie znosi pró¿ni. Ponad 3 lata temu pojawi³ -siê Gnokii - projekt umo¿liwiaj±cy obs³ugê telefonów komórkowych Nokia -w systemach uniksowych. - -

    Na pocz±tek

    - -1. Nieco historii
    -


    - -

    Gnokii wywodzi siê z dwóch projektów: pierwszego, zapocz±tkowanego m.in. -przez Francois Dessarta i Hugh Blemingsa w pa¼dzierniku 1998, przeznaczonego -dla modeli 3110 i 8110 oraz innego, rozpoczêtego m.in. Staffana Ulfberga -obs³uguj±cego model 6110. Projekty te po³±czone zosta³y w lutym 1999 roku. -Za³o¿eniem twórców Gnokii by³o opracowanie interfejsu programistycznego -oraz graficznego do obs³ugi najpopularniejszych wówczas modeli telefonów -komórkowych. Tworzona aplikacja mia³ równie¿ umo¿liwiaæ wykonywanie transmisji -danych, nie przewidziano jednak transmisji faksów. -

    Projekt rozwija³ siê bez przeszkód do drugiej po³owy zesz³ego roku (wersja -0.3.3_pre8), Na skutek sporów dotycz±cych przysz³o¶ci pakietu, jego rózwój -zosta³ na pewien czas wstrzymany. Odesz³o wtedy kilka osób, które wnosi³y -wiele zmian. -

    W tym roku prace nad pakietem zosta³y znów rozpoczête. Programi¶ci skupili -siê nad wersj± rozwojow±. Zdecydowano siê przepisaæ tê czê¶æ kodu ¼ród³owego, -która jest odpowiedzialna za komunikacjê programu z telefonem. Zmiany te -maj± pomóc w usuwaniu b³êdów, s± tak¿e potrzebne aby wspó³dzieliæ czê¶ci -kodu u¿ywane przez ró¿ne modele telefonów. Pojawi³y siê równie¿ pierwsze -funkcje do Dancalla 2711 oraz Nokii 2110, 7110 i 62xx. Praca ta nie jest -ci±gle dokoñczona - wersja rozwojowa 0.4.0_pre2 z listopada mo¿e nie zapewniaæ -jeszcze takiego wsparcia do niektórych modeli (np. serii 61xx) jak stabilna -0.3.3 opublikowana we wrze¶niu (do której nie do³±czono wielu partii nowego -kodu). - -

    Na pocz±tek

    - -2. Mygnokii
    -


    - -

    MyGnokii jest obecnie jedyn± konkurencyjn± dystrybucj± dla oryginalnego -Gnokii, Zosta³a stworzona w okresie sporów po opublikowaniu wersji 0.3.3_pre8 -Gnokii. Twórc± tego projektu jest Marcin Wi±cek. -

    Nowa dystrybucja pocz±tkowo zosta³a oparta na Gnokii 0.3.3_pre8 i zawiera³a -wy³±cznie poprawki do oryginalnego kodu. Jednak w ci±gu ostatnich miesiêcy -wprowadzono znaczne zmiany w stosunku zarówno do wersji rozwojowej jak -i stabilnej Gnokii. Ró¿nice te mo¿na scharakteryzowaæ nastêpuj±co: -

      -
    1. -Obs³ugiwane s± praktycznie wszystkie nowe modele Nokii, a liczba dostêpnych -funkcji jest szersza ni¿ w Gnokii. MyGnokii wspó³pracuje z telefonami Nokia -3210, 3310, 8210/8850, 61xx/51xx, 62xx, 7110 oraz 3330. Niestety, trzy -ostatnie modele nie mog± jeszcze wykorzystaæ wszystkich dostêpnych opcji -pakietu. MyGnokii nie zapewnia te¿ du¿ego wsparcia modelom serii 3110/8110 -(tzn. liczba obs³ugiwanych funkcji programu dla tych modeli jest ma³a), -w ogóle nie wspó³pracuje z Noki± 2110.
    2. - -
    3. -W pakiecie wprowadzono pe³n± obs³ugê technologii Smart Messaging. Dziêki -temu MyGnokii nie ma ¿adnych problemów z przesy³aniem czy odbieraniem dzwonków, -obrazków albo wpisów w kalendarzu.
    4. - -
    5. -Dokumentacje obydwu projektów ró¿ni± siê nie tylko form± ale tak¿e tre¶ci±. -Po¶wiêcono jej osobny rozdzia³ w artykule.
    6. - -
    7. -Udostêpniono zestaw standardowych dzwonków i obrazków (m.in. logo startowych) -ró¿nych modeli telefonów Nokia.
    8. - -
    9. -Zmiany kodu ¼ród³owego umo¿liwi³y szybsze dzia³anie programów.
    10. - -
    11. -Dostêpne jest znacznie wiêcej funkcji i opcji w wersji dzia³aj±cej w konsoli -ni¿ w analogicznej aplikacji z gnokii.
    12. - -
    13. -MyGnokii przesta³o byæ oprogramowaniem wy³±cznie dla systemów uniksowych. -Kod ¼ród³owy zawiera od razu w sobie wszystkie poprawki i pliki niezbêdne -do skompilowania w Windows (kompilator Visual C++ 6). Dostêpna jest biblioteka -DLL, któr± mo¿na wykorzystaæ w praktycznie ka¿dym jêzyku programowania -- w pakiecie znajduje siê zreszt± przyk³adowy, wykorzystuj±cy j± interfejs -u¿ytkownika napisany w Delphi. Interfejs mo¿na skompilowaæ u¿ywaj±c bezp³atnego -Delphi 6PE dostêpnego na Chip CD 10/2001 oraz stronie WWW Borlanda. Skompilowana -wersja pakietu i biblioteka DLL dostêpna jest tak¿e na stronie domowej -autora.
    14. - -
    15. -Inna jest struktura kodu odpowiedzialnego za wysy³anie komend do telefonu -i ich odbieranie. Jest ona podobna do tej, która obecna jest w wersji stabilnej -0.3.3 Gnokii.
    16. - -
    17. -Programistów zainteresuj± procedury wspomagaj±ce "podgl±danie" transmisji -prowadzonej z innych programów pomiêdzy komputerem a telefonem (zamiast -prowadziæ reverse engineering programów, których kody ¼ród³owe nie s± dostêpne, -mo¿na pos³u¿yæ siê t± funkcj± programu by uzyskaæ informacje w jaki sposób -inne aplikacje komunikuja siê ze sprzêtem). Oprócz tych funkcji w pakiecie -jest zreszt± zawarta bogata dokumentacja opisuj±ca protoko³y u¿yte w ró¿nych -modelach telefonów.
    18. -
    -W momencie dodawania nowych funkcji do Gnokii, czê¶æ z nich jest bie¿±co -adaptowana na potrzeby MyGnokii. Tak by³o np. z poprawkami dotycz±cymi -transmisji danych czy kodowania znaków na potrzeby SMS. -

    Niestety, ró¿nice pomiêdzy dystrybucjami powoduj±, ¿e czê¶æ oprogramowania -pisanego dla Gnokii mo¿e nie dzia³aæ z MyGnokii. Jest tak przyk³adowo z -modu³em pozwalaj±cym korzystaæ z funkcji pakietu z programów napisanych -w Perlu. - -

    Na pocz±tek

    - -3. Jak telefon z komputerem ...
    -


    - -

    Istniej± 3 sposoby po³±czenia komputera z telefonem komórkowym: kabel, -podczerwieñ i modu³ Bluetooth. Dwa pierwsze postaramy siê nieco przybli¿yæ. -

      -
    1. -Kabel.
    2. - -
      Mo¿e dzia³aæ w co najmniej jednym z trzech trybów: FBUS, MBUS (s± to -wewnêtrzne protoko³y Nokii) albo w trybie komend AT. Ró¿ni± siê one fizycznie -m.in. prêdko¶ci± transmisji oraz u¿ywanymi sygna³ami z³±cza szeregowego. -Kable przeznaczone dla nowszych modeli telefonów wyprowadzaj± ni¿sze napiêcia. -Oznacza to, i¿ do obs³ugi modeli serii 21xx/31xx/81xx mo¿emy potrzebowaæ -innego kabla ni¿ dla modeli serii 3210, 33xx, 62xx czy 7110. -

      Kable mo¿emy zrobiæ korzystaj±c ze schematów ogólnie dostêpnych w Internecie -(np. w Telekomunikacyjnym Serwisie Informacyjnym fkn.pl) ewentualnie skorzystaæ -z tych dodawanych do oryginalnych pakietów Nokii - np. Nokia Cellular Data -Suite. Nie znajdziemy oczywi¶cie w ¿adnym salonie kabla do modeli serii -3210/33xx/8210/8850 dlatego, i¿ oficjalnie modele te nie maj± takich mo¿liwo¶ci -- dlatego równie¿ wtyczek do nich nale¿y szukaæ wy³±cznie np. na gie³dach -elektronicznych albo w sprzeda¿y wysy³kowej. -

      Odpowiedni kabel mo¿emy tak¿e kupiæ - na stronie domowej Marcina Wi±cka -znajdziemy adresy wytwórców. Polecamy kable FBUS/MBUS (mog± byæ opisane -jako DAU9P), bêd± one dzia³aæ praktycznie z ka¿dym nowszym modelem telefonu. -

      Czê¶æ telefonów (jak np.: 62xx, 7110 czy 8210/8850) posiadaj± wbudowany -modem, z którym mo¿na kontaktowaæ siê poprzez zestaw komend AT (zgodny -z standardem Hayes i normami ETSI). Niestety, aby korzystaæ z niego musimy -nabyæ kabel DLR-3P (ewentualnie starsz± wersjê DLR-3). Obs³uguje on tryb -komend AT oraz FBUS. Mo¿na go wykorzystaæ jedynie z Noki± 62xx/7110 - ze -starszymi modelami nie bêdzie dzia³a³ w ogóle, nawet w trybie FBUS ! Kabel -taki trudno jest wykonaæ samodzielnie - posiada bowiem uk³ad scalony zawieraj±cy -unikalne oprogramowanie Nokii. Z tego te¿ powodu mo¿emy co najwy¿ej poleciæ -odwiedzenie strony "Cable Connecting Data" - oprócz schematu elektrycznego -zawiera tak¿e dane dotycz±ce zaprogramowania wspomnianego uk³adu scalonego. -
        -

    3. -Podczerwieñ.
    4. - -
      Czê¶æ telefonów pozwoli skorzystaæ z podczerwieni. Komunikacja taka -mo¿e byæ realizowana przez dwa rodzaje urz±dzeñ. Pierwsze z nich to specjalny -odbiornik, który pod³±czamy do z³±cza podczerwieni dostêpnego w wiêkszo¶ci -wspó³czesnych p³yt g³ównych (przyk³adowy schemat takiego urz±dzenia oraz -wiêcej informacji na ten temat podano w Chipie 12/2000). Musimy tak¿e uaktywniæ -odpowiedni± opcjê w BIOSie. Sposób ten jest najczê¶ciej realizowany w komputerach -przeno¶nych.Drugi rodzaj urz±dzeñ to tzw. dongle. Jest to pude³eczko pod³±czane -zewnêtrznie do portu szeregowego, zawieraj±ce port podczerwieni oraz ca³± -niezbêdn± elektronikê. -

      Równie¿ komunikacja w podczerwieni mo¿e byæ realizowana na dwa sposoby. -Pierwszy z nich jest u¿ywany we wszystkich nowych modelach: serii 8210/8850 -oraz w modelach 62xx i 7110. Jest to tzw. podczerwieñ socketowa - realizowana -przez system operacyjny komputera. Telefon u¿ywa tutaj pewnego znormalizowanego -(dziêki temu wykorzystywanego w wielu ró¿nych urz±dzeniach) formatu danych. -Czê¶æ funkcji potrzebnych programi¶cie jest wbudowywana w system operacyjny. -W systemie znajduj± siê tak¿e sterowniki do ró¿nych modu³ów podczerwieni. -Programy u¿ywaj±ce tego interfejsu mog± zaj±æ siê wy³±cznie interpretacj± -otrzymywanych komend i ich wysy³aniem (poprzez wykorzystywanie odpowiednich -funkcji systemowych). U¿ycie takiej podczerwieni wymaga w³±czenia jej obs³ugi -w j±drze systemu. -

      Realizacja po³±czenia komputera z telefonem opisanym sposobem wymaga -(oprócz portu podczerwieni oczywi¶cie) aby j±dro Linuksa umo¿liwia³o taki -rodzaj komunikacji, czyli musi byæ skompilowane z odpowiedni± opcj±. Po -aktywacji portu podczerwieni w Nokii, Linux powinien znale¼æ modem bêd±cy -modemem telefonu, z którym komputer po³aczony jest podczerwieni±. -

      Drugi sposób dotyczy wszystkich modeli 61xx oraz 8210/8850 (w tych dwóch -ostatnich podczerwieñ uruchamiamy opcj± w³±czaj±c± dwóch graczy w wê¿a, -a nie z menu g³ównego !). Telefon wykorzystuje tu wewnêtrzny format Nokii. -Poniewa¿ ¿aden system operacyjny nie zapewnia jego obs³ugi, w komputerze -musi byæ uruchomiony odpowiedni program (np. MyGnokii lub Gnokii), który -bezpo¶rednio odczyta i zinterpretuje ka¿dy wys³any z telefonu znak, jak -równie¿ prze¶le ka¿d± komendê z komputera po przekszta³ceniu jej do formatu -Nokii. Taki rodzaj komunikacji podczerwonej to tzw. podczerwieñ bezpo¶rednia. -Aby z niej korzystaæ, j±dro Linuksa nie mo¿e byæ skompilowane z opcj± wspomagania -podczerwnieni (poniewa¿ opcja dotyczy tylko podczerwieni socketowej). Warto -zauwa¿yæ, ¿e MyGnokii nie jest w stanie komunikowaæ siê w ten sposób z -Windows NT/2000/XP - w systemach tych oprogramowanie nie mo¿e bowiem bezpo¶rednio -odwo³ywaæ siê do ¿adnego urz±dzenia. -

      Ograniczeniem metody bezpo¶redniej jest tak¿e to, i¿ MyGnokii i Gnokii -nie obs³uguje wszystkich typów dongle. W chwili obecnej mo¿liwa jest tylko -obs³uga urz±dzeñ zgodnych ze standardem Tekram 210. -
        -

    5. -Bluetooth.
    6. - -
      Modu³y Bluetooth, dostêpne obecnie tylko dla Nokii 6210, s± stosunkowo -s³abo rozpowszechnione i autorzy MyGnokii i Gnokii nie maj± ¿adnych informacji -o mo¿liwo¶ci wykorzystania tej metody komunikacji telefonu z komputerem. -Wydaje siê natomiast, i¿ modu³y te s± ci±gle dopracowywane i lepsz± stabilno¶æ -po³±czeñ uzyskamy u¿ywaj±c podczerwieni lub kabla (wskazuj± na to testy -publikowane w popularnych serwisach telekomunikacyjnych).
    - -

    Na pocz±tek

    - -4. Instalacja
    -


    - -

    Kiedy po³±czylismy ju¿ telefon z komputerem, mo¿emy przyst±piæ do instalowania -i konfigurowania MyGnokii. Powinni¶my pobraæ plik zawieraj±cy kod ¼ród³owy -pakiety mygnokii.tar.gz (pakiet nie jest dostepny w formatach rpm czy deb) -wraz z plikiem zawieraj±cym "skóry" telefonów mygnokii_skins.tar.gz . "Skóry" -to nic innego jak piktogramy telefonów wykorzystywane w X-Window. Przystêpujemy -do instalacji. Najpierw rozpakowujemy pakiet zawieraj±cy kod ¼ród³owy -

    tar zxvf mygnokii.tar.gz - -

    Wchodzimy od utworzonego -katalogu mygnokii i konfigurujemy MyGnokii. -

    ./configure --enable-security -

    W podanym przyk³adzie, utworzony pakiet bêdzie móg³ odczytaæ informacje -zwi±zane z zabezpieczeniami telefonu (np.: kod zabezpieczaj±cy). -

    Je¿eli nie zamierzamy korzystaæ z xgnokii ("okienkowej" wersji gnokii) -powinni¶my do polecenia -./configure -do³±czyæ tak¿e parametr --without-x. -Kompilacja xgnokii jest mo¿liwa o ile posiadamy w systemie pliki nag³ówkowe -do tworzenia programów w gtk (pakiety gtk+-devel-1.2.x, glib-devel-1.2.x) -oraz bibliotekê libXpm. Informacje o innych parametrach, które mog± zostaæ -u¿yte przy konfiguracji znajdziemy w pliku mygnokii/Docs/en_US/gnokii/config.htm. -

    W kolejnym kroku kompilujemy pakiet: -

    make -

    Po kompilacji instalujemy pakiet w systemie wykonuj±c (tutaj s± wymagane -uprawnienia roota): -

    make install -

    make install-docs -

    Od tego momentu w systemie powinny istnieæ polecenia -gnokii (wersja -konsolowa), xgnokii (wersja pod X-windows) oraz gnokiid (transmisja -danych w podczerwieni bezpo¶redniej/przez kabel). -

    Pliki ze skórami telefonów do xgnokii rozpakowujemy i kopiujemy -do katalogu xpm utworzonego podczas instalacji xgnokii - -/usr/local/lib/xgnokii/xpm/ -lub -/usr/local/share/xgnokii/xpm/ -zale¿nie -od posiadanej dystrybucji Linuksa. Prawa dostêpu do tych plików ma jedynie -root. Oznacza to, ¿e pozostali u¿ytkownicy systemu nie bêd± mogli w pe³ni -wykorzystaæ mo¿liwo¶ci pakietu. Mo¿emy to jednak zmieniæ, poniewa¿ prawa -dostêpu tych plików nie maj± wp³ywu na bezpieczeñstwo systemu (chmod -a+rw *). -

    W odró¿nieniu od MyGnokii, Gnokii jest udostêpniana tak¿e jako plik -rpm, deb albo w formie CVS. Instalacja z posiadanego kodu ¼ród³owego przebiega -podobnie (nie trzeba jednak instalowaæ "skór" z oddzielnego pliku - s± -w³±czone w pakiecie). Natomiast instalacja pliku w formacie rpm lub deb -przebiega tak samo jak innych pakietów w tych formatach. -

    Objêtnie czy korzystamy z pakietu Gnokii czy MyGnokii polecenia uruchamiaj±ce -aplikacjê (gnokii w trybie tekstowym i xgnokii w trybach -graficznych) s± takie same. - -

    Na pocz±tek

    - -5. Konfiguracja.
    -


    - -

    -

    Przyk³adowy zbiór konfiguracyjny znajdziemy w katalogu mygnokii/Docs/examples -(w -Gnokii bêdzie to katalog gnokii/Docs/sample) pod nazw± gnokiirc. -Kopiujemy go do katalogu domowego pod nazw±..gnokiirc -lub katalogu -/etc -jako gnokiirc. W sekcji -global ustawiamy nastêpuj±ce parametry: -

      -
    • -Port - podajemy port, do którego do³±czony jest telefon. Mo¿e to -byæ/dev/ircommx w przypadku podczerwieni socketowej lub /dev/ttySx -w pozosta³ych (zamiast x wstawiamy numer portu). Nale¿y oczywi¶cie -mieæ prawa dostêpu do wybranego portu (mo¿na je ustawiæ np. przez chmod -u+rwx nazwa_portu)
    • - -
    • -Model - podajemy model telefonu, np. 6210. -Podanie nazwy -konkretnego modelu wymagane jest je¶li u¿ywamy Gnokii. Korzystaj±c z MyGnokii, -mo¿emy te¿ u¿yæ parametru -auto i pakiet przy ka¿dym po³±czeniu bêdzie -próbowa³ automatycznie wykryæ model.
    • - -
    • -Initlength - w przypadku trybu komunikacji FBUS przez kabel albo -przy u¿yciu bezpo¶redniej podczerwieni mo¿na skróciæ czasu synchronizacji -pomiêdzy urz±dzeniami. Nale¿y pamiêtaæ, i¿ zbytnie zmniejszenie tego parametru -mo¿e uniemo¿liwiæ komunikacjê. W wiêkszo¶ci przypadków warto¶æ 30 jest -tutaj w zupe³no¶ci wystarczaj±ca, w razie potrzeby nale¿y j± zwiêkszyæ.
    • - -
    • -Connection - typ po³±czenia. Podawanym parametrem mo¿e byæ irda -(podczerwieñ przez sockety), -infrared (podczerwieñ bezpo¶rednia), -tekram210 -(podczerwieñ bezpo¶rednia przez dongle zgodne ze standardem Tekram 210), -mbus -(tylko w MyGnokii: standard MBUS), serial (w Gnokii) albo fbus -(w MyGnokii) - standard FBUS.
    • - -
    • -Synchronizetime - parametr wystêpuje wy³±cznie w MyGnokii. Przenosi -datê i czas komputera do telefonu przy ka¿dym po³±czeniu (opcja przydatna, -gdy synchronizujemy czas w komputerze z serwerów internetowych). Uwaga: -ustawienie czasu w telefonie mo¿e powodowaæ pewne drobne problemy - je¿eli -w trakcie tej samej sesji (w której ustawili¶my czas) zresetujemy telefon, -czas bêdzie trzeba ustawiæ ponownie.
    • -
    -Je¶li chcemy korzystaæ z programu -gnokiid, ustawienia z sekcji -global -nale¿y powtórzyæ w sekcji -gnokiid. - -

    Na pocz±tek

    - -6. Na konsoli i w X Window
    -


    - -

    Zarówno Gnokii jak i MyGnokii umo¿liwiaj± pracê w trybie tekstowym (w -x-terminalu i na konsoli) jak i w trybach graficznych. Praca w trybie tekstowym -nie jest zbyt wygodna (przyk³ady podane zosta³y w ramce na koñcu tekstu), -pozwala jednak wykorzystaæ w pe³ni wszystkie mo¿liwo¶ci programu. O ile -skompilowali¶my pakiet wraz z xgnokii czyli interfejsem graficznym, -wygodniej jest korzystaæ z MyGnokii w X Window. Mo¿liwo¶ci pakietu s± naprawdê -du¿e. MyGnokii umo¿liwia m. in. obs³ugê smsów, kalendarza (tworzenie i -edycja notatek), ksi±¿ki telefonicznej, tworzenie i przesy³anie logo oraz -melodyjek. Oprogramowanie pozwala tak¿e uruchomiæ monitor sieci - funkcjê -umo¿liwiaj±c± poznanie parametrów pracy sieci GSM i telefonu. - -

    Na pocz±tek

    - -7. Konkurencja
    -


    - -

    MyGnokii oraz Gnokii nie maj± konkurentów w ¶rodowisku uniksowym. Jednak -w systemie MS Windows, konkurencja dla MyGnokii jest silna. Najpopularniejszymi -programami do obs³ugi telefonów komórkowych s± z ca³± pewno¶ci± LogoManager -i Oxygen. LogoManager pozwala u¿ytkownikowi na tworzenie i przesy³anie -logo oraz melodyjek. Umo¿liwia tak¿e edycjê ksi±¿ki telefonicznej oraz -wysy³aæ standardowe smsy, jednak tutaj oferowane mo¿liwo¶ci s± bardzo ograniczone. -Natomiast Oxygen jest ¶wietnym programem do modyfikowania ksi±¿ki telefonicznej, -edycji notatek w kalendarzu, potrafi tak¿e wymieniaæ dane pomiêdzy telefonem -a MS Outlook i Lotus Notes. Podobnie jak LogoManager potrafi tworzyæ loga -nie mniej ustêpuje temu ostatniemu pod wzglêdem wygody obs³ugi. Wielu u¿ytkowników -korzysta z obydwu programów wykorzystuj±c Oxygen do zarz±dzania informacj± -w telefonie, a LogoManager do tworzenia i wysy³ania grafik i d¼wiêków. -Nie jest to zbyt wygodne rozwi±zanie. Najwiêksz± wad± tych programów jest -jednak to, ¿e s± p³atne. Mo¿na oczywi¶cie za darmo pobraæ wersje shareware, -jednak posiadaj± one istotne ograniczenia wp³ywaj±ce na ich funkcjonalno¶æ. -

    MyGnokii ³±czy w sobie zalety wymienionych wy¿ej programów. - wszystkie -mo¿liwo¶ci oferowane przez LogoManager czy Oxygen s± dostêpne tak¿e w MyGnokii. -Jedynym wyj±tkiem jest tu wymiana informacji pomiêdzy MyGnokii a MS Outlook -czy Lotus Notes. Jak ka¿de oprogramowanie dostêpne na licencji GNU, nie -posiada ograniczeñ czasowych czy funkcjonalnych. Co wiêcej, jest udostêpniane -z pe³nym kodem ¼ród³owym i pozwala na wykorzystanie funkcji telefonów we -w³asnych aplikacjach. -

    Nie znaczy to oczywi¶cie, ¿e MyGnokii jest pakietem idealnym. Pracuj±ca -w trybie tekstowym gnokii zosta³a dobrze dopracowana. Jedynie okienkowa -wersja pakietu, xgnokii, mimo ¿e bardzo prosta i intuicyjna w obs³udze, -mo¿e sprawiæ ma³y zawód. Wersja xgnokii zawarta w pakiecie pochodzi -sprzed prawie pó³tora roku i niestety nie jest niestety dokoñczona. Podczas -testów przeprowadzonych przy u¿yciu dwóch telefonów Nokia 6210, stwierdzili¶my -problemy z obs³ug± kalendarza i ksi±¿ki telefonicznej. W przypadku kalendarza -- czê¶æ typów alarmów nie mo¿na by³o ustawiæ. Z kolei ksi±¿ka telefoniczna -nie umo¿liwia³a zapisywania zmian na karcie SIM telefonu, ponadto nie mo¿na -by³o wprowadziæ nowego numeru telefonu. Oczywi¶cie problemy te znika³y, -kiedy korzystano z gnokii w trybie tekstowym, trzeba jednak przyznaæ, -¿e praca w trybie graficznym jest znacznie prostsza i przyjemniejsza ni¿ -w trybie tekstowym. - -

    Na pocz±tek

    - -8. Transmisja danych
    -


    - -

    Transmisja danych realizowana jest przez ró¿ne modele telefonów Nokia -ró¿nymi sposobami. W dodatku, nie w ka¿dym modelu jest ona mo¿liwa. -

    MyGnokii (równie¿ Gnokii) daje u¿ytkownikowi narzêdzie, jakim jest gnokiid, -s³u¿±ce przesy³aniu danych w starszych modelach telefonów. -

    Transmisja danych z u¿yciem -gnokiid jest prowadzona w specyficzny -sposób. Po po³±czeniu siê z telefonem poprzez kabel/podczerwieñ w wersji -bezpo¶redniej gnokiid przetwarza dane z telefonu do postaci komend -AT, które s± przekazywane do innych programów w komputerze. Podobnie w -przypadku otrzymania komendy AT, jest ona przetwarzana do postaci wewnêtrznych -poleceñ Nokii i przesy³ana do telefonu. - -

    Gnokiid mo¿na wykorzystywaæ tylko z telefonami serii 31xx/51xx/61xx/81xx. -Je¿eli chodzi o modele 21xx, brak jest odpowiednich funkcji. Nie zosta³y -one bowiem przeniesione z oryginalnego oprogramowania Nokii (pakietu Nokia -CellWare) z tej prostej przyczyny, i¿ po prostu nie ma chêtnych do wykonania -tego zadania. -

    A co maj± zrobiæ u¿ytkownicy nowszych telefonów ? W przypadku modeli -3210/33xx transmisja danych jest oficjalnie niedostêpna i projektanci MyGnokii -i Gnokii nie posiadaj± ¿adnych informacji, czy funkcja ta faktycznie zosta³a -usuniêta z oprogramowania telefonów, czy te¿ zosta³ zmieniony sposób jej -wywo³ania. -

    Z kolei w telefonach serii 62xx/7110/8210/8850 ¿adne dodatkowe oprogramowanie -nie jest konieczne. Telefony te maj± wbudowane modemy, wystarczy wiêc zakupiæ -kabel (DLR-3P) lub wykorzystaæ porty podczerwieni by transmisja by³a mo¿liwa. -Korzystaj±c z narzêdzi dostepnych w systemie (np.: modemtool w dystrybucji -Red Hat) Linux powinien rozpoznaæ przy³±czony telefon jako modem i zainstalowaæ -go w systemie. Dalsza komunikacja ze sprzêtem odbywa siê tak, jak z tradycyjnym -modemem. -

    Konfiguruj±c dostêp do Internetu musimy tylko pamiêtaæ, ¿e powinni¶my -korzystaæ ze specjalnych numerów dostêpowych naszego operatora sieci GSM -a nie np.: z numeru dostêpowego TPSA. Ten drugi mo¿e byæ bowiem niedostêpny. -Je¿eli natomiast uda siê z nim nawet po³±czyæ, jego u¿ycie bêdzie na pewno -znacznie dro¿sze. - -

    Na pocz±tek

    - -9. Dokumentacja
    -


    - -

    W pakiecie u¿ytkownik znajdzie wyczerpuj±c± dokumentacjê, napisan± w -formacie HTML. W procesie instalacji jest kopiowana z lokalnego katalogu -z plikami ¼ród³owymi do folderu -/usr/local/doc/gnokii. W podkatalogach -znajdziemy tak¿e loga do aparatów 3210, 3310, 6150 oraz 6210 oraz d¼wiêki -(melodyjki), które mo¿emy przes³aæ do telefonu. Znajdziemy tak¿e przyk³adowy -zbiór konfiguracyjny oraz przyk³adowe pliki z danymi do wykorzystania z -ró¿nymi opcjami. -

    Zawarta dokumentacja jest bardzo obszerna. W detalach opisuje procesy -instalacji i konfiguracji (ze szczegó³ami wyja¶nia znaczenie poszczególnych -komend), opisuje w jaki sposób po³aczyæ telefony 6210 i 7110 z komputerem -przez podczerwieñ, wyja¶nia dostêpne polecenia gnokii. Dociekliwi -znajd± bardzo szczegó³owe informacje o uruchomieniu i korzystaniu z monitora -sieci, poradnik jak wykonaæ kabel ³±cz±cy telefon z komputerem, informacje -o zmianach w oprogramowaniu telefonów, kodach i dokumentacjê protoko³ów -transmisji. -

    Niestety, prawie wszystkie informacje podane zosta³y w jêzyku angielskim. - -

    Na pocz±tek

    - -10. Przysz³o¶æ
    -


    - -

    Niestety, nie rysuje siê ona najlepiej. Gnokii i MyGnokii s± rozwijane -oddzielnie przez niewielkie grupy programistów, którzy nie maj± dostêpu -do wszystkich sprzedawanych telefonów. A sami u¿ytkownicy tego oprogramowania -najczê¶ciej nie s± niestety zainteresowani jak±kolwiek pomoc± w ulepszaniu -pakietów czy zg³aszaniu lub usuwaniu b³êdów. -

    Natomiast ci±gle jest wiele do zrobienia: dokoñczenie graficznych interfejsów -u¿ytkownika, stworzenie bardziej wyspecjalizowanych struktur do obs³ugi -niektórych funkcji (przyk³adowo: ulepszenie czê¶ci zwi±zanej z sms), upraszczanie -kodu ¼ród³owego tak, aby implementacja obs³ugi nowych modeli by³a ³atwiejsza, -dodanie funkcji obecnych w innych pakietach "komórkowych", rozszerzenie -obs³ugi komend AT. Na pewno tak¿e sporo bêdzie do zrobienia z nowymi modelami -(np. Noki± 5510, która bêdzie siê ³±czyæ z komputerem przez USB). -

    Bez tego oba pakiety z czasem stan± siê wy³±cznie ciekawostk±. Miejmy -jednak nadziejê, i¿ tak siê nie stanie i znajd± siê programi¶ci oraz u¿ytkownicy, -którzy pomog± w rozszerzaniu opisywanego oprogramowania. Naprawdê nie trzeba -tutaj du¿o: wystarczy znajomo¶æ programowania w Delphi (w celu dokoñczenia -instniej±cego interfejsu graficznego), Visual Basic (mo¿e kto¶ zdecyduje -siê na rozpoczêcie napisania w³asnej wersji okienkowej Logo Managera ?), -C (rozszerzanie ca³o¶ci pakietu lub jego czê¶ci o nowe funkcje oraz usuwanie -b³êdów), C++, pisania programów w GTK (dokoñczenie Xgnokii) albo chocia¿by -znajomo¶æ HTML (opieka nad dokumentacj±). Mile widziana by³aby tak¿e pomoc -zaawansowanych programistów - wszak odkrywanie funkcji nowych modeli jest -fascynuj±c± przygod±, podobnie interesuj±cym wyzwaniem mo¿e byæ kwestia -stworzenia w³asnego sterownika modemu do starszych modeli telefonów do -systemu Windows. Przeszkod± nie powinna byæ tutaj bariera jêzykowa (nie -trzeba znaæ jêzyka angielskiego) - wszak zarówno MyGnokii i Gnokii s± aktywnie -tworzone przez Polaków - m.in. Marcina Wi±cka i Paw³a Kota. Mo¿na siê z -nimi skontaktowaæ pod adresami email podanymi w ramce "Sieæ". - -

    Marcin Wi±cek -
    Ryszard Gabryszewski
    - -

    Na pocz±tek

    - -11. Czy tylko Nokia ?
    -


    - -

    Telefony Nokii s± najbardziej rozpowszechnionymi aparatami komórkowymi -nie tylko w Polsce, tak¿e na ¶wiecie. Wiêcej, nazwa firmy sta³a siê wrêcz -synonimem "komórki". Tak wiêc powstanie pakietów, które umo¿liwiaj± komunikacje -Linuksa z tym typem aparatów nie powinno wydawaæ siê dziwne. -

    Na szczê¶cie posiadacze Ericssonów, Alcateli, Siemensów i innych nie -powinni traciæ nadziei :-) Istnieje tak¿e inny, ciekawy projekt Open Source: -gsmlib. Ma on na celu tworzenie biblioteki i programów w wersji na konsolê -pozwalaj±cych wykonywaæ podstawowe czynno¶ci typu edycja ksi±¿ki telefonicznej -czy smsów w telefonach u¿ywaj±cych komend AT. Podobnie jak MyGnokii mo¿na -go bez problemu kompilowaæ i u¿ywaæ tak¿e w Windows. Gsmlib obecnie rozwija -siê znacznie szybciej ni¿ MyGnokii czy Gnokii. Dzieje siê tak dlatego, -poniewa¿ coraz wiêcej telefonów jest wyposa¿anych w komendy AT. A to oznacza, -¿e popularno¶æ projektu z czasem bêdzie coraz bardziej rosn±æ. - -

    Na pocz±tek

    - -12. MyGnokii w trybie tekstowym
    -


    - -

    Poni¿ej zosta³y podane przyk³ady u¿ycia poleceñ i funkcji MyGnokii w -trybie tekstowym. -

    -Ksi±¿ka telefoniczna

    -gnokii --getmemory SM 1 10 -short > ks-tel.txt -

    Pobiera pierwszych 10 numerów z ksi±¿ki telefonicznej na karcie SIM -i zapisuje w pliku ks-tel.txt. Je¿eli nie podamy parametru -short, -zostanie u¿yty format bardziej czytelny dla u¿ytkownika, ale nie bêdzie -mo¿na u¿yæ opcji --writephonebook z utworzonym plikiem. -

    gnokii --writephonebook < ks-tel.txt -

    Odtwarza ksi±¿kê telefoniczn± z pliku ks-tel.txt. -

    -SMS

    -gnokii --getsms SM 1 -

    Pobiera SMS z karty SIM, pozycja 1. -

    gnokii --sendsms +48601234567 -d --long 200 < file -

    Czyta 200 znaków z pliku file, tworzy z nich tre¶ci SMSów (tutaj bêd± -2 SMSy - pierwszy o d³ugo¶ci 160 znaków) i wysy³a pod numer +48601234567. -W telefonie zostanie zapisany raport dorêczenia. Je¿eli zast±pimy --sendsms -przez --savesms, SMSy zostan± zapisane na karcie SIM. Dodanie parametru ---unicode -spowoduje ich zakodowanie w Unicodzie (wtedy w jednym mo¿e zmie¶ciæ siê -tylko 70 znaków, ale bêd± mog³y to byæ wszystkie znaki ze strony kodowej -w komputerze). -

    gnokii --getsmsc 1 -

    Pobiera pierwszy numer centrum SMS zapisany na karcie SIM. -

    gnokii --renamesmsc 1 "Era GSM" -

    Zmienia nazwê pierwszego centrum SMS na karcie SIM -

    -Czas i data

    -gnokii --setdatetime -

    Ustawia w telefonie czas z komputera. Ustawianie czasu mo¿e byæ wymuszone -tak¿e opcj± synchronizetime w zbiorzegnokiirc. -

    gnokii --setalarm 22 10 -

    Ustawia w telefonie alarm na godzinê 22:10. -

    -Kalendarz

    -gnokii --getcalendarnote 1 3 -v30 -

    Pobiera pierwsz±, drug± i trzeci± notatkê z kalendarza telefonu (w Nokii -33xx jest on okrojony do 10 przypomnieñ - pod tak± nazw± kalendarz dostêpny -jest w menu telefonu). Je¿eli nie podamy parametru -v30, zostanie -u¿yty format bardziej czytelny dla u¿ytkownika, ale nie bêdzie mo¿na u¿yæ -opcji --writecalendarnote i --sendcalendarnote z utworzonym -plikiem. -

    gnokii --sendcalendarnote +48601234567 vcardfile 1 -d -

    Odczytuje 1 pozycjê z pliku -vcardfile i wysy³a pod numer +48601234567 -z raportem dorêczenia (opcja ---getcalendarnote wypisze tre¶æ takiej -notki, je¿eli dodamy prze³±cznik -v30). -

    gnokii --writecalendarnote vcardfile 1 -

    Odczytuje 1 pozycjê z pliku -vcardfile i wpisuje do telefonu (opcja ---getcalendarnote -wypisze tre¶æ takiej notki, je¿eli dodamy prze³±cznik -v30). -

    -Dzwonki

    - -


    gnokii --playringtone ringtonefile -

    Odtwarza plik z dzwonkiem (format mid albo rttl) z pliku ringtonefile -prze g³o¶nik telefonu. -

    gnokii --composer ringtonefile -

    Pokazuje, co i jak nale¿y wpisaæ w kompozytorze dostêpnym w menu np. -Nokii 3210/33xx, aby uzyskaæ dzwonek z pliku ringtonefile (nie wymaga -po³±czenia z telefonem). -

    gnokii --setringtone plik 1 -

    Ustawia dzwonek ze zbioru plik na pozycji 1. -

    gnokii --sendringtone +48602123456 plik -d --scale --profilestyle -

    Wysy³a dzwonek pod numer +48602123456 z raportem dorêczenia. Opcja --scale -jest konieczna do u¿ycia w przypadku b³êdnej interpretacji dzwonków przez -niektóre modele (np. starsze Nokie 3310). Opcja ---profilestyle pozwala -zapisaæ d³ugie dzwonki w 2 SMSach. Bêd± one poprawnie interpretowane wy³±cznie -przez nowsze telefony - np. Nokie 3330. -

    gnokii --setbinringtone plik 1 -

    Je¿eli mamy plik z dzwonkiem w specjalnym formacie binarnym (w MyGnokii -tak s± zapisane wszystkie standardowe dzwonki umieszczone w katalogu -mygnokii/Docs/default/sounds), -przy pomocy tej opcji mo¿na je w niektórych modelach - np. serii 61xx/6210 -- ustawiæ jako dzwonki wgrywane przez u¿ytkownika). -

    gnokii --getringtone plik 1 -

    Pobiera dzwonek z pozycji 1 i zapisuje w zbiorze plik. Dzwonek -zostanie zapisany w formacie binarnym (Nokie 6xxx/3210) albo standardowym -(Nokie 33xx). -

    -WAP

    -gnokii --getwapbookmark 1 -

    Pobiera zak³adkê WAP z pozycji 1. -

    gnokii --sendwapbookmark 1 +48602123456 -d -

    Pobiera zak³adkê WAP z pozycji 1 i wysy³a pod numer +48602123456 (z -raportem dorêczenia). -

    gnokii --getwapsettings 1 -

    Pobiera ustawienia WAP z pozycji 1. -

    -Loga i obrazki

    -gnokii --showbitmap logofile -

    Pokazuje logo z pliku logofile. Dostêpne formaty: bmp (2 kolorowe), -ngg, nol, nlm, nsm. -

    gnokii --getlogo picture plik.nlm 1 -

    Pobiera grafikê (tzw. Picture Image) z pozycji 1 i zapisuje w zbiorze -plik.nlm. -

    gnokii --setlogo picture plik.nlm 1 "tekst" +48602123456 -

    Odczytuje grafikê ze zbioru plik.nlm i zapisuje na pozycji 1 z dodatkowym -tekstem "tekst" i numerem +48602123456. -

    gnokii --sendlogo picture +48602123456 plik.nlm "tekst" -d -

    Wysy³a grafikê pod podany numer z raportem dorêczenia i dodatkowym tekstem -(Uwaga: 1 grafika to 3 SMSy). -

    gnokii --getlogo startup|7110startup|6210startup plik.nlm -

    Pobiera logo startowe (parametry -7110startup lub 6210startup -pozwalaj± pobraæ loga o rozmiarach wy¶wietlaczy Nokii 7110 i 6210) i zapisuje -w pliku plik.nlm. Opcja ---setlogo z takimi samymi parametrami -ustawia logo w telefonie. W nowszych Nokiach 3210 oraz z serii 33xx przed -wgraniem loga, trzeba u¿yæ opcji ---resetphonesettings, która wykasuje -logo animowane (Uwaga: nie bêdzie mo¿na potem do niego powróciæ !). -

    gnokii --getlogo op|7110op plik.nlm -

    Pobiera logo operatora (parametr -7110op pozwala pobraæ logo o -rozmiarach dostêpnych w Nokii 62xx/7110) i zapisuje w pliku plik.nlm. -

    gnokii --setlogo op|7110op plik.nlm -

    Ustawia logo operatora (je¿eli nie podamy nazwy pliku, logo zostanie -wykasowane w telefonie). -

    gnokii --sendlogo op +48602123456 logo.nlm kod_operatora -d -

    Wysy³a logo operatora (uwaga, du¿ych logo znanych z Nokii 62xx/7110 -nie mo¿na przesy³aæ) pod numer +48602123456 z raportem dorêczenia. Logo -bêdzie pokazywane w sieci o kodzie kod_operatora ("260 01" dla Plusa, -"260 02" dla Ery i "260 03" dla Idei). Je¿eli nie podamy numeru odbiorcy, -parametru -d i zamienimy --sendlogo przez ---savelogo, logo -zostanie zapisane na karcie SIM. -

    gnokii --getlogo caller logo.nlm 1 -

    Pobiera logo grupy o numerze 1 i zapisuje w pliku -logo.nlm. Je¿eli -zast±pimy --getlogo przez --setlogo, logo zostanie ustawione -w telefonie. -

    gnokii --setlogo dealer "tekst" -

    Ustawia w telefonie tzw. powitanie dealera - tekst z powitaniem widoczny -po w³±czeniu telefonu, którego nie mo¿na ustawiæ z jego menu. -

    -Inne

    - -


    gnokii --reset soft -

    Resetuje telefon. -

    gnokii --dialvoice +48601123456 -

    Inicjuje po³±czenie g³osowe pod numer +48601123456. -

    gnokii --netmonitor devel -

    W³±cza pe³ne menu monitora sieci w telefonie (opcja ta pozwala dok³adnie -sprawdzaæ stan sieci komórkowej "widzianej" przez telefon oraz pokazuje -dok³adne informacje o samym telefonie, karcie SIM oraz baterii). Szerzej -o tej funkcji mo¿na przeczytaæ na stronie autora artyku³u lub w dokumentacji -MyGnokii. W przypadku niektórych wersji oprogramowania telefonu, niezbêdne -bêdzie wy³±czenie i ponowne w³±czenie aparatu by pojawi³a siê w nim nowa -pozycja w menu. -

    gnokii --identify -

    Pokazuje podstawowe informacje o telefonie - m.in. model i wersjê oprogramowania. -

    gnokii --presskeysequence sequence -

    W telefonie "wciska" kombinacjê klawiszy sequence. -

    gnokii --getsecuritycode SecurityCode -

    Pobiera z telefonu kod zabezpieczaj±cy (SecurityCode). Opcja dostêpna -wy³±cznie, gdy przy wywo³aniu skryptu configure dodano prze³±cznik--enable-security. -

    gnokii --simlock -

    Informacje o simlocku - zabezpieczeniu uniemo¿liwiaj±cym korzystanie -z kart SIM innych ni¿ macierzystego operatora GSM. Blokada taka pojawia -siê najczê¶ciej w telefonach sprzedawanych w promocjach. -

    gnokii --phonetests -

    Wykonuje test telefonu. Krótkie wyja¶nienie do testów REAL TIME CLOCK -BATTERY oraz MCU EEPROM COMPONENT: pierwszy testuje dzia³anie baterii podtrzymuj±cej -datê/czas w telefonie po od³±czeniu baterii g³ównej. Baterii tej nie ma -m.in w Nokiach 3210 i 33xx i wtedy bêdzie on mia³ b³êdny wynik. Nie jest -to jednak uszkodzenie telefonu ! Podobnie we wszystkich nowych modelach -(33xx, 62xx, 7110, 8210/8850 i nowszych) pamiêæ z ustawieniami telefonu -(EEPROM) nie jest w formie oddzielnego uk³adu scalonego i program równie¿ -poka¿e tutaj b³±d. -

    gnokii --displayoutput -

    Pokazuje na ekranie komputera teksty wy¶wietlane przez telefon (dotyczy -serii 51xx/61xx). - -

    Na pocz±tek

    - -13. Porównanie
    -


    - -

    Poni¿sza tabela zbiera informacje dotycz±ce sposobów komunikacji pomiêdzy -telefonem a komputerem. Znak zapytania w komórce oznacza, ¿e dana konfiguracja -nie by³a jeszcze sprawdzana. Natomiast znak x oznacza brak mo¿liwo¶ci wspó³pracy. -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
    Mbus
    -
    -
    Fbus
    -
    -
    Podczerwieñ bezpo¶rednia
    -
    -
    Podczerwieñ socketowa
    -
    -
    Nokia 21xx/9000
    -
    -
    Gnokii
    -
    -
    X
    -
    -
    X
    -
    -
    X
    -
    -
    31xx/81xx
    -
    -
    X
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    X
    -
    -
    X
    -
    -
    3210/33xx
    -
    -
    MyGnokii
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    X
    -
    -
    X
    -
    -
    51xx
    -
    -
    MyGnokii
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    X
    -
    -
    X
    -
    -
    61xx
    -
    -
    MyGnokii
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    MyGnokii -

    Gnokii

    -
    -
    X
    -
    -
    62xx/7110
    -
    -
    MyGnokii
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    X
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    8210/8850
    -
    -
    MyGnokii
    -
    -
    MyGnokii -

    Gnokii

    -
    -
    MyGnokii
    -
    -
    MyGnokii
    -
    -
    9110/9210
    -
    -
    MyGnokii
    -
    -
    X
    -
    -
    ?
    -
    -
    ?
    -
    -
    Nokia Card Phone 2.0
    -
    -
    MyGnokii -

    (czê¶ciowo)

    -
    -
    X
    -
    -
    X
    -
    -
    X
    -
    - -

    Na pocz±tek

    - -14. Sieæ
    -


    - -

    MyGnokii -
    http://marcin-wiacek.topnet.pl -
    marcin-wiacek@topnet.pl -

    Gnokii -
    http://www.gnokii.org -
    ftp://urtica.linuxnews.pl/pub/people/pkot/gnokii/ -
    pkot@linuxnews.pl -

    GSMLib -
    http://www.pxh.de/fs/gsmlib/ -

    Kable -
    http://www.fkn.pl/varia/kable.html -
    http://www.atrox.at/datacable/ -

    Specyfikacje GSM -
    http://www.etsi.org -

    Windows & Nokia -

    Oxygen Phone Manager: http://www.oxygensoftware.com -
    ActiveX dla Nokii: http://www.gertjaap.com/ -
    Logo Manager: http://www.logomanager.co.uk - -

    Na pocz±tek - - - + + + + + + + + + + + Nadzieja dla Kontestatorów + + + + + +

    Nadzieja dla Kontestatorów + +
    +
    Poni¿szy tekst jest rozwiniêciem artyku³u +opublikowanego na ³amach czasopisma Chip Special zima 2001.
    +
    + +
    + +

    Producenci telefonów komórkowych czêsto do³±czaj± do swoich produktów +oprogramowanie umo¿liwiaj±ce obs³ugê wiêkszo¶ci funkcji aparatu z klawiatury +komputera. K³opoty zaczyn± siê wówczas, je¿eli nasz komputer nie korzysta +z "jedynie s³usznych" systemów operacyjnych: MS Windows lub Mac OS ... +

    U¿ytkownicy systemów BSD i Linux s± w znacznie gorszej sytuacji. Jak +dotychczas ¿aden producent "komórek" nie zdoby³ siê na upublicznienie programów +dla tych systemów. ¯ycie jednak nie znosi pró¿ni. Ponad 3 lata temu pojawi³ +siê Gnokii - projekt umo¿liwiaj±cy obs³ugê telefonów komórkowych Nokia +w systemach uniksowych. + +

    Na pocz±tek

    + +1. Nieco historii
    +


    + +

    Gnokii wywodzi siê z dwóch projektów: pierwszego, zapocz±tkowanego m.in. +przez Francois Dessarta i Hugh Blemingsa w pa¼dzierniku 1998, przeznaczonego +dla modeli 3110 i 8110 oraz innego, rozpoczêtego m.in. Staffana Ulfberga +obs³uguj±cego model 6110. Projekty te po³±czone zosta³y w lutym 1999 roku. +Za³o¿eniem twórców Gnokii by³o opracowanie interfejsu programistycznego +oraz graficznego do obs³ugi najpopularniejszych wówczas modeli telefonów +komórkowych. Tworzona aplikacja mia³ równie¿ umo¿liwiaæ wykonywanie transmisji +danych, nie przewidziano jednak transmisji faksów. +

    Projekt rozwija³ siê bez przeszkód do drugiej po³owy zesz³ego roku (wersja +0.3.3_pre8), Na skutek sporów dotycz±cych przysz³o¶ci pakietu, jego rózwój +zosta³ na pewien czas wstrzymany. Odesz³o wtedy kilka osób, które wnosi³y +wiele zmian. +

    W tym roku prace nad pakietem zosta³y znów rozpoczête. Programi¶ci skupili +siê nad wersj± rozwojow±. Zdecydowano siê przepisaæ tê czê¶æ kodu ¼ród³owego, +która jest odpowiedzialna za komunikacjê programu z telefonem. Zmiany te +maj± pomóc w usuwaniu b³êdów, s± tak¿e potrzebne aby wspó³dzieliæ czê¶ci +kodu u¿ywane przez ró¿ne modele telefonów. Pojawi³y siê równie¿ pierwsze +funkcje do Dancalla 2711 oraz Nokii 2110, 7110 i 62xx. Praca ta nie jest +ci±gle dokoñczona - wersja rozwojowa 0.4.0_pre2 z listopada mo¿e nie zapewniaæ +jeszcze takiego wsparcia do niektórych modeli (np. serii 61xx) jak stabilna +0.3.3 opublikowana we wrze¶niu (do której nie do³±czono wielu partii nowego +kodu). + +

    Na pocz±tek

    + +2. Mygnokii
    +


    + +

    MyGnokii jest obecnie jedyn± konkurencyjn± dystrybucj± dla oryginalnego +Gnokii, Zosta³a stworzona w okresie sporów po opublikowaniu wersji 0.3.3_pre8 +Gnokii. Twórc± tego projektu jest Marcin Wi±cek. +

    Nowa dystrybucja pocz±tkowo zosta³a oparta na Gnokii 0.3.3_pre8 i zawiera³a +wy³±cznie poprawki do oryginalnego kodu. Jednak w ci±gu ostatnich miesiêcy +wprowadzono znaczne zmiany w stosunku zarówno do wersji rozwojowej jak +i stabilnej Gnokii. Ró¿nice te mo¿na scharakteryzowaæ nastêpuj±co: +

      +
    1. +Obs³ugiwane s± praktycznie wszystkie nowe modele Nokii, a liczba dostêpnych +funkcji jest szersza ni¿ w Gnokii. MyGnokii wspó³pracuje z telefonami Nokia +3210, 3310, 8210/8850, 61xx/51xx, 62xx, 7110 oraz 3330. Niestety, trzy +ostatnie modele nie mog± jeszcze wykorzystaæ wszystkich dostêpnych opcji +pakietu. MyGnokii nie zapewnia te¿ du¿ego wsparcia modelom serii 3110/8110 +(tzn. liczba obs³ugiwanych funkcji programu dla tych modeli jest ma³a), +w ogóle nie wspó³pracuje z Noki± 2110.
    2. + +
    3. +W pakiecie wprowadzono pe³n± obs³ugê technologii Smart Messaging. Dziêki +temu MyGnokii nie ma ¿adnych problemów z przesy³aniem czy odbieraniem dzwonków, +obrazków albo wpisów w kalendarzu.
    4. + +
    5. +Dokumentacje obydwu projektów ró¿ni± siê nie tylko form± ale tak¿e tre¶ci±. +Po¶wiêcono jej osobny rozdzia³ w artykule.
    6. + +
    7. +Udostêpniono zestaw standardowych dzwonków i obrazków (m.in. logo startowych) +ró¿nych modeli telefonów Nokia.
    8. + +
    9. +Zmiany kodu ¼ród³owego umo¿liwi³y szybsze dzia³anie programów.
    10. + +
    11. +Dostêpne jest znacznie wiêcej funkcji i opcji w wersji dzia³aj±cej w konsoli +ni¿ w analogicznej aplikacji z gnokii.
    12. + +
    13. +MyGnokii przesta³o byæ oprogramowaniem wy³±cznie dla systemów uniksowych. +Kod ¼ród³owy zawiera od razu w sobie wszystkie poprawki i pliki niezbêdne +do skompilowania w Windows (kompilator Visual C++ 6). Dostêpna jest biblioteka +DLL, któr± mo¿na wykorzystaæ w praktycznie ka¿dym jêzyku programowania +- w pakiecie znajduje siê zreszt± przyk³adowy, wykorzystuj±cy j± interfejs +u¿ytkownika napisany w Delphi. Interfejs mo¿na skompilowaæ u¿ywaj±c bezp³atnego +Delphi 6PE dostêpnego na Chip CD 10/2001 oraz stronie WWW Borlanda. Skompilowana +wersja pakietu i biblioteka DLL dostêpna jest tak¿e na stronie domowej +autora.
    14. + +
    15. +Inna jest struktura kodu odpowiedzialnego za wysy³anie komend do telefonu +i ich odbieranie. Jest ona podobna do tej, która obecna jest w wersji stabilnej +0.3.3 Gnokii.
    16. + +
    17. +Programistów zainteresuj± procedury wspomagaj±ce "podgl±danie" transmisji +prowadzonej z innych programów pomiêdzy komputerem a telefonem (zamiast +prowadziæ reverse engineering programów, których kody ¼ród³owe nie s± dostêpne, +mo¿na pos³u¿yæ siê t± funkcj± programu by uzyskaæ informacje w jaki sposób +inne aplikacje komunikuja siê ze sprzêtem). Oprócz tych funkcji w pakiecie +jest zreszt± zawarta bogata dokumentacja opisuj±ca protoko³y u¿yte w ró¿nych +modelach telefonów.
    18. +
    +W momencie dodawania nowych funkcji do Gnokii, czê¶æ z nich jest bie¿±co +adaptowana na potrzeby MyGnokii. Tak by³o np. z poprawkami dotycz±cymi +transmisji danych czy kodowania znaków na potrzeby SMS. +

    Niestety, ró¿nice pomiêdzy dystrybucjami powoduj±, ¿e czê¶æ oprogramowania +pisanego dla Gnokii mo¿e nie dzia³aæ z MyGnokii. Jest tak przyk³adowo z +modu³em pozwalaj±cym korzystaæ z funkcji pakietu z programów napisanych +w Perlu. + +

    Na pocz±tek

    + +3. Jak telefon z komputerem ...
    +


    + +

    Istniej± 3 sposoby po³±czenia komputera z telefonem komórkowym: kabel, +podczerwieñ i modu³ Bluetooth. Dwa pierwsze postaramy siê nieco przybli¿yæ. +

      +
    1. +Kabel.
    2. + +
      Mo¿e dzia³aæ w co najmniej jednym z trzech trybów: FBUS, MBUS (s± to +wewnêtrzne protoko³y Nokii) albo w trybie komend AT. Ró¿ni± siê one fizycznie +m.in. prêdko¶ci± transmisji oraz u¿ywanymi sygna³ami z³±cza szeregowego. +Kable przeznaczone dla nowszych modeli telefonów wyprowadzaj± ni¿sze napiêcia. +Oznacza to, i¿ do obs³ugi modeli serii 21xx/31xx/81xx mo¿emy potrzebowaæ +innego kabla ni¿ dla modeli serii 3210, 33xx, 62xx czy 7110. +

      Kable mo¿emy zrobiæ korzystaj±c ze schematów ogólnie dostêpnych w Internecie +(np. w Telekomunikacyjnym Serwisie Informacyjnym fkn.pl) ewentualnie skorzystaæ +z tych dodawanych do oryginalnych pakietów Nokii - np. Nokia Cellular Data +Suite. Nie znajdziemy oczywi¶cie w ¿adnym salonie kabla do modeli serii +3210/33xx/8210/8850 dlatego, i¿ oficjalnie modele te nie maj± takich mo¿liwo¶ci +- dlatego równie¿ wtyczek do nich nale¿y szukaæ wy³±cznie np. na gie³dach +elektronicznych albo w sprzeda¿y wysy³kowej. +

      Odpowiedni kabel mo¿emy tak¿e kupiæ - na stronie domowej Marcina Wi±cka +znajdziemy adresy wytwórców. Polecamy kable FBUS/MBUS (mog± byæ opisane +jako DAU9P), bêd± one dzia³aæ praktycznie z ka¿dym nowszym modelem telefonu. +

      Czê¶æ telefonów (jak np.: 62xx, 7110 czy 8210/8850) posiadaj± wbudowany +modem, z którym mo¿na kontaktowaæ siê poprzez zestaw komend AT (zgodny +z standardem Hayes i normami ETSI). Niestety, aby korzystaæ z niego musimy +nabyæ kabel DLR-3P (ewentualnie starsz± wersjê DLR-3). Obs³uguje on tryb +komend AT oraz FBUS. Mo¿na go wykorzystaæ jedynie z Noki± 62xx/7110 - ze +starszymi modelami nie bêdzie dzia³a³ w ogóle, nawet w trybie FBUS ! Kabel +taki trudno jest wykonaæ samodzielnie - posiada bowiem uk³ad scalony zawieraj±cy +unikalne oprogramowanie Nokii. Z tego te¿ powodu mo¿emy co najwy¿ej poleciæ +odwiedzenie strony "Cable Connecting Data" - oprócz schematu elektrycznego +zawiera tak¿e dane dotycz±ce zaprogramowania wspomnianego uk³adu scalonego. +
        +

    3. +Podczerwieñ.
    4. + +
      Czê¶æ telefonów pozwoli skorzystaæ z podczerwieni. Komunikacja taka +mo¿e byæ realizowana przez dwa rodzaje urz±dzeñ. Pierwsze z nich to specjalny +odbiornik, który pod³±czamy do z³±cza podczerwieni dostêpnego w wiêkszo¶ci +wspó³czesnych p³yt g³ównych (przyk³adowy schemat takiego urz±dzenia oraz +wiêcej informacji na ten temat podano w Chipie 12/2000). Musimy tak¿e uaktywniæ +odpowiedni± opcjê w BIOSie. Sposób ten jest najczê¶ciej realizowany w komputerach +przeno¶nych.Drugi rodzaj urz±dzeñ to tzw. dongle. Jest to pude³eczko pod³±czane +zewnêtrznie do portu szeregowego, zawieraj±ce port podczerwieni oraz ca³± +niezbêdn± elektronikê. +

      Równie¿ komunikacja w podczerwieni mo¿e byæ realizowana na dwa sposoby. +Pierwszy z nich jest u¿ywany we wszystkich nowych modelach: serii 8210/8850 +oraz w modelach 62xx i 7110. Jest to tzw. podczerwieñ socketowa - realizowana +przez system operacyjny komputera. Telefon u¿ywa tutaj pewnego znormalizowanego +(dziêki temu wykorzystywanego w wielu ró¿nych urz±dzeniach) formatu danych. +Czê¶æ funkcji potrzebnych programi¶cie jest wbudowywana w system operacyjny. +W systemie znajduj± siê tak¿e sterowniki do ró¿nych modu³ów podczerwieni. +Programy u¿ywaj±ce tego interfejsu mog± zaj±æ siê wy³±cznie interpretacj± +otrzymywanych komend i ich wysy³aniem (poprzez wykorzystywanie odpowiednich +funkcji systemowych). U¿ycie takiej podczerwieni wymaga w³±czenia jej obs³ugi +w j±drze systemu. +

      Realizacja po³±czenia komputera z telefonem opisanym sposobem wymaga +(oprócz portu podczerwieni oczywi¶cie) aby j±dro Linuksa umo¿liwia³o taki +rodzaj komunikacji, czyli musi byæ skompilowane z odpowiedni± opcj±. Po +aktywacji portu podczerwieni w Nokii, Linux powinien znale¼æ modem bêd±cy +modemem telefonu, z którym komputer po³aczony jest podczerwieni±. +

      Drugi sposób dotyczy wszystkich modeli 61xx oraz 8210/8850 (w tych dwóch +ostatnich podczerwieñ uruchamiamy opcj± w³±czaj±c± dwóch graczy w wê¿a, +a nie z menu g³ównego !). Telefon wykorzystuje tu wewnêtrzny format Nokii. +Poniewa¿ ¿aden system operacyjny nie zapewnia jego obs³ugi, w komputerze +musi byæ uruchomiony odpowiedni program (np. MyGnokii lub Gnokii), który +bezpo¶rednio odczyta i zinterpretuje ka¿dy wys³any z telefonu znak, jak +równie¿ prze¶le ka¿d± komendê z komputera po przekszta³ceniu jej do formatu +Nokii. Taki rodzaj komunikacji podczerwonej to tzw. podczerwieñ bezpo¶rednia. +Aby z niej korzystaæ, j±dro Linuksa nie mo¿e byæ skompilowane z opcj± wspomagania +podczerwnieni (poniewa¿ opcja dotyczy tylko podczerwieni socketowej). Warto +zauwa¿yæ, ¿e MyGnokii nie jest w stanie komunikowaæ siê w ten sposób z +Windows NT/2000/XP - w systemach tych oprogramowanie nie mo¿e bowiem bezpo¶rednio +odwo³ywaæ siê do ¿adnego urz±dzenia. +

      Ograniczeniem metody bezpo¶redniej jest tak¿e to, i¿ MyGnokii i Gnokii +nie obs³uguje wszystkich typów dongle. W chwili obecnej mo¿liwa jest tylko +obs³uga urz±dzeñ zgodnych ze standardem Tekram 210. +
        +

    5. +Bluetooth.
    6. + +
      Modu³y Bluetooth, dostêpne obecnie tylko dla Nokii 6210, s± stosunkowo +s³abo rozpowszechnione i autorzy MyGnokii i Gnokii nie maj± ¿adnych informacji +o mo¿liwo¶ci wykorzystania tej metody komunikacji telefonu z komputerem. +Wydaje siê natomiast, i¿ modu³y te s± ci±gle dopracowywane i lepsz± stabilno¶æ +po³±czeñ uzyskamy u¿ywaj±c podczerwieni lub kabla (wskazuj± na to testy +publikowane w popularnych serwisach telekomunikacyjnych).
    + +

    Na pocz±tek

    + +4. Instalacja
    +


    + +

    Kiedy po³±czylismy ju¿ telefon z komputerem, mo¿emy przyst±piæ do instalowania +i konfigurowania MyGnokii. Powinni¶my pobraæ plik zawieraj±cy kod ¼ród³owy +pakiety mygnokii.tar.gz (pakiet nie jest dostepny w formatach rpm czy deb) +wraz z plikiem zawieraj±cym "skóry" telefonów mygnokii_skins.tar.gz . "Skóry" +to nic innego jak piktogramy telefonów wykorzystywane w X-Window. Przystêpujemy +do instalacji. Najpierw rozpakowujemy pakiet zawieraj±cy kod ¼ród³owy +

    tar zxvf mygnokii.tar.gz + +

    Wchodzimy od utworzonego +katalogu mygnokii i konfigurujemy MyGnokii. +

    ./configure --enable-security +

    W podanym przyk³adzie, utworzony pakiet bêdzie móg³ odczytaæ informacje +zwi±zane z zabezpieczeniami telefonu (np.: kod zabezpieczaj±cy). +

    Je¿eli nie zamierzamy korzystaæ z xgnokii ("okienkowej" wersji gnokii) +powinni¶my do polecenia +./configure +do³±czyæ tak¿e parametr --without-x. +Kompilacja xgnokii jest mo¿liwa o ile posiadamy w systemie pliki nag³ówkowe +do tworzenia programów w gtk (pakiety gtk+-devel-1.2.x, glib-devel-1.2.x) +oraz bibliotekê libXpm. Informacje o innych parametrach, które mog± zostaæ +u¿yte przy konfiguracji znajdziemy w pliku mygnokii/Docs/en_US/gnokii/config.htm. +

    W kolejnym kroku kompilujemy pakiet: +

    make +

    Po kompilacji instalujemy pakiet w systemie wykonuj±c (tutaj s± wymagane +uprawnienia roota): +

    make install +

    make install-docs +

    Od tego momentu w systemie powinny istnieæ polecenia +gnokii (wersja +konsolowa), xgnokii (wersja pod X-windows) oraz gnokiid (transmisja +danych w podczerwieni bezpo¶redniej/przez kabel). +

    Pliki ze skórami telefonów do xgnokii rozpakowujemy i kopiujemy +do katalogu xpm utworzonego podczas instalacji xgnokii - +/usr/local/lib/xgnokii/xpm/ +lub +/usr/local/share/xgnokii/xpm/ +zale¿nie +od posiadanej dystrybucji Linuksa. Prawa dostêpu do tych plików ma jedynie +root. Oznacza to, ¿e pozostali u¿ytkownicy systemu nie bêd± mogli w pe³ni +wykorzystaæ mo¿liwo¶ci pakietu. Mo¿emy to jednak zmieniæ, poniewa¿ prawa +dostêpu tych plików nie maj± wp³ywu na bezpieczeñstwo systemu (chmod +a+rw *). +

    W odró¿nieniu od MyGnokii, Gnokii jest udostêpniana tak¿e jako plik +rpm, deb albo w formie CVS. Instalacja z posiadanego kodu ¼ród³owego przebiega +podobnie (nie trzeba jednak instalowaæ "skór" z oddzielnego pliku - s± +w³±czone w pakiecie). Natomiast instalacja pliku w formacie rpm lub deb +przebiega tak samo jak innych pakietów w tych formatach. +

    Objêtnie czy korzystamy z pakietu Gnokii czy MyGnokii polecenia uruchamiaj±ce +aplikacjê (gnokii w trybie tekstowym i xgnokii w trybach +graficznych) s± takie same. + +

    Na pocz±tek

    + +5. Konfiguracja.
    +


    + +

    +

    Przyk³adowy zbiór konfiguracyjny znajdziemy w katalogu mygnokii/Docs/examples +(w +Gnokii bêdzie to katalog gnokii/Docs/sample) pod nazw± gnokiirc. +Kopiujemy go do katalogu domowego pod nazw±..gnokiirc +lub katalogu +/etc +jako gnokiirc. W sekcji +global ustawiamy nastêpuj±ce parametry: +

      +
    • +Port - podajemy port, do którego do³±czony jest telefon. Mo¿e to +byæ/dev/ircommx w przypadku podczerwieni socketowej lub /dev/ttySx +w pozosta³ych (zamiast x wstawiamy numer portu). Nale¿y oczywi¶cie +mieæ prawa dostêpu do wybranego portu (mo¿na je ustawiæ np. przez chmod +u+rwx nazwa_portu)
    • + +
    • +Model - podajemy model telefonu, np. 6210. +Podanie nazwy +konkretnego modelu wymagane jest je¶li u¿ywamy Gnokii. Korzystaj±c z MyGnokii, +mo¿emy te¿ u¿yæ parametru +auto i pakiet przy ka¿dym po³±czeniu bêdzie +próbowa³ automatycznie wykryæ model.
    • + +
    • +Initlength - w przypadku trybu komunikacji FBUS przez kabel albo +przy u¿yciu bezpo¶redniej podczerwieni mo¿na skróciæ czasu synchronizacji +pomiêdzy urz±dzeniami. Nale¿y pamiêtaæ, i¿ zbytnie zmniejszenie tego parametru +mo¿e uniemo¿liwiæ komunikacjê. W wiêkszo¶ci przypadków warto¶æ 30 jest +tutaj w zupe³no¶ci wystarczaj±ca, w razie potrzeby nale¿y j± zwiêkszyæ.
    • + +
    • +Connection - typ po³±czenia. Podawanym parametrem mo¿e byæ irda +(podczerwieñ przez sockety), +infrared (podczerwieñ bezpo¶rednia), +tekram210 +(podczerwieñ bezpo¶rednia przez dongle zgodne ze standardem Tekram 210), +mbus +(tylko w MyGnokii: standard MBUS), serial (w Gnokii) albo fbus +(w MyGnokii) - standard FBUS.
    • + +
    • +Synchronizetime - parametr wystêpuje wy³±cznie w MyGnokii. Przenosi +datê i czas komputera do telefonu przy ka¿dym po³±czeniu (opcja przydatna, +gdy synchronizujemy czas w komputerze z serwerów internetowych). Uwaga: +ustawienie czasu w telefonie mo¿e powodowaæ pewne drobne problemy - je¿eli +w trakcie tej samej sesji (w której ustawili¶my czas) zresetujemy telefon, +czas bêdzie trzeba ustawiæ ponownie.
    • +
    +Je¶li chcemy korzystaæ z programu +gnokiid, ustawienia z sekcji +global +nale¿y powtórzyæ w sekcji +gnokiid. + +

    Na pocz±tek

    + +6. Na konsoli i w X Window
    +


    + +

    Zarówno Gnokii jak i MyGnokii umo¿liwiaj± pracê w trybie tekstowym (w +x-terminalu i na konsoli) jak i w trybach graficznych. Praca w trybie tekstowym +nie jest zbyt wygodna (przyk³ady podane zosta³y w ramce na koñcu tekstu), +pozwala jednak wykorzystaæ w pe³ni wszystkie mo¿liwo¶ci programu. O ile +skompilowali¶my pakiet wraz z xgnokii czyli interfejsem graficznym, +wygodniej jest korzystaæ z MyGnokii w X Window. Mo¿liwo¶ci pakietu s± naprawdê +du¿e. MyGnokii umo¿liwia m. in. obs³ugê smsów, kalendarza (tworzenie i +edycja notatek), ksi±¿ki telefonicznej, tworzenie i przesy³anie logo oraz +melodyjek. Oprogramowanie pozwala tak¿e uruchomiæ monitor sieci - funkcjê +umo¿liwiaj±c± poznanie parametrów pracy sieci GSM i telefonu. + +

    Na pocz±tek

    + +7. Konkurencja
    +


    + +

    MyGnokii oraz Gnokii nie maj± konkurentów w ¶rodowisku uniksowym. Jednak +w systemie MS Windows, konkurencja dla MyGnokii jest silna. Najpopularniejszymi +programami do obs³ugi telefonów komórkowych s± z ca³± pewno¶ci± LogoManager +i Oxygen. LogoManager pozwala u¿ytkownikowi na tworzenie i przesy³anie +logo oraz melodyjek. Umo¿liwia tak¿e edycjê ksi±¿ki telefonicznej oraz +wysy³aæ standardowe smsy, jednak tutaj oferowane mo¿liwo¶ci s± bardzo ograniczone. +Natomiast Oxygen jest ¶wietnym programem do modyfikowania ksi±¿ki telefonicznej, +edycji notatek w kalendarzu, potrafi tak¿e wymieniaæ dane pomiêdzy telefonem +a MS Outlook i Lotus Notes. Podobnie jak LogoManager potrafi tworzyæ loga +nie mniej ustêpuje temu ostatniemu pod wzglêdem wygody obs³ugi. Wielu u¿ytkowników +korzysta z obydwu programów wykorzystuj±c Oxygen do zarz±dzania informacj± +w telefonie, a LogoManager do tworzenia i wysy³ania grafik i d¼wiêków. +Nie jest to zbyt wygodne rozwi±zanie. Najwiêksz± wad± tych programów jest +jednak to, ¿e s± p³atne. Mo¿na oczywi¶cie za darmo pobraæ wersje shareware, +jednak posiadaj± one istotne ograniczenia wp³ywaj±ce na ich funkcjonalno¶æ. +

    MyGnokii ³±czy w sobie zalety wymienionych wy¿ej programów. - wszystkie +mo¿liwo¶ci oferowane przez LogoManager czy Oxygen s± dostêpne tak¿e w MyGnokii. +Jedynym wyj±tkiem jest tu wymiana informacji pomiêdzy MyGnokii a MS Outlook +czy Lotus Notes. Jak ka¿de oprogramowanie dostêpne na licencji GNU, nie +posiada ograniczeñ czasowych czy funkcjonalnych. Co wiêcej, jest udostêpniane +z pe³nym kodem ¼ród³owym i pozwala na wykorzystanie funkcji telefonów we +w³asnych aplikacjach. +

    Nie znaczy to oczywi¶cie, ¿e MyGnokii jest pakietem idealnym. Pracuj±ca +w trybie tekstowym gnokii zosta³a dobrze dopracowana. Jedynie okienkowa +wersja pakietu, xgnokii, mimo ¿e bardzo prosta i intuicyjna w obs³udze, +mo¿e sprawiæ ma³y zawód. Wersja xgnokii zawarta w pakiecie pochodzi +sprzed prawie pó³tora roku i niestety nie jest niestety dokoñczona. Podczas +testów przeprowadzonych przy u¿yciu dwóch telefonów Nokia 6210, stwierdzili¶my +problemy z obs³ug± kalendarza i ksi±¿ki telefonicznej. W przypadku kalendarza +- czê¶æ typów alarmów nie mo¿na by³o ustawiæ. Z kolei ksi±¿ka telefoniczna +nie umo¿liwia³a zapisywania zmian na karcie SIM telefonu, ponadto nie mo¿na +by³o wprowadziæ nowego numeru telefonu. Oczywi¶cie problemy te znika³y, +kiedy korzystano z gnokii w trybie tekstowym, trzeba jednak przyznaæ, +¿e praca w trybie graficznym jest znacznie prostsza i przyjemniejsza ni¿ +w trybie tekstowym. + +

    Na pocz±tek

    + +8. Transmisja danych
    +


    + +

    Transmisja danych realizowana jest przez ró¿ne modele telefonów Nokia +ró¿nymi sposobami. W dodatku, nie w ka¿dym modelu jest ona mo¿liwa. +

    MyGnokii (równie¿ Gnokii) daje u¿ytkownikowi narzêdzie, jakim jest gnokiid, +s³u¿±ce przesy³aniu danych w starszych modelach telefonów. +

    Transmisja danych z u¿yciem +gnokiid jest prowadzona w specyficzny +sposób. Po po³±czeniu siê z telefonem poprzez kabel/podczerwieñ w wersji +bezpo¶redniej gnokiid przetwarza dane z telefonu do postaci komend +AT, które s± przekazywane do innych programów w komputerze. Podobnie w +przypadku otrzymania komendy AT, jest ona przetwarzana do postaci wewnêtrznych +poleceñ Nokii i przesy³ana do telefonu. + +

    Gnokiid mo¿na wykorzystywaæ tylko z telefonami serii 31xx/51xx/61xx/81xx. +Je¿eli chodzi o modele 21xx, brak jest odpowiednich funkcji. Nie zosta³y +one bowiem przeniesione z oryginalnego oprogramowania Nokii (pakietu Nokia +CellWare) z tej prostej przyczyny, i¿ po prostu nie ma chêtnych do wykonania +tego zadania. +

    A co maj± zrobiæ u¿ytkownicy nowszych telefonów ? W przypadku modeli +3210/33xx transmisja danych jest oficjalnie niedostêpna i projektanci MyGnokii +i Gnokii nie posiadaj± ¿adnych informacji, czy funkcja ta faktycznie zosta³a +usuniêta z oprogramowania telefonów, czy te¿ zosta³ zmieniony sposób jej +wywo³ania. +

    Z kolei w telefonach serii 62xx/7110/8210/8850 ¿adne dodatkowe oprogramowanie +nie jest konieczne. Telefony te maj± wbudowane modemy, wystarczy wiêc zakupiæ +kabel (DLR-3P) lub wykorzystaæ porty podczerwieni by transmisja by³a mo¿liwa. +Korzystaj±c z narzêdzi dostepnych w systemie (np.: modemtool w dystrybucji +Red Hat) Linux powinien rozpoznaæ przy³±czony telefon jako modem i zainstalowaæ +go w systemie. Dalsza komunikacja ze sprzêtem odbywa siê tak, jak z tradycyjnym +modemem. +

    Konfiguruj±c dostêp do Internetu musimy tylko pamiêtaæ, ¿e powinni¶my +korzystaæ ze specjalnych numerów dostêpowych naszego operatora sieci GSM +a nie np.: z numeru dostêpowego TPSA. Ten drugi mo¿e byæ bowiem niedostêpny. +Je¿eli natomiast uda siê z nim nawet po³±czyæ, jego u¿ycie bêdzie na pewno +znacznie dro¿sze. + +

    Na pocz±tek

    + +9. Dokumentacja
    +


    + +

    W pakiecie u¿ytkownik znajdzie wyczerpuj±c± dokumentacjê, napisan± w +formacie HTML. W procesie instalacji jest kopiowana z lokalnego katalogu +z plikami ¼ród³owymi do folderu +/usr/local/doc/gnokii. W podkatalogach +znajdziemy tak¿e loga do aparatów 3210, 3310, 6150 oraz 6210 oraz d¼wiêki +(melodyjki), które mo¿emy przes³aæ do telefonu. Znajdziemy tak¿e przyk³adowy +zbiór konfiguracyjny oraz przyk³adowe pliki z danymi do wykorzystania z +ró¿nymi opcjami. +

    Zawarta dokumentacja jest bardzo obszerna. W detalach opisuje procesy +instalacji i konfiguracji (ze szczegó³ami wyja¶nia znaczenie poszczególnych +komend), opisuje w jaki sposób po³aczyæ telefony 6210 i 7110 z komputerem +przez podczerwieñ, wyja¶nia dostêpne polecenia gnokii. Dociekliwi +znajd± bardzo szczegó³owe informacje o uruchomieniu i korzystaniu z monitora +sieci, poradnik jak wykonaæ kabel ³±cz±cy telefon z komputerem, informacje +o zmianach w oprogramowaniu telefonów, kodach i dokumentacjê protoko³ów +transmisji. +

    Niestety, prawie wszystkie informacje podane zosta³y w jêzyku angielskim. + +

    Na pocz±tek

    + +10. Przysz³o¶æ
    +


    + +

    Niestety, nie rysuje siê ona najlepiej. Gnokii i MyGnokii s± rozwijane +oddzielnie przez niewielkie grupy programistów, którzy nie maj± dostêpu +do wszystkich sprzedawanych telefonów. A sami u¿ytkownicy tego oprogramowania +najczê¶ciej nie s± niestety zainteresowani jak±kolwiek pomoc± w ulepszaniu +pakietów czy zg³aszaniu lub usuwaniu b³êdów. +

    Natomiast ci±gle jest wiele do zrobienia: dokoñczenie graficznych interfejsów +u¿ytkownika, stworzenie bardziej wyspecjalizowanych struktur do obs³ugi +niektórych funkcji (przyk³adowo: ulepszenie czê¶ci zwi±zanej z sms), upraszczanie +kodu ¼ród³owego tak, aby implementacja obs³ugi nowych modeli by³a ³atwiejsza, +dodanie funkcji obecnych w innych pakietach "komórkowych", rozszerzenie +obs³ugi komend AT. Na pewno tak¿e sporo bêdzie do zrobienia z nowymi modelami +(np. Noki± 5510, która bêdzie siê ³±czyæ z komputerem przez USB). +

    Bez tego oba pakiety z czasem stan± siê wy³±cznie ciekawostk±. Miejmy +jednak nadziejê, i¿ tak siê nie stanie i znajd± siê programi¶ci oraz u¿ytkownicy, +którzy pomog± w rozszerzaniu opisywanego oprogramowania. Naprawdê nie trzeba +tutaj du¿o: wystarczy znajomo¶æ programowania w Delphi (w celu dokoñczenia +instniej±cego interfejsu graficznego), Visual Basic (mo¿e kto¶ zdecyduje +siê na rozpoczêcie napisania w³asnej wersji okienkowej Logo Managera ?), +C (rozszerzanie ca³o¶ci pakietu lub jego czê¶ci o nowe funkcje oraz usuwanie +b³êdów), C++, pisania programów w GTK (dokoñczenie Xgnokii) albo chocia¿by +znajomo¶æ HTML (opieka nad dokumentacj±). Mile widziana by³aby tak¿e pomoc +zaawansowanych programistów - wszak odkrywanie funkcji nowych modeli jest +fascynuj±c± przygod±, podobnie interesuj±cym wyzwaniem mo¿e byæ kwestia +stworzenia w³asnego sterownika modemu do starszych modeli telefonów do +systemu Windows. Przeszkod± nie powinna byæ tutaj bariera jêzykowa (nie +trzeba znaæ jêzyka angielskiego) - wszak zarówno MyGnokii i Gnokii s± aktywnie +tworzone przez Polaków - m.in. Marcina Wi±cka i Paw³a Kota. Mo¿na siê z +nimi skontaktowaæ pod adresami email podanymi w ramce "Sieæ". + +

    Marcin Wi±cek +
    Ryszard Gabryszewski
    + +

    Na pocz±tek

    + +11. Czy tylko Nokia ?
    +


    + +

    Telefony Nokii s± najbardziej rozpowszechnionymi aparatami komórkowymi +nie tylko w Polsce, tak¿e na ¶wiecie. Wiêcej, nazwa firmy sta³a siê wrêcz +synonimem "komórki". Tak wiêc powstanie pakietów, które umo¿liwiaj± komunikacje +Linuksa z tym typem aparatów nie powinno wydawaæ siê dziwne. +

    Na szczê¶cie posiadacze Ericssonów, Alcateli, Siemensów i innych nie +powinni traciæ nadziei :-) Istnieje tak¿e inny, ciekawy projekt Open Source: +gsmlib. Ma on na celu tworzenie biblioteki i programów w wersji na konsolê +pozwalaj±cych wykonywaæ podstawowe czynno¶ci typu edycja ksi±¿ki telefonicznej +czy smsów w telefonach u¿ywaj±cych komend AT. Podobnie jak MyGnokii mo¿na +go bez problemu kompilowaæ i u¿ywaæ tak¿e w Windows. Gsmlib obecnie rozwija +siê znacznie szybciej ni¿ MyGnokii czy Gnokii. Dzieje siê tak dlatego, +poniewa¿ coraz wiêcej telefonów jest wyposa¿anych w komendy AT. A to oznacza, +¿e popularno¶æ projektu z czasem bêdzie coraz bardziej rosn±æ. + +

    Na pocz±tek

    + +12. MyGnokii w trybie tekstowym
    +


    + +

    Poni¿ej zosta³y podane przyk³ady u¿ycia poleceñ i funkcji MyGnokii w +trybie tekstowym. +

    +Ksi±¿ka telefoniczna

    +gnokii --getmemory SM 1 10 -short > ks-tel.txt +

    Pobiera pierwszych 10 numerów z ksi±¿ki telefonicznej na karcie SIM +i zapisuje w pliku ks-tel.txt. Je¿eli nie podamy parametru -short, +zostanie u¿yty format bardziej czytelny dla u¿ytkownika, ale nie bêdzie +mo¿na u¿yæ opcji --writephonebook z utworzonym plikiem. +

    gnokii --writephonebook < ks-tel.txt +

    Odtwarza ksi±¿kê telefoniczn± z pliku ks-tel.txt. +

    +SMS

    +gnokii --getsms SM 1 +

    Pobiera SMS z karty SIM, pozycja 1. +

    gnokii --sendsms +48601234567 -d --long 200 < file +

    Czyta 200 znaków z pliku file, tworzy z nich tre¶ci SMSów (tutaj bêd± +2 SMSy - pierwszy o d³ugo¶ci 160 znaków) i wysy³a pod numer +48601234567. +W telefonie zostanie zapisany raport dorêczenia. Je¿eli zast±pimy --sendsms +przez --savesms, SMSy zostan± zapisane na karcie SIM. Dodanie parametru +--unicode +spowoduje ich zakodowanie w Unicodzie (wtedy w jednym mo¿e zmie¶ciæ siê +tylko 70 znaków, ale bêd± mog³y to byæ wszystkie znaki ze strony kodowej +w komputerze). +

    gnokii --getsmsc 1 +

    Pobiera pierwszy numer centrum SMS zapisany na karcie SIM. +

    gnokii --renamesmsc 1 "Era GSM" +

    Zmienia nazwê pierwszego centrum SMS na karcie SIM +

    +Czas i data

    +gnokii --setdatetime +

    Ustawia w telefonie czas z komputera. Ustawianie czasu mo¿e byæ wymuszone +tak¿e opcj± synchronizetime w zbiorzegnokiirc. +

    gnokii --setalarm 22 10 +

    Ustawia w telefonie alarm na godzinê 22:10. +

    +Kalendarz

    +gnokii --getcalendarnote 1 3 -v30 +

    Pobiera pierwsz±, drug± i trzeci± notatkê z kalendarza telefonu (w Nokii +33xx jest on okrojony do 10 przypomnieñ - pod tak± nazw± kalendarz dostêpny +jest w menu telefonu). Je¿eli nie podamy parametru -v30, zostanie +u¿yty format bardziej czytelny dla u¿ytkownika, ale nie bêdzie mo¿na u¿yæ +opcji --writecalendarnote i --sendcalendarnote z utworzonym +plikiem. +

    gnokii --sendcalendarnote +48601234567 vcardfile 1 -d +

    Odczytuje 1 pozycjê z pliku +vcardfile i wysy³a pod numer +48601234567 +z raportem dorêczenia (opcja +--getcalendarnote wypisze tre¶æ takiej +notki, je¿eli dodamy prze³±cznik -v30). +

    gnokii --writecalendarnote vcardfile 1 +

    Odczytuje 1 pozycjê z pliku +vcardfile i wpisuje do telefonu (opcja +--getcalendarnote +wypisze tre¶æ takiej notki, je¿eli dodamy prze³±cznik -v30). +

    +Dzwonki

    + +


    gnokii --playringtone ringtonefile +

    Odtwarza plik z dzwonkiem (format mid albo rttl) z pliku ringtonefile +prze g³o¶nik telefonu. +

    gnokii --composer ringtonefile +

    Pokazuje, co i jak nale¿y wpisaæ w kompozytorze dostêpnym w menu np. +Nokii 3210/33xx, aby uzyskaæ dzwonek z pliku ringtonefile (nie wymaga +po³±czenia z telefonem). +

    gnokii --setringtone plik 1 +

    Ustawia dzwonek ze zbioru plik na pozycji 1. +

    gnokii --sendringtone +48602123456 plik -d --scale --profilestyle +

    Wysy³a dzwonek pod numer +48602123456 z raportem dorêczenia. Opcja --scale +jest konieczna do u¿ycia w przypadku b³êdnej interpretacji dzwonków przez +niektóre modele (np. starsze Nokie 3310). Opcja +--profilestyle pozwala +zapisaæ d³ugie dzwonki w 2 SMSach. Bêd± one poprawnie interpretowane wy³±cznie +przez nowsze telefony - np. Nokie 3330. +

    gnokii --setbinringtone plik 1 +

    Je¿eli mamy plik z dzwonkiem w specjalnym formacie binarnym (w MyGnokii +tak s± zapisane wszystkie standardowe dzwonki umieszczone w katalogu +mygnokii/Docs/default/sounds), +przy pomocy tej opcji mo¿na je w niektórych modelach - np. serii 61xx/6210 +- ustawiæ jako dzwonki wgrywane przez u¿ytkownika). +

    gnokii --getringtone plik 1 +

    Pobiera dzwonek z pozycji 1 i zapisuje w zbiorze plik. Dzwonek +zostanie zapisany w formacie binarnym (Nokie 6xxx/3210) albo standardowym +(Nokie 33xx). +

    +WAP

    +gnokii --getwapbookmark 1 +

    Pobiera zak³adkê WAP z pozycji 1. +

    gnokii --sendwapbookmark 1 +48602123456 -d +

    Pobiera zak³adkê WAP z pozycji 1 i wysy³a pod numer +48602123456 (z +raportem dorêczenia). +

    gnokii --getwapsettings 1 +

    Pobiera ustawienia WAP z pozycji 1. +

    +Loga i obrazki

    +gnokii --showbitmap logofile +

    Pokazuje logo z pliku logofile. Dostêpne formaty: bmp (2 kolorowe), +ngg, nol, nlm, nsm. +

    gnokii --getlogo picture plik.nlm 1 +

    Pobiera grafikê (tzw. Picture Image) z pozycji 1 i zapisuje w zbiorze +plik.nlm. +

    gnokii --setlogo picture plik.nlm 1 "tekst" +48602123456 +

    Odczytuje grafikê ze zbioru plik.nlm i zapisuje na pozycji 1 z dodatkowym +tekstem "tekst" i numerem +48602123456. +

    gnokii --sendlogo picture +48602123456 plik.nlm "tekst" -d +

    Wysy³a grafikê pod podany numer z raportem dorêczenia i dodatkowym tekstem +(Uwaga: 1 grafika to 3 SMSy). +

    gnokii --getlogo startup|7110startup|6210startup plik.nlm +

    Pobiera logo startowe (parametry +7110startup lub 6210startup +pozwalaj± pobraæ loga o rozmiarach wy¶wietlaczy Nokii 7110 i 6210) i zapisuje +w pliku plik.nlm. Opcja +--setlogo z takimi samymi parametrami +ustawia logo w telefonie. W nowszych Nokiach 3210 oraz z serii 33xx przed +wgraniem loga, trzeba u¿yæ opcji +--resetphonesettings, która wykasuje +logo animowane (Uwaga: nie bêdzie mo¿na potem do niego powróciæ !). +

    gnokii --getlogo op|7110op plik.nlm +

    Pobiera logo operatora (parametr +7110op pozwala pobraæ logo o +rozmiarach dostêpnych w Nokii 62xx/7110) i zapisuje w pliku plik.nlm. +

    gnokii --setlogo op|7110op plik.nlm +

    Ustawia logo operatora (je¿eli nie podamy nazwy pliku, logo zostanie +wykasowane w telefonie). +

    gnokii --sendlogo op +48602123456 logo.nlm kod_operatora -d +

    Wysy³a logo operatora (uwaga, du¿ych logo znanych z Nokii 62xx/7110 +nie mo¿na przesy³aæ) pod numer +48602123456 z raportem dorêczenia. Logo +bêdzie pokazywane w sieci o kodzie kod_operatora ("260 01" dla Plusa, +"260 02" dla Ery i "260 03" dla Idei). Je¿eli nie podamy numeru odbiorcy, +parametru -d i zamienimy --sendlogo przez +--savelogo, logo +zostanie zapisane na karcie SIM. +

    gnokii --getlogo caller logo.nlm 1 +

    Pobiera logo grupy o numerze 1 i zapisuje w pliku +logo.nlm. Je¿eli +zast±pimy --getlogo przez --setlogo, logo zostanie ustawione +w telefonie. +

    gnokii --setlogo dealer "tekst" +

    Ustawia w telefonie tzw. powitanie dealera - tekst z powitaniem widoczny +po w³±czeniu telefonu, którego nie mo¿na ustawiæ z jego menu. +

    +Inne

    + +


    gnokii --reset soft +

    Resetuje telefon. +

    gnokii --dialvoice +48601123456 +

    Inicjuje po³±czenie g³osowe pod numer +48601123456. +

    gnokii --netmonitor devel +

    W³±cza pe³ne menu monitora sieci w telefonie (opcja ta pozwala dok³adnie +sprawdzaæ stan sieci komórkowej "widzianej" przez telefon oraz pokazuje +dok³adne informacje o samym telefonie, karcie SIM oraz baterii). Szerzej +o tej funkcji mo¿na przeczytaæ na stronie autora artyku³u lub w dokumentacji +MyGnokii. W przypadku niektórych wersji oprogramowania telefonu, niezbêdne +bêdzie wy³±czenie i ponowne w³±czenie aparatu by pojawi³a siê w nim nowa +pozycja w menu. +

    gnokii --identify +

    Pokazuje podstawowe informacje o telefonie - m.in. model i wersjê oprogramowania. +

    gnokii --presskeysequence sequence +

    W telefonie "wciska" kombinacjê klawiszy sequence. +

    gnokii --getsecuritycode SecurityCode +

    Pobiera z telefonu kod zabezpieczaj±cy (SecurityCode). Opcja dostêpna +wy³±cznie, gdy przy wywo³aniu skryptu configure dodano prze³±cznik--enable-security. +

    gnokii --simlock +

    Informacje o simlocku - zabezpieczeniu uniemo¿liwiaj±cym korzystanie +z kart SIM innych ni¿ macierzystego operatora GSM. Blokada taka pojawia +siê najczê¶ciej w telefonach sprzedawanych w promocjach. +

    gnokii --phonetests +

    Wykonuje test telefonu. Krótkie wyja¶nienie do testów REAL TIME CLOCK +BATTERY oraz MCU EEPROM COMPONENT: pierwszy testuje dzia³anie baterii podtrzymuj±cej +datê/czas w telefonie po od³±czeniu baterii g³ównej. Baterii tej nie ma +m.in w Nokiach 3210 i 33xx i wtedy bêdzie on mia³ b³êdny wynik. Nie jest +to jednak uszkodzenie telefonu ! Podobnie we wszystkich nowych modelach +(33xx, 62xx, 7110, 8210/8850 i nowszych) pamiêæ z ustawieniami telefonu +(EEPROM) nie jest w formie oddzielnego uk³adu scalonego i program równie¿ +poka¿e tutaj b³±d. +

    gnokii --displayoutput +

    Pokazuje na ekranie komputera teksty wy¶wietlane przez telefon (dotyczy +serii 51xx/61xx). + +

    Na pocz±tek

    + +13. Porównanie
    +


    + +

    Poni¿sza tabela zbiera informacje dotycz±ce sposobów komunikacji pomiêdzy +telefonem a komputerem. Znak zapytania w komórce oznacza, ¿e dana konfiguracja +nie by³a jeszcze sprawdzana. Natomiast znak x oznacza brak mo¿liwo¶ci wspó³pracy. +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
    Mbus
    +
    +
    Fbus
    +
    +
    Podczerwieñ bezpo¶rednia
    +
    +
    Podczerwieñ socketowa
    +
    +
    Nokia 21xx/9000
    +
    +
    Gnokii
    +
    +
    X
    +
    +
    X
    +
    +
    X
    +
    +
    31xx/81xx
    +
    +
    X
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    X
    +
    +
    X
    +
    +
    3210/33xx
    +
    +
    MyGnokii
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    X
    +
    +
    X
    +
    +
    51xx
    +
    +
    MyGnokii
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    X
    +
    +
    X
    +
    +
    61xx
    +
    +
    MyGnokii
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    MyGnokii +

    Gnokii

    +
    +
    X
    +
    +
    62xx/7110
    +
    +
    MyGnokii
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    X
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    8210/8850
    +
    +
    MyGnokii
    +
    +
    MyGnokii +

    Gnokii

    +
    +
    MyGnokii
    +
    +
    MyGnokii
    +
    +
    9110/9210
    +
    +
    MyGnokii
    +
    +
    X
    +
    +
    ?
    +
    +
    ?
    +
    +
    Nokia Card Phone 2.0
    +
    +
    MyGnokii +

    (czê¶ciowo)

    +
    +
    X
    +
    +
    X
    +
    +
    X
    +
    + +

    Na pocz±tek

    + +14. Sieæ
    +


    + +

    MyGnokii +
    http://marcin-wiacek.topnet.pl +
    marcin-wiacek@topnet.pl +

    Gnokii +
    http://www.gnokii.org +
    ftp://urtica.linuxnews.pl/pub/people/pkot/gnokii/ +
    pkot@linuxnews.pl +

    GSMLib +
    http://www.pxh.de/fs/gsmlib/ +

    Kable +
    http://www.fkn.pl/varia/kable.html +
    http://www.atrox.at/datacable/ +

    Specyfikacje GSM +
    http://www.etsi.org +

    Windows & Nokia +

    Oxygen Phone Manager: http://www.oxygensoftware.com +
    ActiveX dla Nokii: http://www.gertjaap.com/ +
    Logo Manager: http://www.logomanager.co.uk + +

    Na pocz±tek + + + diff --git a/Docs/pl_PL/styl.css b/Docs/pl_PL/styl.css index 02b023e..9c64b40 100644 --- a/Docs/pl_PL/styl.css +++ b/Docs/pl_PL/styl.css @@ -1,46 +1,46 @@ - - - + + + diff --git a/INSTALL b/INSTALL index 3551ce2..7d5654f 100644 --- a/INSTALL +++ b/INSTALL @@ -16,7 +16,7 @@ Install path prefix. Default /usr/local/ --without-x - Compile without GTK (Xwin) programs + Compile without GTK (X11) programs --disable-nls Set if you don't have/want GNU gettext support @@ -34,15 +34,17 @@ Good default (example): ./configure --prefix=/usr \ - --enable-gettext + --enable-security 2/ compilation: - make + make (or make gnokii-debug to create staticlly linked binary + -- mainly for debugging) groupadd gnokii - it is really needed (make dep - if you want/need) - make install + make install or make install-suid or make install-strip or + make install-ss (suid + strip) make install-docs clean source: diff --git a/Makefile b/Makefile index 18a138b..1feaf9c 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,9 @@ include ${TOPDIR}/Makefile.global BIN_DIRS = gnokii ifndef WIN32 -###BIN_DIRS += gnokiid -###BIN_DIRS += mgnetd -###BIN_DIRS += mgnetd/mg_demo_client +BIN_DIRS += gnokiid +BIN_DIRS += mgnetd +BIN_DIRS += mgnetd/mg_demo_client endif DIRS = common \ @@ -38,8 +38,6 @@ endif GTK_DIRS = xgnokii \ xlogos -#uClinux: -GTK_LIBS= PO_DIR = po DOCS_DIR = Docs diff --git a/Makefile.global.in b/Makefile.global.in index fb02d54..23fa672 100644 --- a/Makefile.global.in +++ b/Makefile.global.in @@ -46,8 +46,6 @@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ LIBS = @LIBS@ LEX = @LEX@ -AR = @AR@ -AS = @AS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ @@ -74,21 +72,6 @@ ifdef WIN32 endif -CFLAGS += -I$(GNOKII_INCLUDE) -DGNOKII_MAIN=1 +CFLAGS += -I$(GNOKII_INCLUDE) LDFLAGS = $(LIBS) -Wl,--rpath -Wl,$(libdir) -%.o: %.c -ifneq "" "$(findstring -DSTACKCHECK,$(CPPFLAGS))" - @echo "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -S -o - $< | sed '#hidden' | $(AS) $(ASFLAGS) $(TARGET_MACH) -o $@" - @$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -S -o - $< | sed \ - 's!^ link\.w %a6,#\(-\?[0-9]\+\)$$!\ -moveml %d0-%d7/%a0-%a6,-(%sp); \ -movel #\1,%d0; \ -lea stackcheck-.-8,%a0; \ -jsr 0(%pc,%a0); \ -moveml (%sp)+,%d0-%d7/%a0-%a6; \ -&!' | \ - $(AS) $(ASFLAGS) $(TARGET_MACH) -o $@ -else - $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $< -endif diff --git a/VERSION b/VERSION index 4735d92..2a8e926 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.3_pre8-gold_2002_02_16 +0.3.3_pre8-gold_2002_03_10 diff --git a/acconfig.h b/acconfig.h deleted file mode 100644 index ebfa2da..0000000 --- a/acconfig.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - - $Id$ - - G N O K I I - - A Linux/Unix toolset and driver for Nokia mobile phones. - - Released under the terms of the GNU GPL, see file COPYING for more details. - -*/ - -#ifndef __CONFIG_H__ -#define __CONFIG_H__ - -@TOP@ - - -/* Define if you have timersub() */ -#undef HAVE_TIMEOPS - -/* Define if you have tm_gmtoff field in tm structure */ -#undef HAVE_TM_GMTON - -/* Define if you have cfsetspeed, cfsetispeed, cfsetospeed, c_ispeed and c_ospeed in struct termios */ -#undef HAVE_CFSETSPEED -#undef HAVE_CFSETISPEED -#undef HAVE_CFSETOSPEED -#undef HAVE_TERMIOS_CSPEED - -/* Define if you have snprintf */ -#undef HAVE_SNPRINTF - -/* Define debug level */ -#undef DEBUG -#undef XDEBUG -#undef RLP_DEBUG - -/* Decide if you want security options enabled */ -#undef SECURITY - -/* Define if you have XPM components */ -#undef XPM - -/* Define if you want NLS */ -#undef USE_NLS - -/* Define if you want to use Unix98 PTYs */ -#undef USE_UNIX98PTYS - -/* Define if you compile for M$ Windows */ -#undef WIN32 - -/* Missing symbols */ -#undef VERSION -#undef XVERSION -#undef DEBUG -#undef HAVE_CFSETISPEED -#undef HAVE_CFSETOSPEED -#undef HAVE_CFSETSPEED -#undef HAVE_LIBINTL -#undef HAVE_LIBINTL_H -#undef HAVE_TERMIOS_CSPEED -#undef HAVE_TIMEOPS -#undef HAVE_TM_GMTON -#undef RLP_DEBUG -#undef SECURITY -#undef USE_NLS -#undef USE_UNIX98PTYS -#undef WIN32 -#undef XDEBUG -#undef XPM -#undef CONFIG_CFG_INITLENGTH -#undef CONFIG_CFG_MODEL -#undef CONFIG_CFG_PORT - - -@BOTTOM@ - -#include "uccompat.h" - -#ifdef STACKCHECK -extern void live_check(const char *file,int line,int alloc); -extern void live_disable(int how); -#define LIVE live_check(__FILE__,__LINE__,-1) -#define LIVE_ALLOC(n) live_check(__FILE__,__LINE__,(n)) -#define LIVE_DISABLE live_disable(1) -#define LIVE_ENABLE live_disable(-1) -#else /* STACKCHECK */ -#define LIVE -#define LIVE_ALLOC(n) -#define LIVE_DISABLE -#define LIVE_ENABLE -#endif /* STACKCHECK */ - - -#ifdef USE_UNIX98PTYS -# define _XOPEN_SOURCE 500 -#endif -#define _BSD_SOURCE 1 -#include -extern void usleep_watchdevice(unsigned long usecs); -#define usleep(usecs) usleep_watchdevice((usecs)) -#define sleep(secs) usleep((secs)*1000000) - - -#endif /* __CONFIG_H__ */ diff --git a/bigfunc b/bigfunc deleted file mode 100755 index 231e964..0000000 --- a/bigfunc +++ /dev/null @@ -1,28 +0,0 @@ -#! /usr/bin/perl - -use strict; -use warnings; - -open NM,"-|",'m68k-pic-coff-nm gnokii/gnokii.coff|sort' - or die "nm: $!"; -my(%big,$prevhex,$prevsym,$tot); -while () { - chomp; - /^([0-9a-f]+) (\w) (.*)$/ or die "parse: $_"; - my $hex=hex $1; - my $type=$2; - my $sym=$3; - next if $type!~/[tT]/ || $sym=~/^\./ || $sym=~/^L\d+$/ || $sym eq "__gnu_compiled_c" || $sym eq "gcc2_compiled."; - if ($prevhex) { - warn "dup: $prevsym" if exists $big{$prevsym}; - $big{$prevsym}=$hex-$prevhex; - $tot+=$hex-$prevhex; - } - $prevhex=$hex; - $prevsym=$sym; - } -close NM; -$big{"_TOTAL"}=$tot; -for (sort { $big{$b} <=> $big{$a} } keys %big) { - printf "%4u %s\n",$big{$_},$_; - } diff --git a/common/Makefile b/common/Makefile index f09a1e8..2dad729 100644 --- a/common/Makefile +++ b/common/Makefile @@ -18,31 +18,32 @@ DIRS = protocol \ oldmodules \ newmodules -# files/midifile.o \ -# gsm-wap.o \ -# gsm-calendar.o \ -# protocol/fbusirda.o \ -# protocol/mbus.o \ -# protocol/at.o \ -# newmodules/n7110.o -# newmodules/sniff/sniff.o \ -# newmodules/newat.o \ -# gsm-phonebook.o \ -# gsm-bitmaps.o \ -# gsm-networks.o \ -# gsm-coding.o \ -# gsm-sms.o \ -# gsm-ringtones.o \ - OBJS = devices/device.o \ data/rlp-common.o \ data/rlp-crc24.o \ + files/midifile.o \ + gsm-ringtones.o \ + gsm-coding.o \ gsm-datetime.o \ + gsm-wap.o \ gsm-api.o \ + gsm-phonebook.o \ + gsm-calendar.o \ + gsm-networks.o \ + gsm-bitmaps.o \ + gsm-sms.o \ files/cfgreader.o \ misc.o \ protocol/fbus.o \ - newmodules/n6110.o + protocol/fbus3110.o \ + protocol/fbusirda.o \ + protocol/mbus.o \ + protocol/at.o \ + newmodules/sniff/sniff.o \ + newmodules/newat.o \ + newmodules/n6110.o \ + newmodules/n3110.o \ + newmodules/n7110.o DATA_OBJS = data/virtmodem.o \ data/at-emulator.o \ @@ -51,22 +52,22 @@ DATA_OBJS = data/virtmodem.o \ ifdef WIN32 OBJS += $(TOPDIR)/win32/winserial.o else - OBJS += devices/unixserial.o -# devices/unixirda.o \ -# devices/tekram.o + OBJS += devices/unixserial.o \ + devices/unixirda.o \ + devices/tekram.o endif ifdef XPM_CFLAGS CFLAGS += $(XPM_CFLAGS) endif -all: common.a data.a ##gsm-filetypes.o +all: COMMON.o DATA.o gsm-filetypes.o -common.a: $(OBJS) - $(AR) rcs $@ $^ +COMMON.o: $(OBJS) + $(LD) $(LDREL) $(LDOUT) COMMON.o $(OBJS) -data.a: $(DATA_OBJS) - $(AR) rcs $@ $^ +DATA.o: $(DATA_OBJS) + $(LD) $(LDREL) $(LDOUT) DATA.o $(DATA_OBJS) gsm-filetypes.o: files/gsm-filetypes.c $(CC) $(CFLAGS) -c files/gsm-filetypes.c diff --git a/common/data/at-emulator.c b/common/data/at-emulator.c index 5f84b0b..41445c8 100644 --- a/common/data/at-emulator.c +++ b/common/data/at-emulator.c @@ -14,8 +14,6 @@ */ -#include "config.h" - #define __data_at_emulator_c @@ -52,32 +50,28 @@ bool ATEM_Initialised = false; /* Set to true once initialised */ extern bool CommandMode; extern int ConnectCount; -static char ModelName[80]; /* This seems to be needed to avoid seg-faults */ -static char PortName[80]; +char ModelName[80]; /* This seems to be needed to avoid seg-faults */ +char PortName[80]; /* Local variables */ -extern int PtyRDFD; /* File descriptor for reading and writing to/from */ -extern int PtyWRFD; /* pty interface - only different in debug mode. */ - -static u8 ModemRegisters[MAX_MODEM_REGISTERS]; -static char CmdBuffer[MAX_CMD_BUFFERS][CMD_BUFFER_LENGTH]; -static int CurrentCmdBuffer; -static int CurrentCmdBufferIndex; -static bool VerboseResponse; /* Switch betweek numeric (4) and text responses (ERROR) */ -static char IncomingCallNo; -static int MessageFormat; /* Message Format (text or pdu) */ +int PtyRDFD; /* File descriptor for reading and writing to/from */ +int PtyWRFD; /* pty interface - only different in debug mode. */ -static void ATEM_ParseAT(char *cmd_buffer); +u8 ModemRegisters[MAX_MODEM_REGISTERS]; +char CmdBuffer[MAX_CMD_BUFFERS][CMD_BUFFER_LENGTH]; +int CurrentCmdBuffer; +int CurrentCmdBufferIndex; +bool VerboseResponse; /* Switch betweek numeric (4) and text responses (ERROR) */ +char IncomingCallNo; +int MessageFormat; /* Message Format (text or pdu) */ /* Current command parser */ -static void (*Parser)(char *); +void (*Parser)(char *); //void (*Parser)(char *) = ATEM_ParseAT; /* Current command parser */ -static GSM_MemoryType SMSType; -static int SMSNumber; - -static void ATEM_InitRegisters(void); +GSM_MemoryType SMSType; +int SMSNumber; /* If initialised in debug mode, stdin/out is used instead of ptys for interface. */ @@ -118,7 +112,7 @@ bool ATEM_Initialise(int read_fd, int write_fd, char *model, char *port) } /* Initialise the "registers" used by the virtual modem. */ -static void ATEM_InitRegisters(void) +void ATEM_InitRegisters(void) { ModemRegisters[REG_RINGATA] = 0; @@ -143,7 +137,6 @@ void ATEM_CallPassup(char c) } } -static void ATEM_StringOut(char *buffer); /* Handler called when characters received from serial port. calls state machine code to process it. */ @@ -184,13 +177,9 @@ void ATEM_HandleIncomingData(char *buffer, int length) } } -static bool ATEM_CommandPlusC(char **buf); -static bool ATEM_CommandPlusG(char **buf); -static int ATEM_GetNum(char **p); -static void ATEM_ParseSMS(char *cmd_buffer); /* Parser for standard AT commands. cmd_buffer must be null terminated. */ -static void ATEM_ParseAT(char *cmd_buffer) +void ATEM_ParseAT(char *cmd_buffer) { char *buf; char number[30]; @@ -376,10 +365,8 @@ static void ATEM_HandleSMS() return; } -static void ATEM_ParseDIR(char *cmd_buffer); - /* Parser for SMS interactive mode */ -static void ATEM_ParseSMS(char *buff) +void ATEM_ParseSMS(char *buff) { if (!strcasecmp(buff, "HELP")) { ATEM_StringOut(_("\n\rThe following commands work...\n\r")); @@ -404,7 +391,7 @@ static void ATEM_ParseSMS(char *buff) } /* Parser for DIR sub mode of SMS interactive mode. */ -static void ATEM_ParseDIR(char *buff) +void ATEM_ParseDIR(char *buff) { switch (toupper(*buff)) { case 'P': @@ -428,7 +415,7 @@ static void ATEM_ParseDIR(char *buff) /* Handle AT+C commands, this is a quick hack together at this stage. */ -static bool ATEM_CommandPlusC(char **buf) +bool ATEM_CommandPlusC(char **buf) { float rflevel; GSM_RFUnits rfunits = GRF_CSQ; @@ -528,7 +515,7 @@ static bool ATEM_CommandPlusC(char **buf) switch (**buf) { case '=': buf[0]++; - index = atoi(*buf); + sscanf(*buf, "%d", &index); buf[0] += strlen(*buf); error = ATEM_ReadSMS(index, SMSType, &message); @@ -612,7 +599,7 @@ static bool ATEM_CommandPlusC(char **buf) } /* AT+G commands. Some of these responses are a bit tongue in cheek... */ -static bool ATEM_CommandPlusG(char **buf) +bool ATEM_CommandPlusG(char **buf) { char buffer[MAX_LINE_LENGTH]; @@ -698,7 +685,7 @@ void ATEM_ModemResult(int code) /* Get integer from char-pointer, set pointer to end of number stolen basically verbatim from ISDN code. */ -static int ATEM_GetNum(char **p) +int ATEM_GetNum(char **p) { int v = -1; @@ -712,7 +699,7 @@ static int ATEM_GetNum(char **p) /* Write string to virtual modem port, either pty or STDOUT as appropriate. This function is only used during command mode - data pump is used when connected. */ -static void ATEM_StringOut(char *buffer) +void ATEM_StringOut(char *buffer) { int count = 0; char out_char; diff --git a/common/data/datapump.c b/common/data/datapump.c index adb201d..4eede53 100644 --- a/common/data/datapump.c +++ b/common/data/datapump.c @@ -14,8 +14,6 @@ */ -#include "config.h" - #define __data_datapump_c @@ -29,9 +27,7 @@ #include #include #include -#ifndef UCLINUX #include -#endif #include @@ -47,17 +43,18 @@ extern bool CommandMode; /* Local variables */ -extern int PtyRDFD; /* File descriptor for reading and writing to/from */ -extern int PtyWRFD; /* pty interface - only different in debug mode. */ -static u8 pluscount; -static bool connected; - -static int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length); +int PtyRDFD; /* File descriptor for reading and writing to/from */ +int PtyWRFD; /* pty interface - only different in debug mode. */ +struct pollfd ufds; +u8 pluscount; +bool connected; bool DP_Initialise(int read_fd, int write_fd) { PtyRDFD = read_fd; PtyWRFD = write_fd; + ufds.fd=PtyRDFD; + ufds.events=POLLIN; RLP_Initialise(GSM->SendRLPFrame, DP_CallBack); RLP_SetUserRequest(Attach_Req,true); pluscount=0; @@ -66,7 +63,7 @@ bool DP_Initialise(int read_fd, int write_fd) } -static int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length) +int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length) { int temp; @@ -94,23 +91,15 @@ static int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length) case Reset_Ind: RLP_SetUserRequest(Reset_Resp,true); break; - case GetData: { - fd_set readfds; - struct timeval timeout; - - FD_ZERO(&readfds); - FD_SET(PtyRDFD,&readfds); - timeout.tv_sec=0; - timeout.tv_usec=0; - - if (select(PtyRDFD+1,&readfds,NULL/*writefds*/,NULL/*exceptfds*/,&timeout)) { + case GetData: + if (poll(&ufds,1,0)) { /* Check if the program has closed */ /* Return to command mode */ /* Note that the call will still be in progress, */ /* as with a normal modem (I think) */ - if (!FD_ISSET(PtyRDFD,&readfds)) { + if (ufds.revents!=POLLIN) { CommandMode=true; /* Set the call passup back to the at emulator */ GSM->DialData(NULL,-1,&ATEM_CallPassup); @@ -148,7 +137,7 @@ static int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length) return temp; } return 0; - } break; + break; default: diff --git a/common/data/rlp-common.c b/common/data/rlp-common.c index 509faa7..9c46e0d 100644 --- a/common/data/rlp-common.c +++ b/common/data/rlp-common.c @@ -16,8 +16,6 @@ */ -#include "config.h" - #include #include #include @@ -36,64 +34,59 @@ /* Our state machine which handles all of nine possible states of RLP machine. */ -static void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header); +void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header); /* This is the type we are just handling. */ -static RLP_FrameTypes CurrentFrameType; +RLP_FrameTypes CurrentFrameType; /* Current state of RLP state machine. */ -static RLP_State CurrentState=RLP_S0; /* We start at ADM and Detached */ +RLP_State CurrentState=RLP_S0; /* We start at ADM and Detached */ /* Next state of RLP state machine. */ -static RLP_State NextState; +RLP_State NextState; /* Pointer to Send function that sends frame to phone. */ -static bool (*RLPSendFunction)(RLP_F96Frame *frame, bool out_dtx); +bool (*RLPSendFunction)(RLP_F96Frame *frame, bool out_dtx); /* Pointer to Passup function which returns data/inds */ -static int (*RLP_Passup)(RLP_UserInds ind, u8 *buffer, int length); +int (*RLP_Passup)(RLP_UserInds ind, u8 *buffer, int length); /* State variables - see GSM 04.22, Annex A, section A.1.2 */ -static RLP_StateVariable UA_State; -/* -static RLP_StateVariable UI_State; -*/ -static RLP_StateVariable Ackn_State; -static RLP_StateVariable Poll_State; -static RLP_StateVariable Poll_xchg; -static RLP_StateVariable SABM_State; -static RLP_StateVariable DISC_State; -static RLP_StateVariable DM_State; /* FIXME - not handled */ -/* -static RLP_StateVariable XID_C_State; -*/ -static RLP_StateVariable XID_R_State; -/* -static RLP_StateVariable TEST_R_State; -*/ - -static u8 VR=0; -static u8 VA=0; -static u8 VS=0; -static u8 VD=0; -static u8 DISC_Count; - -static u8 DTX_VR; -static RLP_FrameTypes DTX_SF; +RLP_StateVariable UA_State; +RLP_StateVariable UI_State; +RLP_StateVariable Ackn_State; +RLP_StateVariable Poll_State; +RLP_StateVariable Poll_xchg; +RLP_StateVariable SABM_State; +RLP_StateVariable DISC_State; +RLP_StateVariable DM_State; /* FIXME - not handled */ +RLP_StateVariable XI_R_State; +RLP_StateVariable XID_C_State; +RLP_StateVariable XID_R_State; +RLP_StateVariable TEST_R_State; + +u8 VR=0; +u8 VA=0; +u8 VS=0; +u8 VD=0; +u8 DISC_Count; + +u8 DTX_VR; +RLP_FrameTypes DTX_SF; #define RLP_M 62 -static RLP_Data R[RLP_M]; -static RLP_Data S[RLP_M]; +RLP_Data R[RLP_M]; +RLP_Data S[RLP_M]; -static RLP_StateVariable SABM_State; -static int SABM_Count; +RLP_StateVariable SABM_State; +int SABM_Count; -static RLP_UserRequestStore UserRequests; +RLP_UserRequestStore UserRequests; -static u8 Poll_Count=0; +u8 Poll_Count=0; /* For now timing is done based on a frame reception rate of 20ms */ /* Serge has measured it as 18.4ms */ @@ -103,28 +96,28 @@ static u8 Poll_Count=0; /* To set, timer is loaded with RLP_Timeout1_Limit/RLP_T_Scaling. */ /* Each received frame (including NULLS / errors) any >0 timer is decrease */ -static int T; -static int T_RCVS[RLP_M]; +int T; +int T_RCVS[RLP_M]; -static bool UA_FBit=true; -static bool Ackn_FBit=false; -static bool DM_FBit=false; /* FIXME - not handled */ -static bool RRReady=false; -static bool LRReady=true; /* FIXME - not handled (as if we couldn't keep up with 9600bps :-) */ -static bool DISC_PBit=false; +bool UA_FBit=true; +bool Ackn_FBit=false; +bool DM_FBit=false; /* FIXME - not handled */ +bool RRReady=false; +bool LRReady=true; /* FIXME - not handled (as if we couldn't keep up with 9600bps :-) */ +bool DISC_PBit=false; -static u8 LastStatus=0xff; /* Last Status byte */ +u8 LastStatus=0xff; /* Last Status byte */ /* RLP Parameters. FIXME: Reset these - e.g. when entering state 0 */ -static u8 RLP_SEND_WS = RLP_M-1; -static u8 RLP_RCV_WS = RLP_M-1; -static u8 RLP_Timeout1_Limit = 55; -static u8 RLP_N2 = 15; /* Maximum number of retransmisions. GSM spec says 6 here, but - Nokia will XID this. */ -static u8 RLP_T2=0; -static u8 RLP_VersionNumber=0; +u8 RLP_SEND_WS = RLP_M-1; +u8 RLP_RCV_WS = RLP_M-1; +u8 RLP_Timeout1_Limit = 55; +u8 RLP_N2 = 15; /* Maximum number of retransmisions. GSM spec says 6 here, but + Nokia will XID this. */ +u8 RLP_T2=0; +u8 RLP_VersionNumber=0; @@ -204,7 +197,7 @@ void RLP_SetUserRequest(RLP_UserRequests type, bool value) { /* Check whether a user event is set */ -static bool RLP_GetUserRequest(RLP_UserRequests type) { +bool RLP_GetUserRequest(RLP_UserRequests type) { bool result=false, *x; @@ -237,7 +230,7 @@ static bool RLP_GetUserRequest(RLP_UserRequests type) { return result; } -static void RLP_SetTimer(int *timer) +void RLP_SetTimer(int *timer) { *timer=(int)(RLP_Timeout1_Limit/RLP_T_Scaling); } @@ -287,7 +280,7 @@ static bool InWindow(u8 val, u8 lower, u8 upper) return (val <= upper) || (val >= lower); } -static void RLP_Init_link_vars(void) +void RLP_Init_link_vars(void) { int i; @@ -312,7 +305,7 @@ static void RLP_Init_link_vars(void) } -static void RLP_AddRingBufferDataToSlots(void) +void RLP_AddRingBufferDataToSlots(void) { u8 buffer[24]; int size; @@ -336,11 +329,9 @@ static void RLP_AddRingBufferDataToSlots(void) } -#ifndef UCLINUX - /* FIXME: Remove this after finishing. */ -static void X(RLP_F96Frame *frame) { +void X(RLP_F96Frame *frame) { int i; @@ -349,10 +340,9 @@ static void X(RLP_F96Frame *frame) { } -#endif /* UCLINUX */ -static void ResetAllT_RCVS(void) +void ResetAllT_RCVS(void) { int i; @@ -363,7 +353,7 @@ static void ResetAllT_RCVS(void) /* This function is used for sending RLP frames to the phone. */ -static void RLP_SendF96Frame(RLP_FrameTypes FrameType, +void RLP_SendF96Frame(RLP_FrameTypes FrameType, bool OutCR, bool OutPF, u8 OutNR, u8 OutNS, u8 *OutData, u8 OutDTX) @@ -604,8 +594,6 @@ static void RLP_SendF96Frame(RLP_FrameTypes FrameType, } -static void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header); - /* Check_input_PDU in Serge's code. */ void RLP_DisplayF96Frame(RLP_F96Frame *frame) @@ -942,14 +930,14 @@ void RLP_DisplayF96Frame(RLP_F96Frame *frame) /* FIXME: real TEST_Handling - we do not handle TEST yet. */ -static void TEST_Handling() { +void TEST_Handling() { } /* FIXME: better XID_handling - but this will answer a XID command. */ -static bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) { +bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) { u8 count; u8 type; @@ -1038,7 +1026,7 @@ static bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) { } -static bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) { +bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) { #ifdef DEBUG // fprintf(stdout, _("Send_TXU()\n")); @@ -1082,7 +1070,7 @@ static bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) { /* Deliver data */ -static void RLP_DeliverAllInSeqIF() +void RLP_DeliverAllInSeqIF() { int i,j; @@ -1110,7 +1098,7 @@ static void RLP_DeliverAllInSeqIF() /* Mark any missing information frames between VR and Ns*/ -static void RLP_MarkMissingIF(u8 Ns) +void RLP_MarkMissingIF(u8 Ns) { u8 i; for (i=VR; i!=Ns; i=Incr(i)) { @@ -1121,7 +1109,7 @@ static void RLP_MarkMissingIF(u8 Ns) /* Information frame handler */ -static bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header) +bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header) { if ((header->CR) && (header->PF)) @@ -1154,7 +1142,7 @@ static bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header) /* Mark acknowledged send frames */ -static void RLP_AdvanceVA(u8 Nr) +void RLP_AdvanceVA(u8 Nr) { while (VA!=Nr) { S[VA].State=_idle; @@ -1165,7 +1153,7 @@ static void RLP_AdvanceVA(u8 Nr) /* Decrease VS back down to Nr since these have not been acknowledged */ -static void RLP_DecreaseVS(u8 Nr) +void RLP_DecreaseVS(u8 Nr) { while (VS!=Nr) { VS=Decr(VS); @@ -1175,7 +1163,7 @@ static void RLP_DecreaseVS(u8 Nr) /* Supervisory frame handling */ -static void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header) +void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header) { u8 i; @@ -1231,7 +1219,7 @@ static void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header) /* Find the first SREJ frame */ -static bool RLP_SREJSlot(u8 *x) +bool RLP_SREJSlot(u8 *x) { u8 i; @@ -1247,7 +1235,7 @@ static bool RLP_SREJSlot(u8 *x) /* Check if any SREJ frames need sending, if not send the next in line */ -static bool RLP_PrepareDataToTransmit(u8 *p) +bool RLP_PrepareDataToTransmit(u8 *p) { u8 i; @@ -1270,7 +1258,7 @@ static bool RLP_PrepareDataToTransmit(u8 *p) /* Send a SREJ command */ -static void RLP_SendSREJ(u8 x) +void RLP_SendSREJ(u8 x) { u8 k; @@ -1310,7 +1298,7 @@ static void RLP_SendSREJ(u8 x) /* Send a command */ -static void RLP_Send_XX_Cmd(RLP_FrameTypes type) +void RLP_Send_XX_Cmd(RLP_FrameTypes type) { u8 k; @@ -1348,7 +1336,7 @@ static void RLP_Send_XX_Cmd(RLP_FrameTypes type) /* Send a Response */ -static void RLP_Send_XX_Resp(RLP_FrameTypes type) +void RLP_Send_XX_Resp(RLP_FrameTypes type) { u8 k; @@ -1374,7 +1362,7 @@ static void RLP_Send_XX_Resp(RLP_FrameTypes type) /* Decide which frame to use and send it - currently only used in state 4 */ -static void RLP_SendData() +void RLP_SendData() { u8 x; @@ -1394,7 +1382,7 @@ static void RLP_SendData() else RLP_Send_XX_Cmd(RLPFT_S_RNR); } -static void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) { +void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) { int i; switch (CurrentState) { @@ -1755,6 +1743,7 @@ static void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) { if(SABM_State!=_idle) printf("[SABM_State %d]",SABM_State); if(DISC_State!=_idle) printf("[DISC_State %d]",DISC_State); if(DM_State!=_idle) printf("[DM_State %d]",DM_State); + if(XI_R_State!=_idle) printf("[XI_R_State %d]",XI_R_State); if(XID_C_State!=_idle) printf("[XID_C_State %d]",XID_C_State); if(XID_R_State!=_idle) printf("[XID_R_State %d]",XID_R_State); if(TEST_R_State!=_idle) printf("[TEST_R_State %d]",TEST_R_State); @@ -1936,9 +1925,7 @@ static void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) { exact implementation of section 5.2.2.6, Exchange Identification, XID of the GSM specification 04.22. */ -#ifdef RLP_DEBUG - -static void RLP_DisplayXID(u8 *frame) +void RLP_DisplayXID(u8 *frame) { int count = 25; /* Sanity check */ @@ -2018,12 +2005,10 @@ static void RLP_DisplayXID(u8 *frame) return; } -#endif /* RLP_DEBUG */ - /* Given a pointer to an F9.6 Frame, split data out into component parts of header and determine frame type. */ -static void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header) +void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header) { /* Poll/Final bit. */ diff --git a/common/data/rlp-crc24.c b/common/data/rlp-crc24.c index 7f29c68..cc8af90 100644 --- a/common/data/rlp-crc24.c +++ b/common/data/rlp-crc24.c @@ -16,7 +16,7 @@ /* CRC-24 table is used for computation of RLP checksum. */ -static const u32 CRC24_Table[256] = { +const u32 CRC24_Table[256] = { 0x00000000, 0x00D6A776, 0x00F64557, 0x0020E221, 0x00B78115, 0x00612663, 0x0041C442, 0x00976334, 0x00340991, 0x00E2AEE7, 0x00C24CC6, 0x0014EBB0, 0x00838884, 0x00552FF2, 0x0075CDD3, 0x00A36AA5, 0x00681322, 0x00BEB454, @@ -62,7 +62,7 @@ static const u32 CRC24_Table[256] = { 0x006D7F0C, 0x00BBD87A, 0x009B3A5B, 0x004D9D2D }; -static void RLP_CalculateCRC24Polinomial(u8 *data, int length, u32 *polinomial) +void RLP_CalculateCRC24Polinomial(u8 *data, int length, u32 *polinomial) { int i; diff --git a/common/data/virtmodem.c b/common/data/virtmodem.c index 169b117..7c7f4e2 100644 --- a/common/data/virtmodem.c +++ b/common/data/virtmodem.c @@ -35,10 +35,8 @@ #include #include #include -#ifndef UCLINUX #include #include -#endif /* UCLINUX */ #include #include "misc.h" @@ -51,28 +49,31 @@ /* Global variables */ - -#define GNOKII_DEV "/var/gnokii-dev" - //extern bool TerminateThread; +int ConnectCount; /* Local variables */ int PtyRDFD; /* File descriptor for reading and writing to/from */ int PtyWRFD; /* pty interface - only different in debug mode. */ -static bool UseSTDIO; /* Use STDIO for debugging purposes instead of pty */ +bool UseSTDIO; /* Use STDIO for debugging purposes instead of pty */ bool CommandMode; -static GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, char *synchronizetime); -static int VM_PtySetup(char *bindir); +pthread_t Thread; +bool RequestTerminate; + /* If initialised in debug mode, stdin/out is used instead of ptys for interface. */ -bool VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType connection, char *bindir, bool debug_mode, bool GSMInit,char *synchronizetime) +bool VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType connection, char *bindir, bool debug_mode, bool GSMInit,char *synchronizetime) { + int rtn; + CommandMode = true; + RequestTerminate = false; + if (debug_mode == true) { UseSTDIO = true; } @@ -107,62 +108,47 @@ bool VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType return (false); } -#ifndef UCLINUX - /* Create and start thread, */ - return VM_ThreadLoop(); -#else - return true; -#endif -} + /* Create and start thread, */ + rtn = pthread_create(&Thread, NULL, (void *) VM_ThreadLoop, (void *)NULL); -static void VM_CharHandler(void); -extern GSM_Error N6110_SendStatusRequest(void); + if (rtn == EAGAIN || rtn == EINVAL) { + return (false); + } + return (true); +} -bool VM_ThreadLoop(void) +void VM_ThreadLoop(void) { int res; - fd_set readfds; - struct timeval timeout; + struct pollfd ufds; /* Note we can't use signals here as they are already used in the FBUS code. This may warrant changing the FBUS code around sometime to use select instead to free up the SIGIO handler for mainline code. */ - for (;;) { + ufds.fd=PtyRDFD; + ufds.events=POLLIN; + + while (!RequestTerminate) { if (!CommandMode) { sleep(1); } else { /* If we are in data mode, leave it to datapump to get the data */ - FD_ZERO(&readfds); - FD_SET(PtyRDFD,&readfds); - FD_SET(device_portfd,&readfds); - timeout.tv_sec=2; - timeout.tv_usec=0;/*500*1000;*/ - - res = select((device_portfd > PtyRDFD ? device_portfd : PtyRDFD)+1, - &readfds,NULL/*writefds*/,NULL/*exceptfds*/,&timeout); + res=poll(&ufds,1,500); switch (res) { case 0: /* Timeout */ -#if 0 - N6110_SendStatusRequest(); -#endif break; case -1: - if (errno==EINTR) - continue; perror("VM_ThreadLoop - select"); - return (false); + exit (-1); default: - if (FD_ISSET(PtyRDFD,&readfds)) + if (ufds.revents==POLLIN) { VM_CharHandler(); - if (FD_ISSET(device_portfd,&readfds)) - SigHandler(0); - if (!FD_ISSET(PtyRDFD,&readfds) && !FD_ISSET(device_portfd,&readfds)) - usleep(500); /* Probably the file has been closed */ + } else usleep(500); /* Probably the file has been closed */ break; } } @@ -174,35 +160,34 @@ bool VM_ThreadLoop(void) the virtual modem thread */ void VM_Terminate(void) { + + /* Request termination of thread */ + RequestTerminate = true; + + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); + if (!UseSTDIO) { close (PtyRDFD); close (PtyWRFD); } } -static int VM_GetMasterPty(char **name); - /* Open pseudo tty interface and (in due course create a symlink to be /dev/gnokii etc. ) */ -static int VM_PtySetup(char *bindir) +int VM_PtySetup(char *bindir) { int err; -#ifndef UCLINUX char mgnokiidev[200]; -#endif /* UCLINUX */ char *slave_name; -#ifndef UCLINUX char cmdline[200]; -#endif /* UCLINUX */ -#ifndef UCLINUX if (bindir) { strncpy(mgnokiidev, bindir, 200); strcat(mgnokiidev, "/"); } strncat(mgnokiidev, "mgnokiidev", 200 - strlen(bindir)); -#endif /* UCLINUX */ if (UseSTDIO) { PtyRDFD = STDIN_FILENO; @@ -217,40 +202,22 @@ static int VM_PtySetup(char *bindir) } PtyWRFD = PtyRDFD; -#ifndef UCLINUX /* Check we haven't been installed setuid root for some reason if so, don't create /dev/gnokii */ if (getuid() != geteuid()) { fprintf(stderr, _("gnokiid should not be installed setuid root!\n")); return (0); } -#endif #ifdef DEBUG - fprintf (stderr, _("Slave pty is %s, calling %s to create \"%s\".\n"), slave_name, -#ifndef UCLINUX - mgnokiidev -#else /* UCLINUX */ - "" -#endif /* UCLINUX */ - ,GNOKII_DEV); + fprintf (stderr, _("Slave pty is %s, calling %s to create /dev/gnokii.\n"), slave_name, mgnokiidev); #endif /* DEBUG */ -#ifndef UCLINUX /* Create command line, something line ./mkgnokiidev ttyp0 */ sprintf(cmdline, "%s %s", mgnokiidev, slave_name); /* And use system to call it. */ err = system (cmdline); -#else /* UCLINUX */ - - /* Remove symlink in case it already exists. Don't care if it fails. */ - unlink (GNOKII_DEV); - - /* Create symlink */ - err = symlink(slave_name, GNOKII_DEV); - -#endif /* UCLINUX */ return (err); @@ -258,7 +225,7 @@ static int VM_PtySetup(char *bindir) /* Handler called when characters received from serial port. calls state machine code to process it. */ -static void VM_CharHandler(void) +void VM_CharHandler(void) { unsigned char buffer[255]; int res; @@ -283,7 +250,7 @@ static void VM_CharHandler(void) } /* Initialise GSM interface, returning GSM_Error as appropriate */ -static GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, char *synchronizetime) +GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, char *synchronizetime) { int count=0; GSM_Error error; @@ -322,7 +289,7 @@ static GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GS Applications by Troan and Johnson */ -static int VM_GetMasterPty(char **name) { +int VM_GetMasterPty(char **name) { #ifdef USE_UNIX98PTYS int master, err; @@ -348,11 +315,8 @@ static int VM_GetMasterPty(char **name) { /* search for an unused pty */ for (i=0; i<16 && master <= 0; i++) { for (j=0; j<16 && master <= 0; j++) { -static const char *ptyp8="pqrstuvwxyzPQRST"; -static const char *ptyp9="0123456789abcdef"; - - (*name)[8] = ptyp8[i]; - (*name)[9] = ptyp9[j]; + (*name)[8] = "pqrstuvwxyzPQRST"[i]; + (*name)[9] = "0123456789abcdef"[j]; /* open the master pty */ if ((master = open(*name, O_RDWR | O_NOCTTY | O_NONBLOCK )) < 0) { if (errno == ENOENT) { diff --git a/common/devices/device.c b/common/devices/device.c index be2f079..abf1862 100644 --- a/common/devices/device.c +++ b/common/devices/device.c @@ -8,11 +8,12 @@ */ -#include "config.h" - #ifndef WIN32 #include "devices/unixserial.h" + #include "devices/unixirda.h" + #include "devices/tekram.h" #include + #include #include #include #include @@ -23,6 +24,7 @@ #include "gsm-api.h" #include "devices/device.h" +#include "files/cfgreader.h" #include @@ -31,12 +33,14 @@ #include "mversion.h" #endif -static char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]={0x00}; +char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]={0x00}; -static bool duringwrite; +bool duringwrite; #ifndef WIN32 +char *lockfile; + //pthread_t Thread; #if defined(__svr4__) || defined(__FreeBSD__) pthread_t selThread; @@ -44,20 +48,141 @@ static bool duringwrite; int device_portfd = -1; +#define max_buf_len 128 +#define lock_path "/var/lock/LCK.." + +/* Lock the device. Return allocated string with a lock name */ +char *lock_device(const char* port) +{ + char *lock_file = NULL; + char buffer[max_buf_len]; + const char *aux = rindex(port, '/'); + int fd, len = strlen(aux) + strlen(lock_path); + + /* Remove leading '/' */ + if (aux) aux++; + else aux = port; + + memset(buffer, 0, sizeof(buffer)); + lock_file = calloc(len + 1, 1); + if (!lock_file) { + fprintf(stderr, _("Out of memory error while locking device\n")); + return NULL; + } + /* I think we don't need to use strncpy, as we should have enough + * buffer due to strlen results + */ + strcpy(lock_file, lock_path); + strcat(lock_file, aux); + + /* Check for the stale lockfile. + * The code taken from minicom by Miquel van Smoorenburg */ + if ((fd = open(lock_file, O_RDONLY)) >= 0) { + char buf[max_buf_len]; + int pid, n = 0; + + n = read(fd, buf, sizeof(buf) - 1); + close(fd); + if (n > 0) { + pid = -1; + if (n == 4) + /* Kermit-style lockfile. */ + pid = *(int *)buf; + else { + /* Ascii lockfile. */ + buf[n] = 0; + sscanf(buf, "%d", &pid); + } + if (pid > 0 && kill((pid_t)pid, 0) < 0 && errno == ESRCH) { + fprintf(stderr, _("Lockfile %s is stale. Overriding it..\n"), lock_file); + sleep(1); + if (unlink(lock_file) == -1) { + fprintf(stderr, _("Overriding failed, please check the permissions\n")); + fprintf(stderr, _("Cannot lock device\n")); + goto failed; + } + } else { + fprintf(stderr, _("Device already locked.\n")); + goto failed; + } + } + /* this must not happen. because we could open the file */ + /* no wrong permissions are set. only reason could be */ + /* flock/lockf or a empty lockfile due to a broken binary */ + /* which is more likely (like gnokii 0.4.0pre11 ;-) */ + if (n == 0) { + fprintf(stderr, _("Unable to read lockfile %s.\n"), lock_file); + fprintf(stderr, _("Please check for reason and remove the lockfile by hand.\n")); + fprintf(stderr, _("Cannot lock device\n")); + goto failed; + } + } + + /* Try to create a new file, with 0644 mode */ + fd = open(lock_file, O_CREAT | O_EXCL | O_WRONLY, 0644); + if (fd == -1) { + if (errno == EEXIST) + fprintf(stderr, _("Device seems to be locked by unknown process\n")); + else if (errno == EACCES) + fprintf(stderr, _("Please check permission on lock directory\n")); + else if (errno == ENOENT) + fprintf(stderr, _("Cannot create lockfile %s. Please check for existence of path"), lock_file); + goto failed; + } + sprintf(buffer, "%10ld gnokii\n", (long)getpid()); + write(fd, buffer, strlen(buffer)); + close(fd); + return lock_file; +failed: + free(lock_file); + return NULL; +} + +/* Removes lock and frees memory */ +bool unlock_device(char *lock_file) +{ + int err; + + if (!lock_file) { +// fprintf(stderr, _("Cannot unlock device\n")); + return false; + } + err = unlink(lock_file); + free(lock_file); + return (err + 1); +} + /* * Structure to store the filedescriptor we use. * */ -#ifdef DEBUG -static int device_getfd(void) +int device_getfd(void) { return device_portfd; } -#endif /* DEBUG */ - -static int device_open(__const char *__file, int __with_odd_parity) { +int device_open(__const char *__file, int __with_odd_parity) { + struct CFG_Header *cfg_info; + char *aux; + + cfg_info=CFG_FindGnokiirc(); + if (cfg_info!=NULL) { + aux = CFG_Get(cfg_info, "global", "use_locking"); + if (aux) { + if (!strcmp(aux, "yes")) { + lockfile = lock_device(__file); + if (!lockfile) return false; + } + } + } + switch (CurrentConnectionType) { + case GCT_Tekram: + device_portfd = tekram_open(__file); + break; + case GCT_Irda: + device_portfd = irda_open(); + break; default: device_portfd = serial_opendevice(__file, __with_odd_parity, true, false); break; @@ -73,27 +198,26 @@ void device_close(void) /* Now wait for thread to terminate. */ //pthread_join(Thread, NULL); + unlock_device(lockfile); + switch (CurrentConnectionType) { + case GCT_Tekram: tekram_close(device_portfd); break; + case GCT_Irda : irda_close(device_portfd); break; default : serial_close(device_portfd); break; } PortDevice[0]=0x00; } -#ifndef UCLINUX - void device_reset(void) { } -#endif /* UCLINUX */ - -#ifdef DEBUG -static void device_dumpserial(void); -#endif /* DEBUG */ - void device_setdtrrts(int __dtr, int __rts) { switch (CurrentConnectionType) { + case GCT_Tekram: + case GCT_Irda: + break; default: serial_setdtrrts(device_portfd, __dtr, __rts); #ifdef DEBUG @@ -106,6 +230,11 @@ void device_setdtrrts(int __dtr, int __rts) void device_changespeed(int __speed) { switch (CurrentConnectionType) { + case GCT_Irda: + break; + case GCT_Tekram: + tekram_changespeed(device_portfd, __speed); + break; default: serial_changespeed(device_portfd, __speed); #ifdef DEBUG @@ -115,9 +244,11 @@ void device_changespeed(int __speed) } } -static size_t device_read(__ptr_t __buf, size_t __nbytes) +size_t device_read(__ptr_t __buf, size_t __nbytes) { switch (CurrentConnectionType) { + case GCT_Tekram: return (tekram_read(device_portfd, __buf, __nbytes)); break; + case GCT_Irda : return ( irda_read(device_portfd, __buf, __nbytes)); break; default : return (serial_read(device_portfd, __buf, __nbytes)); break; } } @@ -126,26 +257,23 @@ size_t device_write(__const __ptr_t __buf, size_t __n) { u8 buffer[300]; size_t mysize; - while (duringwrite) { - fprintf(stderr,"device_write: reentrance violation!\n"); - _exit(1); - } + while (duringwrite) {} memcpy(buffer,__buf,__n); AppendLog(buffer,__n,true); duringwrite=true; switch (CurrentConnectionType) { + case GCT_Irda : mysize = irda_write(device_portfd, __buf, __n); break; + case GCT_Tekram: mysize = tekram_write(device_portfd, __buf, __n); break; default : mysize = serial_write(device_portfd, __buf, __n); break; } duringwrite=false; - if (mysize!=__n) - fprintf(stderr,"WARNING: device_write(__n=%ld)=%ld\n",(long)__n,(long)mysize); return mysize; } #ifdef DEBUG -static void device_dumpserial(void) +void device_dumpserial(void) { int PortFD; unsigned int Flags=0; @@ -162,71 +290,20 @@ static void device_dumpserial(void) } #endif /* DEBUG */ -static char SigHandler_buffer[255]; - void SigHandler(int status) { - int count, res; - LIVE_DISABLE; - LIVE; + unsigned char buffer[2048]; + + int count, res; - res = device_read(SigHandler_buffer, sizeof(SigHandler_buffer)); + res = device_read(buffer, 255); for (count = 0; count < res ; count ++) { - Protocol->StateMachine(SigHandler_buffer[count]); + Protocol->StateMachine(buffer[count]); } - LIVE_ENABLE; } -#ifdef UCLINUX -void usleep_watchdevice(unsigned long usecs) -{ -int err; -fd_set readfds; -struct timeval target,timeout; -long timeout_sec,timeout_usec; /* signed! */ - - if (gettimeofday(&target/*tv*/,NULL/*tz*/)) - perror("usleep_watchdevice()/gettimeofday(2) init"); - target.tv_usec+=usecs%1000000; - target.tv_sec +=usecs/1000000 + (target.tv_usec/1000000); - target.tv_usec%=1000000; - - for (;;) { - if (gettimeofday(&timeout/*tv*/,NULL/*tz*/)) - perror("usleep_watchdevice()/gettimeofday(2) loop"); - - timeout_sec =target.tv_sec -(long)timeout.tv_sec ; - timeout_usec=target.tv_usec-(long)timeout.tv_usec; - - if (timeout_usec<0) { - timeout_sec--; - timeout_usec+=1000000; - } - if (timeout_sec<0) - return; - - timeout.tv_sec =timeout_sec ; - timeout.tv_usec=timeout_usec; - - FD_ZERO(&readfds); - if (device_portfd>=0) - FD_SET(device_portfd,&readfds); - - err=select((device_portfd<0 ? 0 : device_portfd+1),&readfds,NULL,NULL,&timeout); - if ( err > 0 ) { - if (device_portfd>=0 && FD_ISSET(device_portfd,&readfds)) { - /* call singal handler to process incoming data */ - SigHandler(0); - } - } else { - if (err == -1) - perror("Error in SelectLoop"); - } - } -} -#endif #if defined(__svr4__) || defined(__FreeBSD__) /* thread for handling incoming data */ @@ -245,9 +322,9 @@ void SelectLoop() { if ( err > 0 ) { /* call singal handler to process incoming data */ SigHandler(0); - /* refresh timeout, just for linux :-( */ + /* refresh timeout, just for linux :-( */ /* required for irda */ - timeout.tv_sec=15; + timeout.tv_sec=15; } else { if (err == -1) perror("Error in SelectLoop"); @@ -262,15 +339,12 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp char text[100]; -#ifndef UCLINUX #if defined(__svr4__) || defined(__FreeBSD__) int rtn; #else struct sigaction sig_io; #endif -#endif /* UCLINUX */ -#ifndef UCLINUX #ifdef DEBUG if ((strstr(GSM_Info->IrdaModels,"decode")!=NULL) && (CurrentConnectionType == GCT_Irda)) { @@ -278,7 +352,6 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp return true; } #endif -#endif /* UCLINUX */ if (PortDevice[0]!=0x00) return true; @@ -303,12 +376,13 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp strcpy(text,"Connection "); switch (con) { case GCT_FBUS :strcpy(text+strlen(text),"FBUS");break; -#ifndef UCLINUX + case GCT_Infrared:strcpy(text+strlen(text),"infrared");break; + case GCT_Irda :strcpy(text+strlen(text),"irda sockets");break; case GCT_MBUS :strcpy(text+strlen(text),"MBUS");break; case GCT_DLR3 :strcpy(text+strlen(text),"DLR3");break; + case GCT_Tekram :strcpy(text+strlen(text),"Tekram");break; case GCT_AT :strcpy(text+strlen(text),"AT");break; default :strcpy(text+strlen(text),"unknown");break; -#endif /* UCLINUX */ } strcpy(text+strlen(text),"\n"); AppendLogText(text,false); @@ -325,7 +399,6 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp // return false; // } -#ifndef UCLINUX #if defined(__svr4__) || defined(__FreeBSD__) #else /* Set up and install handler before enabling async IO on port. */ @@ -333,7 +406,6 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp sig_io.sa_flags = 0; sigaction (SIGIO, &sig_io, NULL); #endif -#endif /* UCLINUX */ /* Open device. */ result = device_open(PortDevice, with_odd_parity); @@ -343,7 +415,6 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp return false; } -#ifndef UCLINUX #if defined(__svr4__) || defined(__FreeBSD__) /* create a thread to handle incoming data from mobile phone */ rtn=pthread_create(&selThread,NULL,(void*)SelectLoop,(void*)NULL); @@ -352,7 +423,6 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp return false; } #endif -#endif /* UCLINUX */ return true; } @@ -467,8 +537,11 @@ bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionTyp strcpy(text,"Connection "); switch (con) { case GCT_FBUS :strcpy(text+strlen(text),"FBUS");break; + case GCT_Infrared:strcpy(text+strlen(text),"infrared");break; + case GCT_Irda :strcpy(text+strlen(text),"irda sockets");break; case GCT_MBUS :strcpy(text+strlen(text),"MBUS");break; case GCT_DLR3 :strcpy(text+strlen(text),"DLR3");break; + case GCT_Tekram :strcpy(text+strlen(text),"Tekram");break; case GCT_AT :strcpy(text+strlen(text),"AT");break; default :strcpy(text+strlen(text),"unknown");break; } diff --git a/common/devices/unixserial.c b/common/devices/unixserial.c index b2e4f6e..bc7e37e 100644 --- a/common/devices/unixserial.c +++ b/common/devices/unixserial.c @@ -62,13 +62,10 @@ /* Structure to backup the setting of the terminal. */ -static struct termios serial_termios; +struct termios serial_termios; /* Open the serial port and store the settings. */ -#ifdef UCLINUX -static -#endif /* UCLINUX */ int serial_open(__const char *__file, int __oflag) { int __fd; @@ -116,7 +113,6 @@ int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_as if (fd < 0) return fd; -#ifndef UCLINUX /* Allow process/thread to receive SIGIO */ #if !(__unices__) @@ -138,7 +134,6 @@ int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_as return(-1); } } -#endif /* UCLINUX */ /* Initialise the port settings */ @@ -198,8 +193,6 @@ void serial_setdtrrts(int __fd, int __dtr, int __rts) { } -#ifndef UCLINUX - int serial_select(int fd, struct timeval *timeout) { fd_set readfds; @@ -211,8 +204,6 @@ int serial_select(int fd, struct timeval *timeout) { } -#endif /* UCLINUX */ - /* Change the speed of the serial device. */ @@ -235,28 +226,19 @@ void serial_changespeed(int __fd, int __speed) { } #ifndef SGTTY -#ifdef DEBUG - fprintf(stdout,_("Serial port speed setting: tcgetattr()...\n")); -#endif /* DEBUG */ tcgetattr(__fd, &t); // This is not needed! We set up the speed via cfsetspeed // t.c_cflag &= ~CBAUD; // t.c_cflag |= speed; #ifdef DEBUG - fprintf(stdout,_("Serial port speed setting: cfsetspeed()...\n")); -#endif /* DEBUG */ -#ifdef DEBUG if (cfsetspeed(&t, speed) == -1) fprintf(stdout,_("Serial port speed setting failed\n")); #else - (void)cfsetspeed(&t, speed); + cfsetspeed(&t, speed); #endif -#ifdef DEBUG - fprintf(stdout,_("Serial port speed setting: tcsetattr()...\n")); -#endif /* DEBUG */ - tcsetattr(__fd, TCSANOW, &t); + tcsetattr(__fd, TCSADRAIN, &t); #else ioctl(__fd, TIOCGETP, &t); @@ -265,16 +247,12 @@ void serial_changespeed(int __fd, int __speed) { ioctl(__fd, TIOCSETN, &t); #endif -#ifdef DEBUG - fprintf(stdout,_("Serial port speed setting done\n")); -#endif /* DEBUG */ } /* Read from serial device. */ size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) { - LIVE; return (read(__fd, __buf, __nbytes)); } @@ -282,7 +260,6 @@ size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) { size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) { - LIVE; return (write(__fd, __buf, __n)); } diff --git a/common/files/cfgreader.c b/common/files/cfgreader.c index ad25708..dd0e575 100644 --- a/common/files/cfgreader.c +++ b/common/files/cfgreader.c @@ -27,10 +27,8 @@ #include "files/cfgreader.h" -#ifndef UCLINUX - /* Read configuration information from a ".INI" style file */ -static struct CFG_Header *CFG_ReadFile(char *filename) +struct CFG_Header *CFG_ReadFile(char *filename) { FILE *handle; char *line; @@ -50,7 +48,7 @@ static struct CFG_Header *CFG_ReadFile(char *filename) /* Open file */ if ((handle = fopen(filename, "r")) == NULL) { #ifdef DEBUG - fprintf( stderr, "CFG_ReadFile - open %s: %s\n", filename, strerror(errno)); +// fprintf( stderr, "CFG_ReadFile - open %s: %s\n", filename, strerror(errno)); #endif /* DEBUG */ return NULL; } @@ -106,7 +104,7 @@ static struct CFG_Header *CFG_ReadFile(char *filename) cfg_info = heading; #ifdef DEBUG - fprintf(stderr, "Added new section %s\n", heading->section); +// fprintf(stderr, "Added new section %s\n", heading->section); #endif /* Go on to next line */ @@ -155,7 +153,7 @@ static struct CFG_Header *CFG_ReadFile(char *filename) cfg_info->entries = entry; #ifdef DEBUG - fprintf(stderr, "Adding key/value %s/%s\n", entry->key, entry->value); +// fprintf(stderr, "Adding key/value %s/%s\n", entry->key, entry->value); #endif /* Go on to next line */ continue; @@ -171,7 +169,7 @@ static struct CFG_Header *CFG_ReadFile(char *filename) /* Write configuration information to a config file */ -static int CFG_WriteFile(struct CFG_Header *cfg, char *filename) +int CFG_WriteFile(struct CFG_Header *cfg, char *filename) { /* Not implemented - tricky to do and preserve comments */ @@ -211,7 +209,7 @@ char *CFG_Get(struct CFG_Header *cfg, char *section, char *key) /* Set the value of a key in a config file. Return the new value if the section/key can be found, else return NULL. */ -static char *CFG_Set(struct CFG_Header *cfg, char *section, char *key, +char *CFG_Set(struct CFG_Header *cfg, char *section, char *key, char *value) { struct CFG_Header *h; @@ -267,7 +265,7 @@ struct CFG_Header *CFG_FindGnokiirc() if ((cfg_info = CFG_ReadFile("/etc/gnokiirc")) == NULL) { /* That failed too so exit */ #ifdef DEBUG - fprintf(stderr, _("Couldn't open %s or /etc/gnokiirc. Using defaults...\n"), rcfile); +// fprintf(stderr, _("Couldn't open %s or /etc/gnokiirc. Using defaults...\n"), rcfile); #endif /* DEBUG */ return NULL; } @@ -278,7 +276,7 @@ struct CFG_Header *CFG_FindGnokiirc() if ((cfg_info = CFG_ReadFile("gnokiirc")) == NULL) { /* That failed too so exit */ #ifdef DEBUG - fprintf(stderr, _("Couldn't open %s or gnokiirc. Using defaults...\n"), rcfile); +// fprintf(stderr, _("Couldn't open %s or gnokiirc. Using defaults...\n"), rcfile); #endif /* DEBUG */ return NULL; } @@ -289,21 +287,10 @@ struct CFG_Header *CFG_FindGnokiirc() return cfg_info; } -#endif /* UCLINUX */ - int CFG_ReadConfig(char **model, char **port, char **initlength, - char **connection, char **bindir, + char **connection, char **bindir, char **synchronizetime, bool isgnokiid) { -#ifdef UCLINUX - - *model=strdup(CONFIG_CFG_MODEL); - *port=strdup(CONFIG_CFG_PORT); - *initlength=strdup(CONFIG_CFG_INITLENGTH); - *connection=strdup("fbus"); - *bindir=NULL; - -#else /* UCLINUX */ struct CFG_Header *cfg_info; #ifdef WIN32 char *DefaultPort = "com2:"; @@ -313,6 +300,7 @@ int CFG_ReadConfig(char **model, char **port, char **initlength, char *DefaultModel = "auto"; char *DefaultConnection = "fbus"; char *DefaultBindir = "/usr/local/sbin/"; + char *DefaultSynchronizeTime = "yes"; char *DefaultInitLength = "30"; char *section = "global"; @@ -321,6 +309,7 @@ int CFG_ReadConfig(char **model, char **port, char **initlength, (char *)*port = DefaultPort; (char *)*connection = DefaultConnection; (char *)*bindir = DefaultBindir; + (char *)*synchronizetime = DefaultSynchronizeTime; (char *)*initlength = DefaultInitLength; cfg_info=CFG_FindGnokiirc(); @@ -340,9 +329,11 @@ int CFG_ReadConfig(char **model, char **port, char **initlength, (char *)*bindir = CFG_Get(cfg_info, section, "bindir"); if (!*bindir) (char *)*bindir = DefaultBindir; + (char *)*synchronizetime = CFG_Get(cfg_info, section, "synchronizetime"); + if (!*synchronizetime) (char *)*synchronizetime = DefaultSynchronizeTime; + (char *)*initlength = CFG_Get(cfg_info, section, "initlength"); if (!*initlength) (char *)*initlength = "default"; -#endif /* UCLINUX */ return 0; } diff --git a/common/files/gsm-filetypes.c b/common/files/gsm-filetypes.c index b625e14..3c389bb 100644 --- a/common/files/gsm-filetypes.c +++ b/common/files/gsm-filetypes.c @@ -10,9 +10,6 @@ Functions to read and write common file types. - Last modified: Mon Mar 20 22:02:15 CET 2000 - Modified by Chris Kemp - */ #include @@ -256,14 +253,13 @@ GSM_Error GSM_ReadVCalendarFile(char *FileName, GSM_CalendarNote *cnote, int *nu GSM_Error GSM_ReadBinRingtoneFile(char *FileName, GSM_BinRingtone *ringtone) { FILE *file; + int i; file = fopen(FileName, "rb"); if (!file) return(GE_CANTOPENFILE); -// fseek(file,3474485,0); - ringtone->length=fread(ringtone->frame, 1, 500, file); fclose(file); @@ -272,6 +268,13 @@ GSM_Error GSM_ReadBinRingtoneFile(char *FileName, GSM_BinRingtone *ringtone) ringtone->frame[2]!=0x0C || ringtone->frame[3]!=0x01) return GE_NOTSUPPORTED; + i=5; + while (ringtone->frame[i]!=0x00) { + ringtone->name[i-5]=ringtone->frame[i]; + i++; + } + ringtone->name[i-5]=0x00; + return GE_NONE; } @@ -645,101 +648,101 @@ void saverttl(FILE *file, GSM_Ringtone *ringtone) int DefNoteTempo=63; u8 DefNoteStyle=ContinuousStyle; - int CurrentNote; - int buffer[6]; - int i,j,k=0; - - /* Saves ringtone name */ - fprintf(file,_("%s:"),ringtone->name); - - /* Find the most frequently used duration and use this for the default */ - - for (i=0;i<6;i++) buffer[i]=0; - for (i=0;iNrNotes;i++) { - switch (ringtone->notes[i].duration) { - case 192:buffer[0]++; break; - case 128:buffer[0]++; break; - case 96:buffer[1]++; break; - case 64:buffer[1]++; break; - case 48:buffer[2]++; break; - case 32:buffer[2]++; break; - case 24:buffer[3]++; break; - case 16:buffer[3]++; break; - case 12:buffer[4]++; break; - case 8:buffer[4]++; break; - case 6:buffer[5]++; break; - case 4:buffer[5]++; break; - } - } - - /* Now find the most frequently used */ - j=0; - for (i=0;i<6;i++) { - if (buffer[i]>j) { - k=i; - j=buffer[i]; - } - } - - /* Finally convert and save the default duration */ - - switch (k) { - case 0: DefNoteDuration=128; fprintf(file, _("d=1,")); break; - case 1: DefNoteDuration= 64; fprintf(file, _("d=2,")); break; - case 2: DefNoteDuration= 32; fprintf(file, _("d=4,")); break; - case 3: DefNoteDuration= 16; fprintf(file, _("d=8,")); break; - case 4: DefNoteDuration= 8; fprintf(file,_("d=16,")); break; - case 5: DefNoteDuration= 4; fprintf(file,_("d=32,")); break; - default: DefNoteDuration= 16; fprintf(file, _("d=8,")); break; - } - - - /* Find the most frequently used scale and use this for the default */ - - for (i=0;i<6;i++) buffer[i]=0; - for (i=0;iNrNotes;i++) { - if (ringtone->notes[i].note!=255) { - buffer[ringtone->notes[i].note/14]++; - } - } - j=0; - for (i=0;i<6;i++) { - if (buffer[i]>j) { - DefNoteScale=i; - j=buffer[i]; - } - } + int CurrentNote; + int buffer[6]; + int i,j,k=0; + + /* Saves ringtone name */ + fprintf(file,_("%s:"),ringtone->name); + + /* Find the most frequently used duration and use this for the default */ + + for (i=0;i<6;i++) buffer[i]=0; + for (i=0;iNrNotes;i++) { + switch (ringtone->notes[i].duration) { + case 192:buffer[0]++; break; + case 128:buffer[0]++; break; + case 96:buffer[1]++; break; + case 64:buffer[1]++; break; + case 48:buffer[2]++; break; + case 32:buffer[2]++; break; + case 24:buffer[3]++; break; + case 16:buffer[3]++; break; + case 12:buffer[4]++; break; + case 8:buffer[4]++; break; + case 6:buffer[5]++; break; + case 4:buffer[5]++; break; + } + } + + /* Now find the most frequently used */ + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + k=i; + j=buffer[i]; + } + } + + /* Finally convert and save the default duration */ + + switch (k) { + case 0: DefNoteDuration=128; fprintf(file, _("d=1,")); break; + case 1: DefNoteDuration= 64; fprintf(file, _("d=2,")); break; + case 2: DefNoteDuration= 32; fprintf(file, _("d=4,")); break; + case 3: DefNoteDuration= 16; fprintf(file, _("d=8,")); break; + case 4: DefNoteDuration= 8; fprintf(file,_("d=16,")); break; + case 5: DefNoteDuration= 4; fprintf(file,_("d=32,")); break; + default: DefNoteDuration= 16; fprintf(file, _("d=8,")); break; + } + + + /* Find the most frequently used scale and use this for the default */ + + for (i=0;i<6;i++) buffer[i]=0; + for (i=0;iNrNotes;i++) { + if (ringtone->notes[i].note!=255) { + buffer[ringtone->notes[i].note/14]++; + } + } + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + DefNoteScale=i; + j=buffer[i]; + } + } if (ringtone->NrNotes!=0) { DefNoteTempo=ringtone->notes[0].tempo; DefNoteStyle=ringtone->notes[0].style; } - /* Save the default scale */ - fprintf(file,_("o=%i,"),DefNoteScale+4); + /* Save the default scale */ + fprintf(file,_("o=%i,"),DefNoteScale+4); switch (DefNoteStyle) { case StaccatoStyle: fprintf(file,_("s=S,")); break; case NaturalStyle : fprintf(file,_("s=N,")); break; } - + /* Save the default tempo */ fprintf(file,_("b=%i,"),DefNoteTempo); /* Save the default loop */ fprintf(file,_("l=%i:"),ringtone->Loop); -#ifdef DEBUG - printf("DefNoteDuration=%d\n", DefNoteDuration); - printf("DefNoteScale=%d\n", DefNoteScale); - printf("Number of notes=%d\n",ringtone->NrNotes); -#endif - - /* Now loop round for each note */ - - for (i=0;iNrNotes;i++) { - CurrentNote=ringtone->notes[i].note; - +#ifdef DEBUG + printf("DefNoteDuration=%d\n", DefNoteDuration); + printf("DefNoteScale=%d\n", DefNoteScale); + printf("Number of notes=%d\n",ringtone->NrNotes); +#endif + + /* Now loop round for each note */ + + for (i=0;iNrNotes;i++) { + CurrentNote=ringtone->notes[i].note; + if (ringtone->notes[i].style!=DefNoteStyle) { DefNoteStyle=ringtone->notes[i].style; switch (DefNoteStyle) { @@ -747,73 +750,73 @@ void saverttl(FILE *file, GSM_Ringtone *ringtone) case NaturalStyle : fprintf(file,_("s=N")); break; case ContinuousStyle: fprintf(file,_("s=C")); break; } - /* And a separator before next note */ - if (i!=ringtone->NrNotes-1) - fprintf(file,_(",")); + /* And a separator before next note */ + if (i!=ringtone->NrNotes-1) + fprintf(file,_(",")); } if (ringtone->notes[i].tempo!=DefNoteTempo) { DefNoteTempo=ringtone->notes[i].tempo; - fprintf(file,_("b=%i"),DefNoteTempo); - if (i!=ringtone->NrNotes-1) - fprintf(file,_(",")); + fprintf(file,_("b=%i"),DefNoteTempo); + if (i!=ringtone->NrNotes-1) + fprintf(file,_(",")); } - /* This note has a duration different than the default. We must save it */ - if (ringtone->notes[i].duration!=DefNoteDuration) { - switch (ringtone->notes[i].duration) { - case 192: fprintf(file, _("1")); break; //192=128*1.5 - case 128: fprintf(file, _("1")); break; - case 96: fprintf(file, _("2")); break; //96=64*1.5 - case 64: fprintf(file, _("2")); break; - case 48: fprintf(file, _("4")); break; //48=32*1.5 - case 32: fprintf(file, _("4")); break; - case 24: fprintf(file, _("8")); break; //24=16*1.5 - case 16: fprintf(file, _("8")); break; - case 12: fprintf(file,_("16")); break; //12=8*1.5 - case 8: fprintf(file,_("16")); break; - case 6: fprintf(file,_("32")); break; //6=4*1.5 - case 4: fprintf(file,_("32")); break; - default: - break; - } - } - - /* Now save the actual note */ - switch (GSM_GetNote(CurrentNote)) { - case Note_C :fprintf(file,_("c"));break; - case Note_Cis:fprintf(file,_("c#"));break; - case Note_D :fprintf(file,_("d"));break; - case Note_Dis:fprintf(file,_("d#"));break; - case Note_E :fprintf(file,_("e"));break; - case Note_F :fprintf(file,_("f"));break; - case Note_Fis:fprintf(file,_("f#"));break; - case Note_G :fprintf(file,_("g"));break; - case Note_Gis:fprintf(file,_("g#"));break; - case Note_A :fprintf(file,_("a"));break; - case Note_Ais:fprintf(file,_("a#"));break; - case Note_H :fprintf(file,_("h"));break; - default :fprintf(file,_("p"));break; //Pause ? - } - - /* Saving info about special duration */ - if (ringtone->notes[i].duration==128*1.5 || - ringtone->notes[i].duration==64*1.5 || - ringtone->notes[i].duration==32*1.5 || - ringtone->notes[i].duration==16*1.5 || - ringtone->notes[i].duration==8*1.5 || - ringtone->notes[i].duration==4*1.5) - fprintf(file,_(".")); - - /* This note has a scale different than the default, so save it */ - if ( (CurrentNote!=255) && (CurrentNote/14!=DefNoteScale)) - fprintf(file,_("%i"),(CurrentNote/14)+4); - - /* And a separator before next note */ - if (i!=ringtone->NrNotes-1) - fprintf(file,_(",")); - - } + /* This note has a duration different than the default. We must save it */ + if (ringtone->notes[i].duration!=DefNoteDuration) { + switch (ringtone->notes[i].duration) { + case 192: fprintf(file, _("1")); break; //192=128*1.5 + case 128: fprintf(file, _("1")); break; + case 96: fprintf(file, _("2")); break; //96=64*1.5 + case 64: fprintf(file, _("2")); break; + case 48: fprintf(file, _("4")); break; //48=32*1.5 + case 32: fprintf(file, _("4")); break; + case 24: fprintf(file, _("8")); break; //24=16*1.5 + case 16: fprintf(file, _("8")); break; + case 12: fprintf(file,_("16")); break; //12=8*1.5 + case 8: fprintf(file,_("16")); break; + case 6: fprintf(file,_("32")); break; //6=4*1.5 + case 4: fprintf(file,_("32")); break; + default: + break; + } + } + + /* Now save the actual note */ + switch (GSM_GetNote(CurrentNote)) { + case Note_C :fprintf(file,_("c"));break; + case Note_Cis:fprintf(file,_("c#"));break; + case Note_D :fprintf(file,_("d"));break; + case Note_Dis:fprintf(file,_("d#"));break; + case Note_E :fprintf(file,_("e"));break; + case Note_F :fprintf(file,_("f"));break; + case Note_Fis:fprintf(file,_("f#"));break; + case Note_G :fprintf(file,_("g"));break; + case Note_Gis:fprintf(file,_("g#"));break; + case Note_A :fprintf(file,_("a"));break; + case Note_Ais:fprintf(file,_("a#"));break; + case Note_H :fprintf(file,_("h"));break; + default :fprintf(file,_("p"));break; //Pause ? + } + + /* Saving info about special duration */ + if (ringtone->notes[i].duration==128*1.5 || + ringtone->notes[i].duration==64*1.5 || + ringtone->notes[i].duration==32*1.5 || + ringtone->notes[i].duration==16*1.5 || + ringtone->notes[i].duration==8*1.5 || + ringtone->notes[i].duration==4*1.5) + fprintf(file,_(".")); + + /* This note has a scale different than the default, so save it */ + if ( (CurrentNote!=255) && (CurrentNote/14!=DefNoteScale)) + fprintf(file,_("%i"),(CurrentNote/14)+4); + + /* And a separator before next note */ + if (i!=ringtone->NrNotes-1) + fprintf(file,_(",")); + + } } void WriteVarLen(char* midifile, int* current, long value) @@ -1019,7 +1022,7 @@ GSM_Error loadxpm(char *filename, GSM_Bitmap *bitmap) bitmap->height=image.height; bitmap->width=image.width; - bitmap->size=bitmap->height*bitmap->width/8; + bitmap->size=GSM_GetBitmapSize(bitmap); GSM_ClearBitmap(bitmap); @@ -1080,8 +1083,7 @@ GSM_Error loadbmp(FILE *file, GSM_Bitmap *bitmap) bitmap->type=GSM_7110OperatorLogo; } - /* Gabo !!! */ - bitmap->size=(bitmap->width*bitmap->height + 7)/8; + bitmap->size=GSM_GetBitmapSize(bitmap); GSM_ClearBitmap(bitmap); @@ -1188,7 +1190,7 @@ GSM_Error loadnol(FILE *file, GSM_Bitmap *bitmap) fread(buffer, 1, 4, file); /* Width and height of the icon. */ bitmap->width=buffer[0]; bitmap->height=buffer[2]; - bitmap->size=bitmap->height*bitmap->width/8; + bitmap->size=GSM_GetBitmapSize(bitmap); if ((bitmap->height!=14) || (bitmap->width!=72)) { #ifdef DEBUG @@ -1236,7 +1238,7 @@ GSM_Error loadngg(FILE *file, GSM_Bitmap *bitmap) fread(buffer, 1, 4, file); /* Width and height of the icon. */ bitmap->width=buffer[0]; bitmap->height=buffer[2]; - bitmap->size=bitmap->height*bitmap->width/8; + bitmap->size=GSM_GetBitmapSize(bitmap); if ((bitmap->height!=14) || (bitmap->width!=72)) { #ifdef DEBUG @@ -1311,7 +1313,7 @@ GSM_Error loadnsl(FILE *file, GSM_Bitmap *bitmap) bitmap->type=GSM_StartupLogo; bitmap->height=48; bitmap->width=84; - bitmap->size=(bitmap->height*bitmap->width)/8; + bitmap->size=GSM_GetBitmapSize(bitmap); memcpy(bitmap->bitmap,buffer,bitmap->size); @@ -1357,7 +1359,7 @@ GSM_Error loadnlm (FILE *file, GSM_Bitmap *bitmap) if (bitmap->type==GSM_OperatorLogo && bitmap->width==78 && bitmap->height==21) bitmap->type=GSM_7110OperatorLogo; - bitmap->size=bitmap->width*bitmap->height/8; + bitmap->size=GSM_GetBitmapSize(bitmap); division=div(bitmap->width,8); if (division.rem!=0) division.quot++; /* For startup logos */ @@ -1389,7 +1391,6 @@ GSM_Error loadota(FILE *file, GSM_Bitmap *bitmap) bitmap->width=buffer[1]; bitmap->height=buffer[2]; - bitmap->size=bitmap->width*bitmap->height/8; if ((bitmap->height==48) && (bitmap->width==84)) { bitmap->type=GSM_StartupLogo; @@ -1403,6 +1404,8 @@ GSM_Error loadota(FILE *file, GSM_Bitmap *bitmap) #endif return GE_INVALIDIMAGESIZE; } + + bitmap->size=GSM_GetBitmapSize(bitmap); if (fread(bitmap->bitmap,1,bitmap->size,file)!=bitmap->size) return(GE_TOOSHORT); @@ -1794,6 +1797,7 @@ void savelmbstartupentry(FILE *file, GSM_Bitmap startup, GSM_Bitmap text, bool a char req[1000] = {'W','E','L',' ', /*block identifier*/ 00,00, /*block data size*/ 0x02,00,00,00,00,00, + 0x02}; /*number of blocks (like in 6110 frame)*/ int count=13; @@ -1819,16 +1823,25 @@ void savelmbopentry(FILE *file, GSM_Bitmap bitmap) /* Operator logo header block */ char req[500] = {'O','L','G',' ', /*block identifier*/ 0x88,00, /*block data size*/ - 0x02,00,00,00,00,00,00}; + 0x02,00,00,00,00,00, - int count=13; + 00}; + + int count=13,i; count=count+N6110_MakeOperatorLogoFrame(req+13,bitmap); - req[4]=(count-7)%256; - req[5]=(count-7)/256; + if (bitmap.width!=0x48) { + req[4]=(count-7)%256; + req[5]=(count-7)/256; - req[17]=req[17]+5; //we fix size of logo block + for (i=1;i<=5;i++) req[count++]=0; + + req[17]=req[17]+5; //we fix size of logo block + } else { + req[4]=(count-12)%256; + req[5]=(count-12)/256; + } fwrite(req, 1, count, file); } @@ -1842,6 +1855,7 @@ void savelmbspeedentry(FILE *file, GSM_SpeedDial speed) 0x02,00, 00, /*number of speed dial*/ 00,0xFF,00, + 00, /*number of speed dial*/ 03, /*memory type. ME=02;SM=03*/ 00}; /*number of location assigned to speed dial*/ @@ -1869,8 +1883,10 @@ void savelmbcallerentry(FILE *file, GSM_Bitmap bitmap) count=count+N6110_MakeCallerGroupFrame(req+12,bitmap); - req[4]=(count-11)%256; - req[5]=(count-11)/256; + req[count++]=0; + + req[4]=(count-12)%256; + req[5]=(count-12)/256; fwrite(req, 1, count, file); } @@ -1880,25 +1896,22 @@ void savelmbpbkentry(FILE *file, GSM_PhonebookEntry entry) char req[500] = {'P','B','E','2', /*block identifier*/ 00,00, /*block data size*/ 00,00, - 00, /*position of phonebook entry*/ - 00, + 00,00, /*position of phonebook entry*/ 03, /*memory type. ME=02;SM=03*/ 00, - 00, /*position of phonebook entry*/ - 00, + + 00,00, /*position of phonebook entry*/ 03, /*memory type. ME=02;SM=03*/ 00}; int count = 16, blocks; - req[8]=req[12]=entry.Location; //position of this entry + req[9]=req[13] = (entry.Location >> 8); + req[8]=req[12] = entry.Location & 0xff; if (entry.MemoryType==GMT_ME) req[10]=req[14]=2; - /* There is NO full compatibility with files created by Logo Manager, - anyway it works OK with files saved by this function - some bytes - are probably random */ - count=count+N7110_MakePhonebookFrame(req+16, entry, &blocks); + count=count+N7110_EncodePhonebookFrame(req+16, entry, &blocks); req[4]=(count-12)%256; req[5]=(count-12)/256; @@ -1918,6 +1931,7 @@ void savelmb(FILE *file, GSM_Backup *backup) 0x02,00, 03, /*memory type. ME=02;SM=03*/ 00,00,00, + 00,00, /*size of phonebook*/ 14, /*max length of each position*/ 00,00,00,00,00}; @@ -1947,18 +1961,233 @@ void savelmb(FILE *file, GSM_Backup *backup) if (backup->CallerAvailable) for (i=0;i<5;i++) savelmbcallerentry(file,backup->CallerGroups[i]); - if (backup->SpeedAvailable) - for (i=0;i<8;i++) savelmbspeedentry(file,backup->SpeedDials[i]); +// if (backup->SpeedAvailable) +// for (i=0;i<8;i++) savelmbspeedentry(file,backup->SpeedDials[i]); if (backup->OperatorLogoAvailable) savelmbopentry(file,backup->OperatorLogo); savelmbstartupentry(file,backup->StartupLogo,backup->StartupText,backup->StartupLogoAvailable); } +void loadlmbcallerentry(unsigned char *buffer, unsigned char *buffer2, GSM_Backup *backup, int number) +{ + int i; + + backup->CallerAvailable=true; + +#ifdef DEBUG + fprintf(stdout, _(" Number %i, name \""), buffer2[0]); + for (i=0;iCallerGroups[number].number=buffer2[0]; + backup->CallerGroups[number].type=GSM_CallerLogo; + + for (i=0;iCallerGroups[number].text[i]=buffer2[i+2]; + } + backup->CallerGroups[number].text[buffer2[1]]=0; + + backup->CallerGroups[number].ringtone=buffer2[i+2]; + + backup->CallerGroups[number].enabled=false; + if (buffer2[i+3]==1) backup->CallerGroups[number].enabled=true; + + backup->CallerGroups[number].width=buffer2[i+7]; + backup->CallerGroups[number].height=buffer2[i+8]; + + backup->CallerGroups[number].size=GSM_GetBitmapSize(&backup->CallerGroups[number]); + + memcpy(backup->CallerGroups[number].bitmap,buffer2+i+10,backup->CallerGroups[number].size); + +#ifdef DEBUG + fprintf(stdout, _(" Caller logo")); + fprintf(stdout, _(" (size %ix%i - %i bytes)\n"), + backup->CallerGroups[number].width, backup->CallerGroups[number].height, backup->CallerGroups[number].size); + GSM_PrintBitmap(&backup->CallerGroups[number]); +#endif + +} + +void loadlmbopentry(unsigned char *buffer, unsigned char *buffer2, GSM_Backup *backup) +{ + backup->OperatorLogoAvailable=true; + + DecodeNetworkCode(buffer2+1, backup->OperatorLogo.netcode); + + backup->OperatorLogo.text[0]=0; + + backup->OperatorLogo.width=buffer2[7]; + backup->OperatorLogo.height=buffer2[8]; + + backup->OperatorLogo.type=GSM_OperatorLogo; + if (backup->OperatorLogo.width==78) backup->OperatorLogo.type=GSM_7110OperatorLogo; + + backup->OperatorLogo.size=GSM_GetBitmapSize(&backup->OperatorLogo); + +#ifdef DEBUG + fprintf(stdout, _(" GSM operator logo (size %ix%i - %i bytes) for %s (%s) network.\n"), + backup->OperatorLogo.width, backup->OperatorLogo.height, + backup->OperatorLogo.size, backup->OperatorLogo.netcode, + GSM_GetNetworkName(backup->OperatorLogo.netcode)); +#endif + + memcpy(backup->OperatorLogo.bitmap,buffer2+10,backup->OperatorLogo.size); + +#ifdef DEBUG + GSM_PrintBitmap(&backup->OperatorLogo); +#endif + +} + +void loadlmbpbkentry(unsigned char *buffer, unsigned char *buffer2, GSM_Backup *backup) +{ + GSM_PhonebookEntry pbk; + +#ifdef DEBUG + fprintf(stdout,_(" Memory : ")); + switch(buffer[10]) { + case 2: fprintf(stdout, _("(internal)\n"));break; + case 3: fprintf(stdout, _("(sim)\n"));break; + default: fprintf(stdout, _("(unknown)\n"));break; + } + fprintf(stdout,_(" Location : %i\n"),buffer2[0]+buffer2[1]*256); +#endif + + pbk.Empty = true; + pbk.Group = 5; /* 5 = no group as 6110 */ + pbk.Name[0] = 0; + pbk.Number[0] = 0; + pbk.SubEntriesCount = 0; + + N7110_DecodePhonebookFrame(&pbk,buffer2+4,(buffer[4]+buffer[5]*256)-4); + + pbk.MemoryType=GMT_SM; + if (buffer[10]==2) pbk.MemoryType=GMT_ME; + + pbk.Location=buffer2[0]+256*buffer2[1]; + + if (buffer[10]==2) backup->PhonePhonebook[backup->PhonePhonebookUsed++]=pbk; + else backup->SIMPhonebook [backup->SIMPhonebookUsed++] =pbk; +} + +void loadlmbstartupentry(unsigned char *buffer, unsigned char *buffer2, GSM_Backup *backup) +{ + int i,j; +#ifdef DEBUG + int z; +#endif + + j=1; + for (i=0;iStartupLogoAvailable=true; + backup->StartupLogo.height=buffer2[j++]; + backup->StartupLogo.width=buffer2[j++]; + backup->StartupLogo.text[0]=0; + backup->StartupLogo.type=GSM_StartupLogo; + switch (backup->StartupLogo.height) { + case 65:backup->StartupLogo.type=GSM_7110StartupLogo;break; + case 60:backup->StartupLogo.type=GSM_6210StartupLogo;break; + } + backup->StartupLogo.size=GSM_GetBitmapSize(&backup->StartupLogo); + +#ifdef DEBUG + fprintf(stdout, _(" Block 1 - startup logo (size %ix%i - %i bytes)\n"), + backup->StartupLogo.width, backup->StartupLogo.height, backup->StartupLogo.size); +#endif + + memcpy(backup->StartupLogo.bitmap,buffer2+j,backup->StartupLogo.size); +#ifdef DEBUG + GSM_PrintBitmap(&backup->StartupLogo); +#endif + j=j+backup->StartupLogo.size; + + break; + case 2: + +#ifdef DEBUG + fprintf(stdout, _(" Block 2 - welcome note \"")); + for (z=0;zPhonePhonebookUsed=0; + backup->SIMPhonebookUsed=0; + backup->StartupLogoAvailable=false; + backup->StartupText.text[0]=0; + backup->OperatorLogoAvailable=false; + backup->CallerAvailable=false; + backup->SpeedAvailable=false; + switch (filetype) { case LMB: error=loadlmb(file,backup); fclose(file); break; default : error=GE_INVALIDFILEFORMAT; @@ -1993,3 +2230,19 @@ GSM_Error GSM_ReadBackupFile(char *FileName, GSM_Backup *backup) return(error); } + +GSM_Error GSM_SaveBinRingtoneFile(char *FileName, GSM_BinRingtone *ringtone) +{ + + FILE *file; + + file = fopen(FileName, "wb"); + + if (!file) return(GE_CANTOPENFILE); + + fwrite(ringtone->frame, 1, ringtone->length, file); + + fclose(file); + + return GE_NONE; +} diff --git a/common/files/midifile.c b/common/files/midifile.c index a717fee..9e55249 100644 --- a/common/files/midifile.c +++ b/common/files/midifile.c @@ -2,8 +2,6 @@ /* embedding modified midifile.h and midifile.c into this file */ -#include "config.h" - /***** midifile.h ******/ struct MF { @@ -169,14 +167,14 @@ void midifile(struct MF * mf); #include #include -#ifdef WIN32 - - #include - -#else - - #include -#endif +#ifdef WIN32 + + #include + +#else + + #include +#endif #include "gsm-common.h" #include "gsm-ringtones.h" diff --git a/common/gsm-api.c b/common/gsm-api.c index 229232d..3c090a0 100644 --- a/common/gsm-api.c +++ b/common/gsm-api.c @@ -18,8 +18,6 @@ */ -#include "config.h" - #include #include #include @@ -32,7 +30,7 @@ #include "gsm-api.h" -#ifndef UCLINUX +#include "newmodules/n3110.h" #include "newmodules/n6110.h" #include "newmodules/n7110.h" #include "newmodules/newat.h" @@ -40,12 +38,10 @@ #include "newmodules/sniff/sniff.h" #endif #include "protocol/fbusirda.h" -#endif /* UCLINUX */ #include "protocol/fbus.h" -#ifndef UCLINUX +#include "protocol/fbus3110.h" #include "protocol/mbus.h" #include "protocol/at.h" -#endif /* UCLINUX */ #include "files/cfgreader.h" #ifndef WIN32 @@ -94,7 +90,6 @@ unsigned char Current_IMEI[GSM_MAX_IMEI_LENGTH]; unsigned char Current_Revision[GSM_MAX_REVISION_LENGTH]; unsigned char Current_Model[GSM_MAX_MODEL_LENGTH]; -#ifndef UCLINUX GSM_SMSMessage *CurrentSMSMessage; GSM_Error CurrentSMSMessageError; int CurrentSMSPointer; @@ -106,12 +101,10 @@ int CurrentSMSFoldersCount; GSM_OneSMSFolder CurrentSMSFolder; GSM_Error CurrentSMSFolderError; int CurrentSMSFolderID; -#endif /* UCLINUX */ GSM_MemoryStatus *CurrentMemoryStatus; GSM_Error CurrentMemoryStatusError; -#ifndef UCLINUX GSM_NetworkInfo *CurrentNetworkInfo; GSM_Error CurrentNetworkInfoError; @@ -128,8 +121,6 @@ GSM_SecurityCode *CurrentSecurityCode; GSM_DateTime *CurrentDateTime; GSM_Error CurrentDateTimeError; -GSM_Error CurrentResetPhoneSettingsError; - GSM_DateTime *CurrentAlarm; GSM_Error CurrentAlarmError; @@ -142,20 +133,17 @@ GSM_Error CurrentCalendarNotesInfoError; GSM_Error CurrentSetDateTimeError; GSM_Error CurrentSetAlarmError; -int *CurrentFirstCalendarFreePos; -GSM_Error CurrentFirstCalendarFreePosError; -#endif /* UCLINUX */ - GSM_Error CurrentEnableExtendedCommandsError; int CurrentRFLevel, CurrentBatteryLevel, CurrentPowerSource; -#ifndef UCLINUX int CurrentDisplayStatus; GSM_Error CurrentDisplayStatusError; +GSM_Error CurrentResetPhoneSettingsError; + char *CurrentNetmonitor; GSM_Error CurrentNetmonitorError; @@ -178,21 +166,17 @@ int CurrentPressKeyEvent; GSM_Error CurrentPressKeyError; GSM_Error CurrentPlayToneError=GE_UNKNOWN; -#endif /* UCLINUX */ GSM_Error CurrentDialVoiceError; -#ifndef UCLINUX GSM_Error CurrentGetOperatorNameError; GSM_Network *CurrentGetOperatorNameNetwork; GSM_Error CurrentSetOperatorNameError; -#endif /* UCLINUX */ GSM_Error CurrentGetIMEIError; GSM_Error CurrentGetHWError; -#ifndef UCLINUX unsigned char CurrentPPS[4]; GSM_Error CurrentProductProfileSettingsError; @@ -202,11 +186,9 @@ GSM_Error CurrentBinRingtoneError; GSM_BinRingtone *CurrentGetBinRingtone=NULL; GSM_Error CurrentRingtoneError; -#endif /* UCLINUX */ GSM_Error CurrentMagicError; -#ifndef UCLINUX GSM_Error CurrentSimlockInfoError; GSM_AllSimlocks *CurrentSimLock; @@ -221,7 +203,6 @@ GSM_Error CurrentCallDivertError; GSM_CallDivert *CurrentCallDivert; char *CurrentManufacturer; -#endif /* UCLINUX */ /* This is the connection type used in gnokii. */ GSM_ConnectionType CurrentConnectionType; @@ -241,13 +222,8 @@ bool CurrentLinkOK; bool CurrentRequestTerminate; -#ifndef UCLINUX bool CurrentDisableKeepAlive; -#endif /* UCLINUX */ -#ifdef UCLINUX -static -#endif /* UCLINUX */ bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection) { bool found_match=false; @@ -255,7 +231,6 @@ bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType co if (strstr(InfoToCheck.FBUSModels, model) != NULL) { if (connection==GCT_FBUS) found_match=true; } -#ifndef UCLINUX if (strstr(InfoToCheck.MBUSModels, model) != NULL) { if (connection==GCT_MBUS) found_match=true; } @@ -274,13 +249,13 @@ bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType co if (strstr(InfoToCheck.TekramModels, model) != NULL) { if (connection==GCT_Tekram) found_match=true; } -#endif /* UCLINUX */ + if (strstr(InfoToCheck.FBUS3110Models, model) != NULL) { + if (connection==GCT_FBUS3110) found_match=true; + } return found_match; } -#ifndef UCLINUX - GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame)) { int InitLength; int count; @@ -328,8 +303,8 @@ GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_Connectio while (N6110_GetModel(phonemodel) != GE_NONE) sleep(1); -#ifndef UCLINUX - if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5")) + if (!strcmp(phonemodel,"NPE-3") || !strcmp(phonemodel,"NSE-5") || + !strcmp(phonemodel,"NHM-3")) { GSM->Terminate(); @@ -339,14 +314,9 @@ GSM_Error TryNewNokia(char *model, char *device, char *initlength, GSM_Connectio GSM_LinkOK = &CurrentLinkOK; return GE_NONE; } -#endif /* UCLINUX */ return GE_NONE; } -#endif /* UCLINUX */ - -extern GSM_Information N6110_Information; -extern GSM_Functions N6110_Functions; GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime) { @@ -354,34 +324,29 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec GSM_ConnectionType connection2; -#ifndef UCLINUX struct tm *now; time_t nowh; GSM_DateTime Date; -#endif /* UCLINUX */ GSM_Error error; connection2=connection; CurrentRLP_RXCallback = rlp_callback; CurrentCallPassup=NULL; + CurrentCallDivert=NULL; CurrentPhonebookEntry=NULL; -#ifndef UCLINUX CurrentNetworkInfo = NULL; CurrentGetBitmap=NULL; CurrentPlayToneError=GE_UNKNOWN; strcpy(CurrentIncomingCall," "); CurrentGetBinRingtone=NULL; CurrentNetworkInfo=NULL; -#endif /* UCLINUX */ CurrentRequestTerminate=false; -#ifndef UCLINUX CurrentDisableKeepAlive=false; CurrentCalendarNotesInfo.HowMany=2000; -#endif /* UCLINUX */ + CurrentSMSMessage=NULL; CurrentMagicError = GE_BUSY; -#ifndef UCLINUX if (!strcmp(model,"auto")) { /* For now */ @@ -438,13 +403,10 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec Protocol = &MBUS_Functions; CurrentConnectionType=GCT_MBUS; connection2=GCT_MBUS; -#ifndef UCLINUX if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE) { found_match=true; - } else -#endif /* UCLINUX */ - { + } else { GSM->Terminate(); } } @@ -453,67 +415,98 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec usleep(50); - } else -#endif /* UCLINUX */ - { -#ifndef UCLINUX -#ifdef DEBUG - if (CheckModel (Nsniff_Information, model, connection)) { - /* Set pointers to relevant addresses */ - GSM = &Nsniff_Functions; - GSM_Info = &Nsniff_Information; - GSM_LinkOK = &CurrentLinkOK; - found_match=true; - } -#endif -#endif /* UCLINUX */ - - if (CheckModel (N6110_Information, model, connection)) { - /* Set pointers to relevant addresses */ + } else { + if (!strcmp(model,"modelauto")) { + /* For now */ GSM = &N6110_Functions; GSM_Info = &N6110_Information; GSM_LinkOK = &CurrentLinkOK; - found_match=true; - } -#ifndef UCLINUX - if (CheckModel (N7110_Information, model, connection)) { - /* Set pointers to relevant addresses */ - GSM = &N7110_Functions; - GSM_Info = &N7110_Information; - GSM_LinkOK = &CurrentLinkOK; - found_match=true; - } - if (CheckModel (Nat_Information, model, connection)) { - /* Set pointers to relevant addresses */ - GSM = &Nat_Functions; - GSM_Info = &Nat_Information; - GSM_LinkOK = &CurrentLinkOK; - found_match=true; - } -#endif /* UCLINUX */ - - if (found_match) { +#ifdef DEBUG + fprintf(stdout,_("Trying to find connected model...\n")); +#endif switch (connection) { case GCT_FBUS : Protocol = &FBUS_Functions; break; -#ifndef UCLINUX case GCT_Infrared: Protocol = &FBUS_Functions; break; case GCT_Tekram : Protocol = &FBUS_Functions; break; case GCT_DLR3 : Protocol = &FBUS_Functions; break; case GCT_MBUS : Protocol = &MBUS_Functions; break; case GCT_Irda : Protocol = &FBUSIRDA_Functions;break; case GCT_AT : Protocol = &AT_Functions; break; - case GCT_Default : Protocol = NULL; break; -#endif /* UCLINUX */ + case GCT_FBUS3110: Protocol = &FBUS3110_Functions;break; + } + CurrentConnectionType=connection; + connection2=connection; + if (TryNewNokia(model,device,initlength,CurrentConnectionType,rlp_callback)==GE_NONE) + { + found_match=true; + } else { + GSM->Terminate(); } - } else - return GE_NOTSUPPORTED; + + if (!found_match) return GE_NOTSUPPORTED; + + usleep(50); + + } else { +#ifdef DEBUG + if (CheckModel (Nsniff_Information, model, connection)) { + /* Set pointers to relevant addresses */ + GSM = &Nsniff_Functions; + GSM_Info = &Nsniff_Information; + GSM_LinkOK = &CurrentLinkOK; + found_match=true; + } +#endif + + if (CheckModel (N3110_Information, model, connection)) { + /* Set pointers to relevant addresses */ + GSM = &N3110_Functions; + GSM_Info = &N3110_Information; + GSM_LinkOK = &CurrentLinkOK; + found_match=true; + } + if (CheckModel (N6110_Information, model, connection)) { + /* Set pointers to relevant addresses */ + GSM = &N6110_Functions; + GSM_Info = &N6110_Information; + GSM_LinkOK = &CurrentLinkOK; + found_match=true; + } + if (CheckModel (N7110_Information, model, connection)) { + /* Set pointers to relevant addresses */ + GSM = &N7110_Functions; + GSM_Info = &N7110_Information; + GSM_LinkOK = &CurrentLinkOK; + found_match=true; + } + if (CheckModel (Nat_Information, model, connection)) { + /* Set pointers to relevant addresses */ + GSM = &Nat_Functions; + GSM_Info = &Nat_Information; + GSM_LinkOK = &CurrentLinkOK; + found_match=true; + } + + if (found_match) { + switch (connection) { + case GCT_FBUS : Protocol = &FBUS_Functions; break; + case GCT_Infrared: Protocol = &FBUS_Functions; break; + case GCT_Tekram : Protocol = &FBUS_Functions; break; + case GCT_DLR3 : Protocol = &FBUS_Functions; break; + case GCT_MBUS : Protocol = &MBUS_Functions; break; + case GCT_Irda : Protocol = &FBUSIRDA_Functions;break; + case GCT_AT : Protocol = &AT_Functions; break; + case GCT_FBUS3110: Protocol = &FBUS3110_Functions;break; + } + } else + return GE_NOTSUPPORTED; + } } /* Now call model specific initialisation code. */ error=(GSM->Initialise(device, initlength, connection2, rlp_callback)); -#ifndef UCLINUX /* RTH: FIXME: second try for Irda (6210 only?)*/ if ( error!=GE_NONE && connection == GCT_Irda) { @@ -523,9 +516,7 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec device_close(); error=(GSM->Initialise(device, initlength, connection2, rlp_callback)); } -#endif /* UCLINUX */ -#ifndef UCLINUX if (error==GE_NONE && !strcmp(SynchronizeTime,"yes")) { nowh=time(NULL); @@ -556,13 +547,10 @@ GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_Connec /* FIXME: Error checking should be here. */ GSM->SetDateTime(&Date); } -#endif /* UCLINUX */ return error; } -#ifndef UCLINUX - GSM_Error Unimplemented(void) { return GE_NOTIMPLEMENTED; @@ -573,8 +561,6 @@ GSM_Error NotSupported(void) return GE_NOTSUPPORTED; } -#endif /* UCLINUX */ - /* Applications should call N6110_Terminate to shut down the N6110 thread and close the serial port. */ void NULL_Terminate(void) @@ -640,14 +626,13 @@ GSM_ConnectionType GetConnectionTypeFromString(char *Connection) { GSM_ConnectionType connection=GCT_FBUS; -#ifndef UCLINUX if (!strcmp(Connection, "irda")) connection=GCT_Irda; if (!strcmp(Connection, "infrared")) connection=GCT_Infrared; if (!strcmp(Connection, "mbus")) connection=GCT_MBUS; if (!strcmp(Connection, "dlr3")) connection=GCT_DLR3; + if (!strcmp(Connection, "fbus3110")) connection=GCT_FBUS3110; if (!strcmp(Connection, "at")) connection=GCT_AT; if (!strcmp(Connection, "tekram210"))connection=GCT_Tekram; -#endif /* UCLINUX */ return connection; } @@ -661,7 +646,7 @@ bool GetMemoryTypeString(char *memorytext, GSM_MemoryType *type) char *name; } GSM_MTStrings; -static GSM_MTStrings mystring[] = { + GSM_MTStrings mystring[] = { {GMT_ME,"ME"}, {GMT_SM,"SM"}, {GMT_FD,"FD"}, @@ -694,7 +679,7 @@ bool GetMemoryTypeID(char *memorytext, GSM_MemoryType *type) char *name; } GSM_MTStrings; -static GSM_MTStrings mystring[] = { + GSM_MTStrings mystring[] = { {GMT_ME,"ME"}, {GMT_SM,"SM"}, {GMT_FD,"FD"}, @@ -732,33 +717,33 @@ char *GetMygnokiiVersion() { 1.Name,2.CodeName,3.Calendar,4.Netmonitor,5.Caller groups,6.Phonebook, 7.Authentication 8.Datacalls 9.KeysPressing 10.SMSC Default Recipient 11.SpeedDials 12.ScreenSavers 13.DTMF 14.SMS 15.NoPowerFrame 16.StartUpLogo -17.Profiles 18.Ringtones 19.WAP +17.Profiles 18.Ringtones 19.WAP 20.RIngtonesNumber */ static OnePhoneModel allmodels[] = { -/*1, 2, 3, 4, 5, 6 7 8 9 10 11 12 13 14 15 16 17 18 19 */ -{"3210","NSE-8",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0}}, -{"3210","NSE-9",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0}}, -{"3310","NHM-5",{F_CAL33,F_NETMON, 0,F_PBK33, 0, 0, 0,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM, 0}}, -{"3330","NHM-6",{F_CAL33,F_NETMON, 0,F_PBK33, 0, 0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS , 0,F_STANIM,F_PROF33,F_RING_SM,F_WAP}}, -{"5110","NSE-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}}, -{"5130","NSK-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}}, -{"5190","NSB-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0}}, -{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}}, -{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP}}, -{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP}}, -{"8210","NSM-3",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"8850","NSM-2",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}}, -{"9210","RAE-3",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0}},//quesses only ! -{"" ,"" ,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} +/*1, 2, 3, 4, 5, 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ +{"3210","NSE-8",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0, 2}}, +{"3210","NSE-9",{ 0,F_NETMON, 0, 0, 0, 0, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF51,F_RINGBIN, 0, 2}}, +{"3310","NHM-5",{F_CAL33,F_NETMON, 0,F_PBK33SIM, 0, 0, 0,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS ,F_NOPOWER,F_STANIM,F_PROF33,F_RING_SM, 0, 7}}, +{"3330","NHM-6",{F_CAL33,F_NETMON, 0,F_PBK33INT, 0, 0,F_KEYB,F_SMSCDEF,F_SPEED,F_SCRSAV, 0,F_SMS , 0,F_STANIM,F_PROF33,F_RING_SM,F_WAP, 7}}, +{"5110","NSE-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0, 0}}, +{"5130","NSK-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0, 0}}, +{"5190","NSB-1",{ 0,F_NETMON, 0, 0,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0, 0,F_PROF51, 0, 0, 0}}, +{"6110","NSE-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"6130","NSK-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"6150","NSM-1",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"6190","NSB-3",{F_CAL61,F_NETMON,F_CALER61,F_PBK61INT,F_AUTH,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"6210","NPE-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP, 5}}, +{"6250","NHM-3",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA62 ,F_PROF61,F_RINGBIN,F_WAP, 5}}, +{"7110","NSE-5",{F_CAL71,F_NETMON,F_CALER61,F_PBK71INT, 0,F_DATA71, 0,F_SMSCDEF,F_SPEED, 0, 0,F_SMS71, 0,F_STA71 ,F_PROF61,F_RINGBIN,F_WAP, 5}}, +{"8210","NSM-3",{ 0,F_NETMON,F_CALER61,F_PBK61INT, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"8850","NSM-2",{ 0,F_NETMON,F_CALER61,F_PBK61INT, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 1}}, +{"9210","RAE-3",{ 0,F_NETMON,F_CALER61, 0, 0,F_DATA61,F_KEYB,F_SMSCDEF,F_SPEED, 0,F_DTMF,F_SMS , 0,F_STA ,F_PROF61,F_RINGBIN, 0, 0}},//quesses only ! +{"" ,"" ,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} }; -static OnePhoneModel *GetPhoneModelData (const char *num) +OnePhoneModel *GetPhoneModelData (const char *num) { register int i = 0; @@ -790,7 +775,6 @@ int GetModelFeature (featnum_index num) return (GetPhoneModelData(model)->features[num]); } -#ifndef UCLINUX int LogAvailable=-1; //-1 not checked earlier, 0 not, 1 yes char *logfilename; @@ -855,4 +839,3 @@ bool AppendLogText(u8 *buffer,bool format) { return AppendLog(buffer,strlen(buffer),format); } -#endif /* UCLINUX */ diff --git a/common/gsm-bitmaps.c b/common/gsm-bitmaps.c index 3dae76c..9114c5d 100644 --- a/common/gsm-bitmaps.c +++ b/common/gsm-bitmaps.c @@ -10,8 +10,6 @@ */ -#include "config.h" - #include #include #include @@ -70,6 +68,27 @@ void GSM_ClearBitmap(GSM_Bitmap *bmp) for (i=0;isize;i++) bmp->bitmap[i]=0; } +int GSM_GetBitmapSize(GSM_Bitmap *bitmap) +{ + switch (bitmap->type) { + case GSM_StartupLogo : /*size 84*48*/ + case GSM_OperatorLogo : /*size 72*14*/ + case GSM_CallerLogo : /*size 72*14*/ + case GSM_PictureImage : /*size 72*28*/ + return bitmap->height*bitmap->width/8; + + case GSM_7110OperatorLogo: /*size 78*21*/ + return (bitmap->width*bitmap->height + 7)/8; + + case GSM_7110StartupLogo: /*size 96*65*/ + case GSM_6210StartupLogo: /*size 96*60*/ + return (bitmap->height+7)/8*bitmap->width; + + default: + return 0; + } +} + GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap) { int offset = 1; @@ -103,7 +122,7 @@ GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap) if (bitmap->width!=72 || bitmap->height!=14) return GE_INVALIDIMAGESIZE; - bitmap->size = (bitmap->width * bitmap->height) / 8; + bitmap->size = GSM_GetBitmapSize(bitmap); memcpy(bitmap->bitmap, message->MessageText + offset + 3, bitmap->size); #ifdef DEBUG @@ -145,7 +164,7 @@ void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target) bitmap->height=21; } bitmap->type=target; - bitmap->size=(bitmap->width*bitmap->height + 7)/8; + bitmap->size=GSM_GetBitmapSize(bitmap); width=backup.width; if (bitmap->width #include #include diff --git a/common/gsm-coding.c b/common/gsm-coding.c index 52f0105..7baaaa9 100644 --- a/common/gsm-coding.c +++ b/common/gsm-coding.c @@ -8,8 +8,6 @@ */ -#include "config.h" - #include #include @@ -17,18 +15,15 @@ #include "gsm-coding.h" #ifdef WIN32 - #include + #include #else #include "devices/device.h" -#endif +#endif /* Coding functions */ #define NUMBER_OF_7_BIT_ALPHABET_ELEMENTS 128 #ifndef USE_NLS - -#ifndef UCLINUX - static unsigned char GSM_DefaultAlphabet[NUMBER_OF_7_BIT_ALPHABET_ELEMENTS] = { /* ETSI GSM 03.38, version 6.0.1, section 6.2.1; Default alphabet */ @@ -58,15 +53,13 @@ 'x', 'y', 'z', 0xe4, 0xf6, 0xf1, 0xfc, 0xe0 }; -#endif /* UCLINUX */ - #ifndef WIN32 /*Simple UNICODE decoding and encoding from/to iso-8859-2 First version prepared by Martin Kacer Following table contains triplets: first unicode byte, second unicode byte, iso-8859-2 character*/ - static unsigned char unicode_table[][3] = + unsigned char unicode_table[][3] = { /* C< D< E< N< R< S< T< Uo Z< */ {0x01, 0x0C, 0xC8}, {0x01, 0x0E, 0xCF}, {0x01, 0x1A, 0xCC}, @@ -126,8 +119,6 @@ }; #endif -#ifndef UCLINUX - unsigned char EncodeWithDefaultAlphabet(unsigned char value) { unsigned char i; @@ -146,11 +137,6 @@ unsigned char DecodeWithDefaultAlphabet(unsigned char value) return GSM_DefaultAlphabet[value]; } -#endif /* UCLINUX */ - -#ifdef UCLINUX -static -#endif /* UCLINUX */ wchar_t EncodeWithUnicodeAlphabet(unsigned char value) { wchar_t retval; @@ -171,9 +157,6 @@ wchar_t EncodeWithUnicodeAlphabet(unsigned char value) return retval; } -#ifdef UCLINUX -static -#endif /* UCLINUX */ unsigned char DecodeWithUnicodeAlphabet(wchar_t value) { unsigned char retval; @@ -194,8 +177,6 @@ unsigned char DecodeWithUnicodeAlphabet(wchar_t value) #else -#ifndef UCLINUX - /* ETSI GSM 03.38, version 6.0.1, section 6.2.1; Default alphabet */ unsigned char GSM_DefaultAlphabetUnicode[NUMBER_OF_7_BIT_ALPHABET_ELEMENTS+1][2] = { @@ -278,12 +259,8 @@ unsigned char DecodeWithUnicodeAlphabet(wchar_t value) else return retval; } -#endif /* UCLINUX */ - #endif -#ifndef UCLINUX - void DecodeDefault (unsigned char* dest, const unsigned char* src, int len) { int i; @@ -302,8 +279,6 @@ void EncodeDefault (unsigned char* dest, const unsigned char* src, int len) return; } -#endif /* UCLINUX */ - void DecodeUnicode (unsigned char* dest, const unsigned char* src, int len) { int i; @@ -329,13 +304,10 @@ void EncodeUnicode (unsigned char* dest, const unsigned char* src, int len) } } -#ifdef UCLINUX -static -#endif /* UCLINUX */ bool EncodeWithUTF8Alphabet(u8 mychar, u8 *ret1, u8 *ret2) { u8 mychar1,mychar2,mychar3,mychar4; - int j=0; + int j=0; mychar1=((EncodeWithUnicodeAlphabet(mychar)>>8)&0xff); mychar2=EncodeWithUnicodeAlphabet(mychar)&0xff; @@ -345,9 +317,9 @@ bool EncodeWithUTF8Alphabet(u8 mychar, u8 *ret1, u8 *ret2) while (true) { if (mychar3==mychar1) { if (mychar4+64>=mychar2) { - *ret1=j+0xc2; - *ret2=0x80+(mychar2-mychar4); - return true; + *ret1=j+0xc2; + *ret2=0x80+(mychar2-mychar4); + return true; } } if (mychar4==192) { @@ -362,8 +334,6 @@ bool EncodeWithUTF8Alphabet(u8 mychar, u8 *ret1, u8 *ret2) return false; } -#ifndef UCLINUX - void DecodeWithUTF8Alphabet(u8 mychar3, u8 mychar4, u8 *ret) { u8 mychar1, mychar2; @@ -382,12 +352,10 @@ void DecodeWithUTF8Alphabet(u8 mychar3, u8 mychar4, u8 *ret) } mychar2=mychar2+(mychar4-0x80); wc = mychar2 | (mychar1 << 8); - *ret=DecodeWithUnicodeAlphabet(wc); + *ret=DecodeWithUnicodeAlphabet(wc); j=-1; } -#endif /* UCLINUX */ - void EncodeUTF8 (unsigned char* dest, const unsigned char* src, int len) { int i,j=0,z; @@ -405,8 +373,6 @@ void EncodeUTF8 (unsigned char* dest, const unsigned char* src, int len) dest[j++]=0; } -#ifndef UCLINUX - void DecodeUTF8 (unsigned char* dest, const unsigned char* src, int len) { int i=0,j=0; @@ -505,12 +471,13 @@ void EncodeBCD (unsigned char* dest, const unsigned char* src, int len, bool fil unsigned char EncodeWithBCDAlphabet(int value) { - return ((value%10) << 4) | ((value/10) & 0xf); + div_t division; + + division=div(value,10); + return ( ( (value-division.quot*10) & 0x0f) << 4) | (division.quot & 0xf); } int DecodeWithBCDAlphabet(unsigned char value) { return 10*(value & 0x0f)+(value >> 4); } - -#endif /* UCLINUX */ diff --git a/common/gsm-datetime.c b/common/gsm-datetime.c index 13756b0..589dcb3 100644 --- a/common/gsm-datetime.c +++ b/common/gsm-datetime.c @@ -8,16 +8,14 @@ */ -#include "config.h" +#include +#include + +#include "misc.h" +#include "gsm-datetime.h" +#include "gsm-common.h" -#include -#include - -#include "misc.h" -#include "gsm-datetime.h" -#include "gsm-common.h" - -static char DayOfWeekChar; +char DayOfWeekChar; /* Based on article in Polish PC-Kurier 8/1998 page 104 */ /* Archive on http://www.pckurier.pl */ @@ -39,9 +37,7 @@ char *DayOfWeek (int year, int month, int day) { case 6: strcpy(&DayOfWeekChar,"Sat"); break; } return &DayOfWeekChar; -} - -#ifndef UCLINUX +} /* GetMachineDateTime ---------------------------------------------------------- Purpose: Gets system date and time. @@ -51,44 +47,42 @@ Output: date - System date in the format "aaaa-mm-gg". time - System time in the format "hh:mm:ss". Return: - ----------------------------------------------------------------------------- */ -static void GetMachineDateTime( char nowdate[], char nowtime[] ) -{ - struct tm *now; - time_t nowh; - - nowh=time(NULL); - now=localtime(&nowh); - - /* I have 100 (for 2000) Year now :-) */ - if (now->tm_year>99 && now->tm_year<1900) { - now->tm_year=now->tm_year+1900; - } - +void GetMachineDateTime( char nowdate[], char nowtime[] ) +{ + struct tm *now; + time_t nowh; + + nowh=time(NULL); + now=localtime(&nowh); + + /* I have 100 (for 2000) Year now :-) */ + if (now->tm_year>99 && now->tm_year<1900) { + now->tm_year=now->tm_year+1900; + } + sprintf(nowdate,"%04d-%02d-%02d",now->tm_year,now->tm_mon+1,now->tm_mday); - sprintf(nowtime, "%02d:%02d:%02d",now->tm_hour,now->tm_min,now->tm_sec); - -} - -void EncodeDateTime(unsigned char* buffer, GSM_DateTime *datetime) -{ - buffer[0] = datetime->Year / 256; - buffer[1] = datetime->Year % 256; - buffer[2] = datetime->Month; - buffer[3] = datetime->Day; - - buffer[4] = datetime->Hour; - buffer[5] = datetime->Minute; -} - -#endif /* UCLINUX */ - -void DecodeDateTime(unsigned char* buffer, GSM_DateTime *datetime) -{ - datetime->Year = buffer[0] * 256 + buffer[1]; - datetime->Month = buffer[2]; - datetime->Day = buffer[3]; - - datetime->Hour = buffer[4]; - datetime->Minute = buffer[5]; - datetime->Second = buffer[6]; -} + sprintf(nowtime, "%02d:%02d:%02d",now->tm_hour,now->tm_min,now->tm_sec); + +} + +void EncodeDateTime(unsigned char* buffer, GSM_DateTime *datetime) +{ + buffer[0] = datetime->Year / 256; + buffer[1] = datetime->Year % 256; + buffer[2] = datetime->Month; + buffer[3] = datetime->Day; + + buffer[4] = datetime->Hour; + buffer[5] = datetime->Minute; +} + +void DecodeDateTime(unsigned char* buffer, GSM_DateTime *datetime) +{ + datetime->Year = buffer[0] * 256 + buffer[1]; + datetime->Month = buffer[2]; + datetime->Day = buffer[3]; + + datetime->Hour = buffer[4]; + datetime->Minute = buffer[5]; + datetime->Second = buffer[6]; +} diff --git a/common/gsm-networks.c b/common/gsm-networks.c index 26b079a..b36bcf5 100644 --- a/common/gsm-networks.c +++ b/common/gsm-networks.c @@ -10,15 +10,13 @@ */ -#include "config.h" - #include #include "gsm-common.h" #include "gsm-networks.h" #include "gsm-coding.h" -static GSM_Country GSM_Countries[] = +GSM_Country GSM_Countries[] = { { "202", "Greece" }, { "204", "Netherlands" }, @@ -271,49 +269,49 @@ GSM_Network GSM_Networks[] = { "400 01", "AZERCELL GSM" }, { "400 02", "Bakcell GSM 2000" }, - { "404 01", "AIRCELL"}, - { "404 02", "Evergrowth"}, - { "404 03", "Bharthi Telenet"}, - { "404 05", "Fascel"}, - { "404 07", "Tata Cell"}, //TATA Cellular + { "404 01", "AIRCELL"}, + { "404 02", "Evergrowth"}, + { "404 03", "Bharthi Telenet"}, + { "404 05", "Fascel"}, + { "404 07", "Tata Cell"}, //TATA Cellular { "404 08", "Koshika"}, - { "404 09", "Reliance"}, - { "404 10", "AIRTEL"}, //AirTel - { "404 11", "Essar"}, //Essar Cellphone - { "404 12", "Escotel"}, - { "404 14", "Spice"}, //Modicom - { "404 15", "AIRCELL"}, //Essar Cellphone - { "404 18", "Reliance"}, - { "404 19", "Escotel"}, - { "404 20", "Orange"}, //Max Touch - { "404 21", "BPL Mobile"}, //BPL - Mobile - { "404 22", "Birla AT&T"}, - { "404 24", "Birla AT&T"}, - { "404 26", "Koshika"}, - { "404 27", "BPL Mobile"}, //BPL USWEST Cellular - { "404 30", "Usha"}, //Command - { "404 31", "AIRCELL"}, //? - { "404 31", "Command"}, //? - { "404 32", "Koshika"}, - { "404 34", "Koshika"}, - { "404 36", "Reliance"}, - { "404 40", "SkyCell"}, + { "404 09", "Reliance"}, + { "404 10", "AIRTEL"}, //AirTel + { "404 11", "Essar"}, //Essar Cellphone + { "404 12", "Escotel"}, + { "404 14", "Spice"}, //Modicom + { "404 15", "AIRCELL"}, //Essar Cellphone + { "404 18", "Reliance"}, + { "404 19", "Escotel"}, + { "404 20", "Orange"}, //Max Touch + { "404 21", "BPL Mobile"}, //BPL - Mobile + { "404 22", "Birla AT&T"}, + { "404 24", "Birla AT&T"}, + { "404 26", "Koshika"}, + { "404 27", "BPL Mobile"}, //BPL USWEST Cellular + { "404 30", "Usha"}, //Command + { "404 31", "AIRCELL"}, //? + { "404 31", "Command"}, //? + { "404 32", "Koshika"}, + { "404 34", "Koshika"}, + { "404 36", "Reliance"}, + { "404 40", "SkyCell"}, { "404 41", "RPG"}, //RPG Cellular - { "404 42", "AIRCELL"}, //AIRCEL - { "404 43", "BPL Mobile"}, - { "404 44", "Spice"}, - { "404 45", "AIRTEL-blr"}, - { "404 46", "BPL Moibile"}, + { "404 42", "AIRCELL"}, //AIRCEL + { "404 43", "BPL Mobile"}, + { "404 44", "Spice"}, + { "404 45", "AIRTEL-blr"}, + { "404 46", "BPL Moibile"}, { "404 49", "AIRTEL"}, - { "404 50", "Reliance"}, + { "404 50", "Reliance"}, { "404 52", "Reliance"}, { "404 56", "Escotel"}, - { "404 60", "AIRCELL"}, + { "404 60", "AIRCELL"}, { "404 67", "Reliance"}, - { "404 70", "Hexacom"}, - { "404 78", "RPG"}, - { "404 85", "Reliance"}, - + { "404 70", "Hexacom"}, + { "404 78", "RPG"}, + { "404 85", "Reliance"}, + { "410 01", "Mobilink" }, { "413 02", "DIALOG GSM" }, { "415 01", "CELLIS" }, @@ -456,7 +454,7 @@ char *GSM_GetCountryName(char *CountryCode) return GSM_Countries[index].Name; } -static char *GSM_GetCountryCode(char *CountryName) +char *GSM_GetCountryCode(char *CountryName) { int index=0; diff --git a/common/gsm-phonebook.c b/common/gsm-phonebook.c index d3be5bc..bf0fdd3 100644 --- a/common/gsm-phonebook.c +++ b/common/gsm-phonebook.c @@ -10,8 +10,6 @@ */ -#include "config.h" - #include #include #include diff --git a/common/gsm-ringtones.c b/common/gsm-ringtones.c index 8bb013d..588ddad 100644 --- a/common/gsm-ringtones.c +++ b/common/gsm-ringtones.c @@ -223,62 +223,62 @@ u8 GSM_PackRingtone(GSM_Ringtone *ringtone, unsigned char *package, int *maxleng int DefNoteTempo=63; u8 DefNoteStyle=NaturalStyle; - int buffer[6]; /* Used to find default ringtone parameters */ - int i,j,k=0,thisnote,thisnotelong; + int buffer[6]; /* Used to find default ringtone parameters */ + int i,j,k=0,thisnote,thisnotelong; - /* Find the most frequently used duration and use this for the default */ - for (i=0;i<6;i++) buffer[i]=0; - for (i=0;iNrNotes;i++) { - switch (ringtone->notes[i].duration) { - case 192: buffer[0]++; break; - case 128: buffer[0]++; break; - case 96: buffer[1]++; break; - case 64: buffer[1]++; break; - case 48: buffer[2]++; break; - case 32: buffer[2]++; break; - case 24: buffer[3]++; break; - case 16: buffer[3]++; break; - case 12: buffer[4]++; break; - case 8: buffer[4]++; break; - case 6: buffer[5]++; break; - case 4: buffer[5]++; break; - } - } - - /* Now find the most frequently used */ - j=0; - for (i=0;i<6;i++) { - if (buffer[i]>j) { - k=i; - j=buffer[i]; - } - } - - /* Finally convert the default duration */ - switch (k) { - case 0: DefNoteDuration=128; break; - case 1: DefNoteDuration= 64; break; - case 2: DefNoteDuration= 32; break; - case 3: DefNoteDuration= 16; break; - case 4: DefNoteDuration= 8; break; - case 5: DefNoteDuration= 4; break; - default: DefNoteDuration= 16; break; - } - - /* Find the most frequently used scale and use this for the default */ - for (i=0;i<6;i++) buffer[i]=0; - for (i=0;iNrNotes;i++) { - if (ringtone->notes[i].note!=255) { - buffer[ringtone->notes[i].note/14]++; - } - } - j=0; - for (i=0;i<6;i++) { - if (buffer[i]>j) { - DefNoteScale=i; - j=buffer[i]; - } - } + /* Find the most frequently used duration and use this for the default */ + for (i=0;i<6;i++) buffer[i]=0; + for (i=0;iNrNotes;i++) { + switch (ringtone->notes[i].duration) { + case 192: buffer[0]++; break; + case 128: buffer[0]++; break; + case 96: buffer[1]++; break; + case 64: buffer[1]++; break; + case 48: buffer[2]++; break; + case 32: buffer[2]++; break; + case 24: buffer[3]++; break; + case 16: buffer[3]++; break; + case 12: buffer[4]++; break; + case 8: buffer[4]++; break; + case 6: buffer[5]++; break; + case 4: buffer[5]++; break; + } + } + + /* Now find the most frequently used */ + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + k=i; + j=buffer[i]; + } + } + + /* Finally convert the default duration */ + switch (k) { + case 0: DefNoteDuration=128; break; + case 1: DefNoteDuration= 64; break; + case 2: DefNoteDuration= 32; break; + case 3: DefNoteDuration= 16; break; + case 4: DefNoteDuration= 8; break; + case 5: DefNoteDuration= 4; break; + default: DefNoteDuration= 16; break; + } + + /* Find the most frequently used scale and use this for the default */ + for (i=0;i<6;i++) buffer[i]=0; + for (i=0;iNrNotes;i++) { + if (ringtone->notes[i].note!=255) { + buffer[ringtone->notes[i].note/14]++; + } + } + j=0; + for (i=0;i<6;i++) { + if (buffer[i]>j) { + DefNoteScale=i; + j=buffer[i]; + } + } StartBit=BitPackByte(package, StartBit, CommandLength, 8); StartBit=BitPackByte(package, StartBit, RingingToneProgramming, 7); @@ -916,7 +916,7 @@ void PrepareRingingTones(char model[64], char rev[64]) { /* returns names from code or number in menu */ char *RingingToneName(int code, int menu) { - int index=1,i; + int index=1; GSM_Error error; if (code==0) @@ -934,25 +934,14 @@ char *RingingToneName(int code, int menu) } if (!strncmp(RingingTones[index].name,"Uploaded ",9)) { - ringtone.location=atoi(&RingingTones[index].name[10]); + ringtone.location=atoi(&RingingTones[index].name[10]); - error=GSM->GetBinRingtone(&ringtone); - - if (error==GE_NONE) return ringtone.name; - if (error==GE_UNKNOWNMODEL) { - - /* In 33x we have normal "Smart Messaging" format */ - if (GetModelFeature (FN_RINGTONES)==F_RING_SM) { - - i=7; - if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8; - ringtone.frame[i]=0x02; - - GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i); - - return SMringtone.name; - } - } + error=GSM_GetPhoneRingtone(&ringtone,&SMringtone); + + if (error==GE_NONE) { + if (GetModelFeature (FN_RINGTONES)==F_RING_SM) return SMringtone.name; + else return ringtone.name; + } } return RingingTones[index].name; @@ -1021,3 +1010,27 @@ int GSM_SaveRingtoneToSMS(GSM_MultiSMSMessage *SMS, return i; } + +GSM_Error GSM_GetPhoneRingtone(GSM_BinRingtone *ringtone,GSM_Ringtone *SMringtone) +{ + GSM_Error error; + int i; + + error=GSM->GetBinRingtone(ringtone); + + if (error==GE_UNKNOWNMODEL) + { + /* In 3310,... we have normal "Smart Messaging" format */ + if (GetModelFeature (FN_RINGTONES)==F_RING_SM) { + i=7; + if (ringtone->frame[9]==0x4a && ringtone->frame[10]==0x3a) i=8; + ringtone->frame[i]=0x02; + + GSM_UnPackRingtone(SMringtone, ringtone->frame+i, ringtone->length-i); + + return GE_NONE; + } + } + + return error; +} diff --git a/common/gsm-sms.c b/common/gsm-sms.c index cfc0061..9fbb114 100644 --- a/common/gsm-sms.c +++ b/common/gsm-sms.c @@ -8,8 +8,6 @@ */ -#include "config.h" - #include #include #include @@ -20,7 +18,7 @@ #include "gsm-coding.h" /* User data headers */ -static GSM_UDHHeader UDHHeaders[] = { +GSM_UDHHeader UDHHeaders[] = { { GSM_ConcatenatedMessages, 0x05, "\x00\x03\x01\x00\x00" }, /* See GSM 03.40 section 9.2.3.24.1 */ { GSM_DisableVoice, 0x04, "\x01\x02\x00\x00" }, @@ -69,8 +67,7 @@ static GSM_UDHHeader UDHHeaders[] = { #define ByteMask ((1 << Bits) - 1) -#ifndef UCLINUX -static int GSM_PackSevenBitsToEight(int offset, unsigned char *input, unsigned char *output) +int GSM_PackSevenBitsToEight(int offset, unsigned char *input, unsigned char *output) { unsigned char *OUT = output; /* Current pointer to the output buffer */ unsigned char *IN = input; /* Current pointer to the input buffer */ @@ -262,7 +259,7 @@ GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req) } /* See GSM 03.40 section 9.2.3.11 */ -static GSM_Error GSM_DecodeSMSDateTime(GSM_DateTime *DT, unsigned char *req) +GSM_Error GSM_DecodeSMSDateTime(GSM_DateTime *DT, unsigned char *req) { DT->Year = DecodeWithBCDAlphabet(req[0]); DT->Month = DecodeWithBCDAlphabet(req[1]); @@ -295,7 +292,7 @@ static GSM_Error GSM_DecodeSMSDateTime(GSM_DateTime *DT, unsigned char *req) return GE_NONE; } -static int GSM_EncodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI) +int GSM_EncodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI) { int off,size=0,size2=0,w,i; @@ -350,7 +347,7 @@ static int GSM_EncodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage * ETSI->TPDCS |= 0x08; #ifdef DEBUG - fprintf(stdout,_("SMS Length is %ld\n"),(long)strlen(SMS->MessageText)); + fprintf(stdout,_("SMS Length is %i\n"),strlen(SMS->MessageText)); #endif EncodeUnicode (ETSI->MessageText+off,SMS->MessageText,strlen(SMS->MessageText)); @@ -494,7 +491,7 @@ GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *E fprintf(stdout, " 7 bit SMS, body is (length %i): ",SMS->Length); #endif /* DEBUG */ - DecodeDefault (SMS->MessageText, output, tmp); + DecodeDefault (SMS->MessageText, output, SMS->Length); #ifdef DEBUG fprintf(stdout, "%s\n",SMS->MessageText); @@ -733,6 +730,7 @@ GSM_Error GSM_EncodeETSISMSSubmitValidity(GSM_SMSMessage *SMS,GSM_ETSISMSMessage GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length) { int size=0; + GSM_Error error; ETSI->firstbyte=0; ETSI->TPPID=0; @@ -752,8 +750,10 @@ GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_M /* Mask for request for delivery report from SMSC */ if (SMS->Type == GST_DR) ETSI->firstbyte |= 32; - GSM_EncodeETSISMSSubmitHeader(SMS, ETSI); - GSM_EncodeETSISMSSubmitValidity(SMS, ETSI); + error=GSM_EncodeETSISMSSubmitHeader(SMS, ETSI); + if (error!=GE_NONE) return error; + error=GSM_EncodeETSISMSSubmitValidity(SMS, ETSI); + if (error!=GE_NONE) return error; size=GSM_EncodeETSISMSSubmitData(SMS, ETSI); break; @@ -763,7 +763,8 @@ GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_M /* Bits 1 and 0: 00. SMS-Deliver */ ETSI->firstbyte |= 0x00; - GSM_EncodeETSISMSSubmitHeader(SMS, ETSI); + error=GSM_EncodeETSISMSSubmitHeader(SMS, ETSI); + if (error!=GE_NONE) return error; GSM_EncodeSMSDateTime(&SMS->Time, ETSI->DeliveryDateTime); size=GSM_EncodeETSISMSSubmitData(SMS, ETSI); @@ -824,9 +825,8 @@ GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI) return GE_NONE; } -#endif /* UCLINUX */ -static void GSM_SetDefaultSMSData (GSM_SMSMessage *SMS) +void GSM_SetDefaultSMSData (GSM_SMSMessage *SMS) { struct tm *now; time_t nowh; @@ -891,9 +891,6 @@ static void GSM_SetDefaultSMSData (GSM_SMSMessage *SMS) - GSM 03.40 version 6.1.0 Release 1997, section 9.2.3.24 - Smart Messaging Specification, Revision 1.0.0, September 15, 1997 */ -#ifdef UCLINUX -static -#endif /* UCLINUX */ GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType) { int i=0; @@ -917,7 +914,7 @@ GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType) return GE_NONE; } -static int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS, +int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS, unsigned char *MessageBuffer,int cur, GSM_UDH UDHType, GSM_Coding_Type Coding){ int j; diff --git a/common/gsm-wap.c b/common/gsm-wap.c index fb9d3d5..0ef16cc 100644 --- a/common/gsm-wap.c +++ b/common/gsm-wap.c @@ -10,8 +10,6 @@ */ -#include "config.h" - #include #include #include diff --git a/common/misc.c b/common/misc.c index 29d881a..46f8958 100644 --- a/common/misc.c +++ b/common/misc.c @@ -8,11 +8,9 @@ */ -#include "config.h" - -#include -#include -#include +#include +#include +#include #ifndef WIN32 #include @@ -22,10 +20,10 @@ #include #include #include -#endif - -#include "misc.h" -#include "gsm-common.h" +#endif + +#include "misc.h" +#include "gsm-common.h" #ifndef HAVE_TIMEOPS @@ -59,8 +57,6 @@ int GetLine(FILE *File, char *Line, int count) { } else return -1; } -#ifndef UCLINUX - /* * like atoi, but of a non-null-terminated string of a specified portion */ @@ -73,8 +69,6 @@ int mem_to_int(const char str[], int len) return( atoi(aux) ); } -#endif /* UCLINUX */ - /* * make hexdump of Message */ @@ -159,93 +153,3 @@ void txhexdump(u16 MessageLength, u8 *MessageBuffer) fflush(stdout); } #endif - -#ifndef WIN32 - -#ifndef UCLINUX - -#define max_buf_len 128 -#define lock_path "/var/lock/LCK.." - -/* Lock the device. Return allocated string with a lock name */ -char *lock_device(const char* port) -{ - char *lock_file = NULL; - char buffer[max_buf_len]; - char *aux = rindex(port, '/'); - int fd, len = strlen(aux) + strlen(lock_path); - - memset(buffer, 0, sizeof(buffer)); - lock_file = calloc(len + 1, 1); - if (!lock_file) { - fprintf(stderr, _("Cannot lock device\n")); - return NULL; - } - /* I think we don't need to use strncpy, as we should have enough - * buffer due to strlen results - */ - strcpy(lock_file, lock_path); - strcat(lock_file, aux); - - /* Check for the stale lockfile. - * The code taken from minicom by Miquel van Smoorenburg */ - if ((fd = open(lock_file, O_RDONLY)) >= 0) { - char buf[max_buf_len]; - int pid, n = 0; - - n = read(fd, buf, sizeof(buf) - 1); - close(fd); - if (n > 0) { - pid = -1; - if (n == 4) - /* Kermit-style lockfile. */ - pid = *(int *)buf; - else { - /* Ascii lockfile. */ - buf[n] = 0; - sscanf(buf, "%d", &pid); - } - if (pid > 0 && kill((pid_t)pid, 0) < 0 && errno == ESRCH) { - fprintf(stderr, _("Lockfile is stale. Overriding it..\n")); - sleep(1); - unlink(lock_file); - } else - n = 0; - } - if (n == 0) { - free(lock_file); - fprintf(stderr, _("Device is already locked.\n")); - return NULL; - } - } - - /* Try to create a new file, with 0644 mode */ - fd = open(lock_file, O_CREAT | O_EXCL, 0644); - if (fd == -1) { - free(lock_file); - fprintf(stderr, _("Cannot lock device\n")); - return NULL; - } - sprintf(buffer, "%10ld gnokii\n", (long)getpid()); - write(fd, buffer, strlen(buffer)); - close(fd); - return lock_file; -} - -/* Removes lock and frees memory */ -static bool unlock_device(char *lock_file) -{ - int err; - - if (!lock_file) { - fprintf(stderr, _("Cannot unlock device\n")); - return false; - } - err = unlink(lock_file); - free(lock_file); - return (err + 1); -} - -#endif /* UCLINUX */ - -#endif /* WIN32 */ diff --git a/common/newmodules/n6110.c b/common/newmodules/n6110.c index 7033493..e193a5e 100644 --- a/common/newmodules/n6110.c +++ b/common/newmodules/n6110.c @@ -1,155 +1,112 @@ -/* - - G N O K I I - - A Linux/Unix toolset and driver for Nokia mobile phones. - - Released under the terms of the GNU GPL, see file COPYING for more details. - - This file provides an API for accessing functions on the 6110 and similar - phones. - -*/ - -#include "config.h" - -/* "Turn on" prototypes in n-6110.h */ - -#define __n_6110_c - -/* System header files */ -#include -#include -#include - -#ifdef WIN32 - #include "misc_win32.h" -#endif - -/* Various header file */ -#ifndef VC6 - #include "config.h" -#endif - -#include "gsm-api.h" -#include "gsm-coding.h" -#include "newmodules/n6110.h" -#include "newmodules/n7110.h" -#include "protocol/fbus.h" -#include "devices/device.h" -/* Global variables used by code in gsm-api.c to expose the functions - supported by this model of phone. */ - - -/* Here we initialise model specific functions. */ -GSM_Functions N6110_Functions = { - N6110_Initialise, - N6110_DispatchMessage, - NULL_Terminate, - NULL_KeepAlive, - N6110_GetMemoryLocation, - N6110_WritePhonebookLocation, - N6110_GetSpeedDial, - N6110_SetSpeedDial, - N6110_GetMemoryStatus, -#ifndef UCLINUX - N6110_GetSMSStatus, - N6110_GetSMSCenter, - N6110_SetSMSCenter, - N6110_GetSMSMessage, - N6110_DeleteSMSMessage, - N6110_SendSMSMessage, - N6110_SaveSMSMessage, -#else /* UCLINUX */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, -#endif /* UCLINUX */ - N6110_GetRFLevel, - N6110_GetBatteryLevel, - N6110_GetPowerSource, -#ifndef UCLINUX - N6110_GetDisplayStatus, - N6110_EnterSecurityCode, - N6110_GetSecurityCodeStatus, - N6110_GetSecurityCode, -#else /* UCLINUX */ - NULL, - NULL, - NULL, - NULL, -#endif /* UCLINUX */ - N6110_GetIMEI, - N6110_GetRevision, - N6110_GetModel, -#ifndef UCLINUX - N6110_GetDateTime, - N6110_SetDateTime, - N6110_GetAlarm, - N6110_SetAlarm, - N6110_DialVoice, -#else /* UCLINUX */ - NULL, - NULL, - NULL, - NULL, - NULL, -#endif /* UCLINUX */ - N6110_DialData, -#ifndef UCLINUX - N6110_GetIncomingCallNr, - N6110_GetNetworkInfo, - N6110_GetCalendarNote, - N6110_WriteCalendarNote, - N6110_DeleteCalendarNote, - N6110_NetMonitor, - N6110_SendDTMF, - N6110_GetBitmap, - N6110_SetBitmap, - N6110_SetRingTone, - N6110_SetBinRingTone, - N6110_GetBinRingTone, -#else /* UCLINUX */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, -#endif /* UCLINUX */ - N6110_Reset, -#ifndef UCLINUX - N6110_GetProfile, - N6110_SetProfile, -#else /* UCLINUX */ - NULL, - NULL, -#endif /* UCLINUX */ - N6110_SendRLPFrame, - N6110_CancelCall, -#ifndef UCLINUX - N6110_PressKey, - N6110_EnableDisplayOutput, - N6110_DisableDisplayOutput, - N6110_EnableCellBroadcast, - N6110_DisableCellBroadcast, - N6110_ReadCellBroadcast, - N6110_PlayTone, - N6110_GetProductProfileSetting, - N6110_SetProductProfileSetting, - N6110_GetOperatorName, - N6110_SetOperatorName, - N6110_GetVoiceMailbox, N6110_Tests, +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions on the 6110 and similar + phones. + +*/ + +/* "Turn on" prototypes in n-6110.h */ + +#define __n_6110_c + +/* System header files */ +#include +#include +#include + +#ifdef WIN32 + #include "misc_win32.h" +#endif + +/* Various header file */ +#ifndef VC6 + #include "config.h" +#endif + +#include "gsm-api.h" +#include "gsm-coding.h" +#include "newmodules/n6110.h" +#include "newmodules/n7110.h" +#include "protocol/fbus.h" +#include "devices/device.h" + /* Global variables used by code in gsm-api.c to expose the functions + supported by this model of phone. */ + + + + + + + +/* Here we initialise model specific functions. */ +GSM_Functions N6110_Functions = { + N6110_Initialise, + N6110_DispatchMessage, + NULL_Terminate, + NULL_KeepAlive, + N6110_GetMemoryLocation, + N6110_WritePhonebookLocation, + N6110_GetSpeedDial, + N6110_SetSpeedDial, + N6110_GetMemoryStatus, + N6110_GetSMSStatus, + N6110_GetSMSCenter, + N6110_SetSMSCenter, + N6110_GetSMSMessage, + N6110_DeleteSMSMessage, + N6110_SendSMSMessage, + N6110_SaveSMSMessage, + N6110_GetRFLevel, + N6110_GetBatteryLevel, + N6110_GetPowerSource, + N6110_GetDisplayStatus, + N6110_EnterSecurityCode, + N6110_GetSecurityCodeStatus, + N6110_GetSecurityCode, + N6110_GetIMEI, + N6110_GetRevision, + N6110_GetModel, + N6110_GetDateTime, + N6110_SetDateTime, + N6110_GetAlarm, + N6110_SetAlarm, + N6110_DialVoice, + N6110_DialData, + N6110_GetIncomingCallNr, + N6110_GetNetworkInfo, + N6110_GetCalendarNote, + N6110_WriteCalendarNote, + N6110_DeleteCalendarNote, + N6110_NetMonitor, + N6110_SendDTMF, + N6110_GetBitmap, + N6110_SetBitmap, + N6110_SetRingTone, + N6110_SetBinRingTone, + N6110_GetBinRingTone, + N6110_Reset, + N6110_GetProfile, + N6110_SetProfile, + N6110_SendRLPFrame, + N6110_CancelCall, + N6110_PressKey, + N6110_EnableDisplayOutput, + N6110_DisableDisplayOutput, + N6110_EnableCellBroadcast, + N6110_DisableCellBroadcast, + N6110_ReadCellBroadcast, + N6110_PlayTone, + N6110_GetProductProfileSetting, + N6110_SetProductProfileSetting, + N6110_GetOperatorName, + N6110_SetOperatorName, + N6110_GetVoiceMailbox, N6110_Tests, N6110_SimlockInfo, UNIMPLEMENTED, //GetCalendarNotesInfo N6110_GetSMSFolders, @@ -159,635 +116,568 @@ GSM_Functions N6110_Functions = { N7110_GetWAPSettings, N6110_CallDivert, N6110_AnswerCall, -#else /* UCLINUX */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, NULL, - NULL, - NULL, //GetCalendarNotesInfo - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, -#endif /* UCLINUX */ N6110_GetManufacturer -}; - -/* Mobile phone information */ - -GSM_Information N6110_Information = { - "3210|3310|3330|5110|5130|5190|6110|6130|6150|6190|8210|8850", - /* Supported models in FBUS */ - "3210|3310|3330|5110|5130|5190|6110|6130|6150|6190|8210|8850", - /* Supported models in MBUS */ - "6110|6130|6150|8210|8850", - /* Supported models in FBUS over infrared */ - "", - /* Supported models in FBUS over DLR3 */ +}; + +/* Mobile phone information */ + +GSM_Information N6110_Information = { + "3210|3310|3330|5110|5130|5190|6110|6130|6150|6190|8210|8850", + /* Supported models in FBUS */ + "3210|3310|3330|5110|5130|5190|6110|6130|6150|6190|8210|8850|9210", + /* Supported models in MBUS */ + "6110|6130|6150|8210|8850", + /* Supported models in FBUS over infrared */ + "", + /* Supported models in FBUS over DLR3 */ "", /* AT commands */ "8210|8850", /* infrared sockets */ "6110|6130|6150|8210|8850", - /* Supported models in FBUS over infrared with Tekram device */ - 4, /* Max RF Level */ - 0, /* Min RF Level */ - GRF_Arbitrary, /* RF level units */ - 4, /* Max Battery Level */ - 0, /* Min Battery Level */ - GBU_Arbitrary, /* Battery level units */ - GDT_DateTime, /* Have date/time support */ - GDT_TimeOnly, /* Alarm supports time only */ - 1 /* Only one alarm available */ -}; - -#ifdef DEBUG -static const char *N6110_MemoryType_String [] = { - "", /* 0x00 */ - "MT", /* 0x01 */ - "ME", /* 0x02 */ - "SM", /* 0x03 */ - "FD", /* 0x04 */ - "ON", /* 0x05 */ - "EN", /* 0x06 */ - "DC", /* 0x07 */ - "RC", /* 0x08 */ - "MC", /* 0x09 */ -}; -#endif /* DEBUG */ - -/* Magic bytes from the phone. */ -static unsigned char MagicBytes[4] = { 0x00, 0x00, 0x00, 0x00 }; - -/* For DisplayOutput */ -#ifndef UCLINUX -static char PhoneScreen[5+1][27+1]; -static int OldX=1000,OldY=0,NewX=0,NewY=0; -#endif /* UCLINUX */ - -void N6110_ReplyEnableExtendedCommands(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: Answer for EnableExtendedSecurityCommands frame, meaning not known :-(\n")); -#endif /* DEBUG */ - - CurrentEnableExtendedCommandsError=GE_NONE; -} - -/* If you set make some things (for example, - change Security Code from phone's menu, disable and enable - phone), it won't answer for 0x40 frame - you won't be able - to play tones, get netmonitor, etc. - - This function do thing called "Enabling extended security commands" - - it enables 0x40 frame functions. - - This frame can also some other things - see below */ -GSM_Error N6110_EnableExtendedCommands (unsigned char status) -{ - unsigned char req[4] = { 0x00, - 0x01,0x64, /* Enable extended commands request */ - 0x01 }; /* 0x01 - on, 0x00 - off, - 0x03 & 0x04 - soft & hard reset, - 0x06 - CONTACT SERVICE */ - - /* 0x06 MAKES CONTACT SERVICE! BE CAREFULL! */ + /* Supported models in FBUS over infrared with Tekram device */ "", + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_DateTime, /* Have date/time support */ + GDT_TimeOnly, /* Alarm supports time only */ + 1 /* Only one alarm available */ +}; + +const char *N6110_MemoryType_String [] = { + "", /* 0x00 */ + "MT", /* 0x01 */ + "ME", /* 0x02 */ + "SM", /* 0x03 */ + "FD", /* 0x04 */ + "ON", /* 0x05 */ + "EN", /* 0x06 */ + "DC", /* 0x07 */ + "RC", /* 0x08 */ + "MC", /* 0x09 */ +}; + +/* Magic bytes from the phone. */ +unsigned char MagicBytes[4] = { 0x00, 0x00, 0x00, 0x00 }; + +/* For DisplayOutput */ +char PhoneScreen[5+1][27+1]; +int OldX=1000,OldY=0,NewX=0,NewY=0; + +void N6110_ReplyEnableExtendedCommands(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: Answer for EnableExtendedSecurityCommands frame, meaning not known :-(\n")); +#endif /* DEBUG */ + + CurrentEnableExtendedCommandsError=GE_NONE; +} + +/* If you set make some things (for example, + change Security Code from phone's menu, disable and enable + phone), it won't answer for 0x40 frame - you won't be able + to play tones, get netmonitor, etc. + + This function do thing called "Enabling extended security commands" - + it enables 0x40 frame functions. + + This frame can also some other things - see below */ +GSM_Error N6110_EnableExtendedCommands (unsigned char status) +{ + unsigned char req[4] = { 0x00, + 0x01,0x64, /* Enable extended commands request */ + 0x01 }; /* 0x01 - on, 0x00 - off, + 0x03 & 0x04 - soft & hard reset, + 0x06 - CONTACT SERVICE */ + + /* 0x06 MAKES CONTACT SERVICE! BE CAREFULL! */ /* When use 0x03 and had during session changed time & date some phones (like 6150 or 6210) can ask for time & date after reset or disable clock on the screen */ - if (status!=0x06) req[3] = status; - - return NULL_SendMessageSequence - (50, &CurrentEnableExtendedCommandsError, 4, 0x40, req); -} - -void N6110_ReplyIMEI(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#if defined WIN32 || !defined HAVE_SNPRINTF - sprintf(Current_IMEI, "%s", MessageBuffer+4); -#else - snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+4); -#endif - -#ifdef DEBUG - fprintf(stdout, _("Message: IMEI %s received\n"),Current_IMEI); -#endif - - CurrentGetIMEIError=GE_NONE; -} - -GSM_Error N6110_SendIMEIFrame() -{ - unsigned char req[4] = {0x00, 0x01, 0x66, 0x00}; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - return NULL_SendMessageSequence (20, &CurrentGetIMEIError, 4, 0x40, req); -} - -void N6110_ReplyHW(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i, j; - - if (MessageBuffer[3]==0x05) { - -#ifdef DEBUG - fprintf(stdout,_("Message: Hardware version received: ")); -#endif - - j=strlen(Current_Revision); - Current_Revision[j++]=','; - Current_Revision[j++]=' '; - Current_Revision[j++]='H'; - Current_Revision[j++]='W'; - - for (i=5;i<9;i++) { -#ifdef DEBUG - fprintf(stdout,_("%c"), MessageBuffer[i]); -#endif - Current_Revision[j++]=MessageBuffer[i]; - } - -#ifdef DEBUG - fprintf(stdout,_("\n")); -#endif - - CurrentGetHWError=GE_NONE; - } -} - -GSM_Error N6110_SendHWFrame() -{ - unsigned char req[4] = {0x00, 0x01, 0xc8, 0x05}; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - return NULL_SendMessageSequence (20, &CurrentGetHWError, 4, 0x40, req); -} - -void N6110_ReplyID(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i, j; - -#ifdef DEBUG - fprintf(stdout, _("Message: Mobile phone model identification received:\n")); - fprintf(stdout, _(" Firmware: ")); -#endif - - strcpy(Current_Revision,"SW"); - - i=6;j=2; - while (MessageBuffer[i]!=0x0a) { - Current_Revision[j]=MessageBuffer[i]; -#ifdef DEBUG - fprintf(stdout, _("%c"),MessageBuffer[i]); -#endif - if (j==GSM_MAX_REVISION_LENGTH-1) { -#ifdef DEBUG - fprintf(stderr,_("ERROR: increase GSM_MAX_REVISION_LENGTH!\n")); -#endif - break; - } - j++; - i++; - } - Current_Revision[j+1]=0; - -#ifdef DEBUG - fprintf(stdout, _("\n Firmware date: ")); -#endif - - i++; - while (MessageBuffer[i]!=0x0a) { -#ifdef DEBUG - fprintf(stdout, _("%c"),MessageBuffer[i]); -#endif - i++; - } - -#ifdef DEBUG - fprintf(stdout, _("\n Model: ")); -#endif /* DEBUG */ - - i++;j=0; - while (MessageBuffer[i]!=0x0a) { - Current_Model[j]=MessageBuffer[i]; -#ifdef DEBUG - fprintf(stdout, _("%c"),MessageBuffer[i]); -#endif - if (j==GSM_MAX_MODEL_LENGTH-1) { -#ifdef DEBUG - fprintf(stderr,_("ERROR: increase GSM_MAX_MODEL_LENGTH!\n")); -#endif - break; - } - j++; - i++; - } - Current_Model[j+1]=0; - -#ifdef DEBUG - fprintf(stdout, _("\n")); -#endif /* DEBUG */ - - CurrentMagicError=GE_NONE; -} - -GSM_Error N6110_SendIDFrame() -{ - unsigned char req[5] = {N6110_FRAME_HEADER, 0x03, 0x00}; - - return NULL_SendMessageSequence (50, &CurrentMagicError, 5, 0xd1, req); -} - -/* This function send the status request to the phone. */ -/* Seems to be ignored in N3210 */ -GSM_Error N6110_SendStatusRequest(void) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x01}; - - Protocol->SendMessage(4, 0x04, req); - - return (GE_NONE); -} - -static void N6110_ReplyGetAuthentication(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - LIVE; - -#if defined WIN32 || !defined HAVE_SNPRINTF - sprintf(Current_IMEI, "%s", MessageBuffer+9); - sprintf(Current_Model, "%s", MessageBuffer+25); - sprintf(Current_Revision, "SW%s, HW%s", MessageBuffer+44, MessageBuffer+39); -#else - snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+9); - snprintf(Current_Model, GSM_MAX_MODEL_LENGTH, "%s", MessageBuffer+25); - snprintf(Current_Revision, GSM_MAX_REVISION_LENGTH, "SW%s, HW%s", MessageBuffer+44, MessageBuffer+39); -#endif - -#ifdef DEBUG - fprintf(stdout, _("Message: Mobile phone identification received:\n")); - fprintf(stdout, _(" IMEI: %s\n"), Current_IMEI); - fprintf(stdout, _(" Model: %s\n"), Current_Model); - fprintf(stdout, _(" Production Code: %s\n"), MessageBuffer+31); - fprintf(stdout, _(" HW: %s\n"), MessageBuffer+39); - fprintf(stdout, _(" Firmware: %s\n"), MessageBuffer+44); - - /* These bytes are probably the source of the "Accessory not connected" - messages on the phone when trying to emulate NCDS... I hope.... - UPDATE: of course, now we have the authentication algorithm. */ - fprintf(stdout, _(" Magic bytes: %02x %02x %02x %02x\n"), MessageBuffer[50], MessageBuffer[51], MessageBuffer[52], MessageBuffer[53]); -#endif /* DEBUG */ - - MagicBytes[0]=MessageBuffer[50]; - MagicBytes[1]=MessageBuffer[51]; - MagicBytes[2]=MessageBuffer[52]; - MagicBytes[3]=MessageBuffer[53]; - - CurrentMagicError=GE_NONE; -} - -/* This function provides Nokia authentication protocol. - - This code is written specially for gnokii project by Odinokov Serge. - If you have some special requests for Serge just write him to - apskaita@post.omnitel.net or serge@takas.lt - - Reimplemented in C by Pavel Janík ml. - - Nokia authentication protocol is used in the communication between Nokia - mobile phones (e.g. Nokia 6110) and Nokia Cellular Data Suite software, - commercially sold by Nokia Corp. - - The authentication scheme is based on the token send by the phone to the - software. The software does it's magic (see the function - FB61_GetNokiaAuth()) and returns the result back to the phone. If the - result is correct the phone responds with the message "Accessory - connected!" displayed on the LCD. Otherwise it will display "Accessory not - supported" and some functions will not be available for use. - - The specification of the protocol is not publicly available, no comment. */ -static void N6110_GetNokiaAuth(unsigned char *Imei, unsigned char *MagicBytes, unsigned char *MagicResponse) -{ - - int i, j, CRC=0; - - /* This is our temporary working area. */ - - unsigned char Temp[16]; - - /* Here we put FAC (Final Assembly Code) and serial number into our area. */ - - Temp[0] = Imei[6]; - Temp[1] = Imei[7]; - Temp[2] = Imei[8]; - Temp[3] = Imei[9]; - Temp[4] = Imei[10]; - Temp[5] = Imei[11]; - Temp[6] = Imei[12]; - Temp[7] = Imei[13]; - - /* And now the TAC (Type Approval Code). */ - - Temp[8] = Imei[2]; - Temp[9] = Imei[3]; - Temp[10] = Imei[4]; - Temp[11] = Imei[5]; - - /* And now we pack magic bytes from the phone. */ - - Temp[12] = MagicBytes[0]; - Temp[13] = MagicBytes[1]; - Temp[14] = MagicBytes[2]; - Temp[15] = MagicBytes[3]; - - for (i=0; i<=11; i++) - if (Temp[i + 1]& 1) - Temp[i]<<=1; - - switch (Temp[15] & 0x03) { - - case 1: - case 2: - j = Temp[13] & 0x07; - - for (i=0; i<=3; i++) - Temp[i+j] ^= Temp[i+12]; - - break; - - default: - j = Temp[14] & 0x07; - - for (i=0; i<=3; i++) - Temp[i + j] |= Temp[i + 12]; - } - - for (i=0; i<=15; i++) - CRC ^= Temp[i]; - - for (i=0; i<=15; i++) { - - switch (Temp[15 - i] & 0x06) { - - case 0: - j = Temp[i] | CRC; - break; - - case 2: - case 4: - j = Temp[i] ^ CRC; - break; - - case 6: - j = Temp[i] & CRC; - break; - } - - if (j == CRC) - j = 0x2c; - - if (Temp[i] == 0) - j = 0; - - MagicResponse[i] = j; - - } -} - -static GSM_Error N6110_Authentication() -{ - unsigned char connect1[] = {N6110_FRAME_HEADER, 0x0d, 0x00, 0x00, 0x02}; - unsigned char connect2[] = {N6110_FRAME_HEADER, 0x20, 0x02}; - unsigned char connect3[] = {N6110_FRAME_HEADER, 0x0d, 0x01, 0x00, 0x02}; - unsigned char connect4[] = {N6110_FRAME_HEADER, 0x10}; - - unsigned char magic_connect[] = {N6110_FRAME_HEADER, - 0x12, - - /* The real magic goes here ... These bytes are filled in with the - function N6110_GetNokiaAuth(). */ - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - /* NOKIA&GNOKII Accessory */ - - 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x26, 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x79, - - 0x00, 0x00, 0x00, 0x00}; - - unsigned char req3_55[] = { N6110_FRAME_HEADER, 0x42,0x05,0x01, - 0x07,0xa2,0x88,0x81,0x21,0x55,0x63,0xa8,0x00,0x00, - 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }; - unsigned char req3[] = { N6110_FRAME_HEADER, 0x42,0x05,0x01, - 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, - 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }; - unsigned char unknown_05[] = {N6110_FRAME_HEADER, 0x05}; - -#ifdef DEBUG - fprintf(stdout,_("Making authentication!\n")); -#endif - - usleep(100); Protocol->SendMessage(7, 0x02, connect1); - usleep(100); Protocol->SendMessage(5, 0x02, connect2); - usleep(100); Protocol->SendMessage(7, 0x02, connect3); - - usleep(100); Protocol->SendMessage(sizeof(req3_55), 0x01, req3_55); /* Lace */ - - CurrentMagicError = GE_BUSY; - - usleep(100); Protocol->SendMessage(4, 0x64, connect4); - - usleep(100); Protocol->SendMessage(sizeof(req3_55), 0x01, req3_55); /* Lace */ - usleep(100); Protocol->SendMessage(sizeof(req3), 0x01, req3); /* Lace */ - - if (NULL_WaitUntil(50,&CurrentMagicError)!=GE_NONE) return GE_TIMEOUT; - - N6110_GetNokiaAuth(Current_IMEI, MagicBytes, magic_connect+4); - - Protocol->SendMessage(45, 0x64, magic_connect); - - usleep(100); Protocol->SendMessage(4, 0x04, unknown_05); /* Lace */ - -#ifdef DEBUG - fprintf(stdout,_("End of authentication!\n")); -#endif - - return GE_NONE; -} - -/* Initialise variables and state machine. */ -GSM_Error N6110_Initialise(char *port_device, char *initlength, - GSM_ConnectionType connection, - void (*rlp_callback)(RLP_F96Frame *frame)) -{ - unsigned char init_char = N6110_SYNC_BYTE; -#ifndef UCLINUX - unsigned char end_init_char = N6110_IR_END_SYNC_BYTE; -#endif /* UCLINUX */ - - int count; - int InitLength; - - if (Protocol->Initialise(port_device,initlength,connection,rlp_callback)!=GE_NONE) - { - return GE_NOTSUPPORTED; - } + if (status!=0x06) req[3] = status; + + return NULL_SendMessageSequence + (50, &CurrentEnableExtendedCommandsError, 4, 0x40, req); +} + +void N6110_ReplyIMEI(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(Current_IMEI, "%s", MessageBuffer+4); +#else + snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+4); +#endif + +#ifdef DEBUG + fprintf(stdout, _("Message: IMEI %s received\n"),Current_IMEI); +#endif + + CurrentGetIMEIError=GE_NONE; +} + +GSM_Error N6110_SendIMEIFrame() +{ + unsigned char req[4] = {0x00, 0x01, 0x66, 0x00}; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + return NULL_SendMessageSequence (20, &CurrentGetIMEIError, 4, 0x40, req); +} + +void N6110_ReplyHW(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i, j; + + if (MessageBuffer[3]==0x05) { + +#ifdef DEBUG + fprintf(stdout,_("Message: Hardware version received: ")); +#endif + + j=strlen(Current_Revision); + Current_Revision[j++]=','; + Current_Revision[j++]=' '; + Current_Revision[j++]='H'; + Current_Revision[j++]='W'; + + for (i=5;i<9;i++) { +#ifdef DEBUG + fprintf(stdout,_("%c"), MessageBuffer[i]); +#endif + Current_Revision[j++]=MessageBuffer[i]; + } + +#ifdef DEBUG + fprintf(stdout,_("\n")); +#endif + + CurrentGetHWError=GE_NONE; + } +} + +GSM_Error N6110_SendHWFrame() +{ + unsigned char req[4] = {0x00, 0x01, 0xc8, 0x05}; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + return NULL_SendMessageSequence (20, &CurrentGetHWError, 4, 0x40, req); +} + +void N6110_ReplyID(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i, j; + +#ifdef DEBUG + fprintf(stdout, _("Message: Mobile phone model identification received:\n")); + fprintf(stdout, _(" Firmware: ")); +#endif + + strcpy(Current_Revision,"SW"); + + i=6;j=2; + while (MessageBuffer[i]!=0x0a) { + Current_Revision[j]=MessageBuffer[i]; +#ifdef DEBUG + fprintf(stdout, _("%c"),MessageBuffer[i]); +#endif + if (j==GSM_MAX_REVISION_LENGTH-1) { +#ifdef DEBUG + fprintf(stderr,_("ERROR: increase GSM_MAX_REVISION_LENGTH!\n")); +#endif + break; + } + j++; + i++; + } + Current_Revision[j+1]=0; + +#ifdef DEBUG + fprintf(stdout, _("\n Firmware date: ")); +#endif + + i++; + while (MessageBuffer[i]!=0x0a) { +#ifdef DEBUG + fprintf(stdout, _("%c"),MessageBuffer[i]); +#endif + i++; + } + +#ifdef DEBUG + fprintf(stdout, _("\n Model: ")); +#endif /* DEBUG */ + + i++;j=0; + while (MessageBuffer[i]!=0x0a) { + Current_Model[j]=MessageBuffer[i]; +#ifdef DEBUG + fprintf(stdout, _("%c"),MessageBuffer[i]); +#endif + if (j==GSM_MAX_MODEL_LENGTH-1) { +#ifdef DEBUG + fprintf(stderr,_("ERROR: increase GSM_MAX_MODEL_LENGTH!\n")); +#endif + break; + } + j++; + i++; + } + Current_Model[j+1]=0; + +#ifdef DEBUG + fprintf(stdout, _("\n")); +#endif /* DEBUG */ + + CurrentMagicError=GE_NONE; +} + +GSM_Error N6110_SendIDFrame() +{ + unsigned char req[5] = {N6110_FRAME_HEADER, 0x03, 0x00}; + + return NULL_SendMessageSequence (50, &CurrentMagicError, 5, 0xd1, req); +} + +/* This function send the status request to the phone. */ +/* Seems to be ignored in N3210 */ +GSM_Error N6110_SendStatusRequest(void) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x01}; + + Protocol->SendMessage(4, 0x04, req); + + return (GE_NONE); +} + +void N6110_ReplyGetAuthentication(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(Current_IMEI, "%s", MessageBuffer+9); + sprintf(Current_Model, "%s", MessageBuffer+25); + sprintf(Current_Revision, "SW%s, HW%s", MessageBuffer+44, MessageBuffer+39); +#else + snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+9); + snprintf(Current_Model, GSM_MAX_MODEL_LENGTH, "%s", MessageBuffer+25); + snprintf(Current_Revision, GSM_MAX_REVISION_LENGTH, "SW%s, HW%s", MessageBuffer+44, MessageBuffer+39); +#endif + +#ifdef DEBUG + fprintf(stdout, _("Message: Mobile phone identification received:\n")); + fprintf(stdout, _(" IMEI: %s\n"), Current_IMEI); + fprintf(stdout, _(" Model: %s\n"), Current_Model); + fprintf(stdout, _(" Production Code: %s\n"), MessageBuffer+31); + fprintf(stdout, _(" HW: %s\n"), MessageBuffer+39); + fprintf(stdout, _(" Firmware: %s\n"), MessageBuffer+44); + + /* These bytes are probably the source of the "Accessory not connected" + messages on the phone when trying to emulate NCDS... I hope.... + UPDATE: of course, now we have the authentication algorithm. */ + fprintf(stdout, _(" Magic bytes: %02x %02x %02x %02x\n"), MessageBuffer[50], MessageBuffer[51], MessageBuffer[52], MessageBuffer[53]); +#endif /* DEBUG */ + + MagicBytes[0]=MessageBuffer[50]; + MagicBytes[1]=MessageBuffer[51]; + MagicBytes[2]=MessageBuffer[52]; + MagicBytes[3]=MessageBuffer[53]; + + CurrentMagicError=GE_NONE; +} + +/* This function provides Nokia authentication protocol. + + This code is written specially for gnokii project by Odinokov Serge. + If you have some special requests for Serge just write him to + apskaita@post.omnitel.net or serge@takas.lt + + Reimplemented in C by Pavel Janík ml. + + Nokia authentication protocol is used in the communication between Nokia + mobile phones (e.g. Nokia 6110) and Nokia Cellular Data Suite software, + commercially sold by Nokia Corp. + + The authentication scheme is based on the token send by the phone to the + software. The software does it's magic (see the function + FB61_GetNokiaAuth()) and returns the result back to the phone. If the + result is correct the phone responds with the message "Accessory + connected!" displayed on the LCD. Otherwise it will display "Accessory not + supported" and some functions will not be available for use. + + The specification of the protocol is not publicly available, no comment. */ +void N6110_GetNokiaAuth(unsigned char *Imei, unsigned char *MagicBytes, unsigned char *MagicResponse) +{ + + int i, j, CRC=0; + + /* This is our temporary working area. */ + + unsigned char Temp[16]; + + /* Here we put FAC (Final Assembly Code) and serial number into our area. */ + + Temp[0] = Imei[6]; + Temp[1] = Imei[7]; + Temp[2] = Imei[8]; + Temp[3] = Imei[9]; + Temp[4] = Imei[10]; + Temp[5] = Imei[11]; + Temp[6] = Imei[12]; + Temp[7] = Imei[13]; + + /* And now the TAC (Type Approval Code). */ + + Temp[8] = Imei[2]; + Temp[9] = Imei[3]; + Temp[10] = Imei[4]; + Temp[11] = Imei[5]; + + /* And now we pack magic bytes from the phone. */ + + Temp[12] = MagicBytes[0]; + Temp[13] = MagicBytes[1]; + Temp[14] = MagicBytes[2]; + Temp[15] = MagicBytes[3]; + + for (i=0; i<=11; i++) + if (Temp[i + 1]& 1) + Temp[i]<<=1; + + switch (Temp[15] & 0x03) { + + case 1: + case 2: + j = Temp[13] & 0x07; + + for (i=0; i<=3; i++) + Temp[i+j] ^= Temp[i+12]; + + break; + + default: + j = Temp[14] & 0x07; + + for (i=0; i<=3; i++) + Temp[i + j] |= Temp[i + 12]; + } + + for (i=0; i<=15; i++) + CRC ^= Temp[i]; + + for (i=0; i<=15; i++) { + + switch (Temp[15 - i] & 0x06) { + + case 0: + j = Temp[i] | CRC; + break; + + case 2: + case 4: + j = Temp[i] ^ CRC; + break; + + case 6: + j = Temp[i] & CRC; + break; + } + + if (j == CRC) + j = 0x2c; + + if (Temp[i] == 0) + j = 0; + + MagicResponse[i] = j; + + } +} + +GSM_Error N6110_Authentication() +{ + unsigned char connect1[] = {N6110_FRAME_HEADER, 0x0d, 0x00, 0x00, 0x02}; + unsigned char connect2[] = {N6110_FRAME_HEADER, 0x20, 0x02}; + unsigned char connect3[] = {N6110_FRAME_HEADER, 0x0d, 0x01, 0x00, 0x02}; + unsigned char connect4[] = {N6110_FRAME_HEADER, 0x10}; + + unsigned char magic_connect[] = {N6110_FRAME_HEADER, + 0x12, + + /* The real magic goes here ... These bytes are filled in with the + function N6110_GetNokiaAuth(). */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + /* NOKIA&GNOKII Accessory */ + + 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x26, 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x20, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x79, + + 0x00, 0x00, 0x00, 0x00}; + +#ifdef DEBUG + fprintf(stdout,_("Making authentication!\n")); +#endif + + usleep(100); Protocol->SendMessage(7, 0x02, connect1); + usleep(100); Protocol->SendMessage(5, 0x02, connect2); + usleep(100); Protocol->SendMessage(7, 0x02, connect3); + + CurrentMagicError = GE_BUSY; + + usleep(100); Protocol->SendMessage(4, 0x64, connect4); + if (NULL_WaitUntil(50,&CurrentMagicError)!=GE_NONE) return GE_TIMEOUT; + + N6110_GetNokiaAuth(Current_IMEI, MagicBytes, magic_connect+4); + + Protocol->SendMessage(45, 0x64, magic_connect); + +#ifdef DEBUG + fprintf(stdout,_("End of authentication!\n")); +#endif + + return GE_NONE; +} + +/* Initialise variables and state machine. */ +GSM_Error N6110_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + unsigned char init_char = N6110_SYNC_BYTE; + unsigned char end_init_char = N6110_IR_END_SYNC_BYTE; + + int count; + int InitLength; + + if (Protocol->Initialise(port_device,initlength,connection,rlp_callback)!=GE_NONE) + { + return GE_NOTSUPPORTED; + } switch (CurrentConnectionType) { -#ifndef UCLINUX case GCT_Irda: case GCT_MBUS: /* We don't think about authentication in Irda, because AFAIK there are no phones working over sockets and having authentication. In MBUS it doesn't work */ - usleep(100); - - if (N6110_SendIDFrame()!=GE_NONE) return GE_TIMEOUT; - - if (N6110_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT; - - if (N6110_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; - - CurrentLinkOK = true; + usleep(100); + + if (N6110_SendIDFrame()!=GE_NONE) return GE_TIMEOUT; + + if (N6110_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT; + + if (N6110_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; + + CurrentLinkOK = true; break; -#endif /* UCLINUX */ case GCT_FBUS: -#ifndef UCLINUX case GCT_Infrared: case GCT_Tekram: -#endif /* UCLINUX */ - InitLength = atoi(initlength); - - if ((strcmp(initlength, "default") == 0) || (InitLength == 0)) { - InitLength = 250; /* This is the usual value, lower may work. */ - } - -#ifndef UCLINUX + InitLength = atoi(initlength); + + if ((strcmp(initlength, "default") == 0) || (InitLength == 0)) { + InitLength = 250; /* This is the usual value, lower may work. */ + } + if (CurrentConnectionType==GCT_Infrared || - CurrentConnectionType==GCT_Tekram) { -#ifdef DEBUG - fprintf(stdout,_("Setting infrared for FBUS communication...\n")); -#endif - device_changespeed(9600); - } -#endif /* UCLINUX */ - -#ifdef DEBUG - fprintf(stdout,_("Writing init chars....")); -#endif - - /* Initialise link with phone or what have you */ - /* Send init string to phone, this is a bunch of 0x55 characters. Timing is - empirical. */ - for (count = 0; count < InitLength; count ++) { -#ifndef UCLINUX + CurrentConnectionType==GCT_Tekram) { +#ifdef DEBUG + fprintf(stdout,_("Setting infrared for FBUS communication...\n")); +#endif + device_changespeed(9600); + } + +#ifdef DEBUG + fprintf(stdout,_("Writing init chars....")); +#endif + + /* Initialise link with phone or what have you */ + /* Send init string to phone, this is a bunch of 0x55 characters. Timing is + empirical. */ + for (count = 0; count < InitLength; count ++) { if (CurrentConnectionType!=GCT_Infrared && - CurrentConnectionType!=GCT_Tekram) -#endif /* UCLINUX */ - usleep(100); - Protocol->WritePhone(1,&init_char); - } - -#ifndef UCLINUX + CurrentConnectionType!=GCT_Tekram) usleep(100); + Protocol->WritePhone(1,&init_char); + } + if (CurrentConnectionType==GCT_Infrared || - CurrentConnectionType==GCT_Tekram) { - Protocol->WritePhone(1,&end_init_char); + CurrentConnectionType==GCT_Tekram) { + Protocol->WritePhone(1,&end_init_char); usleep(200000); } -#endif /* UCLINUX */ -#ifdef DEBUG - fprintf(stdout,_("Done\n")); -#endif +#ifdef DEBUG + fprintf(stdout,_("Done\n")); +#endif -#ifndef UCLINUX if (CurrentConnectionType==GCT_Infrared || - CurrentConnectionType==GCT_Tekram) { - device_changespeed(115200); + CurrentConnectionType==GCT_Tekram) { + device_changespeed(115200); } -#endif /* UCLINUX */ - - N6110_SendStatusRequest(); - - usleep(100); - - if (N6110_SendIDFrame()!=GE_NONE) return GE_TIMEOUT; - - /* N51xx/61xx have something called authentication. - After making it phone display "Accessory connected" - and probably give access to some function (I'm not too sure about it !) - Anyway, I make it now for N51xx/61xx */ -#if 1 - if (GetModelFeature (FN_AUTHENTICATION)!=0) -#else - if (0/*Lace-hack:GetModelFeature (FN_AUTHENTICATION)!=0*/) -#endif - { - if (N6110_Authentication()!=GE_NONE) return GE_TIMEOUT; - } else { /* No authentication */ - if (N6110_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT; - if (N6110_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; - } + N6110_SendStatusRequest(); + + usleep(100); + + if (N6110_SendIDFrame()!=GE_NONE) return GE_TIMEOUT; + + /* N51xx/61xx have something called authentication. + After making it phone display "Accessory connected" + and probably give access to some function (I'm not too sure about it !) + Anyway, I make it now for N51xx/61xx */ + if (GetModelFeature (FN_AUTHENTICATION)!=0) { + if (N6110_Authentication()!=GE_NONE) return GE_TIMEOUT; + } else { /* No authentication */ + if (N6110_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT; + + if (N6110_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; + } break; default: -#ifdef DEBUG - fprintf(stdout,_("Unknown connection type in n6110.c!\n")); -#endif +#ifdef DEBUG + fprintf(stdout,_("Unknown connection type in n6110.c!\n")); +#endif break; } - return (GE_NONE); -} - -/* This function translates GMT_MemoryType to N6110_MEMORY_xx */ -int N6110_GetMemoryType(GSM_MemoryType memory_type) -{ - - int result; - - switch (memory_type) { - - case GMT_MT: result = N6110_MEMORY_MT; break; - case GMT_ME: result = N6110_MEMORY_ME; break; - case GMT_SM: result = N6110_MEMORY_SM; break; - case GMT_FD: result = N6110_MEMORY_FD; break; - case GMT_ON: result = N6110_MEMORY_ON; break; - case GMT_EN: result = N6110_MEMORY_EN; break; - case GMT_DC: result = N6110_MEMORY_DC; break; - case GMT_RC: result = N6110_MEMORY_RC; break; - case GMT_MC: result = N6110_MEMORY_MC; break; - default : result = N6110_MEMORY_XX; - - } - - return (result); -} - -#ifndef UCLINUX + return (GE_NONE); +} + +/* This function translates GMT_MemoryType to N6110_MEMORY_xx */ +int N6110_GetMemoryType(GSM_MemoryType memory_type) +{ + + int result; + + switch (memory_type) { + + case GMT_MT: result = N6110_MEMORY_MT; break; + case GMT_ME: result = N6110_MEMORY_ME; break; + case GMT_SM: result = N6110_MEMORY_SM; break; + case GMT_FD: result = N6110_MEMORY_FD; break; + case GMT_ON: result = N6110_MEMORY_ON; break; + case GMT_EN: result = N6110_MEMORY_EN; break; + case GMT_DC: result = N6110_MEMORY_DC; break; + case GMT_RC: result = N6110_MEMORY_RC; break; + case GMT_MC: result = N6110_MEMORY_MC; break; + default : result = N6110_MEMORY_XX; + + } + + return (result); +} void N6110_ReplyCallDivert(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { @@ -795,8 +685,8 @@ void N6110_ReplyCallDivert(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) case 0x02: -#ifdef DEBUG - fprintf(stdout, _("Message: Call divert status received\n")); +#ifdef DEBUG + fprintf(stdout, _("Message: Call divert status received\n")); fprintf(stdout, _(" Divert type: ")); switch (MessageBuffer[6]) { case 0x43: fprintf(stdout, _("when busy"));break; @@ -826,41 +716,42 @@ void N6110_ReplyCallDivert(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) fprintf(stdout, _(" Status : deactivated\n")); } #endif /* DEBUG */ - - switch (MessageBuffer[6]) { - case 0x43: CurrentCallDivert->DType=GSM_CDV_Busy;break; - case 0x3d: CurrentCallDivert->DType=GSM_CDV_NoAnswer;break; - case 0x3e: CurrentCallDivert->DType=GSM_CDV_OutOfReach;break; - case 0x15: CurrentCallDivert->DType=GSM_CDV_AllTypes;break; //? - case 0x02: CurrentCallDivert->DType=GSM_CDV_AllTypes;break; //? - } - if (MessageBuffer[6]==0x02) //? - CurrentCallDivert->CType=GSM_CDV_AllCalls; - else { - switch (MessageBuffer[8]) { - case 0x0b: CurrentCallDivert->CType=GSM_CDV_VoiceCalls;break; - case 0x0d: CurrentCallDivert->CType=GSM_CDV_FaxCalls; break; - case 0x19: CurrentCallDivert->CType=GSM_CDV_DataCalls; break; + if (CurrentCallDivert!=NULL) { + switch (MessageBuffer[6]) { + case 0x43: CurrentCallDivert->DType=GSM_CDV_Busy;break; + case 0x3d: CurrentCallDivert->DType=GSM_CDV_NoAnswer;break; + case 0x3e: CurrentCallDivert->DType=GSM_CDV_OutOfReach;break; + case 0x15: CurrentCallDivert->DType=GSM_CDV_AllTypes;break; //? + case 0x02: CurrentCallDivert->DType=GSM_CDV_AllTypes;break; //? } - } - if (MessageBuffer[10]==0x01) { - CurrentCallDivert->Enabled=true; - CurrentCallDivert->Timeout=MessageBuffer[45]; - strcpy(CurrentCallDivert->Number,GSM_UnpackSemiOctetNumber(MessageBuffer+12,true)); - } else { - CurrentCallDivert->Enabled=false; - } + if (MessageBuffer[6]==0x02) //? + CurrentCallDivert->CType=GSM_CDV_AllCalls; + else { + switch (MessageBuffer[8]) { + case 0x0b: CurrentCallDivert->CType=GSM_CDV_VoiceCalls;break; + case 0x0d: CurrentCallDivert->CType=GSM_CDV_FaxCalls; break; + case 0x19: CurrentCallDivert->CType=GSM_CDV_DataCalls; break; + } + } - CurrentCallDivertError=GE_NONE; + if (MessageBuffer[10]==0x01) { + CurrentCallDivert->Enabled=true; + CurrentCallDivert->Timeout=MessageBuffer[45]; + strcpy(CurrentCallDivert->Number,GSM_UnpackSemiOctetNumber(MessageBuffer+12,true)); + } else { + CurrentCallDivert->Enabled=false; + } + CurrentCallDivertError=GE_NONE; + } break; - case 0x03: + case 0x03: #ifdef DEBUG fprintf(stdout, _("Message: Call divert status receiving error ?\n")); -#endif - CurrentCallDivertError=GE_UNKNOWN; +#endif + CurrentCallDivertError=GE_UNKNOWN; break; } } @@ -878,8 +769,8 @@ GSM_Error N6110_CallDivert(GSM_CallDivert *cd) int length = 0x09; switch (cd->Operation) { - case GSM_CDV_Register: - case GSM_CDV_Enable: + case GSM_CDV_Register: + case GSM_CDV_Enable: req[4] = 0x03; req[8] = 0x01; req[29]= GSM_PackSemiOctetNumber(cd->Number, req + 9, false); @@ -926,96 +817,96 @@ GSM_Error N6110_CallDivert(GSM_CallDivert *cd) return error; } - -GSM_Error N6110_Tests() -{ - unsigned char buffer[3]={0x00,0x01,0xcf}; - unsigned char buffer3[8]={0x00,0x01,0xce,0x1d,0xfe,0x23,0x00,0x00}; + +GSM_Error N6110_Tests() +{ + unsigned char buffer[3]={0x00,0x01,0xcf}; + unsigned char buffer3[8]={0x00,0x01,0xce,0x1d,0xfe,0x23,0x00,0x00}; GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); + + error=N6110_EnableExtendedCommands(0x01); if (error!=GE_NONE) return error; - - //make almost all tests - Protocol->SendMessage(8, 0x40, buffer3); - - while (GSM->Initialise(PortDevice, "50", CurrentConnectionType, CurrentRLP_RXCallback)!=GE_NONE) {}; - - sleep(2); - - return NULL_SendMessageSequence - (200, &CurrentNetworkInfoError, 3, 0x40, buffer); -} - -void N6110_DisplayTestsInfo(u8 *MessageBuffer) { - - int i; - - CurrentNetworkInfoError=GE_NONE; - - for (i=0;iSendMessage(8, 0x40, buffer3); + + while (GSM->Initialise(PortDevice, "50", CurrentConnectionType, CurrentRLP_RXCallback)!=GE_NONE) {}; + + sleep(2); + + return NULL_SendMessageSequence + (200, &CurrentNetworkInfoError, 3, 0x40, buffer); +} + +void N6110_DisplayTestsInfo(u8 *MessageBuffer) { + + int i; + + CurrentNetworkInfoError=GE_NONE; + + for (i=0;i> 4))); - j++; - } - if (j==5 || j==15) fprintf(stdout, _("\n")); - if (j!=15) { - if (j<24) { - fprintf(stdout,_("%c"), ('0' + (MessageBuffer[9+i] & 0x0f))); - j++; - } - } else j++; - if (j==20 || j==24) fprintf(stdout, _("\n")); - } + + j=0; + for (i=0; i < 12; i++) + { + if (j<24) { + fprintf(stdout,_("%c"), ('0' + (MessageBuffer[9+i] >> 4))); + j++; + } + if (j==5 || j==15) fprintf(stdout, _("\n")); + if (j!=15) { + if (j<24) { + fprintf(stdout,_("%c"), ('0' + (MessageBuffer[9+i] & 0x0f))); + j++; + } + } else j++; + if (j==20 || j==24) fprintf(stdout, _("\n")); + } if ((MessageBuffer[6] & 1) == 1) fprintf(stdout,_("lock 1 closed\n")); if ((MessageBuffer[6] & 2) == 2) fprintf(stdout,_("lock 2 closed\n")); @@ -1077,17 +968,17 @@ void N6110_ReplySimlockInfo(u16 MessageLength, u8 *MessageBuffer, u8 MessageType CurrentSimlockInfoError=GE_NONE; } -GSM_Error N6110_SimlockInfo(GSM_AllSimlocks *siml) -{ - GSM_Error error; - unsigned char req[] = {0x00,0x01,0x8a,0x00}; - error=N6110_EnableExtendedCommands(0x01); +GSM_Error N6110_SimlockInfo(GSM_AllSimlocks *siml) +{ + GSM_Error error; + unsigned char req[] = {0x00,0x01,0x8a,0x00}; + error=N6110_EnableExtendedCommands(0x01); if (error!=GE_NONE) return error; CurrentSimLock=siml; - return NULL_SendMessageSequence (50, &CurrentSimlockInfoError, 4, 0x40, req); -} + return NULL_SendMessageSequence (50, &CurrentSimlockInfoError, 4, 0x40, req); +} void N6110_ReplyResetPhoneSettings(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { @@ -1098,4753 +989,4648 @@ void N6110_ReplyResetPhoneSettings(u16 MessageLength, u8 *MessageBuffer, u8 Mess CurrentResetPhoneSettingsError=GE_NONE; } -GSM_Error N6110_ResetPhoneSettings() -{ - GSM_Error error; - unsigned char req[] = {0x00,0x01,0x65,0x08,0x00}; - error=N6110_EnableExtendedCommands(0x01); +GSM_Error N6110_ResetPhoneSettings() +{ + GSM_Error error; + unsigned char req[] = {0x00,0x01,0x65,0x08,0x00}; + error=N6110_EnableExtendedCommands(0x01); if (error!=GE_NONE) return error; - return NULL_SendMessageSequence - (50, &CurrentResetPhoneSettingsError, 5, 0x40, req); -} - -#endif /* UCLINUX */ - + return NULL_SendMessageSequence + (50, &CurrentResetPhoneSettingsError, 5, 0x40, req); +} GSM_Error N6110_GetManufacturer(char *manufacturer) { strcpy (manufacturer, "Nokia"); return (GE_NONE); } -#ifndef UCLINUX - -GSM_Error N6110_GetVoiceMailbox ( GSM_PhonebookEntry *entry) +GSM_Error N6110_GetVoiceMailbox ( GSM_PhonebookEntry *entry) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x01, 0x00, 0x00, 0x00}; + + GSM_Error error; + + CurrentPhonebookEntry = entry; + + req[4] = N6110_MEMORY_VOICE; + req[5] = 0x00; /* Location - isn't important, but... */ + + error=NULL_SendMessageSequence + (20, &CurrentPhonebookError, 7, 0x03, req); + + CurrentPhonebookEntry = NULL; + + return error; +} + +void N6110_ReplyGetOperatorName(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i, count; + + GSM_Bitmap NullBitmap; + + DecodeNetworkCode(MessageBuffer+5, NullBitmap.netcode); + + count=8; + +#ifdef DEBUG + fprintf(stdout, _("Message: Info about downloaded operator name received: %s network (for gnokii \"%s\", for phone \""), + NullBitmap.netcode, + GSM_GetNetworkName(NullBitmap.netcode)); +#endif + + i=count; + while (MessageBuffer[count]!=0) { +#ifdef DEBUG + fprintf(stdout,_("%c"),MessageBuffer[count]); +#endif + count++; + } + + strcpy(CurrentGetOperatorNameNetwork->Code, NullBitmap.netcode); + strncpy(CurrentGetOperatorNameNetwork->Name, MessageBuffer+i,count-i+1); + +#ifdef DEBUG + fprintf(stdout,_("\")\n")); +#endif + + CurrentGetOperatorNameError=GE_NONE; +} + +GSM_Error N6110_GetOperatorName (GSM_Network *operator) +{ + unsigned char req[] = { 0x00,0x01,0x8c,0x00}; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + CurrentGetOperatorNameNetwork = operator; + + error=NULL_SendMessageSequence + (20, &CurrentGetOperatorNameError, 4, 0x40, req); + + CurrentGetOperatorNameNetwork = NULL; + + return error; +} + +void N6110_ReplySetOperatorName(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: Downloaded operator name changed\n")); +#endif + + CurrentSetOperatorNameError=GE_NONE; +} + +GSM_Error N6110_SetOperatorName (GSM_Network *operator) +{ + unsigned char req[256] = { 0x00,0x01,0x8b,0x00, + 0x00,0x00, /* MCC */ + 0x00}; /* MNC */ + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + EncodeNetworkCode(req+4,operator->Code); + + strncpy(req+7,operator->Name,200); + + return NULL_SendMessageSequence + (20, &CurrentSetOperatorNameError, 8+strlen(operator->Name), 0x40, req); +} + +void N6110_ReplyGetMemoryStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x08: + +#ifdef DEBUG + fprintf(stdout, _("Message: Memory status received:\n")); + + fprintf(stdout, _(" Memory Type: %s\n"), N6110_MemoryType_String[MessageBuffer[4]]); + fprintf(stdout, _(" Used: %d\n"), MessageBuffer[6]); + fprintf(stdout, _(" Free: %d\n"), MessageBuffer[5]); +#endif /* DEBUG */ + + CurrentMemoryStatus->Used = MessageBuffer[6]; + CurrentMemoryStatus->Free = MessageBuffer[5]; + CurrentMemoryStatusError = GE_NONE; + + break; + + case 0x09: + +#ifdef DEBUG + switch (MessageBuffer[4]) { + case 0x6f: + fprintf(stdout, _("Message: Memory status error, phone is probably powered off.\n"));break; + case 0x7d: + fprintf(stdout, _("Message: Memory status error, memory type not supported by phone model.\n"));break; + case 0x8d: + fprintf(stdout, _("Message: Memory status error, waiting for security code.\n"));break; + default: + fprintf(stdout, _("Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"),MessageBuffer[4]);break; + } +#endif + + switch (MessageBuffer[4]) { + case 0x6f:CurrentMemoryStatusError = GE_TIMEOUT;break; + case 0x7d:CurrentMemoryStatusError = GE_INTERNALERROR;break; + case 0x8d:CurrentMemoryStatusError = GE_INVALIDSECURITYCODE;break; + default:break; + } + + break; + + } +} + +/* This function is used to get storage status from the phone. It currently + supports two different memory areas - internal and SIM. */ +GSM_Error N6110_GetMemoryStatus(GSM_MemoryStatus *Status) +{ + unsigned char req[] = { N6110_FRAME_HEADER, + 0x07, /* MemoryStatus request */ + 0x00 /* MemoryType */ + }; + + GSM_Error error; + + CurrentMemoryStatus = Status; + + req[4] = N6110_GetMemoryType(Status->MemoryType); + + error=NULL_SendMessageSequence + (20, &CurrentMemoryStatusError, 5, 0x03, req); + + CurrentMemoryStatus = NULL; + + return error; +} + +void N6110_ReplyGetNetworkInfo(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + GSM_NetworkInfo NullNetworkInfo; + + /* Make sure we are expecting NetworkInfo frame */ + if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) { +#ifdef DEBUG + fprintf(stdout, _("Message: Network informations:\n")); +#endif + } else { +#ifdef DEBUG + fprintf(stdout, _("Message: Network informations not requested, but received:\n")); +#endif + } + + sprintf(NullNetworkInfo.NetworkCode, "%x%x%x %x%x", MessageBuffer[14] & 0x0f, MessageBuffer[14] >>4, MessageBuffer[15] & 0x0f, MessageBuffer[16] & 0x0f, MessageBuffer[16] >>4); + + sprintf(NullNetworkInfo.CellID, "%02x%02x", MessageBuffer[10], MessageBuffer[11]); + + sprintf(NullNetworkInfo.LAC, "%02x%02x", MessageBuffer[12], MessageBuffer[13]); + +#ifdef DEBUG + fprintf(stdout, _(" CellID: %s\n"), NullNetworkInfo.CellID); + fprintf(stdout, _(" LAC: %s\n"), NullNetworkInfo.LAC); + fprintf(stdout, _(" Network code: %s\n"), NullNetworkInfo.NetworkCode); + fprintf(stdout, _(" Network name: %s (%s)\n"), + GSM_GetNetworkName(NullNetworkInfo.NetworkCode), + GSM_GetCountryName(NullNetworkInfo.NetworkCode)); + fprintf(stdout, _(" Status: ")); + + switch (MessageBuffer[8]) { + case 0x01: fprintf(stdout, _("home network selected")); break; + case 0x02: fprintf(stdout, _("roaming network")); break; + case 0x03: fprintf(stdout, _("requesting network")); break; + case 0x04: fprintf(stdout, _("not registered in the network")); break; + default: fprintf(stdout, _("unknown")); + } + + fprintf(stdout, "\n"); + + fprintf(stdout, _(" Network selection: %s\n"), MessageBuffer[9]==1?_("manual"):_("automatic")); +#endif /* DEBUG */ + + /* Make sure we are expecting NetworkInfo frame */ + if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) + *CurrentNetworkInfo=NullNetworkInfo; + + CurrentNetworkInfoError = GE_NONE; +} + +GSM_Error N6110_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo) +{ + unsigned char req[] = { N6110_FRAME_HEADER, + 0x70 + }; + + GSM_Error error; + + CurrentNetworkInfo = NetworkInfo; + + error=NULL_SendMessageSequence + (20, &CurrentNetworkInfoError, 4, 0x0a, req); + + CurrentNetworkInfo = NULL; + + return error; +} + +void N6110_ReplyGetProductProfileSetting(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i; + +#ifdef DEBUG + fprintf(stdout, _("Message: Product Profile Settings received -")); + for (i=0;i<4;i++) fprintf(stdout, _(" %02x"),MessageBuffer[3+i]); + fprintf(stdout, _("\n")); +#endif + + for (i=0;i<4;i++) CurrentPPS[i]=MessageBuffer[3+i]; + + CurrentProductProfileSettingsError=GE_NONE; +} + +GSM_Error N6110_GetProductProfileSetting (GSM_PPS *PPS) +{ + unsigned char req[] = { 0x00, 0x01,0x6a }; + + int i,j; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + error=NULL_SendMessageSequence + (20, &CurrentProductProfileSettingsError, 3, 0x40, req); + if (error!=GE_NONE) return error; + + switch (PPS->Name) { + case PPS_ALS : PPS->bool_value=(CurrentPPS[1]&32); break; + case PPS_GamesMenu: PPS->bool_value=(CurrentPPS[3]&64); break; + case PPS_HRData : PPS->bool_value=(CurrentPPS[0]&64); break; + case PPS_14400Data: PPS->bool_value=(CurrentPPS[0]&128);break; + case PPS_EFR : PPS->int_value =(CurrentPPS[0]&1) +(CurrentPPS[0]&2); break; + case PPS_FR : PPS->int_value =(CurrentPPS[0]&16)/16+(CurrentPPS[0]&32)/16;break; + case PPS_HR : PPS->int_value =(CurrentPPS[0]&4)/4 +(CurrentPPS[0]&8)/4; break; + case PPS_VibraMenu: PPS->bool_value=(CurrentPPS[4]&64); break; + case PPS_LCDContrast: + PPS->int_value=0; + j=1; + for (i=0;i<5;i++) { + if (CurrentPPS[3]&j) PPS->int_value=PPS->int_value+j; + j=j*2; + } + PPS->int_value=PPS->int_value*100/32; + break; + + } + + return (GE_NONE); +} + +void N6110_ReplySetProductProfileSetting(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + int i; + + fprintf(stdout, _("Message: Product Profile Settings set to")); + for (i=0;i<4;i++) fprintf(stdout, _(" %02x"),CurrentPPS[i]); + fprintf(stdout, _("\n")); +#endif + + CurrentProductProfileSettingsError=GE_NONE; +} + +GSM_Error N6110_SetProductProfileSetting (GSM_PPS *PPS) +{ + unsigned char req[] = { 0x00, 0x01,0x6b, + 0x00, 0x00, 0x00, 0x00 }; /* bytes with Product Profile Setings */ + unsigned char settings[32]; + + GSM_PPS OldPPS; + + int i,j,z; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + OldPPS.Name=PPS_ALS; + error=N6110_GetProductProfileSetting(&OldPPS); + if (error!=GE_NONE) return error; + + j=128;z=0; + for (i=0;i<32;i++) { + if (CurrentPPS[z]&j) + settings[i]='1'; + else + settings[i]='0'; + if (j==1) { + j=128; + z++; + } else j=j/2; + } + +#ifdef DEBUG + fprintf(stdout,_("Current settings: ")); + for (i=0;i<32;i++) { + fprintf(stdout,_("%c"),settings[i]); + } + fprintf(stdout,_("\n")); +#endif + + switch (PPS->Name) { + case PPS_ALS :settings[10]=PPS->bool_value?'1':'0';break; + case PPS_HRData :settings[ 5]=PPS->bool_value?'1':'0';break; + case PPS_14400Data:settings[ 6]=PPS->bool_value?'1':'0';break; + default :break; + } + + j=128;z=0; + for (i=0;i<32;i++) { + if (settings[i]=='1') req[z+3]=req[z+3]+j; + if (j==1) { + j=128; + z++; + } else j=j/2; + } + +#ifdef DEBUG + fprintf(stdout,_("Current settings: ")); + for (i=0;i<4;i++) { + fprintf(stdout,_("%i "),req[i+3]); + } + fprintf(stdout,_("\n")); +#endif + + for (i=0;i<4;i++) { + CurrentPPS[i]=req[i+3]; + } + + return NULL_SendMessageSequence + (20, &CurrentProductProfileSettingsError, 7, 0x40, req); +} + +void N6110_ReplyPressKey(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + if (MessageBuffer[4]==CurrentPressKeyEvent) CurrentPressKeyError=GE_NONE; + else CurrentPressKeyError=GE_UNKNOWN; /* MessageBuffer[4] = 0x05 */ +#ifdef DEBUG + fprintf(stdout, _("Message: Result of key ")); + switch (MessageBuffer[4]) + { + case PRESSPHONEKEY: fprintf(stdout, _("press OK\n"));break; + case RELEASEPHONEKEY: fprintf(stdout, _("release OK\n"));break; + default: fprintf(stdout, _("press or release - error\n"));break; + } +#endif /* DEBUG */ +} + +GSM_Error N6110_PressKey(int key, int event) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x42, 0x01, 0x00, 0x01}; + + req[4]=event; /* if we press or release key */ + req[5]=key; + + CurrentPressKeyEvent=event; + + return NULL_SendMessageSequence + (10, &CurrentPressKeyError, 7, 0x0c, req); +} + +void N6110_ReplyDisplayOutput(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ + char model[64]; + + int i, j; + + char uni[100]; + + switch(MessageBuffer[3]) { + + /* Phone sends displayed texts */ + case 0x50: + NewX=MessageBuffer[6]; + NewY=MessageBuffer[5]; + + DecodeUnicode (uni, MessageBuffer+8, MessageBuffer[7]); + +#ifdef DEBUG + fprintf(stdout, _("New displayed text (%i %i): \"%s\"\n"),NewX,NewY,uni); +#endif /* DEBUG */ + + while (N6110_GetModel(model) != GE_NONE) + sleep(1); + + /* With these rules it works almost excellent with my N5110 */ + /* I don't have general rule :-(, that's why you must experiment */ + /* with your phone. Nokia could make it better. MW */ + /* It's almost OK for N5110*/ + /* FIX ME: it will be the same for N5130 and 3210 too*/ + if (!strcmp(model,"NSE-1")) + { + /* OldX==1000 means - it's first time */ + if (OldX==1000) { + + /* Clean table */ + for (i=0;i<5+1;i++) { + for (j=0;j<27+1;j++) {PhoneScreen[i][j]=' ';} + } + OldX=0; + } + + if ((OldX==0 && OldY==31 && NewX==29 && NewY==46) || + (OldX==0 && OldY==13 && NewX==23 && NewY==46)) { + /* Clean the line with current text */ + for (j=0;j<27+1;j++) {PhoneScreen[NewY/(47/5)][j]=' ';} + + /* Inserts text into table */ + for (i=0; iSendMessage(sizeof(req0), 0x01, req0); + sleep(1); + + return NULL_SendMessageSequence + (20, &CurrentMagicError, sizeof(req) , 0x01, req); +} + +void N6110_ReplyGetProfile(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + /* Profile feature */ + case 0x14: + + switch(GetModelFeature (FN_PROFILES)) { + case F_PROF33: + switch (MessageBuffer[6]) { + case 0x00: CurrentProfile->KeypadTone = MessageBuffer[8]; break; + case 0x01: CurrentProfile->CallAlert = MessageBuffer[8]; break; + case 0x02: CurrentProfile->Ringtone = MessageBuffer[8]; break; + case 0x03: CurrentProfile->Volume = MessageBuffer[8]; break; + case 0x04: CurrentProfile->MessageTone = MessageBuffer[8]; break; + case 0x05: CurrentProfile->Vibration = MessageBuffer[8]; break; + case 0x06: CurrentProfile->WarningTone = MessageBuffer[8]; break; + case 0x07: CurrentProfile->ScreenSaver = MessageBuffer[8]; break; + default: +#ifdef DEBUG + fprintf(stdout,_("feature %i = value %i\n\n"),MessageBuffer[6],MessageBuffer[8]); +#endif + break; + } + break; + default: + switch (MessageBuffer[6]) { + case 0x00: CurrentProfile->KeypadTone = MessageBuffer[8];break; + case 0x01: CurrentProfile->Lights = MessageBuffer[8];break; + case 0x02: CurrentProfile->CallAlert = MessageBuffer[8];break; + case 0x03: CurrentProfile->Ringtone = MessageBuffer[8];break; + case 0x04: CurrentProfile->Volume = MessageBuffer[8];break; + case 0x05: CurrentProfile->MessageTone = MessageBuffer[8];break; + case 0x06: CurrentProfile->Vibration = MessageBuffer[8];break; + case 0x07: CurrentProfile->WarningTone = MessageBuffer[8];break; + case 0x08: CurrentProfile->CallerGroups = MessageBuffer[8];break; + case 0x09: CurrentProfile->AutomaticAnswer = MessageBuffer[8];break; + default: +#ifdef DEBUG + fprintf(stdout,_("feature %i = value %i\n\n"),MessageBuffer[6],MessageBuffer[8]); +#endif + break; + } + break; + } + + CurrentProfileError = GE_NONE; + break; + + /* Incoming profile name */ + case 0x1b: + + if (MessageBuffer[9] == 0x00) { + CurrentProfile->DefaultName=MessageBuffer[8]; + } else { + CurrentProfile->DefaultName=-1; + + /* Here name is in Unicode */ + if (GetModelFeature (FN_PROFILES)==F_PROF33) { + DecodeUnicode (CurrentProfile->Name, MessageBuffer+10, MessageBuffer[9]/2); + } else { + /* ...here not */ + sprintf(CurrentProfile->Name, MessageBuffer + 10, MessageBuffer[9]); + CurrentProfile->Name[MessageBuffer[9]] = '\0'; + } + } + + CurrentProfileError = GE_NONE; + break; + + } +} + +/* Needs SIM card with PIN in phone */ +GSM_Error N6110_GetProfile(GSM_Profile *Profile) +{ + int i; + + unsigned char name_req[] = { N6110_FRAME_HEADER, 0x1a, 0x00}; + unsigned char feat_req[] = { N6110_FRAME_HEADER, 0x13, 0x01, 0x00, 0x00}; + + GSM_Error error; + + CurrentProfile = Profile; + + /* When after sending all frames feature==253, it means, that it is not + supported */ + CurrentProfile->KeypadTone=253; + CurrentProfile->Lights=253; + CurrentProfile->CallAlert=253; + CurrentProfile->Ringtone=253; + CurrentProfile->Volume=253; + CurrentProfile->MessageTone=253; + CurrentProfile->WarningTone=253; + CurrentProfile->Vibration=253; + CurrentProfile->CallerGroups=253; + CurrentProfile->ScreenSaver=253; + CurrentProfile->AutomaticAnswer=253; + + name_req[4] = Profile->Number; + + error=NULL_SendMessageSequence + (20, &CurrentProfileError, 5, 0x05, name_req); + if (error!=GE_NONE) return error; + + for (i = 0x00; i <= 0x09; i++) { + + feat_req[5] = Profile->Number; + + feat_req[6] = i; + + error=NULL_SendMessageSequence + (20, &CurrentProfileError, 7, 0x05, feat_req); + if (error!=GE_NONE) return error; + } + + if (Profile->DefaultName > -1) + { + switch(GetModelFeature (FN_PROFILES)) { + case F_PROF33: + switch (Profile->DefaultName) { + case 0x00: sprintf(Profile->Name, "General");break; + case 0x01: sprintf(Profile->Name, "Silent");break; + case 0x02: sprintf(Profile->Name, "Descreet");break; + case 0x03: sprintf(Profile->Name, "Loud");break; + case 0x04: sprintf(Profile->Name, "My style");break; + case 0x05: Profile->Name[0]=0;break; + default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; + } + break; + case F_PROF51: + switch (Profile->DefaultName) { + case 0x00: sprintf(Profile->Name, "Personal");break; + case 0x01: sprintf(Profile->Name, "Car");break; + case 0x02: sprintf(Profile->Name, "Headset");break; + default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; + } + break; + case F_PROF61: + switch (Profile->DefaultName) { + case 0x00: sprintf(Profile->Name, "General");break; + case 0x01: sprintf(Profile->Name, "Silent");break; + case 0x02: sprintf(Profile->Name, "Meeting");break; + case 0x03: sprintf(Profile->Name, "Outdoor");break; + case 0x04: sprintf(Profile->Name, "Pager");break; + case 0x05: sprintf(Profile->Name, "Car");break; + case 0x06: sprintf(Profile->Name, "Headset");break; + default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; + } + break; + } + } + + return (GE_NONE); + +} + +void N6110_ReplySetProfile(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + /* Profile feature change result */ + case 0x11: +#ifdef DEBUG + fprintf(stdout, _("Message: Profile feature change result.\n")); +#endif /* DEBUG */ + CurrentProfileError = GE_NONE; + break; + + /* Profile name set result */ + case 0x1d: +#ifdef DEBUG + fprintf(stdout, _("Message: Profile name change result.\n")); +#endif /* DEBUG */ + CurrentProfileError = GE_NONE; + break; + + } +} + +GSM_Error N6110_SetProfileFeature(u8 profile, u8 feature, u8 value) +{ + unsigned char feat_req[] = { N6110_FRAME_HEADER, 0x10, 0x01, + 0x00, 0x00, 0x00}; + + feat_req[5]=profile; + feat_req[6]=feature; + feat_req[7]=value; + + return NULL_SendMessageSequence + (20, &CurrentProfileError, 8, 0x05, feat_req); +} + +GSM_Error N6110_SetProfile(GSM_Profile *Profile) +{ + int i,value; + + unsigned char name_req[40] = { N6110_FRAME_HEADER, 0x1c, 0x01, 0x03, + 0x00, 0x00, 0x00}; + + GSM_Error error; + + name_req[7] = Profile->Number; + name_req[8] = strlen(Profile->Name); + name_req[6] = name_req[8] + 2; + + for (i = 0; i < name_req[8]; i++) + name_req[9 + i] = Profile->Name[i]; + + error=NULL_SendMessageSequence + (20, &CurrentProfileError, name_req[8] + 9, 0x05, name_req); + if (error!=GE_NONE) return error; + + for (i = 0x00; i <= 0x09; i++) { + + switch (i) { + case 0x00: value = Profile->KeypadTone; break; + case 0x01: value = Profile->Lights; break; + case 0x02: value = Profile->CallAlert; break; + case 0x03: value = Profile->Ringtone; break; + case 0x04: value = Profile->Volume; break; + case 0x05: value = Profile->MessageTone; break; + case 0x06: value = Profile->Vibration; break; + case 0x07: value = Profile->WarningTone; break; + case 0x08: value = Profile->CallerGroups; break; + case 0x09: value = Profile->AutomaticAnswer; break; + default : value = 0; break; + } + + error=N6110_SetProfileFeature(Profile->Number,i,value); + if (error!=GE_NONE) return error; + } + + return (GE_NONE); +} + +bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + u8 req[60] = { 0x00, 0xd9 }; + + /* Discontinuos transmission (DTX). See section 5.6 of GSM 04.22 version + 7.0.1. */ + + if (out_dtx) + req[1]=0x01; + + memcpy(req+2, (u8 *) frame, 32); + + return (Protocol->SendFrame(32, 0xf0, req)); +} + +void N6110_ReplyGetCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i, j; + + u8 mychar1; + + wchar_t wc; + + switch (MessageBuffer[4]) { + + case 0x01: + + CurrentCalendarNote->Type=MessageBuffer[8]; + + DecodeDateTime(MessageBuffer+9, &CurrentCalendarNote->Time); + + DecodeDateTime(MessageBuffer+16, &CurrentCalendarNote->Alarm); + + CurrentCalendarNote->Text[0]=0; + + if (GetModelFeature (FN_CALENDAR)==F_CAL33) { + i=0; + if (CurrentCalendarNote->Type == GCN_REMINDER) i=1; //first char is subset + switch (MessageBuffer[24]) { + case 3: +#ifdef DEBUG + fprintf(stdout,_("Subset 3 in reminder note !\n")); +#endif + while (i!=MessageBuffer[23]) { + j=0; + if (i!=MessageBuffer[23]-1) { + if (MessageBuffer[24+i]>=0xc2) { + DecodeWithUTF8Alphabet(MessageBuffer[24+i], MessageBuffer[24+i+1], &mychar1); + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]=mychar1; + j=-1; + i++; + } + } + if (j!=-1) { + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]=MessageBuffer[24+i]; + } + i++; + } + break; + case 2: +#ifdef DEBUG + fprintf(stdout,_("Subset 2 in reminder note !\n")); +#endif + while (i!=MessageBuffer[23]) { + wc = MessageBuffer[24+i] | (0x00 << 8); + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; + CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]= + DecodeWithUnicodeAlphabet(wc); + i++; + } + break; + case 1: +#ifdef DEBUG + fprintf(stdout,_("Subset 1 in reminder note !\n")); +#endif + memcpy(CurrentCalendarNote->Text,MessageBuffer+24+i,MessageBuffer[23]-i); + CurrentCalendarNote->Text[MessageBuffer[23]-i]=0; + break; + default: +#ifdef DEBUG + fprintf(stdout,_("Unknown subset in reminder note !\n")); +#endif + memcpy(CurrentCalendarNote->Text,MessageBuffer+24+i,MessageBuffer[23]-i); + CurrentCalendarNote->Text[MessageBuffer[23]-i]=0; + break; + } + } else { + memcpy(CurrentCalendarNote->Text,MessageBuffer+24,MessageBuffer[23]); + CurrentCalendarNote->Text[MessageBuffer[23]]=0; + } + + if (CurrentCalendarNote->Type == GCN_CALL) { + memcpy(CurrentCalendarNote->Phone,MessageBuffer+24+MessageBuffer[23]+1,MessageBuffer[24+MessageBuffer[23]]); + CurrentCalendarNote->Phone[MessageBuffer[24+MessageBuffer[23]]]=0; + } + + CurrentCalendarNote->Recurrance=0; + + CurrentCalendarNote->AlarmType=0; + +#ifdef DEBUG + fprintf(stdout, _("Message: Calendar note received.\n")); + + fprintf(stdout, _(" Date: %d-%02d-%02d\n"), CurrentCalendarNote->Time.Year, + CurrentCalendarNote->Time.Month, + CurrentCalendarNote->Time.Day); + + fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CurrentCalendarNote->Time.Hour, + CurrentCalendarNote->Time.Minute, + CurrentCalendarNote->Time.Second); + + /* Some messages do not have alarm set up */ + if (CurrentCalendarNote->Alarm.Year != 0) { + fprintf(stdout, _(" Alarm date: %d-%02d-%02d\n"), CurrentCalendarNote->Alarm.Year, + CurrentCalendarNote->Alarm.Month, + CurrentCalendarNote->Alarm.Day); + + fprintf(stdout, _(" Alarm time: %02d:%02d:%02d\n"), CurrentCalendarNote->Alarm.Hour, + CurrentCalendarNote->Alarm.Minute, + CurrentCalendarNote->Alarm.Second); + } + + fprintf(stdout, _(" Type: %d\n"), CurrentCalendarNote->Type); + fprintf(stdout, _(" Text: %s\n"), CurrentCalendarNote->Text); + + if (CurrentCalendarNote->Type == GCN_CALL) + fprintf(stdout, _(" Phone: %s\n"), CurrentCalendarNote->Phone); +#endif /* DEBUG */ + + CurrentCalendarNoteError=GE_NONE; + break; + + case 0x93: + +#ifdef DEBUG + fprintf(stdout, _("Message: Calendar note not available\n")); +#endif /* DEBUG */ + + CurrentCalendarNoteError=GE_INVALIDCALNOTELOCATION; + break; + + default: + +#ifdef DEBUG + fprintf(stdout, _("Message: Calendar note error\n")); +#endif /* DEBUG */ + + CurrentCalendarNoteError=GE_INTERNALERROR; + break; + + } +} + +GSM_Error N6110_GetCalendarNote(GSM_CalendarNote *CalendarNote) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x66, 0x00 + }; + GSM_Error error; + + req[4]=CalendarNote->Location; + + CurrentCalendarNote = CalendarNote; + + error=NULL_SendMessageSequence + (20, &CurrentCalendarNoteError, 5, 0x13, req); + + CurrentCalendarNote = NULL; + + return error; +} + +void N6110_ReplyWriteCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + switch(MessageBuffer[4]) { + /* This message is also sent when the user enters the new entry on keypad */ + case 0x01: + fprintf(stdout, _("Message: Calendar note write succesfull!\n"));break; + case 0x73: + fprintf(stdout, _("Message: Calendar note write failed!\n"));break; + case 0x7d: + fprintf(stdout, _("Message: Calendar note write failed!\n"));break; + default: + fprintf(stdout, _("Unknown message of type 0x13 and subtype 0x65\n"));break; + } +#endif + + switch(MessageBuffer[4]) { + case 0x01: CurrentCalendarNoteError=GE_NONE; break; + case 0x73: CurrentCalendarNoteError=GE_INTERNALERROR; break; + case 0x7d: CurrentCalendarNoteError=GE_INTERNALERROR; break; + default : AppendLogText("Unknown msg\n",false); break; + } +} + +GSM_Error N6110_WriteCalendarNote(GSM_CalendarNote *CalendarNote) +{ + + unsigned char req[200] = { N6110_FRAME_HEADER, + 0x64, 0x01, 0x10, + 0x00, /* Length of the rest of the frame. */ + 0x00, /* The type of calendar note */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + typedef struct { + char *model; + unsigned char call; + unsigned char meeting; + unsigned char birthday; + unsigned char reminder; + } calendar_model_length; + + /* Length of entries */ + calendar_model_length calendar_lengths[] = + { + /*model,CallTo,Meeting,Birthday,Reminder*/ + {"NHM-5",0x24,0x24,0x24,0x24}, //Reminder from phone, other quesses + {"NHM-6",0x24,0x24,0x24,0x24}, //Reminder from phone, other quesses + {"NSE-3",0x1e,0x14,0x14,0x1e}, //from NCDS3 [HKEY_LOCAL_MACHINE\Software\Nokia\Data Suite\3.0\Calendar] + {"NSM-1",0x1e,0x18,0x18,0x24}, //from NCDS3 + {"NSK-3",0x1e,0x14,0x14,0x1e}, //from NCDS3 + {"NSB-3",0x20,0x14,0x14,0x1e}, //from NCDS3 + {"", 0, 0, 0, 0 } //end of table + }; + + int i, j, current; + + u8 mychar; + + u8 mychar1,mychar2; + + GSM_Error error; + + /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ + char model[64]; + + req[7]=CalendarNote->Type; + + EncodeDateTime(req+8, &CalendarNote->Time); + req[14] = CalendarNote->Time.Timezone; + + if (CalendarNote->Alarm.Year) { + EncodeDateTime(req+15, &CalendarNote->Alarm); + req[21] = CalendarNote->Alarm.Timezone; + } + + req[22]=strlen(CalendarNote->Text); + + current=23; + + if (GetModelFeature (FN_CALENDAR)==F_CAL33 && CalendarNote->Type==GCN_REMINDER) { + req[22]++; // one additional char + req[current++]=0x01; //we use now subset 1 + } + + for (i=0; iText); i++) { + j=0; + mychar=CalendarNote->Text[i]; + if (GetModelFeature (FN_CALENDAR)==F_CAL33 && CalendarNote->Type==GCN_REMINDER) { + if (EncodeWithUTF8Alphabet(mychar,&mychar1,&mychar2)) { + req[current++]=mychar1; + req[current++]=mychar2; + req[23]=0x03; //use subset 3 + req[22]++; // one additional char + j=-1; + } + } + if (j!=-1) { + /* Enables/disables blinking */ + if (mychar=='~') req[current++]=0x01; + else req[current++]=mychar; + } + } + + req[current++]=strlen(CalendarNote->Phone); + + for (i=0; iPhone); i++) + req[current++]=CalendarNote->Phone[i]; + + while (N6110_GetModel(model) != GE_NONE) + sleep(1); + + /* Checking maximal length */ + i=0; + while (strcmp(calendar_lengths[i].model,"")) { + if (!strcmp(calendar_lengths[i].model,model)) { + switch (CalendarNote->Type) { + case GCN_REMINDER:if (req[22]>calendar_lengths[i].reminder) return GE_TOOLONG;break; + case GCN_MEETING :if (req[22]>calendar_lengths[i].meeting) return GE_TOOLONG;break; + case GCN_BIRTHDAY:if (req[22]>calendar_lengths[i].birthday) return GE_TOOLONG;break; + case GCN_CALL :if (strlen(CalendarNote->Phone)>calendar_lengths[i].call) return GE_TOOLONG;break; + } + break; + } + i++; + } + + CurrentCalendarNote = CalendarNote; + + error=NULL_SendMessageSequence + (20, &CurrentCalendarNoteError, current, 0x13, req); + + CurrentCalendarNote = NULL; + + return error; +} + +void N6110_ReplyDeleteCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + switch (MessageBuffer[4]) { + /* This message is also sent when the user deletes an old entry on + keypad or moves an old entry somewhere (there is also `write' + message). */ + case 0x01:fprintf(stdout, _("Message: Calendar note deleted\n"));break; + case 0x93:fprintf(stdout, _("Message: Calendar note can't be deleted\n"));break; + default :fprintf(stdout, _("Message: Calendar note deleting error\n"));break; + } +#endif + + switch (MessageBuffer[4]) { + case 0x01:CurrentCalendarNoteError=GE_NONE;break; + case 0x93:CurrentCalendarNoteError=GE_INVALIDCALNOTELOCATION;break; + default :CurrentCalendarNoteError=GE_INTERNALERROR;break; + } +} + +GSM_Error N6110_DeleteCalendarNote(GSM_CalendarNote *CalendarNote) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x68, 0x00 + }; + + req[4]=CalendarNote->Location; + + return NULL_SendMessageSequence (20, &CurrentCalendarNoteError, 5, 0x13, req); +} + +void N6110_ReplyRFBatteryLevel(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: Phone status received:\n")); + fprintf(stdout, _(" Mode: ")); + + switch (MessageBuffer[4]) { + + case 0x01: + + fprintf(stdout, _("registered within the network\n")); + break; + + /* I was really amazing why is there a hole in the type of 0x02, now I + know... */ + case 0x02: fprintf(stdout, _("call in progress\n")); break; /* ringing or already answered call */ + case 0x03: fprintf(stdout, _("waiting for security code\n")); break; + case 0x04: fprintf(stdout, _("powered off\n")); break; + default : fprintf(stdout, _("unknown\n")); + + } + + fprintf(stdout, _(" Power source: ")); + + switch (MessageBuffer[7]) { + + case 0x01: fprintf(stdout, _("AC/DC\n")); break; + case 0x02: fprintf(stdout, _("battery\n")); break; + default : fprintf(stdout, _("unknown\n")); + + } + + fprintf(stdout, _(" Battery Level: %d\n"), MessageBuffer[8]); + fprintf(stdout, _(" Signal strength: %d\n"), MessageBuffer[5]); +#endif /* DEBUG */ + + CurrentRFLevel=MessageBuffer[5]; + CurrentBatteryLevel=MessageBuffer[8]; + CurrentPowerSource=MessageBuffer[7]; +} + + +GSM_Error N6110_GetRFLevel(GSM_RFUnits *units, float *level) +{ + + /* FIXME - these values are from 3810 code, may be incorrect. Map from + values returned in status packet to the the values returned by the AT+CSQ + command. */ + float csq_map[5] = {0, 8, 16, 24, 31}; + + int timeout=10; + int rf_level; + + char screen[NM_MAX_SCREEN_WIDTH]; + + CurrentRFLevel=-1; + + if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { + + if (N6110_NetMonitor(1, screen)!=GE_NONE) + return GE_INTERNALERROR; + + rf_level=4; + + if (screen[4]!='-') { + if (screen[5]=='9' && screen[6]>'4') rf_level=1; + if (screen[5]=='9' && screen[6]<'5') rf_level=2; + if (screen[5]=='8' && screen[6]>'4') rf_level=3; + } else rf_level=0; + + /* Arbitrary units. */ + if (*units == GRF_Arbitrary) { + *level = rf_level; + return (GE_NONE); + } + + } else { + N6110_SendStatusRequest(); + + /* Wait for timeout or other error. */ + while (timeout != 0 && CurrentRFLevel == -1 ) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + /* Make copy in case it changes. */ + rf_level = CurrentRFLevel; + + if (rf_level == -1) + return (GE_NOLINK); + + /* Now convert between the different units we support. */ + + /* Arbitrary units. */ + if (*units == GRF_Arbitrary) { + *level = rf_level; + return (GE_NONE); + } + + /* CSQ units. */ + if (*units == GRF_CSQ) { + + if (rf_level <=4) + *level = csq_map[rf_level]; + else + *level = 99; /* Unknown/undefined */ + + return (GE_NONE); + } + } + + /* Unit type is one we don't handle so return error */ + return (GE_INTERNALERROR); +} + + +GSM_Error N6110_GetBatteryLevel(GSM_BatteryUnits *units, float *level) +{ + int timeout=10; + int batt_level; + + char screen[NM_MAX_SCREEN_WIDTH]; + + CurrentBatteryLevel=-1; + + if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { + + if (N6110_NetMonitor(23, screen)!=GE_NONE) + return GE_NOLINK; + + batt_level=4; + + if (screen[29]=='7') batt_level=3; + if (screen[29]=='5') batt_level=2; + if (screen[29]=='2') batt_level=1; + + /* Only units we handle at present are GBU_Arbitrary */ + if (*units == GBU_Arbitrary) { + *level = batt_level; + return (GE_NONE); + } + + return (GE_INTERNALERROR); + + } else { + N6110_SendStatusRequest(); + + /* Wait for timeout or other error. */ + while (timeout != 0 && CurrentBatteryLevel == -1 ) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + /* Take copy in case it changes. */ + batt_level = CurrentBatteryLevel; + + if (batt_level != -1) { + + /* Only units we handle at present are GBU_Arbitrary */ + if (*units == GBU_Arbitrary) { + *level = batt_level; + return (GE_NONE); + } + + return (GE_INTERNALERROR); + } + else + return (GE_NOLINK); + } +} + +GSM_Error N6110_GetPowerSource(GSM_PowerSource *source) +{ + + int timeout=10; + + char screen[NM_MAX_SCREEN_WIDTH]; + + CurrentPowerSource=-1; + + if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { + + if (N6110_NetMonitor(20, screen)!=GE_NONE) + return GE_NOLINK; + + CurrentPowerSource=GPS_ACDC; + + if (screen[6]=='x') CurrentPowerSource=GPS_BATTERY; + + *source=CurrentPowerSource; + + return GE_NONE; + } else { + N6110_SendStatusRequest(); + + /* Wait for timeout or other error. */ + while (timeout != 0 && CurrentPowerSource == -1 ) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + if (CurrentPowerSource != -1) { + *source=CurrentPowerSource; + return (GE_NONE); + } + else + return (GE_NOLINK); + } +} + +void N6110_ReplyGetDisplayStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i; + + for (i=0; iSendMessage(sizeof(req3), 0x01, req3); + usleep(1000000); + Protocol->SendMessage(sizeof(req4), 0x01, req4); + usleep(1000000); + req_end = req_end1; + size = sizeof(req_end1); + break; + case -1: /* Just used to set the call passup */ + return GE_NONE; + break; + default: + req_end = req_end0; + size = sizeof(req_end0); + break; + } -void N6110_ReplyGetOperatorName(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + req[4] = strlen(Number); - int i, count; - - GSM_Bitmap NullBitmap; + for(i = 0; i < strlen(Number) ; i++) + req[5+i] = Number[i]; - DecodeNetworkCode(MessageBuffer+5, NullBitmap.netcode); - - count=8; + memcpy(req + 5 + strlen(Number), req_end, size); -#ifdef DEBUG - fprintf(stdout, _("Message: Info about downloaded operator name received: %s network (for gnokii \"%s\", for phone \""), - NullBitmap.netcode, - GSM_GetNetworkName(NullBitmap.netcode)); -#endif - - i=count; - while (MessageBuffer[count]!=0) { -#ifdef DEBUG - fprintf(stdout,_("%c"),MessageBuffer[count]); -#endif - count++; - } - - strcpy(CurrentGetOperatorNameNetwork->Code, NullBitmap.netcode); - strncpy(CurrentGetOperatorNameNetwork->Name, MessageBuffer+i,count-i+1); + Protocol->SendMessage(5 + size + strlen(Number), 0x01, req); + usleep(1000000); + + if (type != 1) { + Protocol->SendMessage(26, 0x01, req2); + usleep(1000000); + } -#ifdef DEBUG - fprintf(stdout,_("\")\n")); -#endif - - CurrentGetOperatorNameError=GE_NONE; + return (GE_NONE); } -GSM_Error N6110_GetOperatorName (GSM_Network *operator) -{ - unsigned char req[] = { 0x00,0x01,0x8c,0x00}; +GSM_Error N6110_GetIncomingCallNr(char *Number) +{ + + if (*CurrentIncomingCall != ' ') { + strcpy(Number, CurrentIncomingCall); + return GE_NONE; + } + else + return GE_BUSY; +} +GSM_Error N6110_CancelCall(void) +{ +// This frame & method works only on 61xx/51xx +// unsigned char req[] = { N6110_FRAME_HEADER, 0x08, 0x00, 0x85}; +// req[4]=CurrentCallSequenceNumber; +// Protocol->SendMessage(6, 0x01, req); +// return GE_NONE; + GSM_Error error; + unsigned char req[]={0x00,0x01,0x7c,0x03}; + + /* Checking */ error=N6110_EnableExtendedCommands(0x01); if (error!=GE_NONE) return error; - CurrentGetOperatorNameNetwork = operator; + return NULL_SendMessageSequence (20, &CurrentDialVoiceError, 4, 0x40, req); +} + +void N6110_ReplyEnterSecurityCode(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch(MessageBuffer[3]) { + + case 0x0b: +#ifdef DEBUG + fprintf(stdout, _("Message: Security code accepted.\n")); +#endif /* DEBUG */ + CurrentSecurityCodeError = GE_NONE; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _("Message: Security code is wrong. You're not my big owner :-)\n")); +#endif /* DEBUG */ + CurrentSecurityCodeError = GE_INVALIDSECURITYCODE; + } +} + +GSM_Error N6110_EnterSecurityCode(GSM_SecurityCode SecurityCode) +{ + + unsigned char req[15] = { N6110_FRAME_HEADER, + 0x0a, /* Enter code request. */ + 0x00 /* Type of the entered code. */ + }; + int i=0; + + req[4]=SecurityCode.Type; + + for (i=0; iType==MessageBuffer[3] /* We wanted this code */ + && MessageBuffer[4]==1) { /* It's allowed */ + if (MessageBuffer[3]==GSCT_SecurityCode) { + for (i=0;i<5;i++) {CurrentSecurityCode->Code[i]=MessageBuffer[5+i];} + CurrentSecurityCode->Code[5]=0; + } + if (MessageBuffer[3]==GSCT_Pin || MessageBuffer[3]==GSCT_Pin2 || + MessageBuffer[3]==GSCT_Puk || MessageBuffer[3]==GSCT_Puk2) { + for (i=0;i<4;i++) {CurrentSecurityCode->Code[i]=MessageBuffer[5+i];} + CurrentSecurityCode->Code[4]=0; + } + CurrentSecurityCodeError=GE_NONE; + } else + CurrentSecurityCodeError=GE_INVALIDSECURITYCODE; +} + +GSM_Error N6110_GetSecurityCode(GSM_SecurityCode *SecurityCode) +{ + + unsigned char req[4] = { 0x00, + 0x01,0x6e, /* Get code request. */ + 0x00 }; /* Type of the requested code. */ + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + req[3]=SecurityCode->Type; + + CurrentSecurityCode=SecurityCode; + + return NULL_SendMessageSequence + (20, &CurrentSecurityCodeError, 4, 0x40, req); +} + +void N6110_ReplyPlayTone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: answer for PlayTone frame\n")); +#endif + + CurrentPlayToneError=GE_NONE; +} + +GSM_Error N6110_PlayTone(int Herz, u8 Volume) +{ + unsigned char req[6] = { 0x00,0x01,0x8f, + 0x00, /* Volume */ + 0x00, /* HerzLo */ + 0x00 }; /* HerzHi */ + + GSM_Error error; + + /* PlayTone wasn't used earlier */ + if (CurrentPlayToneError==GE_UNKNOWN) { + if (CurrentConnectionType!=GCT_MBUS) + CurrentDisableKeepAlive=true; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + } + + /* For Herz==255*255 we have silent */ + if (Herz!=255*255) { + req[3]=Volume; + + req[5]=Herz%256; + req[4]=Herz/256; + } else { + req[3]=0; + + req[5]=0; + req[4]=0; + } + +#ifdef WIN32 + /* For Herz==255*255 we have silent and additionaly + we wait for phone answer - it's important for MBUS */ + if (Herz==255*255) { + error=NULL_SendMessageSequence + (20, &CurrentPlayToneError, 6, 0x40, req); + + CurrentPlayToneError=GE_UNKNOWN; + CurrentDisableKeepAlive=false; + + if (error!=GE_NONE) return error; + } else { + Protocol->SendMessage(6,0x40,req); + } +#else + error=NULL_SendMessageSequence + (20, &CurrentPlayToneError, 6, 0x40, req); + + /* For Herz==255*255 we wait for phone answer - it's important for MBUS */ + if (Herz==255*255) { + CurrentPlayToneError=GE_UNKNOWN; + CurrentDisableKeepAlive=false; + } + + if (error!=GE_NONE) return error; + +#endif + + return(GE_NONE); +} + +void N6110_ReplyGetDateTime(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + if (MessageBuffer[4]==0x01) { + DecodeDateTime(MessageBuffer+8, CurrentDateTime); + +#ifdef DEBUG + fprintf(stdout, _("Message: Date and time\n")); + fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CurrentDateTime->Hour, CurrentDateTime->Minute, CurrentDateTime->Second); + fprintf(stdout, _(" Date: %4d/%02d/%02d\n"), CurrentDateTime->Year, CurrentDateTime->Month, CurrentDateTime->Day); +#endif /* DEBUG */ + + CurrentDateTime->IsSet=true; + } else { + +#ifdef DEBUG + fprintf(stdout, _("Message: Date and time not set in phone\n")); +#endif + + CurrentDateTime->IsSet=false; + } + + CurrentDateTimeError=GE_NONE; +} + +GSM_Error N6110_GetDateTime(GSM_DateTime *date_time) +{ + return N6110_PrivGetDateTime(date_time,0x11); +} + +GSM_Error N6110_PrivGetDateTime(GSM_DateTime *date_time, int msgtype) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x62}; + + CurrentDateTime=date_time; + + return NULL_SendMessageSequence + (50, &CurrentDateTimeError, 4, msgtype, req); +} + +void N6110_ReplyGetAlarm(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: Alarm\n")); + fprintf(stdout, _(" Alarm: %02d:%02d\n"), MessageBuffer[9], MessageBuffer[10]); + fprintf(stdout, _(" Alarm is %s\n"), (MessageBuffer[8]==2) ? _("on"):_("off")); +#endif /* DEBUG */ + + CurrentAlarm->Hour=MessageBuffer[9]; + CurrentAlarm->Minute=MessageBuffer[10]; + CurrentAlarm->Second=0; + + CurrentAlarm->IsSet=(MessageBuffer[8]==2); + + CurrentAlarmError=GE_NONE; +} + +GSM_Error N6110_GetAlarm(int alarm_number, GSM_DateTime *date_time) +{ + return N6110_PrivGetAlarm(alarm_number,date_time,0x11); +} + +GSM_Error N6110_PrivGetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x6d}; + + CurrentAlarm=date_time; + + return NULL_SendMessageSequence + (50, &CurrentAlarmError, 4, msgtype, req); +} + +void N6110_ReplyGetSMSCenter(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x34: + + CurrentMessageCenter->No=MessageBuffer[4]; + CurrentMessageCenter->Format=MessageBuffer[6]; + CurrentMessageCenter->Validity=MessageBuffer[8]; + sprintf(CurrentMessageCenter->Name, "%s", MessageBuffer+33); + + sprintf(CurrentMessageCenter->DefaultRecipient, "%s", GSM_UnpackSemiOctetNumber(MessageBuffer+9,false)); + + sprintf(CurrentMessageCenter->Number, "%s", GSM_UnpackSemiOctetNumber(MessageBuffer+21,false)); + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS Center received:\n")); + fprintf(stdout, _(" %d. SMS Center name is %s\n"), CurrentMessageCenter->No, CurrentMessageCenter->Name); + fprintf(stdout, _(" SMS Center number is %s\n"), CurrentMessageCenter->Number); + fprintf(stdout, _(" Default recipient number is %s\n"), CurrentMessageCenter->DefaultRecipient); + + fprintf(stdout, _(" SMS Center message format is ")); + + switch (CurrentMessageCenter->Format) { + + case GSMF_Text : fprintf(stdout, _("Text")); break; + case GSMF_Paging: fprintf(stdout, _("Paging")); break; + case GSMF_Fax : fprintf(stdout, _("Fax")); break; + case GSMF_Email : fprintf(stdout, _("Email")); break; + default : fprintf(stdout, _("Unknown")); + } + + fprintf(stdout, "\n"); + + fprintf(stdout, _(" SMS Center message validity is ")); + + switch (CurrentMessageCenter->Validity) { + + case GSMV_1_Hour : fprintf(stdout, _("1 hour")); break; + case GSMV_6_Hours : fprintf(stdout, _("6 hours")); break; + case GSMV_24_Hours: fprintf(stdout, _("24 hours")); break; + case GSMV_72_Hours: fprintf(stdout, _("72 hours")); break; + case GSMV_1_Week : fprintf(stdout, _("1 week")); break; + case GSMV_Max_Time: fprintf(stdout, _("Maximum time"));break; + default : fprintf(stdout, _("Unknown")); + } + + fprintf(stdout, "\n"); + +#endif /* DEBUG */ + + CurrentMessageCenterError=GE_NONE; + + break; + + case 0x35: + + /* Number of entries depends on SIM card */ + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS Center error received:\n")); + fprintf(stdout, _(" The request for SMS Center failed.\n")); +#endif /* DEBUG */ + + /* FIXME: appropriate error. */ + CurrentMessageCenterError=GE_INTERNALERROR; + + break; + + } +} + +/* This function sends to the mobile phone a request for the SMS Center */ +GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter) +{ + unsigned char req[] = { N6110_FRAME_HEADER, 0x33, 0x64, + 0x00 /* SMS Center Number. */ + }; + + req[5]=MessageCenter->No; + + CurrentMessageCenter=MessageCenter; + + return NULL_SendMessageSequence + (50, &CurrentMessageCenterError, 6, 0x02, req); +} + +void N6110_ReplySetSMSCenter(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS Center correctly set.\n")); +#endif + CurrentMessageCenterError=GE_NONE; +} + +/* This function set the SMS Center profile on the phone. */ +GSM_Error N6110_SetSMSCenter(GSM_MessageCenter *MessageCenter) +{ + unsigned char req[64] = { N6110_FRAME_HEADER, 0x30, 0x64, + 0x00, /* SMS Center Number. */ + 0x00, /* Unknown. */ + 0x00, /* SMS Message Format. */ + 0x00, /* Unknown. */ + 0x00, /* Validity. */ + 0,0,0,0,0,0,0,0,0,0,0,0, /* Default recipient number */ + 0,0,0,0,0,0,0,0,0,0,0,0 /* Message Center Number. */ + /* Message Center Name. */ + }; + + req[5]=MessageCenter->No; + req[7]=MessageCenter->Format; + req[9]=MessageCenter->Validity; + + req[10]=GSM_PackSemiOctetNumber(MessageCenter->DefaultRecipient, req+11, false); + + req[22]=GSM_PackSemiOctetNumber(MessageCenter->Number, req+23, false); + + sprintf(req+34, "%s", MessageCenter->Name); + + CurrentMessageCenter=MessageCenter; + + return NULL_SendMessageSequence + (50, &CurrentMessageCenterError, 35+strlen(MessageCenter->Name), 0x02, req); +} + +void N6110_ReplyGetSMSStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x37: + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS Status Received\n")); + fprintf(stdout, _(" The number of messages: %d\n"), MessageBuffer[10]); + fprintf(stdout, _(" Unread messages: %d\n"), MessageBuffer[11]); +#endif /* DEBUG */ + + CurrentSMSStatus->UnRead = MessageBuffer[11]; + CurrentSMSStatus->Number = MessageBuffer[10]; + + CurrentSMSStatusError = GE_NONE; + break; + + case 0x38: + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS Status error, probably not authorized by PIN\n")); +#endif /* DEBUG */ + + CurrentSMSStatusError = GE_INTERNALERROR; + break; + + } +} + +GSM_Error N6110_GetSMSStatus(GSM_SMSStatus *Status) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x36, 0x64}; + + CurrentSMSStatus = Status; + + return NULL_SendMessageSequence + (10, &CurrentSMSStatusError, 5, 0x14, req); +} - error=NULL_SendMessageSequence - (20, &CurrentGetOperatorNameError, 4, 0x40, req); +GSM_Error N6110_GetSMSFolders ( GSM_SMSFolders *folders) +{ + folders->number=2; - CurrentGetOperatorNameNetwork = NULL; + strcpy(folders->Folder[0].Name,"Inbox"); + strcpy(folders->Folder[1].Name,"Outbox"); - return error; -} - -void N6110_ReplySetOperatorName(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: Downloaded operator name changed\n")); -#endif - - CurrentSetOperatorNameError=GE_NONE; + return GE_NONE; } + +GSM_Error N6110_GetIMEI(char *imei) +{ + if (strlen(Current_IMEI)>0) { + strncpy (imei, Current_IMEI, GSM_MAX_IMEI_LENGTH); + return (GE_NONE); + } + else + return (GE_TRYAGAIN); +} + +GSM_Error N6110_GetRevision(char *revision) +{ + + if (strlen(Current_Revision)>0) { + strncpy (revision, Current_Revision, GSM_MAX_REVISION_LENGTH); + return (GE_NONE); + } + else + return (GE_TRYAGAIN); +} + +GSM_Error N6110_GetModel(char *model) +{ + if (strlen(Current_Model)>0) { + strncpy (model, Current_Model, GSM_MAX_MODEL_LENGTH); + return (GE_NONE); + } + else + return (GE_TRYAGAIN); +} + +void N6110_ReplySetDateTime(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[4]) { + + case 0x01: +#ifdef DEBUG + fprintf(stdout, _("Message: Date and time set correctly\n")); +#endif /* DEBUG */ + CurrentSetDateTimeError=GE_NONE; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _("Message: Date and time setting error\n")); +#endif /* DEBUG */ + CurrentSetDateTimeError=GE_INVALIDDATETIME; + + } +} + +/* Needs SIM card with PIN in phone */ +GSM_Error N6110_SetDateTime(GSM_DateTime *date_time) +{ + return N6110_PrivSetDateTime(date_time,0x11); +} + +/* Needs SIM card with PIN in phone */ +GSM_Error N6110_PrivSetDateTime(GSM_DateTime *date_time, int msgtype) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x60, /* set-time subtype */ + 0x01, 0x01, 0x07, /* unknown */ + 0x00, 0x00, /* Year (0x07cf = 1999) */ + 0x00, 0x00, /* Month Day */ + 0x00, 0x00, /* Hours Minutes */ + 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ + }; + + EncodeDateTime(req+7, date_time); + + return NULL_SendMessageSequence + (20, &CurrentSetDateTimeError, 14, msgtype, req); +} + +void N6110_ReplySetAlarm(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[4]) { + + case 0x01: +#ifdef DEBUG + fprintf(stdout, _("Message: Alarm set correctly\n")); +#endif /* DEBUG */ + CurrentSetAlarmError=GE_NONE; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _("Message: Alarm setting error\n")); +#endif /* DEBUG */ + CurrentSetAlarmError=GE_INVALIDDATETIME; + + } +} + +/* FIXME: we should also allow to set the alarm off :-) */ +GSM_Error N6110_SetAlarm(int alarm_number, GSM_DateTime *date_time) +{ + return N6110_PrivSetAlarm(alarm_number,date_time, 0x11); +} + +/* FIXME: we should also allow to set the alarm off :-) */ +GSM_Error N6110_PrivSetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x6b, /* set-alarm subtype */ + 0x01, 0x20, 0x03, /* unknown */ + 0x02, /* should be alarm on/off, but it don't works */ + 0x00, 0x00, /* Hours Minutes */ + 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ + }; + + req[8] = date_time->Hour; + req[9] = date_time->Minute; + + return NULL_SendMessageSequence + (50, &CurrentSetAlarmError, 11, msgtype, req); +} + +void N6110_ReplyGetMemoryLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ + char model[64]; + + int i, tmp, count; + + switch (MessageBuffer[3]) { + + case 0x02: + + CurrentPhonebookEntry->Empty = true; + + count=MessageBuffer[5]; + +#ifdef DEBUG + fprintf(stdout, _("Message: Phonebook entry received:\n")); + fprintf(stdout, _(" Name: ")); + + for (tmp=0; tmp Name, MessageBuffer+6, count/2); + CurrentPhonebookEntry->Name[count/2] = 0x00; + } else { + memcpy(CurrentPhonebookEntry->Name, MessageBuffer + 6, count); + CurrentPhonebookEntry->Name[count] = 0x00; + } + + CurrentPhonebookEntry->Empty = false; + + for (tmp=0; tmp Name[tmp/2]='~'; //enables/disables blinking + if (tmp%2!=0 && MessageBuffer[6+tmp]==0) CurrentPhonebookEntry->Name[tmp/2]='`'; //hides rest ot contents + } else { + if (MessageBuffer[6+tmp]==1) CurrentPhonebookEntry->Name[tmp]='~'; //enables/disables blinking + if (MessageBuffer[6+tmp]==0) CurrentPhonebookEntry->Name[tmp]='`'; //hides rest ot contents + } + } + + i=7+count; + count=MessageBuffer[6+count]; + +#ifdef DEBUG + fprintf(stdout, _(" Number: ")); + + for (tmp=0; tmp Number, MessageBuffer + i, count); + CurrentPhonebookEntry->Number[count] = 0x00; + CurrentPhonebookEntry->Group = MessageBuffer[i+count]; + + /* Phone doesn't have entended phonebook */ + CurrentPhonebookEntry->SubEntriesCount = 0; + + /* But for these memories data is saved and we can save it using 7110/6210 style */ + if (CurrentPhonebookEntry->MemoryType==GMT_DC || + CurrentPhonebookEntry->MemoryType==GMT_RC || + CurrentPhonebookEntry->MemoryType==GMT_MC) { + CurrentPhonebookEntry->SubEntriesCount = 1; + CurrentPhonebookEntry->SubEntries[0].EntryType=N7110_ENTRYTYPE_DATE; + CurrentPhonebookEntry->SubEntries[0].NumberType=0; + CurrentPhonebookEntry->SubEntries[0].BlockNumber=1; + DecodeDateTime(MessageBuffer+(i+count+2),&CurrentPhonebookEntry->SubEntries[0].data.Date); + +#ifdef DEBUG + fprintf(stdout, _(" Date: ")); + fprintf(stdout, "%02u.%02u.%04u\n", + CurrentPhonebookEntry->SubEntries[0].data.Date.Day, + CurrentPhonebookEntry->SubEntries[0].data.Date.Month, + CurrentPhonebookEntry->SubEntries[0].data.Date.Year); + fprintf(stdout, _(" Time: ")); + fprintf(stdout, "%02u:%02u:%02u\n", + CurrentPhonebookEntry->SubEntries[0].data.Date.Hour, + CurrentPhonebookEntry->SubEntries[0].data.Date.Minute, + CurrentPhonebookEntry->SubEntries[0].data.Date.Second); +#endif /* DEBUG */ + + /* These values are set, when date and time unavailable in phone. + Values from 3310 - in other can be different */ + if (CurrentPhonebookEntry->SubEntries[0].data.Date.Day==20 && + CurrentPhonebookEntry->SubEntries[0].data.Date.Month==1 && + CurrentPhonebookEntry->SubEntries[0].data.Date.Year==2118 && + CurrentPhonebookEntry->SubEntries[0].data.Date.Hour==3 && + CurrentPhonebookEntry->SubEntries[0].data.Date.Minute==14 && + CurrentPhonebookEntry->SubEntries[0].data.Date.Second==7) + CurrentPhonebookEntry->SubEntriesCount = 0; + } + + /* Signal no error to calling code. */ + CurrentPhonebookError = GE_NONE; + + break; + + case 0x03: + +#ifdef DEBUG + fprintf(stdout, _("Message: Phonebook read entry error received:\n")); +#endif /* DEBUG */ + + switch (MessageBuffer[4]) { + + case 0x7d: +#ifdef DEBUG + fprintf(stdout, _(" Invalid memory type!\n")); +#endif /* DEBUG */ + CurrentPhonebookError = GE_INVALIDMEMORYTYPE; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _(" Unknown error!\n")); +#endif /* DEBUG */ + CurrentPhonebookError = GE_INTERNALERROR; + } + + break; + + } +} + +/* Routine to get specifed phone book location. Designed to be called by + application. Will block until location is retrieved or a timeout/error + occurs. */ +GSM_Error N6110_GetMemoryLocation(GSM_PhonebookEntry *entry) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x01, 0x00, 0x00, 0x00}; + + CurrentPhonebookEntry = entry; + + req[4] = N6110_GetMemoryType(entry->MemoryType); + req[5] = entry->Location; + + return NULL_SendMessageSequence + (50, &CurrentPhonebookError, 7, 0x03, req); +} + +void N6110_ReplyWritePhonebookLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x05: + +#ifdef DEBUG + fprintf(stdout, _("Message: Phonebook written correctly.\n")); +#endif /* DEBUG */ + CurrentPhonebookError = GE_NONE; + break; + + case 0x06: + + switch (MessageBuffer[4]) { + /* FIXME: other errors? When I send the phonebook with index of 350 it + still report error 0x7d :-( */ + case 0x7d: +#ifdef DEBUG + fprintf(stdout, _("Message: Phonebook not written - name is too long.\n")); +#endif /* DEBUG */ + CurrentPhonebookError = GE_PHBOOKNAMETOOLONG; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _(" Unknown error!\n")); +#endif /* DEBUG */ + CurrentPhonebookError = GE_INTERNALERROR; + } + } +} + +/* Routine to write phonebook location in phone. Designed to be called by + application code. Will block until location is written or timeout + occurs. */ +GSM_Error N6110_WritePhonebookLocation(GSM_PhonebookEntry *entry) +{ + unsigned char req[128] = { N6110_FRAME_HEADER, 0x04, 0x00, 0x00 }; + int i=0, current=0; + + req[4] = N6110_GetMemoryType(entry->MemoryType); + req[5] = entry->Location; + + current=7; + + if (GetModelFeature (FN_PHONEBOOK)==F_PBK33INT || + GetModelFeature (FN_PHONEBOOK)==F_PBK33SIM) { + + req[6] = strlen(entry->Name)*2; + + EncodeUnicode (req+current,entry->Name ,strlen(entry->Name)); + + for (i=0; iName); i++) + { + /* here we encode "special" chars */ + if (entry->Name[i]=='~') req[current+i*2]=1; //enables/disables blinking + if (entry->Name[i]=='`') req[current+i*2]=0; //hides rest ot contents + } + + current+=strlen(entry->Name)*2; + } else { + + req[6] = strlen(entry->Name); + + for (i=0; iName); i++) + { + req[current+i] = entry->Name[i]; + + /* here we encode "special" chars */ + if (entry->Name[i]=='~') req[current+i]=1; //enables/disables blinking + if (entry->Name[i]=='`') req[current+i]=0; //hides rest ot contents + } + + current+=strlen(entry->Name); + } + + req[current++]=strlen(entry->Number); + + for (i=0; iNumber); i++) + req[current+i] = entry->Number[i]; + + current+=strlen(entry->Number); + + /* Jano: This allow to save 14 characters name into SIM memory, when + No Group is selected. */ + if (entry->Group == 5) + req[current++]=0xff; + else + req[current++]=entry->Group; + + return NULL_SendMessageSequence + (50, &CurrentPhonebookError, current, 0x03, req); +} + +void N6110_ReplyNetmonitor(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch(MessageBuffer[3]) { + + case 0x00: +#ifdef DEBUG + fprintf(stdout, _("Message: Netmonitor correctly set.\n")); +#endif /* DEBUG */ + CurrentNetmonitorError=GE_NONE; + break; + + default: +#ifdef DEBUG + fprintf(stdout, _("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]); + fprintf(stdout, "%s\n", MessageBuffer+4); +#endif /* DEBUG */ + + strcpy(CurrentNetmonitor, MessageBuffer+4); + + CurrentNetmonitorError=GE_NONE; + } +} + +GSM_Error N6110_NetMonitor(unsigned char mode, char *Screen) +{ + unsigned char req[] = { 0x00, 0x01, 0x7e, 0x00 }; + + GSM_Error error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + CurrentNetmonitor=Screen; + + req[3]=mode; + + return NULL_SendMessageSequence + (20, &CurrentNetmonitorError, 4, 0x40, req); +} + +/* Doesn't work in N3210. */ +/* In other allow to access phone menu without SIM card (just send any sequence) */ +GSM_Error N6110_SendDTMF(char *String) +{ + unsigned char req[64] = { N6110_FRAME_HEADER, 0x50, + 0x00 /* Length of DTMF string. */ + }; + + u8 length=strlen(String); + + if (length>59) length=59; + + req[4] = length; + + memcpy(req+5,String,length); + + return NULL_SendMessageSequence + (20, &CurrentSendDTMFError, 5+length, 0x01, req); +} + +void N6110_ReplyGetSpeedDial(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x17: + + switch (MessageBuffer[4]) { + case 0x02: CurrentSpeedDialEntry->MemoryType = GMT_ME; + default : CurrentSpeedDialEntry->MemoryType = GMT_SM; + } + + CurrentSpeedDialEntry->Location = MessageBuffer[5]; + +#ifdef DEBUG + fprintf(stdout, _("Message: Speed dial entry received:\n")); + fprintf(stdout, _(" Location: %d\n"), CurrentSpeedDialEntry->Location); + fprintf(stdout, _(" MemoryType: %s\n"), N6110_MemoryType_String[CurrentSpeedDialEntry->MemoryType]); + fprintf(stdout, _(" Number: %d\n"), CurrentSpeedDialEntry->Number); +#endif /* DEBUG */ + + CurrentSpeedDialError=GE_NONE; + break; + + case 0x18: + +#ifdef DEBUG + fprintf(stdout, _("Message: Speed dial entry error\n")); +#endif /* DEBUG */ + CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; + break; + + } +} + +GSM_Error N6110_GetSpeedDial(GSM_SpeedDial *entry) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x16, + 0x00 /* The number of speed dial. */ + }; + + CurrentSpeedDialEntry = entry; + + req[4] = entry->Number; + + return NULL_SendMessageSequence + (20, &CurrentSpeedDialError, 5, 0x03, req); +} + +void N6110_ReplySetSpeedDial(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + case 0x1a: + +#ifdef DEBUG + fprintf(stdout, _("Message: Speed dial entry set.\n")); +#endif /* DEBUG */ + CurrentSpeedDialError=GE_NONE; + break; + + case 0x1b: + +#ifdef DEBUG + fprintf(stdout, _("Message: Speed dial entry setting error.\n")); +#endif /* DEBUG */ + CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; + break; + + } +} + +GSM_Error N6110_SetSpeedDial(GSM_SpeedDial *entry) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x19, + 0x00, /* Number */ + 0x00, /* Memory Type */ + 0x00 /* Location */ + }; + + req[4] = entry->Number; + + switch (entry->MemoryType) { + case GMT_ME: req[5] = 0x02; + default : req[5] = 0x03; + } + + req[6] = entry->Location; + + return NULL_SendMessageSequence + (20, &CurrentSpeedDialError, 7, 0x03, req); +} + +/* This function finds parts of SMS in frame used in new Nokia phones + in internal protocols (they're coded according to GSM 03.40), copies them + to GSM_ETSISMSMessage and calls GSM_DecodeETSISMS to decode + GSM_ETSISMSMessage to GSM_SMSMessage structure */ +GSM_Error GSM_DecodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int length) +{ + SMS_MessageType PDU=SMS_Deliver; + GSM_ETSISMSMessage ETSI; + int offset=0,i; + + ETSI.firstbyte=req[12]; + + /* See GSM 03.40 section 9.2.3.1 */ + if ((ETSI.firstbyte & 0x03) == 0x01) PDU=SMS_Submit; + if ((ETSI.firstbyte & 0x03) == 0x02) PDU=SMS_Status_Report; + + switch (PDU) { + case SMS_Submit : offset=5;break; + case SMS_Deliver : offset=4;break; + case SMS_Status_Report: offset=3;break; + default: break; + } + + for (i=0;iName[0]=0; + + return GE_NONE; +} + +void N6110_ReplyGetSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int offset; + + switch (MessageBuffer[3]) { + + case 0x08: + + switch (MessageBuffer[7]) { + + case 0x00: + CurrentSMSMessage->Type = GST_SMS; + CurrentSMSMessage->folder=GST_INBOX; + offset=4; + break; + + case 0x01: + CurrentSMSMessage->Type = GST_DR; + CurrentSMSMessage->folder=GST_INBOX; + offset=3; + break; + + case 0x02: + CurrentSMSMessage->Type = GST_SMS; + CurrentSMSMessage->folder=GST_OUTBOX; + offset=5; + break; + + default: + CurrentSMSMessage->Type = GST_UN; + offset=4; + break; + + } + + /* Field Short Message Status - MessageBuffer[4] seems not to be + compliant with GSM 07.05 spec. + Meaning Nokia protocol GMS spec + ---------------------------------------------------- + MO Sent 0x05 0x07 or 0x01 + MO Not sent 0x07 0x06 or 0x00 + MT Read 0x01 0x05 or 0x01 + MT Not read 0x03 0x04 or 0x00 + ---------------------------------------------------- + See GSM 07.05 section 2.5.2.6 and correct me if I'm wrong. + + Pawel Kot */ + + if (MessageBuffer[4] & 0x02) CurrentSMSMessage->Status = GSS_NOTSENTREAD; + else CurrentSMSMessage->Status = GSS_SENTREAD; + +#ifdef DEBUG + fprintf(stdout, _("Number: %d\n"), MessageBuffer[6]); + + if (CurrentSMSMessage->folder!=1) { //GST_OUTBOX + fprintf(stdout, _("Message: Received SMS (mobile terminated)\n")); + } else { + fprintf(stdout, _("Message: Outbox message (mobile originated)\n")); + } + + if (CurrentSMSMessage->Type == GST_DR) fprintf(stdout, _(" Delivery Report\n")); + if (CurrentSMSMessage->Type == GST_UN) fprintf(stdout, _(" Unknown type\n")); + + if (CurrentSMSMessage->folder==1) { //GST_OUTBOX + if (CurrentSMSMessage->Status) fprintf(stdout, _(" Sent\n")); + else fprintf(stdout, _(" Not sent\n")); + } else { + if (CurrentSMSMessage->Status) fprintf(stdout, _(" Read\n")); + else fprintf(stdout, _(" Not read\n")); + } +#endif + + CurrentSMSPointer=GSM_DecodeNokiaSMSFrame(CurrentSMSMessage, MessageBuffer+8, MessageLength-8); + + CurrentSMSMessage->MemoryType = MessageBuffer[5]; + CurrentSMSMessage->MessageNumber = MessageBuffer[6]; + + /* Signal no error to calling code. */ + CurrentSMSMessageError = GE_NONE; + +#ifdef DEBUG + fprintf(stdout, "\n"); +#endif + + break; + + case 0x09: + + /* We have requested invalid or empty location. */ + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS reading failed\n")); + + switch (MessageBuffer[4]) { + case 0x02:fprintf(stdout, _(" Invalid location!\n"));break; + case 0x07:fprintf(stdout, _(" Empty SMS location.\n"));break; + case 0x0c:fprintf(stdout, _(" No access to memory (no PIN on card ?)\n"));break; + default :fprintf(stdout, _(" Error code %i - please report it \n"),MessageBuffer[4]);break; + } +#endif /* DEBUG */ + + switch (MessageBuffer[4]) { + case 0x02:CurrentSMSMessageError = GE_INVALIDSMSLOCATION;break; + case 0x07:CurrentSMSMessageError = GE_EMPTYSMSLOCATION;break; + case 0x0c:CurrentSMSMessageError = GE_NOACCESS;break; + default :CurrentSMSMessageError = GE_UNKNOWN;break; + } + + break; + + } +} + +GSM_Error N6110_GetSMSMessage(GSM_SMSMessage *message) +{ + + unsigned char req[] = { N6110_FRAME_HEADER, + 0x07, + 0x02, /* Unknown */ + 0x00, /* Location */ + 0x01, 0x64}; + + int timeout = 60; + + /* State machine code writes data to these variables when it comes in. */ + + CurrentSMSMessage = message; + CurrentSMSMessageError = GE_BUSY; + + req[5] = message->Location; + + /* Send request */ + Protocol->SendMessage(8, 0x02, req); + + /* Wait for timeout or other error. */ + while (timeout != 0 && (CurrentSMSMessageError == GE_BUSY || CurrentSMSMessageError == GE_SMSWAITING)) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + return (CurrentSMSMessageError); +} + +void N6110_ReplyDeleteSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: SMS deleted successfully.\n")); +#endif /* DEBUG */ + + CurrentSMSMessageError = GE_NONE; +} + +GSM_Error N6110_DeleteSMSMessage(GSM_SMSMessage *message) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x0a, 0x02, 0x00}; + + req[5] = message->Location; + + return NULL_SendMessageSequence + (50, &CurrentSMSMessageError, 6, 0x14, req); +} -GSM_Error N6110_SetOperatorName (GSM_Network *operator) +/* FIXME: do we need more than SMS_Submit and SMS_Deliver ? */ +GSM_Error GSM_EncodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int *length, SMS_MessageType PDU) { - unsigned char req[256] = { 0x00,0x01,0x8b,0x00, - 0x00,0x00, /* MCC */ - 0x00}; /* MNC */ - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - EncodeNetworkCode(req+4,operator->Code); - - strncpy(req+7,operator->Name,200); - - return NULL_SendMessageSequence - (20, &CurrentSetOperatorNameError, 8+strlen(operator->Name), 0x40, req); -} - -#endif /* UCLINUX */ - -static void N6110_ReplyGetMemoryStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x08: - -#ifdef DEBUG - fprintf(stdout, _("Message: Memory status received:\n")); + GSM_ETSISMSMessage ETSI; + int i,offset=0; - fprintf(stdout, _(" Memory Type: %s\n"), N6110_MemoryType_String[MessageBuffer[4]]); - fprintf(stdout, _(" Used: %d\n"), MessageBuffer[6]); - fprintf(stdout, _(" Free: %d\n"), MessageBuffer[5]); -#endif /* DEBUG */ + GSM_EncodeETSISMS(SMS, &ETSI, PDU, length); - CurrentMemoryStatus->Used = MessageBuffer[6]; - CurrentMemoryStatus->Free = MessageBuffer[5]; - CurrentMemoryStatusError = GE_NONE; + /* Cleaning */ + for (i=0;i<36;i++) req[i]=0; - break; + req[12]=ETSI.firstbyte; - case 0x09: + for (i=0;iMessageNumber=MessageBuffer[5]; + + CurrentSMSMessageError = GE_NONE; + break; + + case 0x06: +#ifdef DEBUG + fprintf(stdout, _("SMS saving failed\n")); + switch (MessageBuffer[4]) { + case 0x02:fprintf(stdout, _(" All locations busy.\n"));break; + case 0x03:fprintf(stdout, _(" Invalid location!\n"));break; + default :fprintf(stdout, _(" Unknown error.\n"));break; + } +#endif + + switch (MessageBuffer[4]) { + case 0x02:CurrentSMSMessageError = GE_MEMORYFULL;break; + case 0x03:CurrentSMSMessageError = GE_INVALIDSMSLOCATION;break; + default :CurrentSMSMessageError = GE_UNKNOWN;break; + } + } +} + +/* GST_DR and GST_UN not supported ! */ +GSM_Error N6110_SaveSMSMessage(GSM_SMSMessage *SMS) +{ + unsigned char req[256] = { + N6110_FRAME_HEADER, 0x04, /* SMS save request*/ + 0x00, /* SMS Status. Different for Inbox and Outbox */ + 0x02, /* ?? */ + 0x00, /* SMS Location */ + 0x02, /* SMS Type */ + }; + + int length; + SMS_MessageType PDU; + GSM_Error error; + + if (SMS->Location) req[6] = SMS->Location; + + if (SMS->folder==0) { /*Inbox*/ + req[4]=1; /* SMS Status */ + req[7] = 0x00; /* SMS Type */ + PDU=SMS_Deliver; + } else { + req[4]=5; /* SMS Status */ + req[7] = 0x02; /* SMS Type */ + PDU=SMS_Submit; + } + + if (SMS->Status == GSS_NOTSENTREAD) req[4] |= 0x02; + + error=GSM_EncodeNokiaSMSFrame(SMS, req+8, &length, PDU); + if (error != GE_NONE) return error; + + CurrentSMSMessage = SMS; + + return NULL_SendMessageSequence + (70, &CurrentSMSMessageError, 39+length, 0x14, req); +} + +void N6110_ReplySetCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: Cell Broadcast enabled/disabled successfully.\n")); fflush (stdout); +#endif + + CurrentCBError = GE_NONE; +} + +/* Enable and disable Cell Broadcasting */ +GSM_Error N6110_EnableCellBroadcast(void) +{ + unsigned char req[] = {N6110_FRAME_HEADER, 0x20, + 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}; + +#ifdef DEBUG + fprintf (stdout,"Enabling CB\n"); +#endif + + CurrentCBMessage = (GSM_CBMessage *)malloc(sizeof (GSM_CBMessage)); + CurrentCBMessage->Channel = 0; + CurrentCBMessage->New = false; + strcpy (CurrentCBMessage->Message,""); + + return NULL_SendMessageSequence + (10, &CurrentCBError, 10, 0x02, req); +} + + +GSM_Error N6110_DisableCellBroadcast(void) +{ + /* Should work, but not tested fully */ + + unsigned char req[] = {N6110_FRAME_HEADER, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /*VERIFY*/ + + return NULL_SendMessageSequence + (10, &CurrentCBError, 10, 0x02, req); +} + +void N6110_ReplyReadCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i, tmp; + unsigned char output[160]; + + CurrentCBMessage->Channel = MessageBuffer[7]; + CurrentCBMessage->New = true; + tmp=GSM_UnpackEightBitsToSeven(0, MessageBuffer[9], MessageBuffer[9], MessageBuffer+10, output); + +#ifdef DEBUG + fprintf(stdout, _("Message: CB received.\n")); fflush (stdout); + + fprintf(stdout, _("Message: channel number %i\n"),MessageBuffer[7]); + + fflush (stdout); + + for (i=0; iMessage[i] = DecodeWithDefaultAlphabet(output[i]); + } + CurrentCBMessage->Message[i]=0; +} + +GSM_Error N6110_ReadCellBroadcast(GSM_CBMessage *Message) +{ +#ifdef DEBUG + fprintf(stdout,"Reading CB\n"); +#endif + + if (CurrentCBMessage != NULL) + { + if (CurrentCBMessage->New == true) + { +#ifdef DEBUG + fprintf(stdout,"New CB received\n"); +#endif + Message->Channel = CurrentCBMessage->Channel; + strcpy(Message->Message,CurrentCBMessage->Message); + CurrentCBMessage->New = false; + return (GE_NONE); + } + } + return (GE_NONEWCBRECEIVED); +} + +int N6110_MakeCallerGroupFrame(unsigned char *req,GSM_Bitmap Bitmap) +{ + int count=0; + + req[count++]=Bitmap.number; + req[count++]=strlen(Bitmap.text); + memcpy(req+count,Bitmap.text,req[count-1]); + count+=req[count-1]; + req[count++]=Bitmap.ringtone; + + /* Setting for graphic: + 0x00 - Off + 0x01 - On + 0x02 - View Graphics + 0x03 - Send Graphics + 0x04 - Send via IR + You can even set it higher but Nokia phones (my + 6110 at least) will not show you the name of this + item in menu ;-)) Nokia is really joking here. */ + if (Bitmap.enabled) req[count++]=0x01; + else req[count++]=0x00; + + req[count++]=(Bitmap.size+4)>>8; + req[count++]=(Bitmap.size+4)%0xff; + req[count++]=0x00; /* Future extensions! */ + req[count++]=Bitmap.width; + req[count++]=Bitmap.height; + req[count++]=0x01; /* Just BW */ + memcpy(req+count,Bitmap.bitmap,Bitmap.size); + + return count+Bitmap.size; +} + +int N6110_MakeOperatorLogoFrame(unsigned char *req,GSM_Bitmap Bitmap) +{ + int count=0; + + EncodeNetworkCode(req+count, Bitmap.netcode); + count=count+3; + + req[count++]=(Bitmap.size+4)>>8; + req[count++]=(Bitmap.size+4)%0xff; + req[count++]=0x00; /* Infofield */ + req[count++]=Bitmap.width; + req[count++]=Bitmap.height; + req[count++]=0x01; /* Just BW */ + memcpy(req+count,Bitmap.bitmap,Bitmap.size); + + return count+Bitmap.size; +} + +int N6110_MakeStartupLogoFrame(unsigned char *req,GSM_Bitmap Bitmap) +{ + int count=0; + + req[count++]=0x01; + req[count++]=Bitmap.height; + req[count++]=Bitmap.width; + memcpy(req+count,Bitmap.bitmap,Bitmap.size); + + return count+Bitmap.size; +} + +/* Set a bitmap or welcome-note */ +GSM_Error N6110_SetBitmap(GSM_Bitmap *Bitmap) { + + unsigned char req[600] = { N6110_FRAME_HEADER }; + u16 count=3; + u8 textlen; + + int timeout=50; -/* This function is used to get storage status from the phone. It currently - supports two different memory areas - internal and SIM. */ -GSM_Error N6110_GetMemoryStatus(GSM_MemoryStatus *Status) -{ - unsigned char req[] = { N6110_FRAME_HEADER, - 0x07, /* MemoryStatus request */ - 0x00 /* MemoryType */ - }; - - GSM_Error error; - - CurrentMemoryStatus = Status; + /* Direct uploading variables */ + GSM_MultiSMSMessage SMS; + unsigned char buffer[1000] = {0x0c,0x01}; + GSM_NetworkInfo NetworkInfo; - req[4] = N6110_GetMemoryType(Status->MemoryType); + GSM_Error error; + + /* Uploading with preview */ + if (Bitmap->number==255 && + (Bitmap->type==GSM_OperatorLogo || Bitmap->type==GSM_CallerLogo)) { + GSM_SaveBitmapToSMS(&SMS,Bitmap,false,false); + memcpy(buffer+2,SMS.SMS[0].UDH,SMS.SMS[0].UDH[0]+1); - error=NULL_SendMessageSequence - (20, &CurrentMemoryStatusError, 5, 0x03, req); + memcpy(buffer+2+SMS.SMS[0].UDH[0]+1,SMS.SMS[0].MessageText,SMS.SMS[0].Length); - CurrentMemoryStatus = NULL; + buffer[2+SMS.SMS[0].UDH[0]+1+SMS.SMS[0].Length]=0x00; - return error; -} + Protocol->SendMessage(2+SMS.SMS[0].UDH[0]+1+SMS.SMS[0].Length+1, 0x12, buffer); -#ifndef UCLINUX + GSM->GetNetworkInfo(&NetworkInfo); //need to make something + return GE_NONE; //no answer from phone + } + + CurrentSetBitmapError = GE_BUSY; + + switch (Bitmap->type) { + case GSM_WelcomeNoteText: + case GSM_DealerNoteText: + req[count++]=0x18; + req[count++]=0x01; /* Only one block */ + + if (Bitmap->type==GSM_WelcomeNoteText) + req[count++]=0x02; /* Welcome text */ + else + req[count++]=0x03; /* Dealer Welcome Note */ + + textlen=strlen(Bitmap->text); + req[count++]=textlen; + memcpy(req+count,Bitmap->text,textlen); + + count+=textlen; + + Protocol->SendMessage(count, 0x05, req); + + break; + + case GSM_StartupLogo: + if (Bitmap->number==0) { + + /* For 33xx we first set animated logo to default */ + if (GetModelFeature (FN_STARTUP)==F_STANIM) { + error=N6110_SetProfileFeature(0, 0x29, Bitmap->number); + if (error!=GE_NONE) return error; + } + + req[count++]=0x18; + req[count++]=0x01; /* Only one block */ + count=count+N6110_MakeStartupLogoFrame(req+5,*Bitmap); + Protocol->SendMessage(count, 0x05, req); + } else { + return N6110_SetProfileFeature(0, 0x29, Bitmap->number); + } + break; + + case GSM_OperatorLogo: + req[count++]=0x30; /* Store Op Logo */ + req[count++]=0x01; /* Location */ + count=count+N6110_MakeOperatorLogoFrame(req+5,*Bitmap); + Protocol->SendMessage(count, 0x05, req); + break; + + case GSM_CallerLogo: + req[count++]=0x13; + count=count+N6110_MakeCallerGroupFrame(req+4,*Bitmap); + Protocol->SendMessage(count, 0x03, req); + break; + + case GSM_PictureImage: + req[count++]=0x03; + req[count++]=Bitmap->number; + if (strcmp(Bitmap->Sender,"")) { + req[count]=GSM_PackSemiOctetNumber(Bitmap->Sender, req+count+1,true); + + /* Convert number of semioctets to number of chars and add count */ + textlen=req[count]; + if (textlen % 2) textlen++; + count+=textlen / 2 + 1; + + count++; + } else { + req[count++]=0x00; + req[count++]=0x00; + } + req[count++]=0x00; + req[count++]=strlen(Bitmap->text); + memcpy(req+count,Bitmap->text,strlen(Bitmap->text)); + count+=strlen(Bitmap->text); + req[count++]=0x00; + req[count++]=Bitmap->width; + req[count++]=Bitmap->height; + req[count++]=0x01; + memcpy(req+count,Bitmap->bitmap,Bitmap->size); + Protocol->SendMessage(count+Bitmap->size, 0x47, req); + break; + + case GSM_7110OperatorLogo: + case GSM_7110StartupLogo: + case GSM_6210StartupLogo: + return GE_NOTSUPPORTED; + + case GSM_None: + return GE_NONE; + } + + /* Wait for timeout or other error. */ + while (timeout != 0 && CurrentSetBitmapError == GE_BUSY ) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + return CurrentSetBitmapError; +} + +/* Get a bitmap from the phone */ +GSM_Error N6110_GetBitmap(GSM_Bitmap *Bitmap) { + + unsigned char req[10] = { N6110_FRAME_HEADER }; + u8 count=3; + + int timeout=100; + + CurrentGetBitmap=Bitmap; + CurrentGetBitmapError = GE_BUSY; + + switch (CurrentGetBitmap->type) { + case GSM_StartupLogo: + case GSM_WelcomeNoteText: + case GSM_DealerNoteText: + req[count++]=0x16; + Protocol->SendMessage(count, 0x05, req); + break; + case GSM_OperatorLogo: + req[count++]=0x33; + req[count++]=0x01; /* Location 1 */ + Protocol->SendMessage(count, 0x05, req); + break; + case GSM_CallerLogo: + req[count++]=0x10; + req[count++]=Bitmap->number; + Protocol->SendMessage(count, 0x03, req); + break; + case GSM_PictureImage: + req[count++]=0x01; + req[count++]=Bitmap->number; + Protocol->SendMessage(count, 0x47, req); + break; + case GSM_7110OperatorLogo: + case GSM_7110StartupLogo: + case GSM_6210StartupLogo: + default: + return GE_NOTSUPPORTED; + } + + /* Wait for timeout or other error. */ + while (timeout != 0 && CurrentGetBitmapError == GE_BUSY ) { + + if (--timeout == 0) + return (GE_TIMEOUT); + + usleep (100000); + } + + CurrentGetBitmap=NULL; + + return CurrentGetBitmapError; +} + +void N6110_ReplySetRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[3]) { + + /* Set ringtone OK */ + case 0x37: +#ifdef DEBUG + fprintf(stdout, _("Message: Ringtone set OK!\n")); +#endif + CurrentRingtoneError=GE_NONE; + break; + + /* Set ringtone error */ + case 0x38: +#ifdef DEBUG + fprintf(stdout, _("Message: Ringtone setting error !\n")); +#endif + CurrentRingtoneError=GE_NOTSUPPORTED; + break; + } +} + +GSM_Error N6110_SetRingTone(GSM_Ringtone *ringtone, int *maxlength) +{ + + char req[FB61_MAX_RINGTONE_FRAME_LENGTH+10] = + {N6110_FRAME_HEADER, + 0x36, + 0x00, /* Location */ + 0x00,0x78}; + + int size=FB61_MAX_RINGTONE_FRAME_LENGTH; + + /* Variables for preview uploading */ + unsigned char buffer[FB61_MAX_RINGTONE_FRAME_LENGTH+50]; + unsigned char buffer2[20]; + GSM_NetworkInfo NetworkInfo; -void N6110_ReplyGetNetworkInfo(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + /* Setting ringtone with preview */ + if (ringtone->location==255) { + buffer[0]=0x0c; + buffer[1]=0x01; + EncodeUDHHeader(buffer2, GSM_RingtoneUDH); + memcpy(buffer+2,buffer2,buffer2[0]+1); //copying UDH + *maxlength=GSM_PackRingtone(ringtone, buffer+2+buffer2[0]+1, &size); //packing ringtone + Protocol->SendMessage(2+buffer2[0]+1+size, 0x12, buffer); //sending frame + GSM->GetNetworkInfo(&NetworkInfo); //need to make something + sleep(1); + return GE_NONE; //no answer from phone + } + + *maxlength=GSM_PackRingtone(ringtone, req+7, &size); + + req[4]=ringtone->location-1; + + return NULL_SendMessageSequence + (50, &CurrentRingtoneError, (size+7), 0x05, req); +} + +void N6110_ReplyGetBinRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int i; + + switch (MessageBuffer[4]) { + case 0x00: /* location supported. We have ringtone */ + + /* Binary format used in N6150 */ + if (MessageBuffer[5]==0x0c && MessageBuffer[6]==0x01 && MessageBuffer[7]==0x2c) { +#ifdef DEBUG + fprintf(stdout,_("Message: ringtone \"")); +#endif + + /* Copying name */ + i=8; + while (true) { +#ifdef DEBUG + if (MessageBuffer[i]!=0) + fprintf(stdout,_("%c"),MessageBuffer[i]); +#endif + CurrentGetBinRingtone->name[i-8]=MessageBuffer[i]; + if (MessageBuffer[i]==0) break; + i++; + } + +#ifdef DEBUG + fprintf(stdout,_("\" received from location %i\n"),MessageBuffer[3]+1); +#endif + + /* Looking for end */ + i=0; + while (true) { + if (MessageBuffer[i]==0x07 && MessageBuffer[i+1]==0x0b) { + i=i+2;break; + } + if (MessageBuffer[i]==0x0e && MessageBuffer[i+1]==0x0b) { + i=i+2;break; + } + i++; + if (i==MessageLength) break; + } + + /* Copying frame */ + memcpy(CurrentGetBinRingtone->frame,MessageBuffer+3,i-3); + CurrentGetBinRingtone->length=i-3; + + CurrentBinRingtoneError=GE_NONE; + break; + } + + /* Binary format used in N3210 */ + if (MessageBuffer[5]==0x10 && MessageBuffer[6]==0x01 && MessageBuffer[7]==0x2c) { + +#ifdef DEBUG + fprintf(stdout,_("Message: ringtone \"")); +#endif + + /* Copying name */ + i=8; + while (true) { +#ifdef DEBUG + if (MessageBuffer[i]!=0) + fprintf(stdout,_("%c"),MessageBuffer[i]); +#endif + CurrentGetBinRingtone->name[i-8]=MessageBuffer[i]; + if (MessageBuffer[i]==0) break; + i++; + } + +#ifdef DEBUG + fprintf(stdout,_("\" received from location %i\n"),MessageBuffer[3]+1); +#endif + + /* Here changes to get full compatibility with binary format used in N6150 */ + MessageBuffer[3]=0; + MessageBuffer[4]=0; + MessageBuffer[5]=0x0c; + MessageBuffer[6]=0x01; + MessageBuffer[7]=0x2c; + + /* Looking for end */ + i=0; + while (true) { + if (MessageBuffer[i]==0x07 && MessageBuffer[i+1]==0x0b) { + i=i+2;break; + } + if (MessageBuffer[i]==0x0e && MessageBuffer[i+1]==0x0b) { + i=i+2;break; + } + i++; + if (i==MessageLength) break; + } + + /* Copying frame */ + memcpy(CurrentGetBinRingtone->frame,MessageBuffer+3,i-3); + + CurrentGetBinRingtone->length=i-3; + + CurrentBinRingtoneError=GE_NONE; + break; + } + + /* Copying frame */ + memcpy(CurrentGetBinRingtone->frame,MessageBuffer,MessageLength); + + CurrentGetBinRingtone->length=MessageLength; + +#ifdef DEBUG + fprintf(stdout,_("Message: unknown binary format for ringtone received from location %i\n"),MessageBuffer[3]+1); +#endif + CurrentBinRingtoneError=GE_UNKNOWNMODEL; + break; + + default: + +#ifdef DEBUG + fprintf(stdout,_("Message: Phone doesn't support downloaded ringtones at location %i\n"),MessageBuffer[3]+1); +#endif + + CurrentBinRingtoneError=GE_INVALIDRINGLOCATION; + } +} + +GSM_Error N6110_GetBinRingTone(GSM_BinRingtone *ringtone) +{ + unsigned char req[] = { 0x00,0x01,0x9e, + 0x00 }; //location + + GSM_Error error; + + CurrentGetBinRingtone=ringtone; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + req[3]=ringtone->location-1; + + return NULL_SendMessageSequence + (50, &CurrentBinRingtoneError, 4, 0x40, req); +} + +void N6110_ReplySetBinRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + switch (MessageBuffer[4]) { + case 0x00: /* location supported. We set ringtone */ +#ifdef DEBUG + fprintf(stdout,_("Message: downloaded ringtone set at location %i\n"),MessageBuffer[3]+1); +#endif + CurrentBinRingtoneError=GE_NONE; + break; + + default: +#ifdef DEBUG + fprintf(stdout,_("Message: Phone doesn't support downloaded ringtones at location %i\n"),MessageBuffer[3]+1); +#endif + CurrentBinRingtoneError=GE_NOTSUPPORTED; + break; + } +} + +GSM_Error N6110_SetBinRingTone(GSM_BinRingtone *ringtone) +{ + unsigned char req[1000] = { 0x00,0x01,0xa0}; + + GSM_Error error; + + GSM_BinRingtone ring; + + /* Must be sure, that can upload ringtone to this phone */ + ring.location=ringtone->location; + error=N6110_GetBinRingTone(&ring); + if (error!=GE_NONE) return error; + + error=N6110_EnableExtendedCommands(0x01); + if (error!=GE_NONE) return error; + + memcpy(req+3,ringtone->frame,ringtone->length); + + req[3]=ringtone->location-1; + + return NULL_SendMessageSequence + (50, &CurrentBinRingtoneError, ringtone->length+3, 0x40, req); +} + +GSM_Error N6110_Reset(unsigned char type) +{ + return N6110_EnableExtendedCommands(type); +} + +void N6110_Dispatch0x01Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int tmp, count; + + switch (MessageBuffer[3]) { + + /* Unknown message - it has been seen after the 0x07 message (call + answered). Probably it has similar meaning. If you can solve + this - just mail me. Pavel Janík ml. + + The message looks like this: + + Msg Destination: PC + Msg Source: Phone + Msg Type: 01 + Msg Unknown: 00 + Msg Len: 0e + + Phone: [01 ][08 ][00 ] is the header of the frame + + [03 ] is the call message subtype + + [05 ] is the call sequence number + + [05 ] unknown + + [00 ][01 ][03 ][02 ][91][00] are unknown but has been + seen in the Incoming call message (just after the + caller's name from the phonebook). But never change + between phone calls :-( + */ + + /* This may mean sequence number of 'just made' call - CK */ + case 0x02: + +#ifdef DEBUG + fprintf(stdout, _("Message: Call message, type 0x02:")); + fprintf(stdout, _(" Exact meaning not known yet, sorry :-(\n")); +#endif /* DEBUG */ + + break; + + /* Possibly call OK */ + /* JD: I think that this means "call in progress" (incomming or outgoing) */ + case 0x03: + +#ifdef DEBUG + fprintf(stdout, _("Message: Call message, type 0x03:")); + fprintf(stdout, _(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + fprintf(stdout, _(" Exact meaning not known yet, sorry :-(\n")); +#endif /* DEBUG */ + + CurrentCallSequenceNumber=MessageBuffer[4]; + CurrentIncomingCall[0]='D'; + if (CurrentCallPassup) CurrentCallPassup('D'); + + break; + + /* Remote end has gone away before you answer the call. Probably your + mother-in-law or banker (which is worse?) ... */ + case 0x04: + +#ifdef DEBUG + fprintf(stdout, _("Message: Remote end hang up.\n")); + fprintf(stdout, _(" Sequence nr. of the call: %d, error: %i"), MessageBuffer[4],MessageBuffer[6]); + + switch (MessageBuffer[6]) { + case 28: fprintf(stdout,_(" (info \"Invalid phone number\")"));break; + case 34: fprintf(stdout,_(" (info \"Network busy\")"));break; + case 42: fprintf(stdout,_(" (info \"Network busy\")"));break; + case 47: fprintf(stdout,_(" (info \"Error in connection\")"));break; + case 50: fprintf(stdout,_(" (info \"Check operator services\")"));break; case 76: fprintf(stdout,_(" (info \"Check operator services\")"));break; + case 111: fprintf(stdout,_(" (info \"Error in connection\")"));break; + } + + fprintf(stdout,_("\n For more details with errors see netmonitor manual (test 39) on www.marcin-wiacek.topnet.pl")); + fprintf(stdout,_("\n If know their meaning, GSM specs decribing them, contact with me on marcin-wiacek@topnet.pl. THX\n")); +#endif /* DEBUG */ + + CurrentIncomingCall[0] = ' '; + if (CurrentCallPassup) CurrentCallPassup(' '); + + break; + + /* Incoming call alert */ + case 0x05: + +#ifdef DEBUG + fprintf(stdout, _("Message: Incoming call alert:\n")); + + /* We can have more then one call ringing - we can distinguish between + them */ + + fprintf(stdout, _(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + fprintf(stdout, _(" Number: ")); + + count=MessageBuffer[6]; + + for (tmp=0; tmp SendMessage(4, 0x04, connect5); */ + + /* Marcin-Wiacek@TopNet.PL */ + +#ifdef WIN32 + sprintf(Current_IMEI, "%s", MessageBuffer+5); + sprintf(Current_Model, "%s", MessageBuffer+21); + sprintf(Current_Revision, "SW%s, HW%s", MessageBuffer+41, MessageBuffer+35); +#else + snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+5); + snprintf(Current_Model, GSM_MAX_MODEL_LENGTH, "%s", MessageBuffer+21); + snprintf(Current_Revision, GSM_MAX_REVISION_LENGTH, "SW%s, HW%s", MessageBuffer+41, MessageBuffer+35); +#endif + +#ifdef DEBUG + fprintf(stdout, _("Message: Mobile phone identification received:\n")); + fprintf(stdout, _(" IMEI: %s\n"), Current_IMEI); + fprintf(stdout, _(" Model: %s\n"), Current_Model); + fprintf(stdout, _(" Production Code: %s\n"), MessageBuffer+27); + fprintf(stdout, _(" HW: %s\n"), MessageBuffer+35); + fprintf(stdout, _(" Firmware: %s\n"), MessageBuffer+41); +#endif /* DEBUG */ + + break; + + /* Get group data */ + /* [ID],[name_len],[name].,[ringtone],[graphicon],[lenhi],[lenlo],[bitmap] */ + case 0x11: + + if (CurrentGetBitmap!=NULL) { + if (CurrentGetBitmap->number==MessageBuffer[4]) { + count=MessageBuffer[5]; + memcpy(CurrentGetBitmap->text,MessageBuffer+6,count); + CurrentGetBitmap->text[count]=0; + +#ifdef DEBUG + fprintf(stdout, _("Message: Caller group datas\n")); + fprintf(stdout, _("Caller group name: %s\n"),CurrentGetBitmap->text); +#endif /* DEBUG */ + + count+=6; + + CurrentGetBitmap->ringtone=MessageBuffer[count++]; +#ifdef DEBUG + fprintf(stdout, _("Caller group ringtone ID: %i"),CurrentGetBitmap->ringtone); + if (CurrentGetBitmap->ringtone==16) fprintf(stdout,_(" (default)")); + fprintf(stdout,_("\n")); +#endif /* DEBUG */ + + CurrentGetBitmap->enabled=(MessageBuffer[count++]==1); +#ifdef DEBUG + fprintf(stdout, _("Caller group logo ")); + if (CurrentGetBitmap->enabled) + fprintf(stdout, _("enabled \n")); + else + fprintf(stdout, _("disabled \n")); +#endif /* DEBUG */ + + CurrentGetBitmap->size=MessageBuffer[count++]<<8; + CurrentGetBitmap->size+=MessageBuffer[count++]; +#ifdef DEBUG + fprintf(stdout, _("Bitmap size=%i\n"),CurrentGetBitmap->size); +#endif /* DEBUG */ + + count++; + CurrentGetBitmap->width=MessageBuffer[count++]; + CurrentGetBitmap->height=MessageBuffer[count++]; + count++; + tmp=GSM_GetBitmapSize(CurrentGetBitmap); + if (CurrentGetBitmap->size>tmp) CurrentGetBitmap->size=tmp; + memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,CurrentGetBitmap->size); + CurrentGetBitmapError=GE_NONE; + } else { +#ifdef DEBUG + fprintf(stdout, _("Message: Caller group datas received, but group number does not match (%i is not %i)\n"),MessageBuffer[4],CurrentGetBitmap->number); +#endif + } + } else { +#ifdef DEBUG + fprintf(stdout, _("Message: Caller group data received but not requested!\n")); +#endif + } + break; + + /* Get group data error */ + case 0x12: + + CurrentGetBitmapError=GE_UNKNOWN; +#ifdef DEBUG + fprintf(stdout, _("Message: Error attempting to get caller group data.\n")); +#endif + break; + + /* Set group data OK */ + case 0x14: + + CurrentSetBitmapError=GE_NONE; +#ifdef DEBUG + fprintf(stdout, _("Message: Caller group data set correctly.\n")); +#endif + break; + + /* Set group data error */ + case 0x15: + + CurrentSetBitmapError=GE_UNKNOWN; +#ifdef DEBUG + fprintf(stdout, _("Message: Error attempting to set caller group data\n")); +#endif + break; + + default: + +#ifdef DEBUG + fprintf(stdout, _("Message: Unknown message of type 0x03\n")); +#endif /* DEBUG */ + AppendLogText("Unknown msg\n",false); + + break; /* Visual C Don't like empty cases */ + } +} + +void N6110_Dispatch0x05Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int tmp, count, length; + bool issupported; - GSM_NetworkInfo NullNetworkInfo; - - /* Make sure we are expecting NetworkInfo frame */ - if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) { #ifdef DEBUG - fprintf(stdout, _("Message: Network informations:\n")); + int i; #endif - } else { + + switch (MessageBuffer[3]) { + + /* Startup Logo */ + case 0x17: + +#ifdef DEBUG + fprintf(stdout, _("Message: Startup Logo, welcome note and dealer welcome note received.\n")); +#endif + + if (CurrentGetBitmap!=NULL) { + + issupported=false; + + count=5; + + for (tmp=0;tmptype==GSM_StartupLogo) { + CurrentGetBitmap->height=MessageBuffer[count++]; + CurrentGetBitmap->width=MessageBuffer[count++]; + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); + length=CurrentGetBitmap->size; + memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,length); + } else { + //bitmap size + length=MessageBuffer[count++]; + length=length*MessageBuffer[count++]/8; + } + count+=length; +#ifdef DEBUG + fprintf(stdout, _("Startup logo supported - ")); + if (length!=0) { fprintf(stdout, _("currently set\n")); } + else { fprintf(stdout, _("currently empty\n")); } +#endif + if (CurrentGetBitmap->type==GSM_StartupLogo) issupported=true; + break; + case 0x02: + length=MessageBuffer[count]; + if (CurrentGetBitmap->type==GSM_WelcomeNoteText) { + memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,length); + CurrentGetBitmap->text[length]=0; + } +#ifdef DEBUG + fprintf(stdout, _("Startup Text supported - ")); + if (length!=0) + { + fprintf(stdout, _("currently set to \"")); + for (i=0;itype==GSM_WelcomeNoteText) issupported=true; + break; + case 0x03: + length=MessageBuffer[count]; + if (CurrentGetBitmap->type==GSM_DealerNoteText) { + memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,length); + CurrentGetBitmap->text[length]=0; + } +#ifdef DEBUG + fprintf(stdout, _("Dealer Welcome supported - ")); + if (length!=0) + { + fprintf(stdout, _("currently set to \"")); + for (i=0;itype==GSM_DealerNoteText) issupported=true; + break; + } + } + if (issupported) CurrentGetBitmapError=GE_NONE; + else CurrentGetBitmapError=GE_NOTSUPPORTED; + } else { +#ifdef DEBUG + fprintf(stdout, _("Message: Startup logo received but not requested!\n")); +#endif + } + break; + + /* Set startup OK */ + case 0x19: + + CurrentSetBitmapError=GE_NONE; +#ifdef DEBUG + fprintf(stdout, _("Message: Startup logo, welcome note or dealer welcome note correctly set.\n")); +#endif + break; + + /* Set Operator Logo OK */ + case 0x31: + +#ifdef DEBUG + fprintf(stdout, _("Message: Operator logo correctly set.\n")); +#endif + + CurrentSetBitmapError=GE_NONE; + break; + + /* Set Operator Logo Error */ + case 0x32: + +#ifdef DEBUG + fprintf(stdout, _("Message: Error setting operator logo!\n")); +#endif + + CurrentSetBitmapError=GE_UNKNOWN; + break; + + /* Operator Logo */ + /* [location],[netcode x 3],[lenhi],[lenlo],[bitmap] */ + case 0x34: + + if (CurrentGetBitmap!=NULL) { + + count=5; /* Location ignored. */ + + DecodeNetworkCode(MessageBuffer+count, CurrentGetBitmap->netcode); + count=count+3; + +#ifdef DEBUG + fprintf(stdout, _("Message: Operator Logo for %s (%s) network received.\n"), + CurrentGetBitmap->netcode, + GSM_GetNetworkName(CurrentGetBitmap->netcode)); +#endif + + CurrentGetBitmap->size=MessageBuffer[count++]<<8; + CurrentGetBitmap->size+=MessageBuffer[count++]; + count++; + CurrentGetBitmap->width=MessageBuffer[count++]; + CurrentGetBitmap->height=MessageBuffer[count++]; + count++; + tmp=GSM_GetBitmapSize(CurrentGetBitmap); + if (CurrentGetBitmap->size>tmp) CurrentGetBitmap->size=tmp; + memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,CurrentGetBitmap->size); + CurrentGetBitmapError=GE_NONE; + } else { +#ifdef DEBUG + fprintf(stdout, _("Message: Operator logo received but not requested!\n")); +#endif + } + + break; + + /* Get op logo error */ + case 0x35: + +#ifdef DEBUG + fprintf(stdout, _("Message: Error getting operator logo!\n")); +#endif + CurrentGetBitmapError=GE_UNKNOWN; + break; + + default: + +#ifdef DEBUG + fprintf(stdout, _("Message: Unknown message of type 0x05\n")); +#endif /* DEBUG */ + AppendLogText("Unknown msg\n",false); + + break; + } +} + +void N6110_Dispatch0x06Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + int tmp; + unsigned char output[160]; + #ifdef DEBUG - fprintf(stdout, _("Message: Network informations not requested, but received:\n")); + int i; #endif - } - - sprintf(NullNetworkInfo.NetworkCode, "%x%x%x %x%x", MessageBuffer[14] & 0x0f, MessageBuffer[14] >>4, MessageBuffer[15] & 0x0f, MessageBuffer[16] & 0x0f, MessageBuffer[16] >>4); + + switch (MessageBuffer[3]) { + + case 0x05: + + /* MessageBuffer[3] = 0x05 + MessageBuffer[4] = 0x00 + MessageBuffer[5] = 0x0f + MessageBuffer[6] = 0x03 + MessageBuffer[7] = length of packed message + + This is all I have seen - Gerry Anderson */ + + tmp=GSM_UnpackEightBitsToSeven(0, 82, 82, MessageBuffer+8, output); + +#ifdef DEBUG + + fprintf(stdout, _("Message from Network operator: ")); + + for (i=0; iSender,GSM_UnpackSemiOctetNumber(MessageBuffer+5,true)); + + while (MessageBuffer[count]!=0) { + count++; + } + + count++; + } else { + strcpy(CurrentGetBitmap->Sender,"\0"); + + count+=3; + } + + memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,MessageBuffer[count]); + CurrentGetBitmap->text[MessageBuffer[count]]=0; + + if (MessageBuffer[count]!=0) + count+=MessageBuffer[count]; + + count++; + +#ifdef DEBUG + fprintf(stdout,_("Picture Image received, text \"%s\", sender %s\n"),CurrentGetBitmap->text,CurrentGetBitmap->Sender); +#endif + + CurrentGetBitmap->width=MessageBuffer[count+1]; + CurrentGetBitmap->height=MessageBuffer[count+2]; + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); + + memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count+4,CurrentGetBitmap->size); + + CurrentGetBitmapError=GE_NONE; + break; + + case 0x04: + +#ifdef DEBUG + fprintf(stdout,_("Getting or setting Picture Image - OK\n")); +#endif + CurrentSetBitmapError=GE_NONE; + CurrentGetBitmapError=GE_NONE; + break; + + case 0x05: + +#ifdef DEBUG + fprintf(stdout,_("Setting Picture Image - invalid location or other error\n")); +#endif + CurrentSetBitmapError=GE_UNKNOWN; + break; + + case 0x06: + +#ifdef DEBUG + fprintf(stdout,_("Getting Picture Image - invalid location or other error\n")); +#endif + CurrentGetBitmapError=GE_UNKNOWN; + break; + + default: + +#ifdef DEBUG + fprintf(stdout, _("Unknown message of type 0x47.\n")); +#endif /* DEBUG */ + AppendLogText("Unknown msg\n",false); + break; /* Visual C Don't like empty cases */ + } +} + +void N6110_DispatchACKMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + char buffer[50]; + + sprintf(buffer,"Received ACK %02x %02x\n",MessageBuffer[0],MessageBuffer[1]); + AppendLog(buffer,strlen(buffer),false); + +#ifdef DEBUG + fprintf(stdout, _("[Received Ack of type %02x, seq: %2x]\n"), MessageBuffer[0], + MessageBuffer[1]); +#endif /* DEBUG */ + + CurrentLinkOK = true; +} + +void N6110_Dispatch0xD0Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: The phone is powered on - seq 1.\n")); +#endif /* DEBUG */ + +} + +/* This function is used for parsing the RLP frame into fields. */ +void N6110_RX_HandleRLPMessage(u8 *MessageBuffer) +{ + + RLP_F96Frame frame; + int count; + int valid = true; + + /* We do not need RLP frame parsing to be done when we do not have callback + specified. */ + if (CurrentRLP_RXCallback == NULL) + exit; + + /* Anybody know the official meaning of the first two bytes? + Nokia 6150 sends junk frames starting D9 01, and real frames starting + D9 00. We'd drop the junk frames anyway because the FCS is bad, but + it's tidier to do it here. We still need to call the callback function + to give it a chance to handle timeouts and/or transmit a frame */ + if (MessageBuffer[0] == 0xd9 && MessageBuffer[1] == 0x01) + valid = false; + + /* Nokia uses 240 bit frame size of RLP frames as per GSM 04.22 + specification, so Header consists of 16 bits (2 bytes). See section 4.1 + of the specification. */ + + frame.Header[0] = MessageBuffer[2]; + frame.Header[1] = MessageBuffer[3]; + + /* Next 200 bits (25 bytes) contain the Information. We store the + information in the Data array. */ + + for (count = 0; count < 25; count ++) + frame.Data[count] = MessageBuffer[4 + count]; + + /* The last 24 bits (3 bytes) contain FCS. */ + + frame.FCS[0] = MessageBuffer[29]; + frame.FCS[1] = MessageBuffer[30]; + frame.FCS[2] = MessageBuffer[31]; + + /* Here we pass the frame down in the input stream. */ + CurrentRLP_RXCallback(valid ? &frame : NULL); +} + +void N6110_Dispatch0xF4Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: The phone is powered on - seq 2.\n")); +#endif /* DEBUG */ + +} + +void N6110_ReplyIncomingSMS(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + + GSM_SMSMessage NullSMS; + + switch (MessageBuffer[6]) { + + case 0x00: NullSMS.Type = GST_SMS; NullSMS.folder = GST_INBOX; break; + case 0x01: NullSMS.Type = GST_DR; NullSMS.folder = GST_INBOX; break; + + /* Is it possible ? */ + case 0x02: NullSMS.Type = GST_SMS; NullSMS.folder = GST_OUTBOX; break; + default: NullSMS.Type = GST_UN; break; + } + +#ifdef DEBUG + if (NullSMS.Type == GST_DR) + fprintf(stdout, _("Message: SMS Message (Report) Received\n")); + else + fprintf(stdout, _("Message: SMS Message Received\n")); +#endif /* DEBUG */ + + GSM_DecodeNokiaSMSFrame(&NullSMS, MessageBuffer+7, MessageLength-7); + +#ifdef DEBUG + fprintf(stdout, _("\n")); +#endif /* DEBUG */ +} + +void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - sprintf(NullNetworkInfo.CellID, "%02x%02x", MessageBuffer[10], MessageBuffer[11]); - - sprintf(NullNetworkInfo.LAC, "%02x%02x", MessageBuffer[12], MessageBuffer[13]); - -#ifdef DEBUG - fprintf(stdout, _(" CellID: %s\n"), NullNetworkInfo.CellID); - fprintf(stdout, _(" LAC: %s\n"), NullNetworkInfo.LAC); - fprintf(stdout, _(" Network code: %s\n"), NullNetworkInfo.NetworkCode); - fprintf(stdout, _(" Network name: %s (%s)\n"), - GSM_GetNetworkName(NullNetworkInfo.NetworkCode), - GSM_GetCountryName(NullNetworkInfo.NetworkCode)); - fprintf(stdout, _(" Status: ")); - - switch (MessageBuffer[8]) { - case 0x01: fprintf(stdout, _("home network selected")); break; - case 0x02: fprintf(stdout, _("roaming network")); break; - case 0x03: fprintf(stdout, _("requesting network")); break; - case 0x04: fprintf(stdout, _("not registered in the network")); break; - default: fprintf(stdout, _("unknown")); - } - - fprintf(stdout, "\n"); - - fprintf(stdout, _(" Network selection: %s\n"), MessageBuffer[9]==1?_("manual"):_("automatic")); -#endif /* DEBUG */ - - /* Make sure we are expecting NetworkInfo frame */ - if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) - *CurrentNetworkInfo=NullNetworkInfo; - - CurrentNetworkInfoError = GE_NONE; -} - -GSM_Error N6110_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo) -{ - unsigned char req[] = { N6110_FRAME_HEADER, - 0x70 - }; - - GSM_Error error; - - CurrentNetworkInfo = NetworkInfo; - - error=NULL_SendMessageSequence - (20, &CurrentNetworkInfoError, 4, 0x0a, req); - - CurrentNetworkInfo = NULL; - - return error; -} - -void N6110_ReplyGetProductProfileSetting(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i; - -#ifdef DEBUG - fprintf(stdout, _("Message: Product Profile Settings received -")); - for (i=0;i<4;i++) fprintf(stdout, _(" %02x"),MessageBuffer[3+i]); - fprintf(stdout, _("\n")); -#endif - - for (i=0;i<4;i++) CurrentPPS[i]=MessageBuffer[3+i]; - - CurrentProductProfileSettingsError=GE_NONE; -} - -GSM_Error N6110_GetProductProfileSetting (GSM_PPS *PPS) -{ - unsigned char req[] = { 0x00, 0x01,0x6a }; - - int i,j; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - error=NULL_SendMessageSequence - (20, &CurrentProductProfileSettingsError, 3, 0x40, req); - if (error!=GE_NONE) return error; - - switch (PPS->Name) { - case PPS_ALS : PPS->bool_value=(CurrentPPS[1]&32); break; - case PPS_GamesMenu: PPS->bool_value=(CurrentPPS[3]&64); break; - case PPS_HRData : PPS->bool_value=(CurrentPPS[0]&64); break; - case PPS_14400Data: PPS->bool_value=(CurrentPPS[0]&128);break; - case PPS_EFR : PPS->int_value =(CurrentPPS[0]&1) +(CurrentPPS[0]&2); break; - case PPS_FR : PPS->int_value =(CurrentPPS[0]&16)/16+(CurrentPPS[0]&32)/16;break; - case PPS_HR : PPS->int_value =(CurrentPPS[0]&4)/4 +(CurrentPPS[0]&8)/4; break; - case PPS_VibraMenu: PPS->bool_value=(CurrentPPS[4]&64); break; - case PPS_LCDContrast: - PPS->int_value=0; - j=1; - for (i=0;i<5;i++) { - if (CurrentPPS[3]&j) PPS->int_value=PPS->int_value+j; - j=j*2; - } - PPS->int_value=PPS->int_value*100/32; - break; - - } - - return (GE_NONE); -} - -void N6110_ReplySetProductProfileSetting(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - int i; - - fprintf(stdout, _("Message: Product Profile Settings set to")); - for (i=0;i<4;i++) fprintf(stdout, _(" %02x"),CurrentPPS[i]); - fprintf(stdout, _("\n")); -#endif - - CurrentProductProfileSettingsError=GE_NONE; -} - -GSM_Error N6110_SetProductProfileSetting (GSM_PPS *PPS) -{ - unsigned char req[] = { 0x00, 0x01,0x6b, - 0x00, 0x00, 0x00, 0x00 }; /* bytes with Product Profile Setings */ - unsigned char settings[32]; - - GSM_PPS OldPPS; - - int i,j,z; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - OldPPS.Name=PPS_ALS; - error=N6110_GetProductProfileSetting(&OldPPS); - if (error!=GE_NONE) return error; - - j=128;z=0; - for (i=0;i<32;i++) { - if (CurrentPPS[z]&j) - settings[i]='1'; - else - settings[i]='0'; - if (j==1) { - j=128; - z++; - } else j=j/2; - } - -#ifdef DEBUG - fprintf(stdout,_("Current settings: ")); - for (i=0;i<32;i++) { - fprintf(stdout,_("%c"),settings[i]); - } - fprintf(stdout,_("\n")); -#endif - - switch (PPS->Name) { - case PPS_ALS :settings[10]=PPS->bool_value?'1':'0';break; - case PPS_HRData :settings[ 5]=PPS->bool_value?'1':'0';break; - case PPS_14400Data:settings[ 6]=PPS->bool_value?'1':'0';break; - default :break; - } - - j=128;z=0; - for (i=0;i<32;i++) { - if (settings[i]=='1') req[z+3]=req[z+3]+j; - if (j==1) { - j=128; - z++; - } else j=j/2; - } - -#ifdef DEBUG - fprintf(stdout,_("Current settings: ")); - for (i=0;i<4;i++) { - fprintf(stdout,_("%i "),req[i+3]); - } - fprintf(stdout,_("\n")); -#endif - - for (i=0;i<4;i++) { - CurrentPPS[i]=req[i+3]; - } - - return NULL_SendMessageSequence - (20, &CurrentProductProfileSettingsError, 7, 0x40, req); -} - -void N6110_ReplyPressKey(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - if (MessageBuffer[4]==CurrentPressKeyEvent) CurrentPressKeyError=GE_NONE; - else CurrentPressKeyError=GE_UNKNOWN; /* MessageBuffer[4] = 0x05 */ -#ifdef DEBUG - fprintf(stdout, _("Message: Result of key ")); - switch (MessageBuffer[4]) - { - case PRESSPHONEKEY: fprintf(stdout, _("press OK\n"));break; - case RELEASEPHONEKEY: fprintf(stdout, _("release OK\n"));break; - default: fprintf(stdout, _("press or release - error\n"));break; - } -#endif /* DEBUG */ -} - -GSM_Error N6110_PressKey(int key, int event) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x42, 0x01, 0x00, 0x01}; - - req[4]=event; /* if we press or release key */ - req[5]=key; - - CurrentPressKeyEvent=event; - - return NULL_SendMessageSequence - (10, &CurrentPressKeyError, 7, 0x0c, req); -} - -void N6110_ReplyDisplayOutput(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ - char model[64]; - - int i, j; - - char uni[100]; - - switch(MessageBuffer[3]) { - - /* Phone sends displayed texts */ - case 0x50: - NewX=MessageBuffer[6]; - NewY=MessageBuffer[5]; - - DecodeUnicode (uni, MessageBuffer+8, MessageBuffer[7]); - -#ifdef DEBUG - fprintf(stdout, _("New displayed text (%i %i): \"%s\"\n"),NewX,NewY,uni); -#endif /* DEBUG */ - - while (N6110_GetModel(model) != GE_NONE) - sleep(1); - - /* With these rules it works almost excellent with my N5110 */ - /* I don't have general rule :-(, that's why you must experiment */ - /* with your phone. Nokia could make it better. MW */ - /* It's almost OK for N5110*/ - /* FIX ME: it will be the same for N5130 and 3210 too*/ - if (!strcmp(model,"NSE-1")) - { - /* OldX==1000 means - it's first time */ - if (OldX==1000) { - - /* Clean table */ - for (i=0;i<5+1;i++) { - for (j=0;j<27+1;j++) {PhoneScreen[i][j]=' ';} - } - OldX=0; - } - - if ((OldX==0 && OldY==31 && NewX==29 && NewY==46) || - (OldX==0 && OldY==13 && NewX==23 && NewY==46)) { - /* Clean the line with current text */ - for (j=0;j<27+1;j++) {PhoneScreen[NewY/(47/5)][j]=' ';} - - /* Inserts text into table */ - for (i=0; iSendMessage(sizeof(req0), 0x01, req0); - sleep(1); - - return NULL_SendMessageSequence - (20, &CurrentMagicError, sizeof(req) , 0x01, req); -} - -void N6110_ReplyGetProfile(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - /* Profile feature */ - case 0x14: - - switch(GetModelFeature (FN_PROFILES)) { - case F_PROF33: - switch (MessageBuffer[6]) { - case 0x00: CurrentProfile->KeypadTone = MessageBuffer[8]; break; - case 0x01: CurrentProfile->CallAlert = MessageBuffer[8]; break; - case 0x02: CurrentProfile->Ringtone = MessageBuffer[8]; break; - case 0x03: CurrentProfile->Volume = MessageBuffer[8]; break; - case 0x04: CurrentProfile->MessageTone = MessageBuffer[8]; break; - case 0x05: CurrentProfile->Vibration = MessageBuffer[8]; break; - case 0x06: CurrentProfile->WarningTone = MessageBuffer[8]; break; - case 0x07: CurrentProfile->ScreenSaver = MessageBuffer[8]; break; - default: -#ifdef DEBUG - fprintf(stdout,_("feature %i = value %i\n\n"),MessageBuffer[6],MessageBuffer[8]); -#endif - break; - } - break; - default: - switch (MessageBuffer[6]) { - case 0x00: CurrentProfile->KeypadTone = MessageBuffer[8];break; - case 0x01: CurrentProfile->Lights = MessageBuffer[8];break; - case 0x02: CurrentProfile->CallAlert = MessageBuffer[8];break; - case 0x03: CurrentProfile->Ringtone = MessageBuffer[8];break; - case 0x04: CurrentProfile->Volume = MessageBuffer[8];break; - case 0x05: CurrentProfile->MessageTone = MessageBuffer[8];break; - case 0x06: CurrentProfile->Vibration = MessageBuffer[8];break; - case 0x07: CurrentProfile->WarningTone = MessageBuffer[8];break; - case 0x08: CurrentProfile->CallerGroups = MessageBuffer[8];break; - case 0x09: CurrentProfile->AutomaticAnswer = MessageBuffer[8];break; - default: -#ifdef DEBUG - fprintf(stdout,_("feature %i = value %i\n\n"),MessageBuffer[6],MessageBuffer[8]); -#endif - break; - } - break; - } - - CurrentProfileError = GE_NONE; - break; - - /* Incoming profile name */ - case 0x1b: - - if (MessageBuffer[9] == 0x00) { - CurrentProfile->DefaultName=MessageBuffer[8]; - } else { - CurrentProfile->DefaultName=-1; - - /* Here name is in Unicode */ - if (GetModelFeature (FN_PROFILES)==F_PROF33) { - DecodeUnicode (CurrentProfile->Name, MessageBuffer+10, MessageBuffer[9]/2); - } else { - /* ...here not */ - sprintf(CurrentProfile->Name, MessageBuffer + 10, MessageBuffer[9]); - CurrentProfile->Name[MessageBuffer[9]] = '\0'; - } - } - - CurrentProfileError = GE_NONE; - break; - - } -} - -/* Needs SIM card with PIN in phone */ -GSM_Error N6110_GetProfile(GSM_Profile *Profile) -{ - int i; - - unsigned char name_req[] = { N6110_FRAME_HEADER, 0x1a, 0x00}; - unsigned char feat_req[] = { N6110_FRAME_HEADER, 0x13, 0x01, 0x00, 0x00}; - - GSM_Error error; - - CurrentProfile = Profile; - - /* When after sending all frames feature==253, it means, that it is not - supported */ - CurrentProfile->KeypadTone=253; - CurrentProfile->Lights=253; - CurrentProfile->CallAlert=253; - CurrentProfile->Ringtone=253; - CurrentProfile->Volume=253; - CurrentProfile->MessageTone=253; - CurrentProfile->WarningTone=253; - CurrentProfile->Vibration=253; - CurrentProfile->CallerGroups=253; - CurrentProfile->ScreenSaver=253; - CurrentProfile->AutomaticAnswer=253; - - name_req[4] = Profile->Number; - - error=NULL_SendMessageSequence - (20, &CurrentProfileError, 5, 0x05, name_req); - if (error!=GE_NONE) return error; - - for (i = 0x00; i <= 0x09; i++) { - - feat_req[5] = Profile->Number; - - feat_req[6] = i; - - error=NULL_SendMessageSequence - (20, &CurrentProfileError, 7, 0x05, feat_req); - if (error!=GE_NONE) return error; - } - - if (Profile->DefaultName > -1) - { - switch(GetModelFeature (FN_PROFILES)) { - case F_PROF33: - switch (Profile->DefaultName) { - case 0x00: sprintf(Profile->Name, "General");break; - case 0x01: sprintf(Profile->Name, "Silent");break; - case 0x02: sprintf(Profile->Name, "Descreet");break; - case 0x03: sprintf(Profile->Name, "Loud");break; - case 0x04: sprintf(Profile->Name, "My style");break; - case 0x05: Profile->Name[0]=0;break; - default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; - } - break; - case F_PROF51: - switch (Profile->DefaultName) { - case 0x00: sprintf(Profile->Name, "Personal");break; - case 0x01: sprintf(Profile->Name, "Car");break; - case 0x02: sprintf(Profile->Name, "Headset");break; - default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; - } - break; - case F_PROF61: - switch (Profile->DefaultName) { - case 0x00: sprintf(Profile->Name, "General");break; - case 0x01: sprintf(Profile->Name, "Silent");break; - case 0x02: sprintf(Profile->Name, "Meeting");break; - case 0x03: sprintf(Profile->Name, "Outdoor");break; - case 0x04: sprintf(Profile->Name, "Pager");break; - case 0x05: sprintf(Profile->Name, "Car");break; - case 0x06: sprintf(Profile->Name, "Headset");break; - default : sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName);break; - } - break; - } - } - - return (GE_NONE); - -} - -void N6110_ReplySetProfile(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - /* Profile feature change result */ - case 0x11: -#ifdef DEBUG - fprintf(stdout, _("Message: Profile feature change result.\n")); -#endif /* DEBUG */ - CurrentProfileError = GE_NONE; - break; - - /* Profile name set result */ - case 0x1d: -#ifdef DEBUG - fprintf(stdout, _("Message: Profile name change result.\n")); -#endif /* DEBUG */ - CurrentProfileError = GE_NONE; - break; - - } -} - -GSM_Error N6110_SetProfileFeature(u8 profile, u8 feature, u8 value) -{ - unsigned char feat_req[] = { N6110_FRAME_HEADER, 0x10, 0x01, - 0x00, 0x00, 0x00}; - - feat_req[5]=profile; - feat_req[6]=feature; - feat_req[7]=value; - - return NULL_SendMessageSequence - (20, &CurrentProfileError, 8, 0x05, feat_req); -} - -GSM_Error N6110_SetProfile(GSM_Profile *Profile) -{ - int i,value; - - unsigned char name_req[40] = { N6110_FRAME_HEADER, 0x1c, 0x01, 0x03, - 0x00, 0x00, 0x00}; - - GSM_Error error; - - name_req[7] = Profile->Number; - name_req[8] = strlen(Profile->Name); - name_req[6] = name_req[8] + 2; - - for (i = 0; i < name_req[8]; i++) - name_req[9 + i] = Profile->Name[i]; - - error=NULL_SendMessageSequence - (20, &CurrentProfileError, name_req[8] + 9, 0x05, name_req); - if (error!=GE_NONE) return error; - - for (i = 0x00; i <= 0x09; i++) { - - switch (i) { - case 0x00: value = Profile->KeypadTone; break; - case 0x01: value = Profile->Lights; break; - case 0x02: value = Profile->CallAlert; break; - case 0x03: value = Profile->Ringtone; break; - case 0x04: value = Profile->Volume; break; - case 0x05: value = Profile->MessageTone; break; - case 0x06: value = Profile->Vibration; break; - case 0x07: value = Profile->WarningTone; break; - case 0x08: value = Profile->CallerGroups; break; - case 0x09: value = Profile->AutomaticAnswer; break; - default : value = 0; break; - } - - error=N6110_SetProfileFeature(Profile->Number,i,value); - if (error!=GE_NONE) return error; - } - - return (GE_NONE); -} - -#endif /* UCLINUX */ - -bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) -{ - u8 req[60] = { 0x00, 0xd9 }; - - /* Discontinuos transmission (DTX). See section 5.6 of GSM 04.22 version - 7.0.1. */ - - if (out_dtx) - req[1]=0x01; - - memcpy(req+2, (u8 *) frame, 32); - - return (Protocol->SendFrame(32, 0xf0, req)); -} - -#ifndef UCLINUX - -void N6110_ReplyGetCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i, j; - - u8 mychar1; - - wchar_t wc; - - switch (MessageBuffer[4]) { - - case 0x01: - - CurrentCalendarNote->Type=MessageBuffer[8]; - - DecodeDateTime(MessageBuffer+9, &CurrentCalendarNote->Time); - - DecodeDateTime(MessageBuffer+16, &CurrentCalendarNote->Alarm); - - CurrentCalendarNote->Text[0]=0; - - if (GetModelFeature (FN_CALENDAR)==F_CAL33) { - i=0; - if (CurrentCalendarNote->Type == GCN_REMINDER) i=1; //first char is subset - switch (MessageBuffer[24]) { - case 3: -#ifdef DEBUG - fprintf(stdout,_("Subset 3 in reminder note !\n")); -#endif - while (i!=MessageBuffer[23]) { - j=0; - if (i!=MessageBuffer[23]-1) { - if (MessageBuffer[24+i]>=0xc2) { - DecodeWithUTF8Alphabet(MessageBuffer[24+i], MessageBuffer[24+i+1], &mychar1); - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]=mychar1; - j=-1; - i++; - } - } - if (j!=-1) { - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]=MessageBuffer[24+i]; - } - i++; - } - break; - case 2: -#ifdef DEBUG - fprintf(stdout,_("Subset 2 in reminder note !\n")); -#endif - while (i!=MessageBuffer[23]) { - wc = MessageBuffer[24+i] | (0x00 << 8); - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)+1]=0; - CurrentCalendarNote->Text[strlen(CurrentCalendarNote->Text)]= - DecodeWithUnicodeAlphabet(wc); - i++; - } - break; - case 1: -#ifdef DEBUG - fprintf(stdout,_("Subset 1 in reminder note !\n")); -#endif - memcpy(CurrentCalendarNote->Text,MessageBuffer+24+i,MessageBuffer[23]-i); - CurrentCalendarNote->Text[MessageBuffer[23]-i]=0; - break; - default: -#ifdef DEBUG - fprintf(stdout,_("Unknown subset in reminder note !\n")); -#endif - memcpy(CurrentCalendarNote->Text,MessageBuffer+24+i,MessageBuffer[23]-i); - CurrentCalendarNote->Text[MessageBuffer[23]-i]=0; - break; - } - } else { - memcpy(CurrentCalendarNote->Text,MessageBuffer+24,MessageBuffer[23]); - CurrentCalendarNote->Text[MessageBuffer[23]]=0; - } - - if (CurrentCalendarNote->Type == GCN_CALL) { - memcpy(CurrentCalendarNote->Phone,MessageBuffer+24+MessageBuffer[23]+1,MessageBuffer[24+MessageBuffer[23]]); - CurrentCalendarNote->Phone[MessageBuffer[24+MessageBuffer[23]]]=0; - } - - CurrentCalendarNote->Recurrance=0; - - CurrentCalendarNote->AlarmType=0; - -#ifdef DEBUG - fprintf(stdout, _("Message: Calendar note received.\n")); - - fprintf(stdout, _(" Date: %d-%02d-%02d\n"), CurrentCalendarNote->Time.Year, - CurrentCalendarNote->Time.Month, - CurrentCalendarNote->Time.Day); - - fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CurrentCalendarNote->Time.Hour, - CurrentCalendarNote->Time.Minute, - CurrentCalendarNote->Time.Second); - - /* Some messages do not have alarm set up */ - if (CurrentCalendarNote->Alarm.Year != 0) { - fprintf(stdout, _(" Alarm date: %d-%02d-%02d\n"), CurrentCalendarNote->Alarm.Year, - CurrentCalendarNote->Alarm.Month, - CurrentCalendarNote->Alarm.Day); - - fprintf(stdout, _(" Alarm time: %02d:%02d:%02d\n"), CurrentCalendarNote->Alarm.Hour, - CurrentCalendarNote->Alarm.Minute, - CurrentCalendarNote->Alarm.Second); - } - - fprintf(stdout, _(" Type: %d\n"), CurrentCalendarNote->Type); - fprintf(stdout, _(" Text: %s\n"), CurrentCalendarNote->Text); - - if (CurrentCalendarNote->Type == GCN_CALL) - fprintf(stdout, _(" Phone: %s\n"), CurrentCalendarNote->Phone); -#endif /* DEBUG */ - - CurrentCalendarNoteError=GE_NONE; - break; - - case 0x93: - -#ifdef DEBUG - fprintf(stdout, _("Message: Calendar note not available\n")); -#endif /* DEBUG */ - - CurrentCalendarNoteError=GE_INVALIDCALNOTELOCATION; - break; - - default: - -#ifdef DEBUG - fprintf(stdout, _("Message: Calendar note error\n")); -#endif /* DEBUG */ - - CurrentCalendarNoteError=GE_INTERNALERROR; - break; - - } -} - -GSM_Error N6110_GetCalendarNote(GSM_CalendarNote *CalendarNote) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x66, 0x00 - }; - GSM_Error error; - - req[4]=CalendarNote->Location; - - CurrentCalendarNote = CalendarNote; - - error=NULL_SendMessageSequence - (20, &CurrentCalendarNoteError, 5, 0x13, req); - - CurrentCalendarNote = NULL; - - return error; -} - -void N6110_ReplyWriteCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - switch(MessageBuffer[4]) { - /* This message is also sent when the user enters the new entry on keypad */ - case 0x01: - fprintf(stdout, _("Message: Calendar note write succesfull!\n"));break; - case 0x73: - fprintf(stdout, _("Message: Calendar note write failed!\n"));break; - case 0x7d: - fprintf(stdout, _("Message: Calendar note write failed!\n"));break; - default: - fprintf(stdout, _("Unknown message of type 0x13 and subtype 0x65\n"));break; - } -#endif - - switch(MessageBuffer[4]) { - case 0x01: CurrentCalendarNoteError=GE_NONE; break; - case 0x73: CurrentCalendarNoteError=GE_INTERNALERROR; break; - case 0x7d: CurrentCalendarNoteError=GE_INTERNALERROR; break; - default : AppendLogText("Unknown msg\n",false); break; - } -} - -GSM_Error N6110_WriteCalendarNote(GSM_CalendarNote *CalendarNote) -{ - - unsigned char req[200] = { N6110_FRAME_HEADER, - 0x64, 0x01, 0x10, - 0x00, /* Length of the rest of the frame. */ - 0x00, /* The type of calendar note */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - - typedef struct { - char *model; - unsigned char call; - unsigned char meeting; - unsigned char birthday; - unsigned char reminder; - } calendar_model_length; - - /* Length of entries */ - calendar_model_length calendar_lengths[] = - { - /*model,CallTo,Meeting,Birthday,Reminder*/ - {"NHM-5",0x24,0x24,0x24,0x24}, //Reminder from phone, other quesses - {"NHM-6",0x24,0x24,0x24,0x24}, //Reminder from phone, other quesses - {"NSE-3",0x1e,0x14,0x14,0x1e}, //from NCDS3 [HKEY_LOCAL_MACHINE\Software\Nokia\Data Suite\3.0\Calendar] - {"NSM-1",0x1e,0x18,0x18,0x24}, //from NCDS3 - {"NSK-3",0x1e,0x14,0x14,0x1e}, //from NCDS3 - {"NSB-3",0x20,0x14,0x14,0x1e}, //from NCDS3 - {"", 0, 0, 0, 0 } //end of table - }; - - int i, j, current; - - u8 mychar; - - u8 mychar1,mychar2; - - GSM_Error error; - - /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ - char model[64]; - - req[7]=CalendarNote->Type; - - EncodeDateTime(req+8, &CalendarNote->Time); - req[14] = CalendarNote->Time.Timezone; - - if (CalendarNote->Alarm.Year) { - EncodeDateTime(req+15, &CalendarNote->Alarm); - req[21] = CalendarNote->Alarm.Timezone; - } - - req[22]=strlen(CalendarNote->Text); - - current=23; - - if (GetModelFeature (FN_CALENDAR)==F_CAL33 && CalendarNote->Type==GCN_REMINDER) { - req[22]++; // one additional char - req[current++]=0x01; //we use now subset 1 - } - - for (i=0; iText); i++) { - j=0; - mychar=CalendarNote->Text[i]; - if (GetModelFeature (FN_CALENDAR)==F_CAL33 && CalendarNote->Type==GCN_REMINDER) { - if (EncodeWithUTF8Alphabet(mychar,&mychar1,&mychar2)) { - req[current++]=mychar1; - req[current++]=mychar2; - req[23]=0x03; //use subset 3 - req[22]++; // one additional char - j=-1; - } - } - if (j!=-1) { - /* Enables/disables blinking */ - if (mychar=='~') req[current++]=0x01; - else req[current++]=mychar; - } - } - - req[current++]=strlen(CalendarNote->Phone); - - for (i=0; iPhone); i++) - req[current++]=CalendarNote->Phone[i]; - - while (N6110_GetModel(model) != GE_NONE) - sleep(1); - - /* Checking maximal length */ - i=0; - while (strcmp(calendar_lengths[i].model,"")) { - if (!strcmp(calendar_lengths[i].model,model)) { - switch (CalendarNote->Type) { - case GCN_REMINDER:if (req[22]>calendar_lengths[i].reminder) return GE_TOOLONG;break; - case GCN_MEETING :if (req[22]>calendar_lengths[i].meeting) return GE_TOOLONG;break; - case GCN_BIRTHDAY:if (req[22]>calendar_lengths[i].birthday) return GE_TOOLONG;break; - case GCN_CALL :if (strlen(CalendarNote->Phone)>calendar_lengths[i].call) return GE_TOOLONG;break; - } - break; - } - i++; - } - - CurrentCalendarNote = CalendarNote; - - error=NULL_SendMessageSequence - (20, &CurrentCalendarNoteError, current, 0x13, req); - - CurrentCalendarNote = NULL; - - return error; -} - -void N6110_ReplyDeleteCalendarNote(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - switch (MessageBuffer[4]) { - /* This message is also sent when the user deletes an old entry on - keypad or moves an old entry somewhere (there is also `write' - message). */ - case 0x01:fprintf(stdout, _("Message: Calendar note deleted\n"));break; - case 0x93:fprintf(stdout, _("Message: Calendar note can't be deleted\n"));break; - default :fprintf(stdout, _("Message: Calendar note deleting error\n"));break; - } -#endif - - switch (MessageBuffer[4]) { - case 0x01:CurrentCalendarNoteError=GE_NONE;break; - case 0x93:CurrentCalendarNoteError=GE_INVALIDCALNOTELOCATION;break; - default :CurrentCalendarNoteError=GE_INTERNALERROR;break; - } -} - -GSM_Error N6110_DeleteCalendarNote(GSM_CalendarNote *CalendarNote) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x68, 0x00 - }; - - req[4]=CalendarNote->Location; - - return NULL_SendMessageSequence (20, &CurrentCalendarNoteError, 5, 0x13, req); -} - -#endif /* UCLINUX */ - -static void N6110_ReplyRFBatteryLevel(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: Phone status received:\n")); - fprintf(stdout, _(" Mode: ")); - - switch (MessageBuffer[4]) { - - case 0x01: - - fprintf(stdout, _("registered within the network\n")); - break; - - /* I was really amazing why is there a hole in the type of 0x02, now I - know... */ - case 0x02: fprintf(stdout, _("call in progress\n")); break; /* ringing or already answered call */ - case 0x03: fprintf(stdout, _("waiting for security code\n")); break; - case 0x04: fprintf(stdout, _("powered off\n")); break; - default : fprintf(stdout, _("unknown\n")); - - } - - fprintf(stdout, _(" Power source: ")); - - switch (MessageBuffer[7]) { - - case 0x01: fprintf(stdout, _("AC/DC\n")); break; - case 0x02: fprintf(stdout, _("battery\n")); break; - default : fprintf(stdout, _("unknown\n")); - - } - - fprintf(stdout, _(" Battery Level: %d\n"), MessageBuffer[8]); - fprintf(stdout, _(" Signal strength: %d\n"), MessageBuffer[5]); -#endif /* DEBUG */ - - CurrentRFLevel=MessageBuffer[5]; - CurrentBatteryLevel=MessageBuffer[8]; - CurrentPowerSource=MessageBuffer[7]; -} - - -GSM_Error N6110_GetRFLevel(GSM_RFUnits *units, float *level) -{ - - /* FIXME - these values are from 3810 code, may be incorrect. Map from - values returned in status packet to the the values returned by the AT+CSQ - command. */ - float csq_map[5] = {0, 8, 16, 24, 31}; - - int timeout=10; - int rf_level; - - char screen[NM_MAX_SCREEN_WIDTH]; - - CurrentRFLevel=-1; - - if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { - -#ifndef UCLINUX - if (N6110_NetMonitor(1, screen)!=GE_NONE) - return GE_INTERNALERROR; -#endif /* UCLINUX */ - - rf_level=4; - - if (screen[4]!='-') { - if (screen[5]=='9' && screen[6]>'4') rf_level=1; - if (screen[5]=='9' && screen[6]<'5') rf_level=2; - if (screen[5]=='8' && screen[6]>'4') rf_level=3; - } else rf_level=0; - - /* Arbitrary units. */ - if (*units == GRF_Arbitrary) { - *level = rf_level; - return (GE_NONE); - } - - } else { - N6110_SendStatusRequest(); - - /* Wait for timeout or other error. */ - while (timeout != 0 && CurrentRFLevel == -1 ) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - /* Make copy in case it changes. */ - rf_level = CurrentRFLevel; - - if (rf_level == -1) - return (GE_NOLINK); - - /* Now convert between the different units we support. */ - - /* Arbitrary units. */ - if (*units == GRF_Arbitrary) { - *level = rf_level; - return (GE_NONE); - } - - /* CSQ units. */ - if (*units == GRF_CSQ) { - - if (rf_level <=4) - *level = csq_map[rf_level]; - else - *level = 99; /* Unknown/undefined */ - - return (GE_NONE); - } - } - - /* Unit type is one we don't handle so return error */ - return (GE_INTERNALERROR); -} - - -GSM_Error N6110_GetBatteryLevel(GSM_BatteryUnits *units, float *level) -{ - int timeout=10; - int batt_level; - - char screen[NM_MAX_SCREEN_WIDTH]; - - CurrentBatteryLevel=-1; - - if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { - -#ifndef UCLINUX - if (N6110_NetMonitor(23, screen)!=GE_NONE) - return GE_NOLINK; -#endif /* UCLINUX */ - - batt_level=4; - - if (screen[29]=='7') batt_level=3; - if (screen[29]=='5') batt_level=2; - if (screen[29]=='2') batt_level=1; - - /* Only units we handle at present are GBU_Arbitrary */ - if (*units == GBU_Arbitrary) { - *level = batt_level; - return (GE_NONE); - } - - return (GE_INTERNALERROR); - - } else { - N6110_SendStatusRequest(); - - /* Wait for timeout or other error. */ - while (timeout != 0 && CurrentBatteryLevel == -1 ) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - /* Take copy in case it changes. */ - batt_level = CurrentBatteryLevel; - - if (batt_level != -1) { - - /* Only units we handle at present are GBU_Arbitrary */ - if (*units == GBU_Arbitrary) { - *level = batt_level; - return (GE_NONE); - } - - return (GE_INTERNALERROR); - } - else - return (GE_NOLINK); - } -} - -GSM_Error N6110_GetPowerSource(GSM_PowerSource *source) -{ - - int timeout=10; - - char screen[NM_MAX_SCREEN_WIDTH]; - - CurrentPowerSource=-1; - - if (GetModelFeature (FN_NOPOWERFRAME)==F_NOPOWER) { - -#ifndef UCLINUX - if (N6110_NetMonitor(20, screen)!=GE_NONE) - return GE_NOLINK; -#endif /* UCLINUX */ - - CurrentPowerSource=GPS_ACDC; - - if (screen[6]=='x') CurrentPowerSource=GPS_BATTERY; - - *source=CurrentPowerSource; - - return GE_NONE; - } else { - N6110_SendStatusRequest(); - - /* Wait for timeout or other error. */ - while (timeout != 0 && CurrentPowerSource == -1 ) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - if (CurrentPowerSource != -1) { - *source=CurrentPowerSource; - return (GE_NONE); - } - else - return (GE_NOLINK); - } -} - -#ifndef UCLINUX - -static void N6110_ReplyGetDisplayStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i; - - for (i=0; iSendMessage(sizeof(req3), 0x01, req3); /* Lace */ - usleep(100); - req_end = req_end0; - size = sizeof(req_end0); - break; - case 1: - Protocol->SendMessage(sizeof(req3), 0x01, req3); - usleep(1000000); - Protocol->SendMessage(sizeof(req4), 0x01, req4); - usleep(1000000); - req_end = req_end1; - size = sizeof(req_end1); - break; - case -1: /* Just used to set the call passup */ - return GE_NONE; - break; - default: - req_end = req_end0; - size = sizeof(req_end0); - break; - } - - req[4] = strlen(Number); - - for(i = 0; i < strlen(Number) ; i++) - req[5+i] = Number[i]; - - memcpy(req + 5 + strlen(Number), req_end, size); - - Protocol->SendMessage(5 + size + strlen(Number), 0x01, req); - usleep(1000000); - -#if 0 - if (type != 1) Protocol->SendMessage(26, 0x01, req2); -#endif - - return (GE_NONE); -} - -#ifndef UCLINUX - -GSM_Error N6110_GetIncomingCallNr(char *Number) -{ - - if (*CurrentIncomingCall != ' ') { - strcpy(Number, CurrentIncomingCall); - return GE_NONE; - } - else - return GE_BUSY; -} - -#endif /* UCLINUX */ - -GSM_Error N6110_CancelCall(void) -{ -// This frame & method works only on 61xx/51xx -// unsigned char req[] = { N6110_FRAME_HEADER, 0x08, 0x00, 0x85}; -// req[4]=CurrentCallSequenceNumber; -// Protocol->SendMessage(6, 0x01, req); -// return GE_NONE; - - GSM_Error error; - - unsigned char req[]={0x00,0x01,0x7c,0x03}; - - /* Checking */ - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - return NULL_SendMessageSequence (20, &CurrentDialVoiceError, 4, 0x40, req); -} - -#ifndef UCLINUX - -void N6110_ReplyEnterSecurityCode(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch(MessageBuffer[3]) { - - case 0x0b: -#ifdef DEBUG - fprintf(stdout, _("Message: Security code accepted.\n")); -#endif /* DEBUG */ - CurrentSecurityCodeError = GE_NONE; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _("Message: Security code is wrong. You're not my big owner :-)\n")); -#endif /* DEBUG */ - CurrentSecurityCodeError = GE_INVALIDSECURITYCODE; - } -} - -GSM_Error N6110_EnterSecurityCode(GSM_SecurityCode SecurityCode) -{ - - unsigned char req[15] = { N6110_FRAME_HEADER, - 0x0a, /* Enter code request. */ - 0x00 /* Type of the entered code. */ - }; - int i=0; - - req[4]=SecurityCode.Type; - - for (i=0; iType==MessageBuffer[3] /* We wanted this code */ - && MessageBuffer[4]==1) { /* It's allowed */ - if (MessageBuffer[3]==GSCT_SecurityCode) { - for (i=0;i<5;i++) {CurrentSecurityCode->Code[i]=MessageBuffer[5+i];} - CurrentSecurityCode->Code[5]=0; - } - if (MessageBuffer[3]==GSCT_Pin || MessageBuffer[3]==GSCT_Pin2 || - MessageBuffer[3]==GSCT_Puk || MessageBuffer[3]==GSCT_Puk2) { - for (i=0;i<4;i++) {CurrentSecurityCode->Code[i]=MessageBuffer[5+i];} - CurrentSecurityCode->Code[4]=0; - } - CurrentSecurityCodeError=GE_NONE; - } else - CurrentSecurityCodeError=GE_INVALIDSECURITYCODE; -} - -GSM_Error N6110_GetSecurityCode(GSM_SecurityCode *SecurityCode) -{ - - unsigned char req[4] = { 0x00, - 0x01,0x6e, /* Get code request. */ - 0x00 }; /* Type of the requested code. */ - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - req[3]=SecurityCode->Type; - - CurrentSecurityCode=SecurityCode; - - return NULL_SendMessageSequence - (20, &CurrentSecurityCodeError, 4, 0x40, req); -} - -void N6110_ReplyPlayTone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: answer for PlayTone frame\n")); -#endif - - CurrentPlayToneError=GE_NONE; -} - -GSM_Error N6110_PlayTone(int Herz, u8 Volume) -{ - unsigned char req[6] = { 0x00,0x01,0x8f, - 0x00, /* Volume */ - 0x00, /* HerzLo */ - 0x00 }; /* HerzHi */ - - GSM_Error error; - - /* PlayTone wasn't used earlier */ - if (CurrentPlayToneError==GE_UNKNOWN) { - if (CurrentConnectionType!=GCT_MBUS) - CurrentDisableKeepAlive=true; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - } - - /* For Herz==255*255 we have silent */ - if (Herz!=255*255) { - req[3]=Volume; - - req[5]=Herz%256; - req[4]=Herz/256; - } else { - req[3]=0; - - req[5]=0; - req[4]=0; - } - -#ifdef WIN32 - /* For Herz==255*255 we have silent and additionaly - we wait for phone answer - it's important for MBUS */ - if (Herz==255*255) { - error=NULL_SendMessageSequence - (20, &CurrentPlayToneError, 6, 0x40, req); - - CurrentPlayToneError=GE_UNKNOWN; - CurrentDisableKeepAlive=false; - - if (error!=GE_NONE) return error; - } else { - Protocol->SendMessage(6,0x40,req); - } -#else - error=NULL_SendMessageSequence - (20, &CurrentPlayToneError, 6, 0x40, req); - - /* For Herz==255*255 we wait for phone answer - it's important for MBUS */ - if (Herz==255*255) { - CurrentPlayToneError=GE_UNKNOWN; - CurrentDisableKeepAlive=false; - } - - if (error!=GE_NONE) return error; - -#endif - - return(GE_NONE); -} - -void N6110_ReplyGetDateTime(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - if (MessageBuffer[4]==0x01) { - DecodeDateTime(MessageBuffer+8, CurrentDateTime); - -#ifdef DEBUG - fprintf(stdout, _("Message: Date and time\n")); - fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CurrentDateTime->Hour, CurrentDateTime->Minute, CurrentDateTime->Second); - fprintf(stdout, _(" Date: %4d/%02d/%02d\n"), CurrentDateTime->Year, CurrentDateTime->Month, CurrentDateTime->Day); -#endif /* DEBUG */ - - CurrentDateTime->IsSet=true; - } else { - -#ifdef DEBUG - fprintf(stdout, _("Message: Date and time not set in phone\n")); -#endif - - CurrentDateTime->IsSet=false; - } - - CurrentDateTimeError=GE_NONE; -} - -GSM_Error N6110_GetDateTime(GSM_DateTime *date_time) -{ - return N6110_PrivGetDateTime(date_time,0x11); -} - -GSM_Error N6110_PrivGetDateTime(GSM_DateTime *date_time, int msgtype) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x62}; - - CurrentDateTime=date_time; - - return NULL_SendMessageSequence - (50, &CurrentDateTimeError, 4, msgtype, req); -} - -void N6110_ReplyGetAlarm(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: Alarm\n")); - fprintf(stdout, _(" Alarm: %02d:%02d\n"), MessageBuffer[9], MessageBuffer[10]); - fprintf(stdout, _(" Alarm is %s\n"), (MessageBuffer[8]==2) ? _("on"):_("off")); -#endif /* DEBUG */ - - CurrentAlarm->Hour=MessageBuffer[9]; - CurrentAlarm->Minute=MessageBuffer[10]; - CurrentAlarm->Second=0; - - CurrentAlarm->IsSet=(MessageBuffer[8]==2); - - CurrentAlarmError=GE_NONE; -} - -GSM_Error N6110_GetAlarm(int alarm_number, GSM_DateTime *date_time) -{ - return N6110_PrivGetAlarm(alarm_number,date_time,0x11); -} - -GSM_Error N6110_PrivGetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x6d}; - - CurrentAlarm=date_time; - - return NULL_SendMessageSequence - (50, &CurrentAlarmError, 4, msgtype, req); -} - -void N6110_ReplyGetSMSCenter(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x34: - - CurrentMessageCenter->No=MessageBuffer[4]; - CurrentMessageCenter->Format=MessageBuffer[6]; - CurrentMessageCenter->Validity=MessageBuffer[8]; - sprintf(CurrentMessageCenter->Name, "%s", MessageBuffer+33); - - sprintf(CurrentMessageCenter->DefaultRecipient, "%s", GSM_UnpackSemiOctetNumber(MessageBuffer+9,false)); - - sprintf(CurrentMessageCenter->Number, "%s", GSM_UnpackSemiOctetNumber(MessageBuffer+21,false)); - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS Center received:\n")); - fprintf(stdout, _(" %d. SMS Center name is %s\n"), CurrentMessageCenter->No, CurrentMessageCenter->Name); - fprintf(stdout, _(" SMS Center number is %s\n"), CurrentMessageCenter->Number); - fprintf(stdout, _(" Default recipient number is %s\n"), CurrentMessageCenter->DefaultRecipient); - - fprintf(stdout, _(" SMS Center message format is ")); - - switch (CurrentMessageCenter->Format) { - - case GSMF_Text : fprintf(stdout, _("Text")); break; - case GSMF_Paging: fprintf(stdout, _("Paging")); break; - case GSMF_Fax : fprintf(stdout, _("Fax")); break; - case GSMF_Email : fprintf(stdout, _("Email")); break; - default : fprintf(stdout, _("Unknown")); - } - - fprintf(stdout, "\n"); - - fprintf(stdout, _(" SMS Center message validity is ")); - - switch (CurrentMessageCenter->Validity) { - - case GSMV_1_Hour : fprintf(stdout, _("1 hour")); break; - case GSMV_6_Hours : fprintf(stdout, _("6 hours")); break; - case GSMV_24_Hours: fprintf(stdout, _("24 hours")); break; - case GSMV_72_Hours: fprintf(stdout, _("72 hours")); break; - case GSMV_1_Week : fprintf(stdout, _("1 week")); break; - case GSMV_Max_Time: fprintf(stdout, _("Maximum time"));break; - default : fprintf(stdout, _("Unknown")); - } - - fprintf(stdout, "\n"); - -#endif /* DEBUG */ - - CurrentMessageCenterError=GE_NONE; - - break; - - case 0x35: - - /* Number of entries depends on SIM card */ - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS Center error received:\n")); - fprintf(stdout, _(" The request for SMS Center failed.\n")); -#endif /* DEBUG */ - - /* FIXME: appropriate error. */ - CurrentMessageCenterError=GE_INTERNALERROR; - - break; - - } -} - -/* This function sends to the mobile phone a request for the SMS Center */ -GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter) -{ - unsigned char req[] = { N6110_FRAME_HEADER, 0x33, 0x64, - 0x00 /* SMS Center Number. */ - }; - - req[5]=MessageCenter->No; - - CurrentMessageCenter=MessageCenter; - - return NULL_SendMessageSequence - (50, &CurrentMessageCenterError, 6, 0x02, req); -} - -void N6110_ReplySetSMSCenter(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS Center correctly set.\n")); -#endif - CurrentMessageCenterError=GE_NONE; -} - -/* This function set the SMS Center profile on the phone. */ -GSM_Error N6110_SetSMSCenter(GSM_MessageCenter *MessageCenter) -{ - unsigned char req[64] = { N6110_FRAME_HEADER, 0x30, 0x64, - 0x00, /* SMS Center Number. */ - 0x00, /* Unknown. */ - 0x00, /* SMS Message Format. */ - 0x00, /* Unknown. */ - 0x00, /* Validity. */ - 0,0,0,0,0,0,0,0,0,0,0,0, /* Default recipient number */ - 0,0,0,0,0,0,0,0,0,0,0,0 /* Message Center Number. */ - /* Message Center Name. */ - }; - - req[5]=MessageCenter->No; - req[7]=MessageCenter->Format; - req[9]=MessageCenter->Validity; - - req[10]=GSM_PackSemiOctetNumber(MessageCenter->DefaultRecipient, req+11, false); - - req[22]=GSM_PackSemiOctetNumber(MessageCenter->Number, req+23, false); - - sprintf(req+34, "%s", MessageCenter->Name); - - CurrentMessageCenter=MessageCenter; - - return NULL_SendMessageSequence - (50, &CurrentMessageCenterError, 35+strlen(MessageCenter->Name), 0x02, req); -} - -void N6110_ReplyGetSMSStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x37: - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS Status Received\n")); - fprintf(stdout, _(" The number of messages: %d\n"), MessageBuffer[10]); - fprintf(stdout, _(" Unread messages: %d\n"), MessageBuffer[11]); -#endif /* DEBUG */ - - CurrentSMSStatus->UnRead = MessageBuffer[11]; - CurrentSMSStatus->Number = MessageBuffer[10]; - - CurrentSMSStatusError = GE_NONE; - break; - - case 0x38: - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS Status error, probably not authorized by PIN\n")); -#endif /* DEBUG */ - - CurrentSMSStatusError = GE_INTERNALERROR; - break; - - } -} - -GSM_Error N6110_GetSMSStatus(GSM_SMSStatus *Status) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x36, 0x64}; - - CurrentSMSStatus = Status; - - return NULL_SendMessageSequence - (10, &CurrentSMSStatusError, 5, 0x14, req); -} - -GSM_Error N6110_GetSMSFolders ( GSM_SMSFolders *folders) -{ - folders->number=2; - - strcpy(folders->Folder[0].Name,"Inbox"); - strcpy(folders->Folder[1].Name,"Outbox"); - - return GE_NONE; -} - -#endif /* UCLINUX */ - -GSM_Error N6110_GetIMEI(char *imei) -{ - if (strlen(Current_IMEI)>0) { - strncpy (imei, Current_IMEI, GSM_MAX_IMEI_LENGTH); - return (GE_NONE); - } - else - return (GE_TRYAGAIN); -} - -GSM_Error N6110_GetRevision(char *revision) -{ - - if (strlen(Current_Revision)>0) { - strncpy (revision, Current_Revision, GSM_MAX_REVISION_LENGTH); - return (GE_NONE); - } - else - return (GE_TRYAGAIN); -} - -static GSM_Error N6110_GetModel(char *model) -{ - if (strlen(Current_Model)>0) { - strncpy (model, Current_Model, GSM_MAX_MODEL_LENGTH); - return (GE_NONE); - } - else - return (GE_TRYAGAIN); -} - -#ifndef UCLINUX - -void N6110_ReplySetDateTime(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[4]) { - - case 0x01: -#ifdef DEBUG - fprintf(stdout, _("Message: Date and time set correctly\n")); -#endif /* DEBUG */ - CurrentSetDateTimeError=GE_NONE; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _("Message: Date and time setting error\n")); -#endif /* DEBUG */ - CurrentSetDateTimeError=GE_INVALIDDATETIME; - - } -} - -/* Needs SIM card with PIN in phone */ -GSM_Error N6110_SetDateTime(GSM_DateTime *date_time) -{ - return N6110_PrivSetDateTime(date_time,0x11); -} - -/* Needs SIM card with PIN in phone */ -GSM_Error N6110_PrivSetDateTime(GSM_DateTime *date_time, int msgtype) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x60, /* set-time subtype */ - 0x01, 0x01, 0x07, /* unknown */ - 0x00, 0x00, /* Year (0x07cf = 1999) */ - 0x00, 0x00, /* Month Day */ - 0x00, 0x00, /* Hours Minutes */ - 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ - }; - - EncodeDateTime(req+7, date_time); - - return NULL_SendMessageSequence - (20, &CurrentSetDateTimeError, 14, msgtype, req); -} - -void N6110_ReplySetAlarm(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[4]) { - - case 0x01: -#ifdef DEBUG - fprintf(stdout, _("Message: Alarm set correctly\n")); -#endif /* DEBUG */ - CurrentSetAlarmError=GE_NONE; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _("Message: Alarm setting error\n")); -#endif /* DEBUG */ - CurrentSetAlarmError=GE_INVALIDDATETIME; - - } -} - -/* FIXME: we should also allow to set the alarm off :-) */ -GSM_Error N6110_SetAlarm(int alarm_number, GSM_DateTime *date_time) -{ - return N6110_PrivSetAlarm(alarm_number,date_time, 0x11); -} - -/* FIXME: we should also allow to set the alarm off :-) */ -GSM_Error N6110_PrivSetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x6b, /* set-alarm subtype */ - 0x01, 0x20, 0x03, /* unknown */ - 0x02, /* should be alarm on/off, but it don't works */ - 0x00, 0x00, /* Hours Minutes */ - 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ - }; - - req[8] = date_time->Hour; - req[9] = date_time->Minute; - - return NULL_SendMessageSequence - (50, &CurrentSetAlarmError, 11, msgtype, req); -} - -#endif /* UCLINUX */ - -static void N6110_ReplyGetMemoryLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - /* Hopefully is 64 larger as FB38_MAX* / N6110_MAX* */ - char model[64]; - - int i, tmp, count; - - switch (MessageBuffer[3]) { - - case 0x02: - - CurrentPhonebookEntry->Empty = true; - - count=MessageBuffer[5]; - -#ifdef DEBUG - fprintf(stdout, _("Message: Phonebook entry received:\n")); - fprintf(stdout, _(" Name: ")); - - for (tmp=0; tmp Name, MessageBuffer+6, count/2); - CurrentPhonebookEntry->Name[count/2] = 0x00; -#else /* UCLINUX */ - fprintf(stderr,"FATAL ERROR: DecodeUnicode disabled!\n"); - exit(1); -#endif /* UCLINUX */ - } else { - memcpy(CurrentPhonebookEntry->Name, MessageBuffer + 6, count); - CurrentPhonebookEntry->Name[count] = 0x00; - } - - CurrentPhonebookEntry->Empty = false; - - for (tmp=0; tmp Name[tmp/2]='~'; //enables/disables blinking - if (tmp%2!=0 && MessageBuffer[6+tmp]==0) CurrentPhonebookEntry->Name[tmp/2]='`'; //hides rest ot contents - } else { - if (MessageBuffer[6+tmp]==1) CurrentPhonebookEntry->Name[tmp]='~'; //enables/disables blinking - if (MessageBuffer[6+tmp]==0) CurrentPhonebookEntry->Name[tmp]='`'; //hides rest ot contents - } - } - - i=7+count; - count=MessageBuffer[6+count]; - -#ifdef DEBUG - fprintf(stdout, _(" Number: ")); - - for (tmp=0; tmp Number, MessageBuffer + i, count); - CurrentPhonebookEntry->Number[count] = 0x00; - CurrentPhonebookEntry->Group = MessageBuffer[i+count]; - - /* Phone doesn't have entended phonebook */ - CurrentPhonebookEntry->SubEntriesCount = 0; - - /* But for these memories data is saved and we can save it using 7110/6210 style */ - if (CurrentPhonebookEntry->MemoryType==GMT_DC || - CurrentPhonebookEntry->MemoryType==GMT_RC || - CurrentPhonebookEntry->MemoryType==GMT_MC) { - CurrentPhonebookEntry->SubEntriesCount = 1; - CurrentPhonebookEntry->SubEntries[0].EntryType=N7110_ENTRYTYPE_DATE; - CurrentPhonebookEntry->SubEntries[0].NumberType=0; - CurrentPhonebookEntry->SubEntries[0].BlockNumber=1; - DecodeDateTime(MessageBuffer+(i+count+2),&CurrentPhonebookEntry->SubEntries[0].data.Date); - -#ifdef DEBUG - fprintf(stdout, _(" Date: ")); - fprintf(stdout, "%02u.%02u.%04u\n", - CurrentPhonebookEntry->SubEntries[0].data.Date.Day, - CurrentPhonebookEntry->SubEntries[0].data.Date.Month, - CurrentPhonebookEntry->SubEntries[0].data.Date.Year); - fprintf(stdout, _(" Time: ")); - fprintf(stdout, "%02u:%02u:%02u\n", - CurrentPhonebookEntry->SubEntries[0].data.Date.Hour, - CurrentPhonebookEntry->SubEntries[0].data.Date.Minute, - CurrentPhonebookEntry->SubEntries[0].data.Date.Second); -#endif /* DEBUG */ - - /* These values are set, when date and time unavailable in phone. - Values from 3310 - in other can be different */ - if (CurrentPhonebookEntry->SubEntries[0].data.Date.Day==20 && - CurrentPhonebookEntry->SubEntries[0].data.Date.Month==1 && - CurrentPhonebookEntry->SubEntries[0].data.Date.Year==2118 && - CurrentPhonebookEntry->SubEntries[0].data.Date.Hour==3 && - CurrentPhonebookEntry->SubEntries[0].data.Date.Minute==14 && - CurrentPhonebookEntry->SubEntries[0].data.Date.Second==7) - CurrentPhonebookEntry->SubEntriesCount = 0; - } - - /* Signal no error to calling code. */ - CurrentPhonebookError = GE_NONE; - - break; - - case 0x03: - -#ifdef DEBUG - fprintf(stdout, _("Message: Phonebook read entry error received:\n")); -#endif /* DEBUG */ - - switch (MessageBuffer[4]) { - - case 0x7d: -#ifdef DEBUG - fprintf(stdout, _(" Invalid memory type!\n")); -#endif /* DEBUG */ - CurrentPhonebookError = GE_INVALIDMEMORYTYPE; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _(" Unknown error!\n")); -#endif /* DEBUG */ - CurrentPhonebookError = GE_INTERNALERROR; - } - - break; - - } -} - -/* Routine to get specifed phone book location. Designed to be called by - application. Will block until location is retrieved or a timeout/error - occurs. */ -GSM_Error N6110_GetMemoryLocation(GSM_PhonebookEntry *entry) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x01, 0x00, 0x00, 0x00}; - - CurrentPhonebookEntry = entry; - - req[4] = N6110_GetMemoryType(entry->MemoryType); - req[5] = entry->Location; - - return NULL_SendMessageSequence - (50, &CurrentPhonebookError, 7, 0x03, req); -} - -static void N6110_ReplyWritePhonebookLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x05: - -#ifdef DEBUG - fprintf(stdout, _("Message: Phonebook written correctly.\n")); -#endif /* DEBUG */ - CurrentPhonebookError = GE_NONE; - break; - - case 0x06: - - switch (MessageBuffer[4]) { - /* FIXME: other errors? When I send the phonebook with index of 350 it - still report error 0x7d :-( */ - case 0x7d: -#ifdef DEBUG - fprintf(stdout, _("Message: Phonebook not written - name is too long.\n")); -#endif /* DEBUG */ - CurrentPhonebookError = GE_PHBOOKNAMETOOLONG; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _(" Unknown error!\n")); -#endif /* DEBUG */ - CurrentPhonebookError = GE_INTERNALERROR; - } - } -} - -/* Routine to write phonebook location in phone. Designed to be called by - application code. Will block until location is written or timeout - occurs. */ -GSM_Error N6110_WritePhonebookLocation(GSM_PhonebookEntry *entry) -{ - unsigned char req[128] = { N6110_FRAME_HEADER, 0x04, 0x00, 0x00 }; - int i=0, current=0; - - req[4] = N6110_GetMemoryType(entry->MemoryType); - req[5] = entry->Location; - - current=7; - - if (GetModelFeature (FN_PHONEBOOK)==F_PBK33) { -#ifndef UCLINUX - - req[6] = strlen(entry->Name)*2; - - EncodeUnicode (req+current,entry->Name ,strlen(entry->Name)); - - for (i=0; iName); i++) - { - /* here we encode "special" chars */ - if (entry->Name[i]=='~') req[current+i*2]=1; //enables/disables blinking - if (entry->Name[i]=='`') req[current+i*2]=0; //hides rest ot contents - } - - current+=strlen(entry->Name)*2; - -#else /* UCLINUX */ - - fprintf(stderr,"FATAL ERROR: EncodeUnicode disabled!\n"); - exit(1); - -#endif /* UCLINUX */ - } else { - - req[6] = strlen(entry->Name); - - for (i=0; iName); i++) - { - req[current+i] = entry->Name[i]; - - /* here we encode "special" chars */ - if (entry->Name[i]=='~') req[current+i]=1; //enables/disables blinking - if (entry->Name[i]=='`') req[current+i]=0; //hides rest ot contents - } - - current+=strlen(entry->Name); - } - - req[current++]=strlen(entry->Number); - - for (i=0; iNumber); i++) - req[current+i] = entry->Number[i]; - - current+=strlen(entry->Number); - - /* Jano: This allow to save 14 characters name into SIM memory, when - No Group is selected. */ - if (entry->Group == 5) - req[current++]=0xff; - else - req[current++]=entry->Group; - - return NULL_SendMessageSequence - (50, &CurrentPhonebookError, current, 0x03, req); -} - -#ifndef UCLINUX - -void N6110_ReplyNetmonitor(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch(MessageBuffer[3]) { - - case 0x00: -#ifdef DEBUG - fprintf(stdout, _("Message: Netmonitor correctly set.\n")); -#endif /* DEBUG */ - CurrentNetmonitorError=GE_NONE; - break; - - default: -#ifdef DEBUG - fprintf(stdout, _("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]); - fprintf(stdout, "%s\n", MessageBuffer+4); -#endif /* DEBUG */ - - strcpy(CurrentNetmonitor, MessageBuffer+4); - - CurrentNetmonitorError=GE_NONE; - } -} - -GSM_Error N6110_NetMonitor(unsigned char mode, char *Screen) -{ - unsigned char req[] = { 0x00, 0x01, 0x7e, 0x00 }; - - GSM_Error error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - CurrentNetmonitor=Screen; - - req[3]=mode; - - return NULL_SendMessageSequence - (20, &CurrentNetmonitorError, 4, 0x40, req); -} - -/* Doesn't work in N3210. */ -/* In other allow to access phone menu without SIM card (just send any sequence) */ -GSM_Error N6110_SendDTMF(char *String) -{ - unsigned char req[64] = { N6110_FRAME_HEADER, 0x50, - 0x00 /* Length of DTMF string. */ - }; - - u8 length=strlen(String); - - if (length>59) length=59; - - req[4] = length; - - memcpy(req+5,String,length); - - return NULL_SendMessageSequence - (20, &CurrentSendDTMFError, 5+length, 0x01, req); -} - -#endif /* UCLINUX */ - -static void N6110_ReplyGetSpeedDial(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x17: - - switch (MessageBuffer[4]) { - case 0x02: CurrentSpeedDialEntry->MemoryType = GMT_ME; - default : CurrentSpeedDialEntry->MemoryType = GMT_SM; - } - - CurrentSpeedDialEntry->Location = MessageBuffer[5]; - -#ifdef DEBUG - fprintf(stdout, _("Message: Speed dial entry received:\n")); - fprintf(stdout, _(" Location: %d\n"), CurrentSpeedDialEntry->Location); - fprintf(stdout, _(" MemoryType: %s\n"), N6110_MemoryType_String[CurrentSpeedDialEntry->MemoryType]); - fprintf(stdout, _(" Number: %d\n"), CurrentSpeedDialEntry->Number); -#endif /* DEBUG */ - - CurrentSpeedDialError=GE_NONE; - break; - - case 0x18: - -#ifdef DEBUG - fprintf(stdout, _("Message: Speed dial entry error\n")); -#endif /* DEBUG */ - CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; - break; - - } -} - -GSM_Error N6110_GetSpeedDial(GSM_SpeedDial *entry) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x16, - 0x00 /* The number of speed dial. */ - }; - - CurrentSpeedDialEntry = entry; - - req[4] = entry->Number; - - return NULL_SendMessageSequence - (20, &CurrentSpeedDialError, 5, 0x03, req); -} - -static void N6110_ReplySetSpeedDial(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - case 0x1a: - -#ifdef DEBUG - fprintf(stdout, _("Message: Speed dial entry set.\n")); -#endif /* DEBUG */ - CurrentSpeedDialError=GE_NONE; - break; - - case 0x1b: - -#ifdef DEBUG - fprintf(stdout, _("Message: Speed dial entry setting error.\n")); -#endif /* DEBUG */ - CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; - break; - - } -} - -GSM_Error N6110_SetSpeedDial(GSM_SpeedDial *entry) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x19, - 0x00, /* Number */ - 0x00, /* Memory Type */ - 0x00 /* Location */ - }; - - req[4] = entry->Number; - - switch (entry->MemoryType) { - case GMT_ME: req[5] = 0x02; - default : req[5] = 0x03; - } - - req[6] = entry->Location; - - return NULL_SendMessageSequence - (20, &CurrentSpeedDialError, 7, 0x03, req); -} - -#ifndef UCLINUX - -/* This function finds parts of SMS in frame used in new Nokia phones - in internal protocols (they're coded according to GSM 03.40), copies them - to GSM_ETSISMSMessage and calls GSM_DecodeETSISMS to decode - GSM_ETSISMSMessage to GSM_SMSMessage structure */ -GSM_Error GSM_DecodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int length) -{ - SMS_MessageType PDU=SMS_Deliver; - GSM_ETSISMSMessage ETSI; - int offset=0,i; - - ETSI.firstbyte=req[12]; - - /* See GSM 03.40 section 9.2.3.1 */ - if ((ETSI.firstbyte & 0x03) == 0x01) PDU=SMS_Submit; - if ((ETSI.firstbyte & 0x03) == 0x02) PDU=SMS_Status_Report; - - switch (PDU) { - case SMS_Submit : offset=5;break; - case SMS_Deliver : offset=4;break; - case SMS_Status_Report: offset=3;break; - default: break; - } - - for (i=0;iName[0]=0; - - return GE_NONE; -} - -void N6110_ReplyGetSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int offset; - - switch (MessageBuffer[3]) { - - case 0x08: - - switch (MessageBuffer[7]) { - - case 0x00: - CurrentSMSMessage->Type = GST_SMS; - CurrentSMSMessage->folder=GST_INBOX; - offset=4; - break; - - case 0x01: - CurrentSMSMessage->Type = GST_DR; - CurrentSMSMessage->folder=GST_INBOX; - offset=3; - break; - - case 0x02: - CurrentSMSMessage->Type = GST_SMS; - CurrentSMSMessage->folder=GST_OUTBOX; - offset=5; - break; - - default: - CurrentSMSMessage->Type = GST_UN; - offset=4; - break; - - } - - /* Field Short Message Status - MessageBuffer[4] seems not to be - compliant with GSM 07.05 spec. - Meaning Nokia protocol GMS spec - ---------------------------------------------------- - MO Sent 0x05 0x07 or 0x01 - MO Not sent 0x07 0x06 or 0x00 - MT Read 0x01 0x05 or 0x01 - MT Not read 0x03 0x04 or 0x00 - ---------------------------------------------------- - See GSM 07.05 section 2.5.2.6 and correct me if I'm wrong. - - Pawel Kot */ - - if (MessageBuffer[4] & 0x02) CurrentSMSMessage->Status = GSS_NOTSENTREAD; - else CurrentSMSMessage->Status = GSS_SENTREAD; - -#ifdef DEBUG - fprintf(stdout, _("Number: %d\n"), MessageBuffer[6]); - - if (CurrentSMSMessage->folder!=1) { //GST_OUTBOX - fprintf(stdout, _("Message: Received SMS (mobile terminated)\n")); - } else { - fprintf(stdout, _("Message: Outbox message (mobile originated)\n")); - } - - if (CurrentSMSMessage->Type == GST_DR) fprintf(stdout, _(" Delivery Report\n")); - if (CurrentSMSMessage->Type == GST_UN) fprintf(stdout, _(" Unknown type\n")); - - if (CurrentSMSMessage->folder==1) { //GST_OUTBOX - if (CurrentSMSMessage->Status) fprintf(stdout, _(" Sent\n")); - else fprintf(stdout, _(" Not sent\n")); - } else { - if (CurrentSMSMessage->Status) fprintf(stdout, _(" Read\n")); - else fprintf(stdout, _(" Not read\n")); - } -#endif - - CurrentSMSPointer=GSM_DecodeNokiaSMSFrame(CurrentSMSMessage, MessageBuffer+8, MessageLength-8); - - CurrentSMSMessage->MemoryType = MessageBuffer[5]; - CurrentSMSMessage->MessageNumber = MessageBuffer[6]; - - /* Signal no error to calling code. */ - CurrentSMSMessageError = GE_NONE; - -#ifdef DEBUG - fprintf(stdout, "\n"); -#endif - - break; - - case 0x09: - - /* We have requested invalid or empty location. */ - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS reading failed\n")); - - switch (MessageBuffer[4]) { - case 0x02: - fprintf(stdout, _(" Invalid location!\n"));break; - case 0x07: - fprintf(stdout, _(" Empty SMS location.\n"));break; - case 0x0c: - fprintf(stdout, _(" No access to memory (no PIN on card ?)\n"));break; - default: - fprintf(stdout, _(" Error code %i - please report it \n"),MessageBuffer[4]);break; - } -#endif /* DEBUG */ - - switch (MessageBuffer[4]) { - case 0x02:CurrentSMSMessageError = GE_INVALIDSMSLOCATION;break; - case 0x07:CurrentSMSMessageError = GE_EMPTYSMSLOCATION;break; - case 0x0c:CurrentSMSMessageError = GE_NOACCESS;break; - default :CurrentSMSMessageError = GE_UNKNOWN;break; - } - - break; - - } -} - -GSM_Error N6110_GetSMSMessage(GSM_SMSMessage *message) -{ - - unsigned char req[] = { N6110_FRAME_HEADER, - 0x07, - 0x02, /* Unknown */ - 0x00, /* Location */ - 0x01, 0x64}; - - int timeout = 60; - - /* State machine code writes data to these variables when it comes in. */ - - CurrentSMSMessage = message; - CurrentSMSMessageError = GE_BUSY; - - req[5] = message->Location; - - /* Send request */ - Protocol->SendMessage(8, 0x02, req); - - /* Wait for timeout or other error. */ - while (timeout != 0 && (CurrentSMSMessageError == GE_BUSY || CurrentSMSMessageError == GE_SMSWAITING)) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - return (CurrentSMSMessageError); -} - -void N6110_ReplyDeleteSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: SMS deleted successfully.\n")); -#endif /* DEBUG */ - - CurrentSMSMessageError = GE_NONE; -} - -GSM_Error N6110_DeleteSMSMessage(GSM_SMSMessage *message) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x0a, 0x02, 0x00}; - - req[5] = message->Location; - - return NULL_SendMessageSequence - (50, &CurrentSMSMessageError, 6, 0x14, req); -} - -/* FIXME: do we need more than SMS_Submit and SMS_Deliver ? */ -GSM_Error GSM_EncodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int *length, SMS_MessageType PDU) -{ - GSM_ETSISMSMessage ETSI; - int i,offset=0; - - GSM_EncodeETSISMS(SMS, &ETSI, PDU, length); - - /* Cleaning */ - for (i=0;i<36;i++) req[i]=0; - - req[12]=ETSI.firstbyte; - - for (i=0;iMessageNumber=MessageBuffer[5]; - - CurrentSMSMessageError = GE_NONE; - break; - - case 0x06: -#ifdef DEBUG - fprintf(stdout, _("SMS saving failed\n")); - switch (MessageBuffer[4]) { - case 0x02:fprintf(stdout, _(" All locations busy.\n"));break; - case 0x03:fprintf(stdout, _(" Invalid location!\n"));break; - default :fprintf(stdout, _(" Unknown error.\n"));break; - } -#endif - - switch (MessageBuffer[4]) { - case 0x02:CurrentSMSMessageError = GE_MEMORYFULL;break; - case 0x03:CurrentSMSMessageError = GE_INVALIDSMSLOCATION;break; - default :CurrentSMSMessageError = GE_UNKNOWN;break; - } - } -} - -/* GST_DR and GST_UN not supported ! */ -GSM_Error N6110_SaveSMSMessage(GSM_SMSMessage *SMS) -{ - unsigned char req[256] = { - N6110_FRAME_HEADER, 0x04, /* SMS save request*/ - 0x00, /* SMS Status. Different for Inbox and Outbox */ - 0x02, /* ?? */ - 0x00, /* SMS Location */ - 0x02, /* SMS Type */ - }; - - int length; - SMS_MessageType PDU; - GSM_Error error; - - if (SMS->Location) req[6] = SMS->Location; - - if (SMS->folder==0) { /*Inbox*/ - req[4]=1; /* SMS Status */ - req[7] = 0x00; /* SMS Type */ - PDU=SMS_Deliver; - } else { - req[4]=5; /* SMS Status */ - req[7] = 0x02; /* SMS Type */ - PDU=SMS_Submit; - } - - if (SMS->Status == GSS_NOTSENTREAD) req[4] |= 0x02; - - error=GSM_EncodeNokiaSMSFrame(SMS, req+8, &length, PDU); - if (error != GE_NONE) return error; - - CurrentSMSMessage = SMS; - - return NULL_SendMessageSequence - (70, &CurrentSMSMessageError, 39+length, 0x14, req); -} - -void N6110_ReplySetCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: Cell Broadcast enabled/disabled successfully.\n")); fflush (stdout); -#endif - - CurrentCBError = GE_NONE; -} - -/* Enable and disable Cell Broadcasting */ -GSM_Error N6110_EnableCellBroadcast(void) -{ - unsigned char req[] = {N6110_FRAME_HEADER, 0x20, - 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}; - -#ifdef DEBUG - fprintf (stdout,"Enabling CB\n"); -#endif - - CurrentCBMessage = (GSM_CBMessage *)malloc(sizeof (GSM_CBMessage)); - CurrentCBMessage->Channel = 0; - CurrentCBMessage->New = false; - strcpy (CurrentCBMessage->Message,""); - - return NULL_SendMessageSequence - (10, &CurrentCBError, 10, 0x02, req); -} - - -GSM_Error N6110_DisableCellBroadcast(void) -{ - /* Should work, but not tested fully */ - - unsigned char req[] = {N6110_FRAME_HEADER, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /*VERIFY*/ - - return NULL_SendMessageSequence - (10, &CurrentCBError, 10, 0x02, req); -} - -void N6110_ReplyReadCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i, tmp; - unsigned char output[160]; - - CurrentCBMessage->Channel = MessageBuffer[7]; - CurrentCBMessage->New = true; - tmp=GSM_UnpackEightBitsToSeven(0, MessageBuffer[9], MessageBuffer[9], MessageBuffer+10, output); - -#ifdef DEBUG - fprintf(stdout, _("Message: CB received.\n")); fflush (stdout); - - fprintf(stdout, _("Message: channel number %i\n"),MessageBuffer[7]); - - fflush (stdout); - - for (i=0; iMessage[i] = DecodeWithDefaultAlphabet(output[i]); - } - CurrentCBMessage->Message[i]=0; -} - -GSM_Error N6110_ReadCellBroadcast(GSM_CBMessage *Message) -{ -#ifdef DEBUG - fprintf(stdout,"Reading CB\n"); -#endif - - if (CurrentCBMessage != NULL) - { - if (CurrentCBMessage->New == true) - { -#ifdef DEBUG - fprintf(stdout,"New CB received\n"); -#endif - Message->Channel = CurrentCBMessage->Channel; - strcpy(Message->Message,CurrentCBMessage->Message); - CurrentCBMessage->New = false; - return (GE_NONE); - } - } - return (GE_NONEWCBRECEIVED); -} - -int N6110_MakeCallerGroupFrame(unsigned char *req,GSM_Bitmap Bitmap) -{ - int count=0; - - req[count++]=Bitmap.number; - req[count++]=strlen(Bitmap.text); - memcpy(req+count,Bitmap.text,req[count-1]); - count+=req[count-1]; - req[count++]=Bitmap.ringtone; - - /* Setting for graphic: - 0x00 - Off - 0x01 - On - 0x02 - View Graphics - 0x03 - Send Graphics - 0x04 - Send via IR - You can even set it higher but Nokia phones (my - 6110 at least) will not show you the name of this - item in menu ;-)) Nokia is really joking here. */ - if (Bitmap.enabled) req[count++]=0x01; - else req[count++]=0x00; - - req[count++]=(Bitmap.size+4)>>8; - req[count++]=(Bitmap.size+4)%0xff; - req[count++]=0x00; /* Future extensions! */ - req[count++]=Bitmap.width; - req[count++]=Bitmap.height; - req[count++]=0x01; /* Just BW */ - memcpy(req+count,Bitmap.bitmap,Bitmap.size); - - return count+Bitmap.size; -} - -int N6110_MakeOperatorLogoFrame(unsigned char *req,GSM_Bitmap Bitmap) -{ - int count=0; - - EncodeNetworkCode(req+count, Bitmap.netcode); - count=count+3; - - req[count++]=(Bitmap.size+4)>>8; - req[count++]=(Bitmap.size+4)%0xff; - req[count++]=0x00; /* Infofield */ - req[count++]=Bitmap.width; - req[count++]=Bitmap.height; - req[count++]=0x01; /* Just BW */ - memcpy(req+count,Bitmap.bitmap,Bitmap.size); - - return count+Bitmap.size; -} - -int N6110_MakeStartupLogoFrame(unsigned char *req,GSM_Bitmap Bitmap) -{ - int count=0; - - req[count++]=0x01; - req[count++]=Bitmap.height; - req[count++]=Bitmap.width; - memcpy(req+count,Bitmap.bitmap,Bitmap.size); - - return count+Bitmap.size; -} - -/* Set a bitmap or welcome-note */ -GSM_Error N6110_SetBitmap(GSM_Bitmap *Bitmap) { - - unsigned char req[600] = { N6110_FRAME_HEADER }; - u16 count=3; - u8 textlen; - - int timeout=50; - - /* Direct uploading variables */ - GSM_MultiSMSMessage SMS; - unsigned char buffer[1000] = {0x0c,0x01}; - GSM_NetworkInfo NetworkInfo; - - GSM_Error error; - - /* Uploading with preview */ - if (Bitmap->number==255 && - (Bitmap->type==GSM_OperatorLogo || Bitmap->type==GSM_CallerLogo)) { - GSM_SaveBitmapToSMS(&SMS,Bitmap,false,false); - memcpy(buffer+2,SMS.SMS[0].UDH,SMS.SMS[0].UDH[0]+1); - - memcpy(buffer+2+SMS.SMS[0].UDH[0]+1,SMS.SMS[0].MessageText,SMS.SMS[0].Length); - - buffer[2+SMS.SMS[0].UDH[0]+1+SMS.SMS[0].Length]=0x00; - - Protocol->SendMessage(2+SMS.SMS[0].UDH[0]+1+SMS.SMS[0].Length+1, 0x12, buffer); - - GSM->GetNetworkInfo(&NetworkInfo); //need to make something - return GE_NONE; //no answer from phone - } - - CurrentSetBitmapError = GE_BUSY; - - switch (Bitmap->type) { - case GSM_WelcomeNoteText: - case GSM_DealerNoteText: - req[count++]=0x18; - req[count++]=0x01; /* Only one block */ - - if (Bitmap->type==GSM_WelcomeNoteText) - req[count++]=0x02; /* Welcome text */ - else - req[count++]=0x03; /* Dealer Welcome Note */ - - textlen=strlen(Bitmap->text); - req[count++]=textlen; - memcpy(req+count,Bitmap->text,textlen); - - count+=textlen; - - Protocol->SendMessage(count, 0x05, req); - - break; - - case GSM_StartupLogo: - if (Bitmap->number==0) { - - /* For 33xx we first set animated logo to default */ - if (GetModelFeature (FN_STARTUP)==F_STANIM) { - error=N6110_SetProfileFeature(0, 0x29, Bitmap->number); - if (error!=GE_NONE) return error; - } - - req[count++]=0x18; - req[count++]=0x01; /* Only one block */ - count=count+N6110_MakeStartupLogoFrame(req+5,*Bitmap); - Protocol->SendMessage(count, 0x05, req); - } else { - return N6110_SetProfileFeature(0, 0x29, Bitmap->number); - } - break; - - case GSM_OperatorLogo: - req[count++]=0x30; /* Store Op Logo */ - req[count++]=0x01; /* Location */ - count=count+N6110_MakeOperatorLogoFrame(req+5,*Bitmap); - Protocol->SendMessage(count, 0x05, req); - break; - - case GSM_CallerLogo: - req[count++]=0x13; - count=count+N6110_MakeCallerGroupFrame(req+4,*Bitmap); - Protocol->SendMessage(count, 0x03, req); - break; - - case GSM_PictureImage: - req[count++]=0x03; - req[count++]=Bitmap->number; - if (strcmp(Bitmap->Sender,"")) { - req[count]=GSM_PackSemiOctetNumber(Bitmap->Sender, req+count+1,true); - - /* Convert number of semioctets to number of chars and add count */ - textlen=req[count]; - if (textlen % 2) textlen++; - count+=textlen / 2 + 1; - - count++; - } else { - req[count++]=0x00; - req[count++]=0x00; - } - req[count++]=0x00; - req[count++]=strlen(Bitmap->text); - memcpy(req+count,Bitmap->text,strlen(Bitmap->text)); - count+=strlen(Bitmap->text); - req[count++]=0x00; - req[count++]=Bitmap->width; - req[count++]=Bitmap->height; - req[count++]=0x01; - memcpy(req+count,Bitmap->bitmap,Bitmap->size); - Protocol->SendMessage(count+Bitmap->size, 0x47, req); - break; - - case GSM_7110OperatorLogo: - case GSM_7110StartupLogo: - case GSM_6210StartupLogo: - return GE_NOTSUPPORTED; - - case GSM_None: - return GE_NONE; - } - - /* Wait for timeout or other error. */ - while (timeout != 0 && CurrentSetBitmapError == GE_BUSY ) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - return CurrentSetBitmapError; -} - -/* Get a bitmap from the phone */ -GSM_Error N6110_GetBitmap(GSM_Bitmap *Bitmap) { - - unsigned char req[10] = { N6110_FRAME_HEADER }; - u8 count=3; - - int timeout=100; - - CurrentGetBitmap=Bitmap; - CurrentGetBitmapError = GE_BUSY; - - switch (CurrentGetBitmap->type) { - case GSM_StartupLogo: - case GSM_WelcomeNoteText: - case GSM_DealerNoteText: - req[count++]=0x16; - Protocol->SendMessage(count, 0x05, req); - break; - case GSM_OperatorLogo: - req[count++]=0x33; - req[count++]=0x01; /* Location 1 */ - Protocol->SendMessage(count, 0x05, req); - break; - case GSM_CallerLogo: - req[count++]=0x10; - req[count++]=Bitmap->number; - Protocol->SendMessage(count, 0x03, req); - break; - case GSM_PictureImage: - req[count++]=0x01; - req[count++]=Bitmap->number; - Protocol->SendMessage(count, 0x47, req); - break; - case GSM_7110OperatorLogo: - case GSM_7110StartupLogo: - case GSM_6210StartupLogo: - default: - return GE_NOTSUPPORTED; - } - - /* Wait for timeout or other error. */ - while (timeout != 0 && CurrentGetBitmapError == GE_BUSY ) { - - if (--timeout == 0) - return (GE_TIMEOUT); - - usleep (100000); - } - - CurrentGetBitmap=NULL; - - return CurrentGetBitmapError; -} - -void N6110_ReplySetRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[3]) { - - /* Set ringtone OK */ - case 0x37: -#ifdef DEBUG - fprintf(stdout, _("Message: Ringtone set OK!\n")); -#endif - CurrentRingtoneError=GE_NONE; - break; - - /* Set ringtone error */ - case 0x38: -#ifdef DEBUG - fprintf(stdout, _("Message: Ringtone setting error !\n")); -#endif - CurrentRingtoneError=GE_NOTSUPPORTED; - break; - } -} - -GSM_Error N6110_SetRingTone(GSM_Ringtone *ringtone, int *maxlength) -{ - - char req[FB61_MAX_RINGTONE_FRAME_LENGTH+10] = - {N6110_FRAME_HEADER, - 0x36, - 0x00, /* Location */ - 0x00,0x78}; - - int size=FB61_MAX_RINGTONE_FRAME_LENGTH; - - /* Variables for preview uploading */ - unsigned char buffer[FB61_MAX_RINGTONE_FRAME_LENGTH+50]; - unsigned char buffer2[20]; - GSM_NetworkInfo NetworkInfo; - - /* Setting ringtone with preview */ - if (ringtone->location==255) { - buffer[0]=0x0c; - buffer[1]=0x01; - EncodeUDHHeader(buffer2, GSM_RingtoneUDH); - memcpy(buffer+2,buffer2,buffer2[0]+1); //copying UDH - *maxlength=GSM_PackRingtone(ringtone, buffer+2+buffer2[0]+1, &size); //packing ringtone - Protocol->SendMessage(2+buffer2[0]+1+size, 0x12, buffer); //sending frame - GSM->GetNetworkInfo(&NetworkInfo); //need to make something - sleep(1); - return GE_NONE; //no answer from phone - } - - *maxlength=GSM_PackRingtone(ringtone, req+7, &size); - - req[4]=ringtone->location-1; - - return NULL_SendMessageSequence - (50, &CurrentRingtoneError, (size+7), 0x05, req); -} - -void N6110_ReplyGetBinRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int i; - - switch (MessageBuffer[4]) { - case 0x00: /* location supported. We have ringtone */ - - /* Binary format used in N6150 */ - if (MessageBuffer[5]==0x0c && MessageBuffer[6]==0x01 && MessageBuffer[7]==0x2c) { -#ifdef DEBUG - fprintf(stdout,_("Message: ringtone \"")); -#endif - - /* Copying name */ - i=8; - while (true) { -#ifdef DEBUG - if (MessageBuffer[i]!=0) - fprintf(stdout,_("%c"),MessageBuffer[i]); -#endif - CurrentGetBinRingtone->name[i-8]=MessageBuffer[i]; - if (MessageBuffer[i]==0) break; - i++; - } - -#ifdef DEBUG - fprintf(stdout,_("\" received from location %i\n"),MessageBuffer[3]+1); -#endif - - /* Looking for end */ - i=0; - while (true) { - if (MessageBuffer[i]==0x07 && MessageBuffer[i+1]==0x0b) { - i=i+2;break; - } - if (MessageBuffer[i]==0x0e && MessageBuffer[i+1]==0x0b) { - i=i+2;break; - } - i++; - if (i==MessageLength) break; - } - - /* Copying frame */ - memcpy(CurrentGetBinRingtone->frame,MessageBuffer+3,i-3); - CurrentGetBinRingtone->length=i-3; - - CurrentBinRingtoneError=GE_NONE; - break; - } - - /* Binary format used in N3210 */ - if (MessageBuffer[5]==0x10 && MessageBuffer[6]==0x01 && MessageBuffer[7]==0x2c) { - -#ifdef DEBUG - fprintf(stdout,_("Message: ringtone \"")); -#endif - - /* Copying name */ - i=8; - while (true) { -#ifdef DEBUG - if (MessageBuffer[i]!=0) - fprintf(stdout,_("%c"),MessageBuffer[i]); -#endif - CurrentGetBinRingtone->name[i-8]=MessageBuffer[i]; - if (MessageBuffer[i]==0) break; - i++; - } - -#ifdef DEBUG - fprintf(stdout,_("\" received from location %i\n"),MessageBuffer[3]+1); -#endif - - /* Here changes to get full compatibility with binary format used in N6150 */ - MessageBuffer[3]=0; - MessageBuffer[4]=0; - MessageBuffer[5]=0x0c; - MessageBuffer[6]=0x01; - MessageBuffer[7]=0x2c; - - /* Looking for end */ - i=0; - while (true) { - if (MessageBuffer[i]==0x07 && MessageBuffer[i+1]==0x0b) { - i=i+2;break; - } - if (MessageBuffer[i]==0x0e && MessageBuffer[i+1]==0x0b) { - i=i+2;break; - } - i++; - if (i==MessageLength) break; - } - - /* Copying frame */ - memcpy(CurrentGetBinRingtone->frame,MessageBuffer+3,i-3); - - CurrentGetBinRingtone->length=i-3; - - CurrentBinRingtoneError=GE_NONE; - break; - } - - /* Copying frame */ - memcpy(CurrentGetBinRingtone->frame,MessageBuffer,MessageLength); - - CurrentGetBinRingtone->length=MessageLength; - -#ifdef DEBUG - fprintf(stdout,_("Message: unknown binary format for ringtone received from location %i\n"),MessageBuffer[3]+1); -#endif - CurrentBinRingtoneError=GE_UNKNOWNMODEL; - break; - - default: - -#ifdef DEBUG - fprintf(stdout,_("Message: Phone doesn't support downloaded ringtones at location %i\n"),MessageBuffer[3]+1); -#endif - - CurrentBinRingtoneError=GE_INVALIDRINGLOCATION; - } -} - -GSM_Error N6110_GetBinRingTone(GSM_BinRingtone *ringtone) -{ - unsigned char req[] = { 0x00,0x01,0x9e, - 0x00 }; //location - - GSM_Error error; - - CurrentGetBinRingtone=ringtone; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - req[3]=ringtone->location-1; - - return NULL_SendMessageSequence - (50, &CurrentBinRingtoneError, 4, 0x40, req); -} - -void N6110_ReplySetBinRingtone(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - switch (MessageBuffer[4]) { - case 0x00: /* location supported. We set ringtone */ -#ifdef DEBUG - fprintf(stdout,_("Message: downloaded ringtone set at location %i\n"),MessageBuffer[3]+1); -#endif - CurrentBinRingtoneError=GE_NONE; - break; - - default: -#ifdef DEBUG - fprintf(stdout,_("Message: Phone doesn't support downloaded ringtones at location %i\n"),MessageBuffer[3]+1); -#endif - CurrentBinRingtoneError=GE_NOTSUPPORTED; - break; - } -} - -GSM_Error N6110_SetBinRingTone(GSM_BinRingtone *ringtone) -{ - unsigned char req[1000] = { 0x00,0x01,0xa0}; - - GSM_Error error; - - GSM_BinRingtone ring; - - /* Must be sure, that can upload ringtone to this phone */ - ring.location=ringtone->location; - error=N6110_GetBinRingTone(&ring); - if (error!=GE_NONE) return error; - - error=N6110_EnableExtendedCommands(0x01); - if (error!=GE_NONE) return error; - - memcpy(req+3,ringtone->frame,ringtone->length); - - req[3]=ringtone->location-1; - - return NULL_SendMessageSequence - (50, &CurrentBinRingtoneError, ringtone->length+3, 0x40, req); -} - -#endif /* UCLINUX */ - -GSM_Error N6110_Reset(unsigned char type) -{ - return N6110_EnableExtendedCommands(type); -} - -void N6110_Dispatch0x01Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int count; -#ifdef DEBUG - int tmp; -#endif - - switch (MessageBuffer[3]) { - - /* Unknown message - it has been seen after the 0x07 message (call - answered). Probably it has similar meaning. If you can solve - this - just mail me. Pavel Janík ml. - - The message looks like this: - - Msg Destination: PC - Msg Source: Phone - Msg Type: 01 - Msg Unknown: 00 - Msg Len: 0e - - Phone: [01 ][08 ][00 ] is the header of the frame - - [03 ] is the call message subtype - - [05 ] is the call sequence number - - [05 ] unknown - - [00 ][01 ][03 ][02 ][91][00] are unknown but has been - seen in the Incoming call message (just after the - caller's name from the phonebook). But never change - between phone calls :-( - */ - - /* This may mean sequence number of 'just made' call - CK */ - case 0x02: - -#ifdef DEBUG - fprintf(stdout, _("Message: Call message, type 0x02:")); - fprintf(stdout, _(" Exact meaning not known yet, sorry :-(\n")); -#endif /* DEBUG */ - - break; - - /* Possibly call OK */ - /* JD: I think that this means "call in progress" (incomming or outgoing) */ - case 0x03: - -#ifdef DEBUG - fprintf(stdout, _("Message: Call message, type 0x03:")); - fprintf(stdout, _(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); - fprintf(stdout, _(" Exact meaning not known yet, sorry :-(\n")); -#endif /* DEBUG */ - - CurrentCallSequenceNumber=MessageBuffer[4]; -#ifndef UCLINUX - CurrentIncomingCall[0]='D'; -#endif /* UCLINUX */ - if (CurrentCallPassup) CurrentCallPassup('D'); - - break; - - /* Remote end has gone away before you answer the call. Probably your - mother-in-law or banker (which is worse?) ... */ - case 0x04: - -#ifdef DEBUG - fprintf(stdout, _("Message: Remote end hang up.\n")); - fprintf(stdout, _(" Sequence nr. of the call: %d, error: %i"), MessageBuffer[4],MessageBuffer[6]); - - switch (MessageBuffer[6]) { - case 28: fprintf(stdout,_(" (info \"Invalid phone number\")"));break; - case 34: fprintf(stdout,_(" (info \"Network busy\")"));break; - case 42: fprintf(stdout,_(" (info \"Network busy\")"));break; - case 47: fprintf(stdout,_(" (info \"Error in connection\")"));break; - case 50: fprintf(stdout,_(" (info \"Check operator services\")"));break; case 76: fprintf(stdout,_(" (info \"Check operator services\")"));break; - case 111: fprintf(stdout,_(" (info \"Error in connection\")"));break; - } - - fprintf(stdout,_("\n For more details with errors see netmonitor manual (test 39) on www.marcin-wiacek.topnet.pl")); - fprintf(stdout,_("\n If know their meaning, GSM specs decribing them, contact with me on marcin-wiacek@topnet.pl. THX\n")); -#endif /* DEBUG */ - -#ifndef UCLINUX - CurrentIncomingCall[0] = ' '; -#endif /* UCLINUX */ - if (CurrentCallPassup) CurrentCallPassup(' '); - - break; - - /* Incoming call alert */ - case 0x05: - -#ifdef DEBUG - fprintf(stdout, _("Message: Incoming call alert:\n")); - - /* We can have more then one call ringing - we can distinguish between - them */ - - fprintf(stdout, _(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); - fprintf(stdout, _(" Number: ")); - - count=MessageBuffer[6]; - - for (tmp=0; tmp SendMessage(4, 0x04, connect5); */ - - /* Marcin-Wiacek@TopNet.PL */ - -#if defined(WIN32) || defined(UCLINUX) - sprintf(Current_IMEI, "%s", MessageBuffer+5); - sprintf(Current_Model, "%s", MessageBuffer+21); - sprintf(Current_Revision, "SW%s, HW%s", MessageBuffer+41, MessageBuffer+35); -#else - snprintf(Current_IMEI, GSM_MAX_IMEI_LENGTH, "%s", MessageBuffer+5); - snprintf(Current_Model, GSM_MAX_MODEL_LENGTH, "%s", MessageBuffer+21); - snprintf(Current_Revision, GSM_MAX_REVISION_LENGTH, "SW%s, HW%s", MessageBuffer+41, MessageBuffer+35); -#endif - -#ifdef DEBUG - fprintf(stdout, _("Message: Mobile phone identification received:\n")); - fprintf(stdout, _(" IMEI: %s\n"), Current_IMEI); - fprintf(stdout, _(" Model: %s\n"), Current_Model); - fprintf(stdout, _(" Production Code: %s\n"), MessageBuffer+27); - fprintf(stdout, _(" HW: %s\n"), MessageBuffer+35); - fprintf(stdout, _(" Firmware: %s\n"), MessageBuffer+41); -#endif /* DEBUG */ - - break; - - /* Get group data */ - /* [ID],[name_len],[name].,[ringtone],[graphicon],[lenhi],[lenlo],[bitmap] */ - case 0x11: - - if (CurrentGetBitmap!=NULL) { - if (CurrentGetBitmap->number==MessageBuffer[4]) { - count=MessageBuffer[5]; - memcpy(CurrentGetBitmap->text,MessageBuffer+6,count); - CurrentGetBitmap->text[count]=0; - -#ifdef DEBUG - fprintf(stdout, _("Message: Caller group datas\n")); - fprintf(stdout, _("Caller group name: %s\n"),CurrentGetBitmap->text); -#endif /* DEBUG */ - - count+=6; - - CurrentGetBitmap->ringtone=MessageBuffer[count++]; -#ifdef DEBUG - fprintf(stdout, _("Caller group ringtone ID: %i"),CurrentGetBitmap->ringtone); - if (CurrentGetBitmap->ringtone==16) fprintf(stdout,_(" (default)")); - fprintf(stdout,_("\n")); -#endif /* DEBUG */ - - CurrentGetBitmap->enabled=(MessageBuffer[count++]==1); -#ifdef DEBUG - fprintf(stdout, _("Caller group logo ")); - if (CurrentGetBitmap->enabled) - fprintf(stdout, _("enabled \n")); - else - fprintf(stdout, _("disabled \n")); -#endif /* DEBUG */ - - CurrentGetBitmap->size=MessageBuffer[count++]<<8; - CurrentGetBitmap->size+=MessageBuffer[count++]; -#ifdef DEBUG - fprintf(stdout, _("Bitmap size=%i\n"),CurrentGetBitmap->size); -#endif /* DEBUG */ - - count++; - CurrentGetBitmap->width=MessageBuffer[count++]; - CurrentGetBitmap->height=MessageBuffer[count++]; - count++; - tmp=CurrentGetBitmap->height*CurrentGetBitmap->width/8; - if (CurrentGetBitmap->size>tmp) CurrentGetBitmap->size=tmp; - memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,CurrentGetBitmap->size); - CurrentGetBitmapError=GE_NONE; - } else { -#ifdef DEBUG - fprintf(stdout, _("Message: Caller group datas received, but group number does not match (%i is not %i)\n"),MessageBuffer[4],CurrentGetBitmap->number); -#endif - } - } else { -#ifdef DEBUG - fprintf(stdout, _("Message: Caller group data received but not requested!\n")); -#endif - } - break; - - /* Get group data error */ - case 0x12: - - CurrentGetBitmapError=GE_UNKNOWN; -#ifdef DEBUG - fprintf(stdout, _("Message: Error attempting to get caller group data.\n")); -#endif - break; - - /* Set group data OK */ - case 0x14: - - CurrentSetBitmapError=GE_NONE; -#ifdef DEBUG - fprintf(stdout, _("Message: Caller group data set correctly.\n")); -#endif - break; - - /* Set group data error */ - case 0x15: - - CurrentSetBitmapError=GE_UNKNOWN; -#ifdef DEBUG - fprintf(stdout, _("Message: Error attempting to set caller group data\n")); -#endif - break; - - default: - -#ifdef DEBUG - fprintf(stdout, _("Message: Unknown message of type 0x03\n")); -#endif /* DEBUG */ - AppendLogText("Unknown msg\n",false); - - break; /* Visual C Don't like empty cases */ - } -} - -static void N6110_Dispatch0x05Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int tmp, count, length; - bool issupported; - -#ifdef DEBUG - int i; -#endif - - switch (MessageBuffer[3]) { - - /* Startup Logo */ - case 0x17: - -#ifdef DEBUG - fprintf(stdout, _("Message: Startup Logo, welcome note and dealer welcome note received.\n")); -#endif - - if (CurrentGetBitmap!=NULL) { - - issupported=false; - - count=5; - - for (tmp=0;tmptype==GSM_StartupLogo) { - CurrentGetBitmap->height=MessageBuffer[count++]; - CurrentGetBitmap->width=MessageBuffer[count++]; - CurrentGetBitmap->size=CurrentGetBitmap->height*CurrentGetBitmap->width/8; - length=CurrentGetBitmap->size; - memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,length); - } else { - length=MessageBuffer[count++]; - length=length*MessageBuffer[count++]/8; - } - count+=length; -#ifdef DEBUG - fprintf(stdout, _("Startup logo supported - ")); - if (length!=0) { fprintf(stdout, _("currently set\n")); } - else { fprintf(stdout, _("currently empty\n")); } -#endif - if (CurrentGetBitmap->type==GSM_StartupLogo) issupported=true; - break; - case 0x02: - length=MessageBuffer[count]; - if (CurrentGetBitmap->type==GSM_WelcomeNoteText) { - memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,length); - CurrentGetBitmap->text[length]=0; - } -#ifdef DEBUG - fprintf(stdout, _("Startup Text supported - ")); - if (length!=0) - { - fprintf(stdout, _("currently set to \"")); - for (i=0;itype==GSM_WelcomeNoteText) issupported=true; - break; - case 0x03: - length=MessageBuffer[count]; - if (CurrentGetBitmap->type==GSM_DealerNoteText) { - memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,length); - CurrentGetBitmap->text[length]=0; - } -#ifdef DEBUG - fprintf(stdout, _("Dealer Welcome supported - ")); - if (length!=0) - { - fprintf(stdout, _("currently set to \"")); - for (i=0;itype==GSM_DealerNoteText) issupported=true; - break; - } - } - if (issupported) CurrentGetBitmapError=GE_NONE; - else CurrentGetBitmapError=GE_NOTSUPPORTED; - } else { -#ifdef DEBUG - fprintf(stdout, _("Message: Startup logo received but not requested!\n")); -#endif - } - break; - - /* Set startup OK */ - case 0x19: - - CurrentSetBitmapError=GE_NONE; -#ifdef DEBUG - fprintf(stdout, _("Message: Startup logo, welcome note or dealer welcome note correctly set.\n")); -#endif - break; - - /* Set Operator Logo OK */ - case 0x31: - -#ifdef DEBUG - fprintf(stdout, _("Message: Operator logo correctly set.\n")); -#endif - - CurrentSetBitmapError=GE_NONE; - break; - - /* Set Operator Logo Error */ - case 0x32: - -#ifdef DEBUG - fprintf(stdout, _("Message: Error setting operator logo!\n")); -#endif - - CurrentSetBitmapError=GE_UNKNOWN; - break; - - /* Operator Logo */ - /* [location],[netcode x 3],[lenhi],[lenlo],[bitmap] */ - case 0x34: - - if (CurrentGetBitmap!=NULL) { - - count=5; /* Location ignored. */ - - DecodeNetworkCode(MessageBuffer+count, CurrentGetBitmap->netcode); - count=count+3; - -#ifdef DEBUG - fprintf(stdout, _("Message: Operator Logo for %s (%s) network received.\n"), - CurrentGetBitmap->netcode, - GSM_GetNetworkName(CurrentGetBitmap->netcode)); -#endif - - CurrentGetBitmap->size=MessageBuffer[count++]<<8; - CurrentGetBitmap->size+=MessageBuffer[count++]; - count++; - CurrentGetBitmap->width=MessageBuffer[count++]; - CurrentGetBitmap->height=MessageBuffer[count++]; - count++; - tmp=CurrentGetBitmap->height*CurrentGetBitmap->width/8; - if (CurrentGetBitmap->size>tmp) CurrentGetBitmap->size=tmp; - memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,CurrentGetBitmap->size); - CurrentGetBitmapError=GE_NONE; - } else { -#ifdef DEBUG - fprintf(stdout, _("Message: Operator logo received but not requested!\n")); -#endif - } - - break; - - /* Get op logo error */ - case 0x35: - -#ifdef DEBUG - fprintf(stdout, _("Message: Error getting operator logo!\n")); -#endif - CurrentGetBitmapError=GE_UNKNOWN; - break; - - default: - -#ifdef DEBUG - fprintf(stdout, _("Message: Unknown message of type 0x05\n")); -#endif /* DEBUG */ - AppendLogText("Unknown msg\n",false); - - break; - } -} - -static void N6110_Dispatch0x06Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - int tmp; - unsigned char output[160]; - -#ifdef DEBUG - int i; -#endif - - switch (MessageBuffer[3]) { - - case 0x05: - - /* MessageBuffer[3] = 0x05 - MessageBuffer[4] = 0x00 - MessageBuffer[5] = 0x0f - MessageBuffer[6] = 0x03 - MessageBuffer[7] = length of packed message - - This is all I have seen - Gerry Anderson */ - - tmp=GSM_UnpackEightBitsToSeven(0, 82, 82, MessageBuffer+8, output); - -#ifdef DEBUG - - fprintf(stdout, _("Message from Network operator: ")); - - for (i=0; iSender,GSM_UnpackSemiOctetNumber(MessageBuffer+5,true)); - - while (MessageBuffer[count]!=0) { - count++; - } - - count++; - } else { - strcpy(CurrentGetBitmap->Sender,"\0"); - - count+=3; - } - - memcpy(CurrentGetBitmap->text,MessageBuffer+count+1,MessageBuffer[count]); - CurrentGetBitmap->text[MessageBuffer[count]]=0; - - if (MessageBuffer[count]!=0) - count+=MessageBuffer[count]; - - count++; - -#ifdef DEBUG - fprintf(stdout,_("Picture Image received, text \"%s\", sender %s\n"),CurrentGetBitmap->text,CurrentGetBitmap->Sender); -#endif - - CurrentGetBitmap->width=MessageBuffer[count+1]; - CurrentGetBitmap->height=MessageBuffer[count+2]; - CurrentGetBitmap->size=CurrentGetBitmap->height*CurrentGetBitmap->width/8; - - memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count+4,CurrentGetBitmap->size); - - CurrentGetBitmapError=GE_NONE; - break; - - case 0x04: - -#ifdef DEBUG - fprintf(stdout,_("Getting or setting Picture Image - OK\n")); -#endif - CurrentSetBitmapError=GE_NONE; - CurrentGetBitmapError=GE_NONE; - break; - - case 0x05: - -#ifdef DEBUG - fprintf(stdout,_("Setting Picture Image - invalid location or other error\n")); -#endif - CurrentSetBitmapError=GE_UNKNOWN; - break; - - case 0x06: - -#ifdef DEBUG - fprintf(stdout,_("Getting Picture Image - invalid location or other error\n")); -#endif - CurrentGetBitmapError=GE_UNKNOWN; - break; - - default: - -#ifdef DEBUG - fprintf(stdout, _("Unknown message of type 0x47.\n")); -#endif /* DEBUG */ - AppendLogText("Unknown msg\n",false); - break; /* Visual C Don't like empty cases */ - } -} - -#endif /* UCLINUX */ - -void N6110_DispatchACKMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - char buffer[50]; - - sprintf(buffer,"Received ACK %02x %02x\n",MessageBuffer[0],MessageBuffer[1]); - AppendLog(buffer,strlen(buffer),false); - -#ifdef DEBUG - fprintf(stdout, _("[Received Ack of type %02x, seq: %2x]\n"), MessageBuffer[0], - MessageBuffer[1]); -#endif /* DEBUG */ - - CurrentLinkOK = true; -} - -static void N6110_Dispatch0xD0Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: The phone is powered on - seq 1.\n")); -#endif /* DEBUG */ - -} - -/* This function is used for parsing the RLP frame into fields. */ -void N6110_RX_HandleRLPMessage(u8 *MessageBuffer) -{ - - RLP_F96Frame frame; - int count; - int valid = true; - - /* We do not need RLP frame parsing to be done when we do not have callback - specified. */ - if (CurrentRLP_RXCallback == NULL) - return; - - /* Anybody know the official meaning of the first two bytes? - Nokia 6150 sends junk frames starting D9 01, and real frames starting - D9 00. We'd drop the junk frames anyway because the FCS is bad, but - it's tidier to do it here. We still need to call the callback function - to give it a chance to handle timeouts and/or transmit a frame */ - if (MessageBuffer[0] == 0xd9 && MessageBuffer[1] == 0x01) - valid = false; - - /* Nokia uses 240 bit frame size of RLP frames as per GSM 04.22 - specification, so Header consists of 16 bits (2 bytes). See section 4.1 - of the specification. */ - - frame.Header[0] = MessageBuffer[2]; - frame.Header[1] = MessageBuffer[3]; - - /* Next 200 bits (25 bytes) contain the Information. We store the - information in the Data array. */ - - for (count = 0; count < 25; count ++) - frame.Data[count] = MessageBuffer[4 + count]; - - /* The last 24 bits (3 bytes) contain FCS. */ - - frame.FCS[0] = MessageBuffer[29]; - frame.FCS[1] = MessageBuffer[30]; - frame.FCS[2] = MessageBuffer[31]; - - /* Here we pass the frame down in the input stream. */ - CurrentRLP_RXCallback(valid ? &frame : NULL); -} - -static void N6110_Dispatch0xF4Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - -#ifdef DEBUG - fprintf(stdout, _("Message: The phone is powered on - seq 2.\n")); -#endif /* DEBUG */ - -} - -#ifndef UCLINUX - -void N6110_ReplyIncomingSMS(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - GSM_SMSMessage NullSMS; - - switch (MessageBuffer[6]) { - - case 0x00: NullSMS.Type = GST_SMS; NullSMS.folder = GST_INBOX; break; - case 0x01: NullSMS.Type = GST_DR; NullSMS.folder = GST_INBOX; break; - - /* Is it possible ? */ - case 0x02: NullSMS.Type = GST_SMS; NullSMS.folder = GST_OUTBOX; break; - default: NullSMS.Type = GST_UN; break; - } - -#ifdef DEBUG - if (NullSMS.Type == GST_DR) - fprintf(stdout, _("Message: SMS Message (Report) Received\n")); - else - fprintf(stdout, _("Message: SMS Message Received\n")); -#endif /* DEBUG */ - - GSM_DecodeNokiaSMSFrame(&NullSMS, MessageBuffer+7, MessageLength-7); - -#ifdef DEBUG - fprintf(stdout, _("\n")); -#endif /* DEBUG */ -} - -#endif /* UCLINUX */ - -void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { - - bool unknown=false; - - /* Switch on the basis of the message type byte */ - switch (MessageType) { - - /* Call information */ - case 0x01: - - N6110_Dispatch0x01Message(MessageLength, MessageBuffer, MessageType); - break; - -#ifndef UCLINUX - /* SMS handling */ - case 0x02: - switch (MessageBuffer[3]) { - case 0x02: - case 0x03:N6110_ReplySendSMSMessage(MessageLength,MessageBuffer,MessageType);break; - case 0x10:N6110_ReplyIncomingSMS(MessageLength,MessageBuffer,MessageType);break; - case 0x21:N6110_ReplySetCellBroadcast(MessageLength, MessageBuffer, MessageType);break; - case 0x23:N6110_ReplyReadCellBroadcast(MessageLength, MessageBuffer, MessageType);break; - case 0x31:N6110_ReplySetSMSCenter(MessageLength,MessageBuffer,MessageType);break; - case 0x34: - case 0x35:N6110_ReplyGetSMSCenter(MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; -#endif /* UCLINUX */ - - /* Phonebook handling */ - case 0x03: - switch (MessageBuffer[3]) { - case 0x02: - case 0x03:N6110_ReplyGetMemoryLocation(MessageLength,MessageBuffer,MessageType);break; - case 0x05: - case 0x06:N6110_ReplyWritePhonebookLocation(MessageLength,MessageBuffer,MessageType);break; - case 0x08: - case 0x09:N6110_ReplyGetMemoryStatus(MessageLength,MessageBuffer,MessageType);break; - case 0x17: - case 0x18:N6110_ReplyGetSpeedDial(MessageLength,MessageBuffer,MessageType);break; - case 0x1a: - case 0x1b:N6110_ReplySetSpeedDial(MessageLength,MessageBuffer,MessageType);break; -#ifndef UCLINUX - default :N6110_Dispatch0x03Message(MessageLength,MessageBuffer,MessageType);break; -#endif /* UCLINUX */ - } - break; - - /* Phone status */ - case 0x04: - switch (MessageBuffer[3]) { - case 0x02:N6110_ReplyRFBatteryLevel(MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - -#ifndef UCLINUX - /* Startup Logo, Operator Logo and Profiles. */ - case 0x05: - switch (MessageBuffer[3]) { - case 0x11:N6110_ReplySetProfile (MessageLength,MessageBuffer,MessageType);break; - case 0x14:N6110_ReplyGetProfile (MessageLength,MessageBuffer,MessageType);break; - case 0x1b:N6110_ReplyGetProfile (MessageLength,MessageBuffer,MessageType);break; - case 0x1d:N6110_ReplySetProfile (MessageLength,MessageBuffer,MessageType);break; - case 0x37:N6110_ReplySetRingtone (MessageLength,MessageBuffer,MessageType);break; - case 0x38:N6110_ReplySetRingtone (MessageLength,MessageBuffer,MessageType);break; - default :N6110_Dispatch0x05Message(MessageLength,MessageBuffer,MessageType);break; - } - break; + bool unknown=false; + /* Switch on the basis of the message type byte */ + switch (MessageType) { + + /* Call information */ + case 0x01: + + N6110_Dispatch0x01Message(MessageLength, MessageBuffer, MessageType); + break; + + /* SMS handling */ + case 0x02: + switch (MessageBuffer[3]) { + case 0x02: + case 0x03:N6110_ReplySendSMSMessage(MessageLength,MessageBuffer,MessageType);break; + case 0x10:N6110_ReplyIncomingSMS(MessageLength,MessageBuffer,MessageType);break; + case 0x21:N6110_ReplySetCellBroadcast(MessageLength, MessageBuffer, MessageType);break; + case 0x23:N6110_ReplyReadCellBroadcast(MessageLength, MessageBuffer, MessageType);break; + case 0x31:N6110_ReplySetSMSCenter(MessageLength,MessageBuffer,MessageType);break; + case 0x34: + case 0x35:N6110_ReplyGetSMSCenter(MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Phonebook handling */ + case 0x03: + switch (MessageBuffer[3]) { + case 0x02: + case 0x03:N6110_ReplyGetMemoryLocation(MessageLength,MessageBuffer,MessageType);break; + case 0x05: + case 0x06:N6110_ReplyWritePhonebookLocation(MessageLength,MessageBuffer,MessageType);break; + case 0x08: + case 0x09:N6110_ReplyGetMemoryStatus(MessageLength,MessageBuffer,MessageType);break; + case 0x17: + case 0x18:N6110_ReplyGetSpeedDial(MessageLength,MessageBuffer,MessageType);break; + case 0x1a: + case 0x1b:N6110_ReplySetSpeedDial(MessageLength,MessageBuffer,MessageType);break; + default :N6110_Dispatch0x03Message(MessageLength,MessageBuffer,MessageType);break; + } + break; + + /* Phone status */ + case 0x04: + switch (MessageBuffer[3]) { + case 0x02:N6110_ReplyRFBatteryLevel(MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Startup Logo, Operator Logo and Profiles. */ + case 0x05: + switch (MessageBuffer[3]) { + case 0x11:N6110_ReplySetProfile (MessageLength,MessageBuffer,MessageType);break; + case 0x14:N6110_ReplyGetProfile (MessageLength,MessageBuffer,MessageType);break; + case 0x1b:N6110_ReplyGetProfile (MessageLength,MessageBuffer,MessageType);break; + case 0x1d:N6110_ReplySetProfile (MessageLength,MessageBuffer,MessageType);break; + case 0x37:N6110_ReplySetRingtone (MessageLength,MessageBuffer,MessageType);break; + case 0x38:N6110_ReplySetRingtone (MessageLength,MessageBuffer,MessageType);break; + default :N6110_Dispatch0x05Message(MessageLength,MessageBuffer,MessageType);break; + } + break; + /* Network Operator Message to handset -> Gerry Anderson & prepaid info */ /* Call diverts */ - case 0x06: - switch (MessageBuffer[3]) { - case 0x02: - case 0x03:N6110_ReplyCallDivert (MessageLength,MessageBuffer,MessageType);break; - default :N6110_Dispatch0x06Message(MessageLength,MessageBuffer,MessageType);break; - } - break; - - /* Security code requests */ - case 0x08: - switch (MessageBuffer[3]) { - case 0x08:N6110_ReplyGetSecurityCodeStatus(MessageLength,MessageBuffer,MessageType);break; - case 0x0b:N6110_ReplyEnterSecurityCode (MessageLength,MessageBuffer,MessageType);break; - default :N6110_ReplyEnterSecurityCode (MessageLength,MessageBuffer,MessageType);break; - } - break; - - /* SIM login */ - case 0x09: - - N6110_Dispatch0x09Message(MessageLength, MessageBuffer, MessageType); - break; - - /* Network info */ - case 0x0a: - switch (MessageBuffer[3]) { - case 0x71:N6110_ReplyGetNetworkInfo(MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - - /* Simulating key pressing */ - case 0x0c: - switch (MessageBuffer[3]) { - case 0x43:N6110_ReplyPressKey(MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - - /* Display */ - case 0x0d: - switch (MessageBuffer[3]) { - case 0x50:N6110_ReplyDisplayOutput (MessageLength,MessageBuffer,MessageType);break; - case 0x52:N6110_ReplyGetDisplayStatus(MessageLength,MessageBuffer,MessageType);break; - case 0x54:N6110_ReplyDisplayOutput (MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - - /* Phone Clock and Alarm */ - case 0x11: - switch (MessageBuffer[3]) { - case 0x61:N6110_ReplySetDateTime(MessageLength,MessageBuffer,MessageType);break; - case 0x63:N6110_ReplyGetDateTime(MessageLength,MessageBuffer,MessageType);break; - case 0x6c:N6110_ReplySetAlarm (MessageLength,MessageBuffer,MessageType);break; - case 0x6e:N6110_ReplyGetAlarm (MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - - /* Calendar notes handling */ - case 0x13: - switch (MessageBuffer[3]) { - case 0x65:N6110_ReplyWriteCalendarNote (MessageLength,MessageBuffer,MessageType);break; - case 0x67:N6110_ReplyGetCalendarNote (MessageLength,MessageBuffer,MessageType);break; - case 0x69:N6110_ReplyDeleteCalendarNote(MessageLength,MessageBuffer,MessageType);break; - default :N6110_Dispatch0x13Message (MessageLength,MessageBuffer,MessageType);break; - } - break; - - /* SMS Messages */ - case 0x14: - switch (MessageBuffer[3]) { - case 0x05: - case 0x06:N6110_ReplySaveSMSMessage (MessageLength,MessageBuffer,MessageType);break; - case 0x08: - case 0x09:N6110_ReplyGetSMSMessage (MessageLength,MessageBuffer,MessageType);break; - case 0x0b:N6110_ReplyDeleteSMSMessage(MessageLength,MessageBuffer,MessageType);break; - case 0x37: - case 0x38:N6110_ReplyGetSMSStatus (MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; - - /* WAP */ - case 0x3f: - switch (MessageBuffer[3]) { - case 0x01: - case 0x02:N7110_ReplyEnableWAPCommands(MessageLength,MessageBuffer,MessageType);break; - case 0x07: + case 0x06: + switch (MessageBuffer[3]) { + case 0x02: + case 0x03:N6110_ReplyCallDivert (MessageLength,MessageBuffer,MessageType);break; + default :N6110_Dispatch0x06Message(MessageLength,MessageBuffer,MessageType);break; + } + break; + + /* Security code requests */ + case 0x08: + switch (MessageBuffer[3]) { + case 0x08:N6110_ReplyGetSecurityCodeStatus(MessageLength,MessageBuffer,MessageType);break; + case 0x0b:N6110_ReplyEnterSecurityCode (MessageLength,MessageBuffer,MessageType);break; + default :N6110_ReplyEnterSecurityCode (MessageLength,MessageBuffer,MessageType);break; + } + break; + + /* SIM login */ + case 0x09: + + N6110_Dispatch0x09Message(MessageLength, MessageBuffer, MessageType); + break; + + /* Network info */ + case 0x0a: + switch (MessageBuffer[3]) { + case 0x71:N6110_ReplyGetNetworkInfo(MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Simulating key pressing */ + case 0x0c: + switch (MessageBuffer[3]) { + case 0x43:N6110_ReplyPressKey(MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Display */ + case 0x0d: + switch (MessageBuffer[3]) { + case 0x50:N6110_ReplyDisplayOutput (MessageLength,MessageBuffer,MessageType);break; + case 0x52:N6110_ReplyGetDisplayStatus(MessageLength,MessageBuffer,MessageType);break; + case 0x54:N6110_ReplyDisplayOutput (MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Phone Clock and Alarm */ + case 0x11: + switch (MessageBuffer[3]) { + case 0x61:N6110_ReplySetDateTime(MessageLength,MessageBuffer,MessageType);break; + case 0x63:N6110_ReplyGetDateTime(MessageLength,MessageBuffer,MessageType);break; + case 0x6c:N6110_ReplySetAlarm (MessageLength,MessageBuffer,MessageType);break; + case 0x6e:N6110_ReplyGetAlarm (MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* Calendar notes handling */ + case 0x13: + switch (MessageBuffer[3]) { + case 0x65:N6110_ReplyWriteCalendarNote (MessageLength,MessageBuffer,MessageType);break; + case 0x67:N6110_ReplyGetCalendarNote (MessageLength,MessageBuffer,MessageType);break; + case 0x69:N6110_ReplyDeleteCalendarNote(MessageLength,MessageBuffer,MessageType);break; + default :N6110_Dispatch0x13Message (MessageLength,MessageBuffer,MessageType);break; + } + break; + + /* SMS Messages */ + case 0x14: + switch (MessageBuffer[3]) { + case 0x05: + case 0x06:N6110_ReplySaveSMSMessage (MessageLength,MessageBuffer,MessageType);break; + case 0x08: + case 0x09:N6110_ReplyGetSMSMessage (MessageLength,MessageBuffer,MessageType);break; + case 0x0b:N6110_ReplyDeleteSMSMessage(MessageLength,MessageBuffer,MessageType);break; + case 0x37: + case 0x38:N6110_ReplyGetSMSStatus (MessageLength,MessageBuffer,MessageType);break; + default :unknown=true;break; + } + break; + + /* WAP */ + case 0x3f: + switch (MessageBuffer[3]) { + case 0x01: + case 0x02:N7110_ReplyEnableWAPCommands(MessageLength,MessageBuffer,MessageType);break; + case 0x07: case 0x08:N7110_ReplyGetWAPBookmark (MessageLength,MessageBuffer,MessageType);break; case 0x0a: case 0x0b:N7110_ReplySetWAPBookmark (MessageLength,MessageBuffer,MessageType);break; case 0x16: case 0x17: case 0x1c:N7110_ReplyGetWAPSettings (MessageLength,MessageBuffer,MessageType);break; - default :unknown=true;break; - } - break; -#endif /* UCLINUX */ - - /* Internal phone functions? */ - case 0x40: - switch (MessageBuffer[2]) { - case 0x64:N6110_ReplyEnableExtendedCommands (MessageLength,MessageBuffer,MessageType);break; -#ifndef UCLINUX - case 0x65:N6110_ReplyResetPhoneSettings (MessageLength,MessageBuffer,MessageType);break; -#endif /* UCLINUX */ - case 0x66:N6110_ReplyIMEI (MessageLength,MessageBuffer,MessageType);break; -#ifndef UCLINUX - case 0x6a:N6110_ReplyGetProductProfileSetting(MessageLength,MessageBuffer,MessageType);break; - case 0x6b:N6110_ReplySetProductProfileSetting(MessageLength,MessageBuffer,MessageType);break; - case 0x6e:N6110_ReplyGetSecurityCode (MessageLength,MessageBuffer,MessageType);break; - case 0x7e:N6110_ReplyNetmonitor (MessageLength,MessageBuffer,MessageType);break; - case 0x8a:N6110_ReplySimlockInfo (MessageLength,MessageBuffer,MessageType);break; - case 0x8b:N6110_ReplySetOperatorName (MessageLength,MessageBuffer,MessageType);break; - case 0x8c:N6110_ReplyGetOperatorName (MessageLength,MessageBuffer,MessageType);break; - case 0x8f:N6110_ReplyPlayTone (MessageLength,MessageBuffer,MessageType);break; - case 0x9e:N6110_ReplyGetBinRingtone (MessageLength,MessageBuffer,MessageType);break; - case 0xa0:N6110_ReplySetBinRingtone (MessageLength,MessageBuffer,MessageType);break; -#endif /* UCLINUX */ - case 0xc8:N6110_ReplyHW (MessageLength,MessageBuffer,MessageType);break; - default :N6110_Dispatch0x40Message (MessageLength,MessageBuffer,MessageType);break; - } - break; - -#ifndef UCLINUX - /* Picture Images */ - case 0x47: - - N6110_Dispatch0x47Message(MessageLength, MessageBuffer, MessageType); - break; -#endif /* UCLINUX */ - - /* Mobile phone identification */ - case 0x64: - - N6110_ReplyGetAuthentication(MessageLength, MessageBuffer, MessageType); - break; - - /***** Acknowlegment of our frames. *****/ - case FBUS_FRTYPE_ACK: - - N6110_DispatchACKMessage(MessageLength, MessageBuffer, MessageType); - break; - - /***** Power on message. *****/ - case 0xd0: - - N6110_Dispatch0xD0Message(MessageLength, MessageBuffer, MessageType); - break; - - case 0xd2: - - N6110_ReplyID(MessageLength, MessageBuffer, MessageType); - break; - - /***** RLP frame received. *****/ - case 0xf1: - - N6110_RX_HandleRLPMessage(MessageBuffer); - break; - - /***** Power on message. *****/ - case 0xf4: - - N6110_Dispatch0xF4Message(MessageLength, MessageBuffer, MessageType); - break; - - /***** Unknown message *****/ - /* If you think that you know the exact meaning of other messages - please - let us know. */ - default: - -#ifdef DEBUG - fprintf(stdout, _("Message: Unknown message type.\n")); -#endif /* DEBUG */ - AppendLogText("Unknown msg type\n",false); - - unknown=false; - break; - - } - - if (unknown) { -#ifdef DEBUG - fprintf(stdout, _("Unknown message of type %02x.\n"),MessageType); -#endif - AppendLogText("Unknown msg\n",false); - } -} + default :unknown=true;break; + } + break; + + /* Internal phone functions? */ + case 0x40: + switch (MessageBuffer[2]) { + case 0x64:N6110_ReplyEnableExtendedCommands (MessageLength,MessageBuffer,MessageType);break; + case 0x65:N6110_ReplyResetPhoneSettings (MessageLength,MessageBuffer,MessageType);break; + case 0x66:N6110_ReplyIMEI (MessageLength,MessageBuffer,MessageType);break; + case 0x6a:N6110_ReplyGetProductProfileSetting(MessageLength,MessageBuffer,MessageType);break; + case 0x6b:N6110_ReplySetProductProfileSetting(MessageLength,MessageBuffer,MessageType);break; + case 0x6e:N6110_ReplyGetSecurityCode (MessageLength,MessageBuffer,MessageType);break; + case 0x7e:N6110_ReplyNetmonitor (MessageLength,MessageBuffer,MessageType);break; + case 0x8a:N6110_ReplySimlockInfo (MessageLength,MessageBuffer,MessageType);break; + case 0x8b:N6110_ReplySetOperatorName (MessageLength,MessageBuffer,MessageType);break; + case 0x8c:N6110_ReplyGetOperatorName (MessageLength,MessageBuffer,MessageType);break; + case 0x8f:N6110_ReplyPlayTone (MessageLength,MessageBuffer,MessageType);break; + case 0x9e:N6110_ReplyGetBinRingtone (MessageLength,MessageBuffer,MessageType);break; + case 0xa0:N6110_ReplySetBinRingtone (MessageLength,MessageBuffer,MessageType);break; + case 0xc8:N6110_ReplyHW (MessageLength,MessageBuffer,MessageType);break; + default :N6110_Dispatch0x40Message (MessageLength,MessageBuffer,MessageType);break; + } + break; + + /* Picture Images */ + case 0x47: + + N6110_Dispatch0x47Message(MessageLength, MessageBuffer, MessageType); + break; + + /* Mobile phone identification */ + case 0x64: + + N6110_ReplyGetAuthentication(MessageLength, MessageBuffer, MessageType); + break; + + /***** Acknowlegment of our frames. *****/ + case FBUS_FRTYPE_ACK: + + N6110_DispatchACKMessage(MessageLength, MessageBuffer, MessageType); + break; + + /***** Power on message. *****/ + case 0xd0: + + N6110_Dispatch0xD0Message(MessageLength, MessageBuffer, MessageType); + break; + + case 0xd2: + + N6110_ReplyID(MessageLength, MessageBuffer, MessageType); + break; + + /***** RLP frame received. *****/ + case 0xf1: + + N6110_RX_HandleRLPMessage(MessageBuffer); + break; + + /***** Power on message. *****/ + case 0xf4: + + N6110_Dispatch0xF4Message(MessageLength, MessageBuffer, MessageType); + break; + + /***** Unknown message *****/ + /* If you think that you know the exact meaning of other messages - please + let us know. */ + default: + +#ifdef DEBUG + fprintf(stdout, _("Message: Unknown message type.\n")); +#endif /* DEBUG */ + AppendLogText("Unknown msg type\n",false); + + unknown=false; + break; + + } + + if (unknown) { +#ifdef DEBUG + fprintf(stdout, _("Unknown message of type %02x.\n"),MessageType); +#endif + AppendLogText("Unknown msg\n",false); + } +} diff --git a/common/newmodules/n7110.c b/common/newmodules/n7110.c index b1c9c7e..cec428e 100644 --- a/common/newmodules/n7110.c +++ b/common/newmodules/n7110.c @@ -78,7 +78,7 @@ GSM_Functions N7110_Functions = { N7110_SetAlarm, N6110_DialVoice, N6110_DialData, - N6110_GetIncomingCallNr, + N6110_GetIncomingCallNr, N6110_GetNetworkInfo, N7110_GetCalendarNote, N7110_WriteCalendarNote, @@ -130,6 +130,7 @@ GSM_Information N7110_Information = { "", "6210|6250|7110", /* Supported models in FBUS over Irda sockets */ "", + "", 5, /* Max RF Level */ 0, /* Min RF Level */ GRF_Arbitrary, /* RF level units */ @@ -250,7 +251,6 @@ GSM_Error N7110_Initialise(char *port_device, char *initlength, } CurrentSMSFoldersCount=1000; - CurrentSMSMessage=NULL; return (GE_NONE); } @@ -727,6 +727,10 @@ GSM_Error N7110_GetWAPSettings (GSM_WAPSettings *settings) void N7110_ReplyGetMemoryStatus(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { +#ifdef DEBUG + fprintf(stdout, _("Message: Memory status received:\n")); +#endif + if (CurrentMemoryStatus && CurrentMemoryStatusError == GE_BUSY) { /* first Loc. (MessageBuffer[10]<<8) + MessageBuffer[11]; */ CurrentMemoryStatus->Free = (MessageBuffer[14]<<8) + MessageBuffer[15]; @@ -736,8 +740,6 @@ void N7110_ReplyGetMemoryStatus(u16 MessageLength, u8 *MessageBuffer, u8 Message CurrentMemoryStatusError = GE_NONE; #ifdef DEBUG - fprintf(stdout, _("Message: Memory status received:\n")); - fprintf(stdout, _(" Memory Type: %s\n"), N7110_MemoryType_String[MessageBuffer[5]]); fprintf(stdout, _(" Used: %d\n"), CurrentMemoryStatus->Used); fprintf(stdout, _(" Free: %d\n"), CurrentMemoryStatus->Free); @@ -1155,7 +1157,7 @@ GSM_Error N7110_GetCalendarNote(GSM_CalendarNote *CalendarNote) return GE_INVALIDCALNOTELOCATION; req[4] = CurrentCalendarNotesInfo.Location[CalendarNote->Location-1]>>8; - req[5] = CurrentCalendarNotesInfo.Location[CalendarNote->Location-1]&0xff; + req[5] = CurrentCalendarNotesInfo.Location[CalendarNote->Location-1]&0xff; CurrentCalendarNote = CalendarNote; /* We have to get current year. It's NOT written in frame for Birthday */ @@ -2084,203 +2086,203 @@ GSM_Error N7110_GetSMSStatus(GSM_SMSStatus *Status) return NULL_SendMessageSequence(10, &CurrentSMSStatusError, 5, 0x14, req); } -void N7110_ReplyGetMemoryLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) +void N7110_DecodePhonebookFrame(GSM_PhonebookEntry *entry,u8 *MessageBuffer,u16 MessageLength) { - int i, count, blocks, blockcount; -#ifdef DEBUG - int j; -#endif + int blockcount=0; unsigned char *pBlock; - - CurrentPhonebookEntry->Empty = true; - CurrentPhonebookEntry->Group = 5; /* 5 = no group as 6110 */ - CurrentPhonebookEntry->Name[0] = '\0'; - CurrentPhonebookEntry->Number[0] = '\0'; - CurrentPhonebookEntry->SubEntriesCount = 0; + int length=0; #ifdef DEBUG - fprintf(stdout, _("Message: Phonebook entry received:\n")); -#endif - - if( MessageBuffer[6] == 0x0f ) // not found - { -#ifdef DEBUG - fprintf(stdout, _(" Error %i\n"),MessageBuffer[10]); - switch (MessageBuffer[10]) { - case 0x34:fprintf(stdout,_(" Invalid phonebook location\n"));break; - case 0x3b:fprintf(stdout,_(" Speed dial not assigned\n"));break; - default :fprintf(stdout,_(" Unknown.Please report\n"));break; - } + int j; #endif - switch (MessageBuffer[10]) { - case 0x34:CurrentPhonebookError = GE_INVALIDPHBOOKLOCATION;break; - case 0x3b:CurrentPhonebookError = GE_INVALIDSPEEDDIALLOCATION;break; - default :CurrentPhonebookError = GE_UNKNOWN; - } - CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; - - } else { - - CurrentPhonebookEntry->Location=MessageBuffer[13]; - - count = MessageBuffer[9]; - blocks = MessageBuffer[17]; - blockcount = 0; - CurrentPhonebookEntry->SubEntriesCount = blocks - 1; + pBlock = &MessageBuffer[0]; -#ifdef DEBUG - fprintf(stdout, _(" Blocks: %d\n"),blocks); -#endif /* DEBUG */ - - pBlock = &MessageBuffer[18]; - - for( i = 0; i < blocks; i++ ) - { - GSM_SubPhonebookEntry* pEntry = &CurrentPhonebookEntry->SubEntries[blockcount]; + while (length!=MessageLength) { + GSM_SubPhonebookEntry* pEntry = &entry->SubEntries[blockcount]; #ifdef DEBUG - fprintf(stdout,_(" ")); - for (j=5;j<(pBlock[3]-6)+5;j++) fprintf(stdout,_("%02x "),pBlock[j]); - fprintf(stdout,_("\n")); + fprintf(stdout,_(" ")); + for (j=5;j<(pBlock[3]-6)+5;j++) fprintf(stdout,_("%02x "),pBlock[j]); + fprintf(stdout,_("\n")); #endif - switch( pBlock[0] ) { - case N7110_ENTRYTYPE_SPEEDDIAL: + switch( pBlock[0] ) { + case N7110_ENTRYTYPE_SPEEDDIAL: - CurrentSpeedDialEntry->MemoryType = GMT_SM; - if (pBlock[4]==0x02) CurrentSpeedDialEntry->MemoryType = GMT_ME; + CurrentSpeedDialEntry->MemoryType = GMT_SM; + if (pBlock[4]==0x02) CurrentSpeedDialEntry->MemoryType = GMT_ME; - CurrentSpeedDialEntry->Location = pBlock[7]+pBlock[6]*256; + CurrentSpeedDialEntry->Location = pBlock[7]+pBlock[6]*256; #ifdef DEBUG - fprintf(stdout, _(" Speed dial\n")); - fprintf(stdout, _(" Location: %d\n"), CurrentSpeedDialEntry->Location); - fprintf(stdout, _(" MemoryType: %i\n"), CurrentSpeedDialEntry->MemoryType); - fprintf(stdout, _(" Number: %d\n"), CurrentSpeedDialEntry->Number); + fprintf(stdout, _(" Speed dial\n")); + fprintf(stdout, _(" Location: %d\n"), CurrentSpeedDialEntry->Location); + fprintf(stdout, _(" MemoryType: %i\n"), CurrentSpeedDialEntry->MemoryType); + fprintf(stdout, _(" Number: %d\n"), CurrentSpeedDialEntry->Number); #endif /* DEBUG */ - CurrentSpeedDialError=GE_NONE; - break; + CurrentSpeedDialError=GE_NONE; + break; - case N7110_ENTRYTYPE_NAME: - DecodeUnicode (CurrentPhonebookEntry->Name, pBlock+6, pBlock[5]/2); - if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) - strncpy(CurrentGetBitmap->text,CurrentPhonebookEntry->Name,sizeof(CurrentGetBitmap->text)); - CurrentPhonebookEntry->Empty = false; + case N7110_ENTRYTYPE_NAME: + DecodeUnicode (entry->Name, pBlock+6, pBlock[5]/2); + if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) + strncpy(CurrentGetBitmap->text,entry->Name,sizeof(CurrentGetBitmap->text)); + entry->Empty = false; #ifdef DEBUG - fprintf(stdout, _(" Name:\n")); - fprintf(stdout, _(" Name: %s\n"), CurrentPhonebookEntry->Name); + fprintf(stdout, _(" Name:\n")); + fprintf(stdout, _(" Name: %s\n"), entry->Name); #endif /* DEBUG */ - break; + break; - case N7110_ENTRYTYPE_NUMBER: - pEntry->EntryType = pBlock[0]; - pEntry->NumberType = pBlock[5]; - pEntry->BlockNumber = pBlock[4]; - - DecodeUnicode (pEntry->data.Number, pBlock+10, pBlock[9]/2); - -#ifdef DEBUG - fprintf(stdout, _(" Number:\n")); - fprintf(stdout, _(" Type: %d (%02x)\n"), - pEntry->NumberType, - pEntry->NumberType); - fprintf(stdout, _(" Number: %s\n"), - pEntry->data.Number); -#endif /* DEBUG */ - if( pEntry->EntryType == GSM_Number && - ((pEntry->NumberType == GSM_General && - !strcmp(CurrentPhonebookEntry->Number,"")) - || pEntry->NumberType == GSM_SIM)) { - strcpy( CurrentPhonebookEntry->Number, pEntry->data.Number ); - *pEntry->data.Number = 0; - } else - blockcount++; - break; - case N7110_ENTRYTYPE_DATE: - pEntry->EntryType = pBlock[0]; - pEntry->NumberType = pBlock[5]; - pEntry->BlockNumber = pBlock[4]; - DecodeDateTime(pBlock+6, &pEntry->data.Date); -#ifdef DEBUG - fprintf(stdout, _(" Date:\n")); - fprintf(stdout, _(" Date: %02u.%02u.%04u\n"), pEntry->data.Date.Day, - pEntry->data.Date.Month, pEntry->data.Date.Year ); - fprintf(stdout, _(" Time: %02u:%02u:%02u\n"), pEntry->data.Date.Hour, - pEntry->data.Date.Minute, pEntry->data.Date.Second); + case N7110_ENTRYTYPE_NUMBER: + pEntry->EntryType = pBlock[0]; + pEntry->NumberType = pBlock[5]; + pEntry->BlockNumber = pBlock[4]; + + DecodeUnicode (pEntry->data.Number, pBlock+10, pBlock[9]/2); + +#ifdef DEBUG + fprintf(stdout, _(" Number:\n")); + fprintf(stdout, _(" Type: %d (%02x)\n"),pEntry->NumberType,pEntry->NumberType); + fprintf(stdout, _(" Number: %s\n"),pEntry->data.Number); #endif /* DEBUG */ + if( pEntry->EntryType == GSM_Number && + ((pEntry->NumberType == GSM_General && !strcmp(entry->Number,"")) + || pEntry->NumberType == GSM_SIM)) { + strcpy( entry->Number, pEntry->data.Number ); + *pEntry->data.Number = 0; + } else blockcount++; - break; - case N7110_ENTRYTYPE_NOTE: - case N7110_ENTRYTYPE_POSTAL: - case N7110_ENTRYTYPE_EMAIL: - pEntry->EntryType = pBlock[0]; - pEntry->NumberType = 0; - pEntry->BlockNumber = pBlock[4]; + break; + case N7110_ENTRYTYPE_DATE: + pEntry->EntryType = pBlock[0]; + pEntry->NumberType = pBlock[5]; + pEntry->BlockNumber = pBlock[4]; + DecodeDateTime(pBlock+6, &pEntry->data.Date); +#ifdef DEBUG + fprintf(stdout, _(" Date:\n")); + fprintf(stdout, _(" Date: %02u.%02u.%04u\n"), pEntry->data.Date.Day, + pEntry->data.Date.Month, pEntry->data.Date.Year ); + fprintf(stdout, _(" Time: %02u:%02u:%02u\n"), pEntry->data.Date.Hour, + pEntry->data.Date.Minute, pEntry->data.Date.Second); +#endif /* DEBUG */ + blockcount++; + break; + case N7110_ENTRYTYPE_NOTE: + case N7110_ENTRYTYPE_POSTAL: + case N7110_ENTRYTYPE_EMAIL: + pEntry->EntryType = pBlock[0]; + pEntry->NumberType = 0; + pEntry->BlockNumber = pBlock[4]; - DecodeUnicode (pEntry->data.Number, pBlock+6, pBlock[5]/2); + DecodeUnicode (pEntry->data.Number, pBlock+6, pBlock[5]/2); #ifdef DEBUG - fprintf(stdout, _(" Email or note or postal:\n")); - fprintf(stdout, _(" Type: %d (%02x)\n"), - pEntry->EntryType, - pEntry->EntryType); - fprintf(stdout, _(" Text: %s\n"), - pEntry->data.Number); + fprintf(stdout, _(" Email or note or postal:\n")); + fprintf(stdout, _(" Type: %d (%02x)\n"),pEntry->EntryType,pEntry->EntryType); + fprintf(stdout, _(" Text: %s\n"),pEntry->data.Number); #endif /* DEBUG */ - blockcount++; - break; - case N7110_ENTRYTYPE_GROUP: - CurrentPhonebookEntry->Group = pBlock[5]-1; /* 0 = family as for 6110 */ - if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) - CurrentGetBitmap->number = CurrentPhonebookEntry->Group; + blockcount++; + break; + case N7110_ENTRYTYPE_GROUP: + entry->Group = pBlock[5]-1; /* 0 = family as for 6110 */ + if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) + CurrentGetBitmap->number = entry->Group; #ifdef DEBUG - fprintf(stdout, _(" Group: %d\n"), CurrentPhonebookEntry->Group); + fprintf(stdout, _(" Group: %d\n"), entry->Group); #endif /* DEBUG */ - break; - case N7110_ENTRYTYPE_RINGTONE: - if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) - CurrentGetBitmap->ringtone = pBlock[5]; + break; + case N7110_ENTRYTYPE_RINGTONE: + if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) + CurrentGetBitmap->ringtone = pBlock[5]; #ifdef DEBUG - fprintf(stdout, _(" Group ringtone number %d received.\n"), pBlock[5]); + fprintf(stdout, _(" Group ringtone number %d received.\n"), pBlock[5]); #endif /* DEBUG */ - break; - case N7110_ENTRYTYPE_LOGOON: - if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) - CurrentGetBitmap->enabled = pBlock[5]; + break; + case N7110_ENTRYTYPE_LOGOON: + if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) + CurrentGetBitmap->enabled = pBlock[5]; #ifdef DEBUG - fprintf(stdout, _(" Logo enabled = %d received.\n"), pBlock[5]); + fprintf(stdout, _(" Logo enabled = %d received.\n"), pBlock[5]); #endif /* DEBUG */ - break; - case N7110_ENTRYTYPE_GROUPLOGO: + break; + case N7110_ENTRYTYPE_GROUPLOGO: #ifdef DEBUG - fprintf(stdout, _(" Caller group logo received.\n")); + fprintf(stdout, _(" Caller group logo received.\n")); #endif /* DEBUG */ - if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) { - CurrentGetBitmap->width = pBlock[5]; - CurrentGetBitmap->height= pBlock[6]; - CurrentGetBitmap->size = pBlock[9]; - if (CurrentGetBitmap->size > sizeof(CurrentGetBitmap->bitmap)) - CurrentGetBitmap->size = CurrentGetBitmap->size; - memcpy(CurrentGetBitmap->bitmap,pBlock+10,CurrentGetBitmap->size); - } - break; + if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) { + CurrentGetBitmap->width = pBlock[5]; + CurrentGetBitmap->height= pBlock[6]; + CurrentGetBitmap->size = pBlock[9]; + if (CurrentGetBitmap->size > sizeof(CurrentGetBitmap->bitmap)) + CurrentGetBitmap->size = CurrentGetBitmap->size; + memcpy(CurrentGetBitmap->bitmap,pBlock+10,CurrentGetBitmap->size); + } + break; - default: + default: #ifdef DEBUG - fprintf(stdout, _(" Unknown Entry Code (%u) received.\n"), pBlock[0] ); + fprintf(stdout, _(" Unknown Entry Code (%u) received.\n"), pBlock[0] ); #endif /* DEBUG */ - break; - } + break; + } #ifdef DEBUG - fprintf(stdout, _(" Blocksize was: %d (%02x)\n"), (int) pBlock[3], pBlock[3]); + fprintf(stdout, _(" Blocksize was: %d (%02x)\n"), (int) pBlock[3], pBlock[3]); #endif - pBlock = &pBlock[(int) pBlock[3]]; + length=length+pBlock[3]; + + pBlock = &pBlock[(int) pBlock[3]]; + } + + entry->SubEntriesCount = blockcount; + +#ifdef DEBUG + fprintf(stdout, _(" SubBlocks: %d\n"),entry->SubEntriesCount); +#endif /* DEBUG */ +} + +void N7110_ReplyGetMemoryLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) +{ + + CurrentPhonebookEntry->Empty = true; + CurrentPhonebookEntry->Group = 5; /* 5 = no group as 6110 */ + CurrentPhonebookEntry->Name[0] = '\0'; + CurrentPhonebookEntry->Number[0] = '\0'; + CurrentPhonebookEntry->SubEntriesCount = 0; + +#ifdef DEBUG + fprintf(stdout, _("Message: Phonebook entry received:\n")); +#endif + + if( MessageBuffer[6] == 0x0f ) // not found + { +#ifdef DEBUG + fprintf(stdout, _(" Error %i\n"),MessageBuffer[10]); + switch (MessageBuffer[10]) { + case 0x34:fprintf(stdout,_(" Invalid phonebook location\n"));break; + case 0x3b:fprintf(stdout,_(" Speed dial not assigned\n"));break; + default :fprintf(stdout,_(" Unknown.Please report\n"));break; } +#endif + switch (MessageBuffer[10]) { + case 0x34:CurrentPhonebookError = GE_INVALIDPHBOOKLOCATION;break; + case 0x3b:CurrentPhonebookError = GE_INVALIDSPEEDDIALLOCATION;break; + default :CurrentPhonebookError = GE_UNKNOWN; + } + CurrentSpeedDialError=GE_INVALIDSPEEDDIALLOCATION; + + } else { + CurrentPhonebookEntry->Location=MessageBuffer[13]+MessageBuffer[12]*256; + +#ifdef DEBUG + fprintf(stdout,_(" Location: %i\n"),CurrentPhonebookEntry->Location); +#endif + + N7110_DecodePhonebookFrame(CurrentPhonebookEntry,MessageBuffer+18,MessageLength-18); - CurrentPhonebookEntry->SubEntriesCount = blockcount; CurrentPhonebookError = GE_NONE; } } @@ -2335,7 +2337,7 @@ void N7110_ReplyWritePhonebookLocation(u16 MessageLength, u8 *MessageBuffer, u8 int N7110_PackPBKBlock(int id, int size, int no, unsigned char *buf, unsigned char *block) { #ifdef DEBUG - fprintf(stdout,_("Adding block id:%i,length:%i\n"),no+1,size+6); + fprintf(stdout,_("Adding block id:%i,number:%i,length:%i\n"),id,no+1,size+6); #endif *(block++) = id; @@ -2352,20 +2354,18 @@ int N7110_PackPBKBlock(int id, int size, int no, unsigned char *buf, unsigned ch return (size + 6); } -int N7110_MakePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int *block) +int N7110_EncodePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int *block2) { - int count=0, len, i; + int count=0, len, i, block=0; char string[500]; - *block=0; - /* Name */ len = strlen(entry.Name); string[0] = len * 2; // Length ot the string (without Termination) EncodeUnicode((string + 1), entry.Name, len); string[len * 2 + 1] = 0; // Terminating 0 - count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NAME, len * 2 + 2, *block++, string, req + count); + count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NAME, len * 2 + 2, block++, string, req + count); if (*entry.Number) { len = strlen(entry.Number); @@ -2374,7 +2374,7 @@ int N7110_MakePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int * string[4] = len * 2; // length (without Termination) EncodeUnicode((string + 5), entry.Number, len); string[len * 2 + 5] = 0; // Terminating 0 - count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NUMBER, len * 2 + 6, *block++, string, req + count); + count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NUMBER, len * 2 + 6, block++, string, req + count); } /* Rest of the subentries */ @@ -2384,14 +2384,14 @@ int N7110_MakePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int * string[0] = len * 2; // length (without Termination) EncodeUnicode((string + 1), entry.SubEntries[i].data.Number, len); string[len * 2 + 1] = 0; // Terminating 0 - count += N7110_PackPBKBlock(entry.SubEntries[i].EntryType, len * 2 + 2, *block++, string, req + count); + count += N7110_PackPBKBlock(entry.SubEntries[i].EntryType, len * 2 + 2, block++, string, req + count); } else { string[0] = entry.SubEntries[i].NumberType; string[1] = string[2] = string[3] = 0; string[4] = len * 2; //length (without Termination) EncodeUnicode((string + 5), entry.SubEntries[i].data.Number, len); string[len * 2 + 5] = 0; // Terminating 0 - count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NUMBER, len * 2 + 6, *block++, string, req + count); + count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NUMBER, len * 2 + 6, block++, string, req + count); } } @@ -2399,9 +2399,11 @@ int N7110_MakePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int * /* Group */ string[0] = entry.Group + 1; string[1] = 0; - count += N7110_PackPBKBlock(N7110_ENTRYTYPE_GROUP, 2, *block++, string, req + count); + count += N7110_PackPBKBlock(N7110_ENTRYTYPE_GROUP, 2, block++, string, req + count); } + *block2=block; + return count; } @@ -2419,12 +2421,9 @@ GSM_Error N7110_WritePhonebookLocation(GSM_PhonebookEntry *entry) req[12] = (entry->Location >> 8); req[13] = entry->Location & 0xff; - // If we had a file that contain data in entry style like from 6110 - // we can import this too :) - // no SubEntries in SIM (besides Name, Number, and Group) - if (entry->MemoryType == GMT_SM) entry->SubEntriesCount = 0; +// if (entry->MemoryType == GMT_SM) entry->SubEntriesCount = 0; - count=count+N7110_MakePhonebookFrame(req+18, *entry, &blocks); + count=count+N7110_EncodePhonebookFrame(req+18, *entry, &blocks); req[17]=blocks; @@ -2462,14 +2461,14 @@ GSM_Error N7110_DeletePhonebookLocation(GSM_PhonebookEntry *entry) 0x05, /* mem location low*/ 0x00, /* mem location high*/ 0x00, 0x00 - }; + }; - req[12] = (entry->Location >> 8); - req[13] = entry->Location & 0xff; - req[14] = N7110_GetMemoryType(entry->MemoryType); + req[12] = (entry->Location >> 8); + req[13] = entry->Location & 0xff; + req[14] = N7110_GetMemoryType(entry->MemoryType); #ifdef DEBUG - fprintf(stdout, _("Deleting phonebook entry at location %d...\n"),entry->Location); + fprintf(stdout, _("Deleting phonebook entry at location %d...\n"),entry->Location); #endif return NULL_SendMessageSequence(50, &CurrentPhonebookError, 18, 0x03, req); @@ -2503,6 +2502,15 @@ GSM_Error N7110_WriteGroupDataLocation(GSM_Bitmap *bitmap) string[1] = 0; count += N7110_PackPBKBlock(N7110_ENTRYTYPE_GROUP, 2, block++, string, req + count); + /* Name */ + if (*bitmap->text) { + i = strlen(bitmap->text); + string[0] = i * 2 + 2; + EncodeUnicode((string + 1), bitmap->text, i); + string[i * 2 + 1] = 0; // Terminating 0 + count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NAME, i * 2 + 2, block++, string, req + count); + } + /* Logo */ string[0] = bitmap->width; string[1] = bitmap->height; @@ -2512,14 +2520,6 @@ GSM_Error N7110_WriteGroupDataLocation(GSM_Bitmap *bitmap) memcpy(string + 5, bitmap->bitmap, bitmap->size); count += N7110_PackPBKBlock(N7110_ENTRYTYPE_GROUPLOGO, bitmap->size + 5, block++, string, req + count); - /* Name */ - if (*bitmap->text) { - i = strlen(bitmap->text); - string[0] = i * 2; - EncodeUnicode((string + 1), bitmap->text, i); - count += N7110_PackPBKBlock(N7110_ENTRYTYPE_NAME, i * 2 + 1, block++, string, req + count); - } - req[17] = block; //number of blocks return NULL_SendMessageSequence @@ -2657,11 +2657,11 @@ GSM_Error N7110_SetBitmap(GSM_Bitmap *Bitmap) /* set logo */ if (strcmp(Bitmap->netcode,"000 00")) { reqOp[5] = 0x01; // Logo enabled - EncodeNetworkCode(reqOp+5, Bitmap->netcode); - reqOp[11] = 8+(Bitmap->width*Bitmap->height+7)/8; + EncodeNetworkCode(reqOp+6, Bitmap->netcode); + reqOp[11] = 8+GSM_GetBitmapSize(Bitmap); reqOp[12]=Bitmap->width; reqOp[13]=Bitmap->height; - reqOp[15]=(Bitmap->width*Bitmap->height+7)/8; + reqOp[15]=GSM_GetBitmapSize(Bitmap); memcpy(reqOp+count,Bitmap->bitmap,Bitmap->size); count += Bitmap->size; } else { @@ -2690,7 +2690,7 @@ GSM_Error N7110_SetBitmap(GSM_Bitmap *Bitmap) if (NULL_SendMessageSequence (50, &CurrentGetBitmapError, 7, 0x14, req2)!=GE_NONE) break; if (PictureImageNum==Bitmap->number+1) break; } - if (CurrentGetBitmapError!=GE_NONE) { + if (PictureImageNum!=Bitmap->number+1) { req4[5]=0x21; req4[6]=0; req4[7]=0; @@ -2699,15 +2699,49 @@ GSM_Error N7110_SetBitmap(GSM_Bitmap *Bitmap) req4[6]=PictureImageIndex/256; req4[7]=PictureImageIndex%256; } - count=7; - for (i=0;i<38;i++) req4[count++]=0x00; + + /* Cleaning */ + for (i=0;i<36;i++) req4[i+9]=0; + + count=8; + if (strlen(Bitmap->text)==0) { + count+=2 ;req4[count]=0x0c; + count+=2 ;req4[count]=0x0d; + count+=2 ;req4[count]=0x0e; + count+=2 ;req4[count]=0x0f; + count+=2 ;req4[count]=0x10; + count+=2 ;req4[count]=0x11; + count+=23;req4[count]=0x02; + count++ ;req4[count]=0x01; + count+=2; + } else { + count+=2 ;req4[count]=0x54; + count++ ;req4[count]=0xd4; + count++ ;req4[count]=0x0d; + count+=2 ;req4[count]=0x0e; + count+=2 ;req4[count]=0x0f; + count+=2 ;req4[count]=0x10; + count+=2 ;req4[count]=0x11; + count+=21;req4[count]=0x01; + count+=3 ;req4[count]=0x01; + count+=2; + } + + req4[count++]=0x01; req4[count++]=Bitmap->width; req4[count++]=Bitmap->height; req4[count++]=Bitmap->size/256; req4[count++]=Bitmap->size%256; - memcpy(reqOp+count,Bitmap->bitmap,Bitmap->size); + memcpy(req4+count,Bitmap->bitmap,Bitmap->size); count += Bitmap->size; - req4[count++]=0x00; + + if (strlen(Bitmap->text)!=0) { + req4[count] = strlen(Bitmap->text); + GSM_PackSevenBitsToEight(0, Bitmap->text, req4+count+1); + count=count+req4[count]; + } else { + req4[count++]=0x00; + } req4[count++]=0x00; CurrentSetBitmapError = GE_BUSY; @@ -2855,6 +2889,7 @@ int ReturnBinRingLocation() if (strcmp(model,"NSE-5") == 0) return 0x74; //first 0x74 //7110 if (strcmp(model,"NPE-3") == 0) return 0x89; //first is 0x89; //6210 + if (strcmp(model,"NHM-3") == 0) return 0x89; //quess for 6250 return 0; } @@ -2887,18 +2922,18 @@ GSM_Error N7110_SetRingTone(GSM_Ringtone *ringtone, int *maxlength) /* Info from Till Toenshoff [till@uni.de] - One improvement - for looping you can use an alternative header - normal - 0x02, 0xFC, 0x09, 0x00, 0x0A, 0x01 - - loop - 0x02, 0xFC, 0x09, 0x00, 0x05, 0xLL, 0x0A, 0x01 - - LL=0x01-0x10 - - 0x01=loop once - [...] - 0x10=loop infinite + One improvement - for looping you can use an alternative header + normal + 0x02, 0xFC, 0x09, 0x00, 0x0A, 0x01 + + loop + 0x02, 0xFC, 0x09, 0x00, 0x05, 0xLL, 0x0A, 0x01 + + LL=0x01-0x10 + + 0x01=loop once + [...] + 0x10=loop infinite */ char tail[] = {0x40, 0x7D, 0x40, 0x5C, 0x0A, 0xFE, 0x40, 0x20, 0x40, 0x7D, 0x40, 0x37, 0x0A, 0xFE, @@ -3060,7 +3095,7 @@ GSM_Error N7110_GetBinRingTone(GSM_BinRingtone *ringtone) GSM_Error N7110_SetBinRingTone(GSM_BinRingtone *ringtone) { - unsigned char req[500] = { N6110_FRAME_HEADER, 0x1f, 0x00, 0x00 }; + unsigned char req[1000] = { N6110_FRAME_HEADER, 0x1f, 0x00, 0x00 }; GSM_NetworkInfo NetworkInfo; @@ -3082,7 +3117,7 @@ GSM_Error N7110_SetBinRingTone(GSM_BinRingtone *ringtone) memcpy(req+35,ringtone->frame+i,ringtone->length-i); - Protocol->SendMessage(35+ringtone->length-i, 0x1f, req); + Protocol->SendMessage(35+ringtone->length-i, 0x1f, req); GSM->GetNetworkInfo(&NetworkInfo); //need to make something @@ -3191,21 +3226,20 @@ void N7110_Dispatch0x0AMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageT GSM_GetNetworkName(CurrentGetBitmap->netcode)); #endif + CurrentGetBitmap->type=GSM_7110OperatorLogo; if (MessageBuffer[4] == 0x02) { /* logo present */ count = 7; count += MessageBuffer[count]; /* skip network info */ - CurrentGetBitmap->size=MessageBuffer[count++]; /* is too large */ + count ++; CurrentGetBitmap->width=MessageBuffer[count++]; /* 78 */ CurrentGetBitmap->height=MessageBuffer[count++]; /* 21 */ count+=4; - CurrentGetBitmap->size=(CurrentGetBitmap->height*CurrentGetBitmap->width+7)/8; /* packed size */ - if (CurrentGetBitmap->size > sizeof(CurrentGetBitmap->bitmap)) - CurrentGetBitmap->size=sizeof(CurrentGetBitmap->bitmap); + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); /* packed size */ memcpy(CurrentGetBitmap->bitmap,MessageBuffer+count,CurrentGetBitmap->size); } else { CurrentGetBitmap->width=78; CurrentGetBitmap->height=21; - CurrentGetBitmap->size=(CurrentGetBitmap->height*CurrentGetBitmap->width+7)/8; /* packed size */ + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); /* packed size */ memset(CurrentGetBitmap->bitmap,0,CurrentGetBitmap->size); } CurrentGetBitmapError=GE_NONE; @@ -3281,7 +3315,7 @@ void N7110_Dispatch0x14Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageT CurrentGetBitmap->width=MessageBuffer[47]; CurrentGetBitmap->height=MessageBuffer[48]; - CurrentGetBitmap->size=CurrentGetBitmap->height*CurrentGetBitmap->width/8; + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); memcpy(CurrentGetBitmap->bitmap,MessageBuffer+51,CurrentGetBitmap->size); @@ -3326,7 +3360,15 @@ void N7110_Dispatch0x14Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageT CurrentSMSMessageError = GE_NONE; break; } - + case 0x51: +#ifdef DEBUG + fprintf(stdout, _("Message: Picture Image saved OK\n")); + fprintf(stdout, _(" folder : %02x\n"),MessageBuffer[4]); + fprintf(stdout, _(" location: %02x\n"),MessageBuffer[5]*256+MessageBuffer[6]); +#endif /* DEBUG */ + CurrentSetBitmapError=GE_NONE; + break; + case 0x97: #ifdef DEBUG @@ -3445,8 +3487,10 @@ void N7110_Dispatch0x7AMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageT /* Make sure we are expecting a startup logo */ if (CurrentGetBitmap && CurrentGetBitmapError == GE_BUSY) { CurrentGetBitmap->height=MessageBuffer[13]; /* 96 */ - CurrentGetBitmap->width=MessageBuffer[17]; /* 60 */ - CurrentGetBitmap->size=(CurrentGetBitmap->height+7)/8*CurrentGetBitmap->width; /* unpacked size */ + CurrentGetBitmap->width=MessageBuffer[17]; /* 60/65 */ + CurrentGetBitmap->type=GSM_7110StartupLogo; + if (CurrentGetBitmap->width==60) CurrentGetBitmap->type=GSM_6210StartupLogo; + CurrentGetBitmap->size=GSM_GetBitmapSize(CurrentGetBitmap); /* unpacked size */ if (CurrentGetBitmap->size > sizeof(CurrentGetBitmap->bitmap)) CurrentGetBitmap->size=sizeof(CurrentGetBitmap->bitmap); memcpy(CurrentGetBitmap->bitmap,MessageBuffer+22,CurrentGetBitmap->size); diff --git a/common/newmodules/newat.c b/common/newmodules/newat.c index 127dd0e..01e051f 100644 --- a/common/newmodules/newat.c +++ b/common/newmodules/newat.c @@ -11,8 +11,6 @@ */ -#include "config.h" - /* "Turn on" prototypes in n-at.h */ #define __n_at_c @@ -134,6 +132,7 @@ GSM_Information Nat_Information = { "at", /* Supported models in AT commands mode */ "", "", + "", 4, /* Max RF Level */ 0, /* Min RF Level */ GRF_Arbitrary, /* RF level units */ @@ -239,19 +238,29 @@ void Nat_ReplyGetID(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { fprintf(stdout, _(" Model: RAE-3\n")); #endif strcpy(Current_Model,"RAE-3"); - - } else { - while (MessageBuffer[i]!=0x0d && MessageBuffer[i]!=0x0a) { - Current_Model[i-10]=MessageBuffer[i]; - i++; - } - Current_Model[i-9]=0; - + CurrentMagicError=GE_NONE; + return; + } + if (strncmp("Nokia 6210",MessageBuffer+i,10)==0) { #ifdef DEBUG fprintf(stdout, _("Message: Mobile phone model identification received:\n")); - fprintf(stdout, _(" Model: %s\n"),Current_Model); + fprintf(stdout, _(" Model: NPE-3\n")); #endif + strcpy(Current_Model,"NPE-3"); + CurrentMagicError=GE_NONE; + return; + } + + while (MessageBuffer[i]!=0x0d && MessageBuffer[i]!=0x0a) { + Current_Model[i-10]=MessageBuffer[i]; + i++; } + Current_Model[i-9]=0; + +#ifdef DEBUG + fprintf(stdout, _("Message: Mobile phone model identification received:\n")); + fprintf(stdout, _(" Model: %s\n"),Current_Model); +#endif CurrentMagicError=GE_NONE; } @@ -279,7 +288,7 @@ void Nat_ReplyGetHW(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { for (i=12;i<17;i++) fprintf(stdout,_("%c"),MessageBuffer[i]); fprintf(stdout, _("\n")); /* Some Nokia phones like 9210 return only firmware */ - if (MessageLength>22) { + if (MessageLength>24) { fprintf(stdout, _(" Hardware: ")); for (i=21;i<25;i++) fprintf(stdout,_("%c"),MessageBuffer[i]); fprintf(stdout, _("\n")); @@ -292,7 +301,7 @@ void Nat_ReplyGetHW(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { Current_Revision[current++]=' '; Current_Revision[current++]='H'; Current_Revision[current++]='W'; - if (MessageLength>22) { + if (MessageLength>24) { for (i=21;i<25;i++) Current_Revision[current++]=MessageBuffer[i]; } else { /* Some Nokia phones like 9210 return only firmware */ @@ -375,16 +384,22 @@ GSM_Error Nat_Initialise(char *port_device, char *initlength, return GE_NOTSUPPORTED; } + + /* We try to escape AT+CMGS mode, at least Siemens M20 then needs to get some rest + */ +// WRITEPHONE(PortFD,"\x1B\r",2); +// usleep(500000); + usleep(100); if (Nat_SendManufacturerFrame()!=GE_NONE) return GE_TIMEOUT; if (Nat_SendIMEIFrame()!=GE_NONE) return GE_TIMEOUT; - if (Nat_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; - if (Nat_SendIDFrame()!=GE_NONE) return GE_TIMEOUT; + if (Nat_SendHWFrame()!=GE_NONE) return GE_TIMEOUT; + /* In AT doesn't have any init strings, etc. Phone answered with frame, so connection should be enabled ;-) */ CurrentLinkOK = true; @@ -403,6 +418,15 @@ GSM_Error Nat_GetManufacturer(char* manufacturer) return GE_NONE; } +void Nat_ReplyPBKSetMemoryTypeError(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: memory setting error\n")); +#endif + + CurrentPhonebookError=GE_UNKNOWN; +} + void Nat_ReplyPBKSetMemoryType(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { #ifdef DEBUG @@ -465,6 +489,16 @@ GSM_Error SetCharset() return error; } +void Nat_ReplyGetMemoryLocationError(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + +#ifdef DEBUG + fprintf(stdout, _("Message: phonebook entry receiving error\n")); +#endif + + CurrentPhonebookError=GE_UNKNOWN; +} + +/* FIXME: M20 can have " inside name. We can't get endpos by finding first " */ void Nat_ReplyGetMemoryLocation(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { char *pos, *endpos; @@ -554,7 +588,7 @@ GSM_Error Nat_WritePhonebookLocation(GSM_PhonebookEntry * entry) case GMT_ME: /* FIXME: the 7110, 6210... supports long phonebookentries. in lack of documentation we only support SIM memory */ - if(GetModelFeature (FN_PHONEBOOK)==F_PBK71) return GE_NOTIMPLEMENTED; + if(GetModelFeature (FN_PHONEBOOK)==F_PBK71INT) return GE_NOTIMPLEMENTED; break; default: @@ -615,6 +649,13 @@ void Nat_ReplyGetMemoryStatusCPBS(u16 MessageLength, u8 *MessageBuffer, u8 Messa } else CurrentMemoryStatusError=GE_UNKNOWN; } +void Nat_ReplyGetMemoryStatusCPBSError(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { +#ifdef DEBUG + fprintf(stdout, _("Message: memory status receiving error\n")); +#endif + CurrentMemoryStatusError=GE_UNKNOWN; +} + void Nat_ReplyGetMemoryStatusCPBR(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { char *start; @@ -730,6 +771,8 @@ void Nat_ReplyGetNetworkInfo(u16 MessageLength, u8 *MessageBuffer, u8 MessageTyp int i,current; GSM_NetworkInfo NullNetworkInfo; + if (!strncmp(MessageBuffer,"AT+CREG=",8)) return; + /* TODO: checking if phone really registered to network */ current=23; @@ -766,6 +809,26 @@ void Nat_ReplyGetNetworkInfo(u16 MessageLength, u8 *MessageBuffer, u8 MessageTyp CurrentNetworkInfoError = GE_NONE; } +void Nat_ReplyGetNetworkInfoCOPS(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { + /* Make sure we are expecting NetworkInfo frame */ + if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) { +#ifdef DEBUG + fprintf(stdout, _("Message: network info received\n")); +#endif + if (MessageBuffer[20]=='2') { + CurrentNetworkInfo->NetworkCode[0]=MessageBuffer[23]; + CurrentNetworkInfo->NetworkCode[1]=MessageBuffer[24]; + CurrentNetworkInfo->NetworkCode[2]=MessageBuffer[25]; + CurrentNetworkInfo->NetworkCode[3]=' '; + CurrentNetworkInfo->NetworkCode[4]=MessageBuffer[26]; + CurrentNetworkInfo->NetworkCode[5]=MessageBuffer[27]; + CurrentNetworkInfo->NetworkCode[6]=0; + + CurrentNetworkInfoError = GE_NONE; + } + } +} + GSM_Error Nat_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo) { GSM_Error error; @@ -776,6 +839,10 @@ GSM_Error Nat_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo) error=NULL_SendMessageSequence (20, &CurrentNetworkInfoError, 9, 0x00, "AT+CREG?\r"); + if (error!=GE_NONE) return error; + + error=NULL_SendMessageSequence + (20, &CurrentNetworkInfoError, 9, 0x00, "AT+COPS?\r"); CurrentNetworkInfo = NULL; @@ -907,10 +974,11 @@ GSM_Error Nat_PressKey(int key, int event) { char req[128]; - sprintf(req, "AT+CKPD=?\r"); + sprintf(req, "AT+CKPD=\"1\",\"20\"\r"); return NULL_SendMessageSequence (50, &CurrentPressKeyError, strlen(req), 0x00, req); +// return GE_NOTSUPPORTED; } GSM_Error Nat_DialVoice(char *Number) { @@ -1050,6 +1118,14 @@ void Nat_ReplySetDateTime(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) CurrentSetDateTimeError=GE_NONE; } +void Nat_ReplyDateTimeError(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { +#ifdef DEBUG + fprintf(stdout,_("Message: date & time functions error\n")); +#endif + CurrentSetDateTimeError=GE_UNKNOWN; + CurrentDateTimeError=GE_UNKNOWN; +} + GSM_Error Nat_SetDateTime(GSM_DateTime *date_time) { char req[128]; @@ -1109,35 +1185,45 @@ GSM_Error Nat_SetAlarm(int alarm_number, GSM_DateTime *date_time) (50, &CurrentSetAlarmError, strlen(req), 0x00, req); } +void Nat_ReplyAlarmError(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { +#ifdef DEBUG + fprintf(stdout,_("Message: alarm functions error\n")); +#endif + CurrentSetAlarmError=GE_UNKNOWN; + CurrentAlarmError=GE_UNKNOWN; +} + void Nat_ReplyGetSMSCenter(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { int i,start; unsigned char buffer[300]; start=18; +#ifdef DEBUG + fprintf(stdout, _("Message: SMSC data received\n")); +#endif + /* FIXME: support for all formats */ start+=ExtractOneParameter(MessageBuffer+start, buffer); for (i=1;iNumber,buffer); + if (buffer[0]==0) CurrentMessageCenterError=GE_EMPTYSMSC; + else { + strcpy(CurrentMessageCenter->Number,buffer); - /* Some default values. Is it possible to get them ? */ - CurrentMessageCenter->Name[0]=0; - CurrentMessageCenter->DefaultRecipient[0]=0; - CurrentMessageCenter->Format=GSMF_Text; - CurrentMessageCenter->Validity=GSMV_Max_Time; + /* Some default values. Is it possible to get them ? */ + CurrentMessageCenter->Name[0]=0; + CurrentMessageCenter->DefaultRecipient[0]=0; + CurrentMessageCenter->Format=GSMF_Text; + CurrentMessageCenter->Validity=GSMV_Max_Time; #ifdef DEBUG - fprintf(stdout, _("Message: SMSC number received\n Number: '%s'\n"),buffer); + fprintf(stdout, _(" Number: '%s'\n"),buffer); #endif - CurrentMessageCenterError=GE_NONE; + CurrentMessageCenterError=GE_NONE; + } } /* We only get SMSC number */ @@ -1227,6 +1313,7 @@ GSM_Error GSM_DecodeETSISMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int le SMS_MessageType PDU=SMS_Deliver; GSM_ETSISMSMessage ETSI; int i,current=0,current2=0; + GSM_Error error; for(i=0;iCoding) { + case GSM_Coding_Unicode: + case GSM_Coding_8bit: + return GE_NOTSUPPORTED; + default: + break; + } + } + + error=GSM_EncodeETSISMS(message, &ETSISMS, PDU, &length); + if (error!=GE_NONE) return error; sprintf(req4, "AT+CSMP=%i,%i,%i,%i\r", ETSISMS.firstbyte, ETSISMS.TPVP, @@ -1813,15 +1940,27 @@ GSM_Error Nat_GetSMSStatus(GSM_SMSStatus *Status) (10, &CurrentSMSStatusError, 13, 0x00, "AT+CPMS=\"SM\"\r"); } +struct AT_OneReply ATRepliesError[] = { + +{"AT+CALA" ,Nat_ReplyAlarmError }, +{"AT+CCLK" ,Nat_ReplyDateTimeError }, +{"AT+CMGR=" ,Nat_ReplyGetSMSMessageError }, +{"AT+CPBR=" ,Nat_ReplyGetMemoryLocationError }, +{"AT+CPBS?" ,Nat_ReplyGetMemoryStatusCPBSError}, +{"AT+CPBS=" ,Nat_ReplyPBKSetMemoryTypeError }, + +{"",NULL} +}; + struct AT_OneReply ATRepliesOK[] = { {"AT+CCFC=" ,Nat_ReplyCallDivert }, {"AT+CGMI\r",Nat_ReplyGetManufacturer }, {"AT+CPBS?" ,Nat_ReplyGetMemoryStatusCPBS }, +{"AT+CPBS=" ,Nat_ReplyPBKSetMemoryType }, {"AT+CPBR=?",Nat_ReplyGetMemoryStatusCPBR }, {"AT+CPBR=" ,Nat_ReplyGetMemoryLocation }, {"AT+CPBW=" ,Nat_ReplyWritePhonebookLocation}, -{"AT+CPBS=" ,Nat_ReplyPBKSetMemoryType }, {"AT+CSCS=\"HEX\"",Nat_ReplySetCharset }, {"AT+CSCS=\"GSM\"",Nat_ReplySetCharset }, {"AT+CSCA?" ,Nat_ReplyGetSMSCenter }, @@ -1841,7 +1980,8 @@ struct AT_OneReply ATRepliesOK[] = { {"AT+CALA?" ,Nat_ReplyGetAlarm }, {"AT+CGMM\r",Nat_ReplyGetID }, {"AT+CGMR\r",Nat_ReplyGetHW }, -{"AT+CREG?" ,Nat_ReplyGetNetworkInfo }, +{"AT+CREG" ,Nat_ReplyGetNetworkInfo }, +{"AT+COPS?" ,Nat_ReplyGetNetworkInfoCOPS }, {"AT+CGSN\r",Nat_ReplyGetIMEI }, {"AT+CHUP" ,Nat_ReplyCancelCall }, {"AT+CBC" ,Nat_ReplyGetBatteryLevel }, @@ -1867,6 +2007,7 @@ void Nat_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { AnswerError=false; if (strncmp("ERROR\r",MessageBuffer+(MessageLength-6),6)==0) AnswerError=true; + if (strncmp("+CMS ERROR: ",MessageBuffer+(MessageLength-16),12)==0) AnswerError=true; AnswerOK=false; if (strncmp("OK\r",MessageBuffer+(MessageLength-3),3)==0) AnswerOK=true; @@ -1887,34 +2028,23 @@ void Nat_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { if (ATRepliesOK[i].ReplyFunction==NULL) fprintf(stdout,_("Message: unknown AT command\n")); #endif - - if (strncmp("AT\r",MessageBuffer+start,3)==0) { -#ifdef DEBUG - fprintf(stdout, _("Message: used for setting DLR3 to FBUS - part 1 OK\n")); -#endif - CurrentGetHWError=GE_NONE; - } - if (strncmp("AT&F\r",MessageBuffer+start,5)==0) { -#ifdef DEBUG - fprintf(stdout, _("Message: used for setting DLR3 to FBUS - part 2 OK\n")); -#endif - CurrentGetHWError=GE_NONE; - } - if (strncmp("AT*NOKIAFBUS\r",MessageBuffer+start,13)==0) { -#ifdef DEBUG - fprintf(stdout, _("Message: Setting DLR3 to FBUS - part 3 OK\n")); -#endif - CurrentGetHWError=GE_NONE; - } } if (AnswerError) { - if (strncmp("AT*NOKIAFBUS\r",MessageBuffer+start,13)==0) { + i=0; + while (true) { + if (ATRepliesError[i].ReplyFunction==NULL) break; + if (strncmp(ATRepliesError[i].ReplyString,MessageBuffer+start, + strlen(ATRepliesError[i].ReplyString))==0) { + ATRepliesError[i].ReplyFunction(MessageLength-start,MessageBuffer+start,MessageType); + break; + } + i++; + } + #ifdef DEBUG - fprintf(stdout, _("Message: Setting DLR3 to FBUS - part 3 ERROR\n")); + if (ATRepliesError[i].ReplyFunction==NULL) + fprintf(stdout,_("Message: unknown error AT command\n")); #endif - - CurrentGetHWError=GE_INTERNALERROR; - } } } diff --git a/common/newmodules/sniff/sniff.c b/common/newmodules/sniff/sniff.c index 39e2138..59e7999 100644 --- a/common/newmodules/sniff/sniff.c +++ b/common/newmodules/sniff/sniff.c @@ -1,50 +1,48 @@ -/* - - G N O K I I - - A Linux/Unix toolset and driver for Nokia mobile phones. - - Released under the terms of the GNU GPL, see file COPYING for more details. - - This file provides an API for accessing functions on the sniff and similar - phones. - -*/ - -#include "config.h" - -/* "Turn on" prototypes in n-sniff.h */ - -#define __n_sniff_c - -/* System header files */ -#include -#include -#include - -#ifndef WIN32 - - #include "devices/device.h" - -#endif - -/* Various header file */ -#ifndef VC6 - #include "config.h" -#endif -#include "misc.h" -#include "gsm-api.h" -#include "gsm-common.h" -#include "files/cfgreader.h" -#include "newmodules/sniff/sniff.h" -#include "newmodules/n6110.h" -#include "newmodules/n7110.h" -#include "gsm-networks.h" - -/* Global variables used by code in gsm-api.c to expose the functions - supported by this model of phone. */ - - +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions on the sniff and similar + phones. + +*/ + +/* "Turn on" prototypes in n-sniff.h */ + +#define __n_sniff_c + +/* System header files */ +#include +#include +#include + +#ifndef WIN32 + + #include "devices/device.h" + +#endif + +/* Various header file */ +#ifndef VC6 + #include "config.h" +#endif +#include "misc.h" +#include "gsm-api.h" +#include "gsm-common.h" +#include "files/cfgreader.h" +#include "newmodules/sniff/sniff.h" +#include "newmodules/n6110.h" +#include "newmodules/n7110.h" +#include "gsm-networks.h" + +/* Global variables used by code in gsm-api.c to expose the functions + supported by this model of phone. */ + + static char *realmodel; /* Model from .gnokiirc file. */ static char *Port; /* Port from .gnokiirc file */ static char *Initlength; /* Init length from .gnokiirc file */ @@ -53,76 +51,76 @@ static char *SynchronizeTime; /* If we set date and time from computer to phone static char *BinDir; /* Binaries directory from .gnokiirc file - not used here yet */ static GSM_ConnectionType connectiontype; - - - - - - -/* Here we initialise model specific functions. */ - -GSM_Functions Nsniff_Functions = { - Nsniff_Initialise, - Nsniff_DispatchMessage, - NULL_Terminate, - NULL_KeepAlive, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, - NOTSUPPORTED, NOTSUPPORTED, + + + + + + +/* Here we initialise model specific functions. */ + +GSM_Functions Nsniff_Functions = { + Nsniff_Initialise, + Nsniff_DispatchMessage, + NULL_Terminate, + NULL_KeepAlive, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, + NOTSUPPORTED, NOTSUPPORTED, NOTSUPPORTED, NOTSUPPORTED, NOTSUPPORTED, @@ -132,87 +130,88 @@ GSM_Functions Nsniff_Functions = { NOTSUPPORTED, NOTSUPPORTED, NOTSUPPORTED -}; - - - -/* for all these Phones we support sniff */ - -GSM_Information Nsniff_Information = { - "3210sniff|3310sniff|3330sniff|5110sniff|5130sniff|5190sniff|6110sniff|6130sniff|6150sniff|6190sniff|8210sniff|8850sniff|6210sniff|6250sniff|7110sniff", - /* Supported models in FBUS */ - "3210sniff|3310sniff|3330sniff|5110sniff|5130sniff|5190sniff|6110sniff|6130sniff|6150sniff|6190sniff|8210sniff|8850sniff|6210sniff|6250sniff|7110sniff", - /* Supported models in MBUS */ - "", - /* Supported models in FBUS over infrared */ - "", - /* Supported models in FBUS over DLR3 */ +}; + + + +/* for all these Phones we support sniff */ + +GSM_Information Nsniff_Information = { + "3210sniff|3310sniff|3330sniff|5110sniff|5130sniff|5190sniff|6110sniff|6130sniff|6150sniff|6190sniff|8210sniff|8850sniff|6210sniff|6250sniff|7110sniff", + /* Supported models in FBUS */ + "3210sniff|3310sniff|3330sniff|5110sniff|5130sniff|5190sniff|6110sniff|6130sniff|6150sniff|6190sniff|8210sniff|8850sniff|6210sniff|6250sniff|7110sniff", + /* Supported models in MBUS */ + "", + /* Supported models in FBUS over infrared */ + "", + /* Supported models in FBUS over DLR3 */ "", "6210decode|6250decode|7110decode", /* Supported models in FBUS over Irda sockets */ "", - 4, /* Max RF Level */ - 0, /* Min RF Level */ - GRF_Arbitrary, /* RF level units */ - 4, /* Max Battery Level */ - 0, /* Min Battery Level */ - GBU_Arbitrary, /* Battery level units */ - GDT_None, /* No date/time support */ - GDT_None, /* No alarm support */ - 0 /* Max alarms = 0 */ -}; - -/* Initialise variables and state machine. */ -GSM_Error Nsniff_Initialise(char *port_device, char *initlength, - GSM_ConnectionType connection, - void (*rlp_callback)(RLP_F96Frame *frame)) -{ - - GSM_PhonebookEntry phonebook; - GSM_SpeedDial speed; - GSM_SMSMessage sms; - GSM_MemoryStatus status; - GSM_NetworkInfo netinfo; - GSM_SMSStatus smsstatus; + "", + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_None, /* No date/time support */ + GDT_None, /* No alarm support */ + 0 /* Max alarms = 0 */ +}; + +/* Initialise variables and state machine. */ +GSM_Error Nsniff_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + + GSM_PhonebookEntry phonebook; + GSM_SpeedDial speed; + GSM_SMSMessage sms; + GSM_MemoryStatus status; + GSM_NetworkInfo netinfo; + GSM_SMSStatus smsstatus; GSM_SMSFolders folders; - GSM_MessageCenter smsc; - int secstatus; - GSM_SecurityCode seccode; - GSM_DateTime date; - GSM_DateTime alarm; - GSM_CalendarNote note; - char netmon; - GSM_Bitmap logo; - GSM_Profile profile; - GSM_CBMessage cb; - GSM_Network netname; + GSM_MessageCenter smsc; + int secstatus; + GSM_SecurityCode seccode; + GSM_DateTime date; + GSM_DateTime alarm; + GSM_CalendarNote note; + char netmon; + GSM_Bitmap logo; + GSM_Profile profile; + GSM_CBMessage cb; + GSM_Network netname; GSM_BinRingtone binring; - GSM_AllSimlocks siml; if (Protocol->Initialise(port_device,initlength,connection,rlp_callback)!=GE_NONE) - { - return GE_NOTSUPPORTED; - } - - CurrentLinkOK = true; - - CurrentPhonebookEntry=&phonebook; - CurrentSpeedDialEntry=&speed; - CurrentSMSMessage=&sms; - CurrentMemoryStatus=&status; - CurrentNetworkInfo=&netinfo; - CurrentSMSStatus=&smsstatus; + GSM_AllSimlocks siml; if (Protocol->Initialise(port_device,initlength,connection,rlp_callback)!=GE_NONE) + { + return GE_NOTSUPPORTED; + } + + CurrentLinkOK = true; + + CurrentPhonebookEntry=&phonebook; + CurrentSpeedDialEntry=&speed; + CurrentSMSMessage=&sms; + CurrentMemoryStatus=&status; + CurrentNetworkInfo=&netinfo; + CurrentSMSStatus=&smsstatus; CurrentSMSFolders=&folders; - CurrentMessageCenter=&smsc; - CurrentSecurityCodeStatus=&secstatus; - CurrentSecurityCode=&seccode; - CurrentDateTime=&date; - CurrentAlarm=&alarm; - CurrentCalendarNote=¬e; - CurrentNetmonitor=&netmon; - CurrentGetBitmap=&logo; - CurrentProfile=&profile; - CurrentCBMessage=&cb; - CurrentGetOperatorNameNetwork=&netname; + CurrentMessageCenter=&smsc; + CurrentSecurityCodeStatus=&secstatus; + CurrentSecurityCode=&seccode; + CurrentDateTime=&date; + CurrentAlarm=&alarm; + CurrentCalendarNote=¬e; + CurrentNetmonitor=&netmon; + CurrentGetBitmap=&logo; + CurrentProfile=&profile; + CurrentCBMessage=&cb; + CurrentGetOperatorNameNetwork=&netname; CurrentGetBinRingtone=&binring; - CurrentSimLock=⪝ + CurrentSimLock=⪝ /* Read config file, once again to get real model */ if (CFG_ReadConfig(&realmodel, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,false) < 0) { @@ -220,9 +219,9 @@ GSM_Error Nsniff_Initialise(char *port_device, char *initlength, } connectiontype = GetConnectionTypeFromString(Connection); - return (GE_NONE); -} - + return (GE_NONE); +} + void Nsniff_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType) { diff --git a/common/protocol/at.c b/common/protocol/at.c index 8a6ce21..6afbb18 100644 --- a/common/protocol/at.c +++ b/common/protocol/at.c @@ -10,8 +10,6 @@ */ -#include "config.h" - /* "Turn on" prototypes in AT.h */ #define __AT_c @@ -44,7 +42,7 @@ GSM_Protocol AT_Functions = { /* Local variables */ u16 BufferCount; -static u16 MessageLength; +u16 MessageLength; u8 MessageBuffer[AT_MAX_RECEIVE_LENGTH * 6]; diff --git a/common/protocol/fbus.c b/common/protocol/fbus.c index af7eaac..e58d0c1 100644 --- a/common/protocol/fbus.c +++ b/common/protocol/fbus.c @@ -10,8 +10,6 @@ */ -#include "config.h" - /* "Turn on" prototypes in fbus.h */ #define __fbus_c @@ -33,20 +31,9 @@ #include "protocol/fbus.h" #include "protocol/at.h" #include "newmodules/newat.h" -#ifndef UCLINUX #include "newmodules/n6110.h" -#endif /* UCLINUX */ #include "misc.h" -static GSM_Error FBUS_Initialise(char *port_device, char *initlength, - GSM_ConnectionType connection, - void (*rlp_callback)(RLP_F96Frame *frame)); - -static int FBUS_SendMessage(u16 message_length, u8 message_type, u8 *buffer); -static int FBUS_SendFrame(u16 message_length, u8 message_type, u8 *buffer); -static void FBUS_Terminate(void); -static void FBUS_RX_StateMachine(unsigned char rx_byte); - GSM_Protocol FBUS_Functions = { FBUS_Initialise, FBUS_SendMessage, @@ -57,24 +44,24 @@ GSM_Protocol FBUS_Functions = { }; /* Local variables */ -static enum FBUS_RX_States RX_State; +enum FBUS_RX_States RX_State; -static u8 MessageDestination, MessageSource; +u8 MessageDestination, MessageSource; -static u16 BufferCount; +u16 BufferCount, MultiBufferCount; -static u16 MessageLength, MultiMessageLength; +u16 MessageLength, MultiMessageLength; -static bool RX_Multiple = false; +bool RX_Multiple = false; -static u8 MessageType,MultiMessageType; +u8 MessageType,MultiMessageType; -static u8 MessageBuffer[FBUS_MAX_RECEIVE_LENGTH * 6],MultiMessageBuffer[FBUS_MAX_RECEIVE_LENGTH * 6]; +u8 MessageBuffer[FBUS_MAX_RECEIVE_LENGTH * 6],MultiMessageBuffer[FBUS_MAX_RECEIVE_LENGTH * 6]; -static u8 RequestSequenceNumber = 0x00; +u8 RequestSequenceNumber = 0x00; #ifdef DEBUG -static char *N61_PrintDevice(int Device) +char *N61_PrintDevice(int Device) { switch (Device) { @@ -88,7 +75,7 @@ static char *N61_PrintDevice(int Device) /* N61_RX_DisplayMessage is called when a message we don't know about is received so that the user can see what is going back and forth, and perhaps shed some more light/explain another message type! */ -static void N61_RX_DisplayMessage() +void N61_RX_DisplayMessage() { #ifdef DEBUG fprintf(stdout, _("Msg Dest: %s\n"), N61_PrintDevice(MessageDestination)); @@ -161,10 +148,6 @@ int FBUS_SendFrame(u16 message_length, u8 message_type, u8 *buffer) { NULL_TX_DisplayMessage(current, out_buffer); #endif /* DEBUG */ -#if 0 -usleep(200000); -#endif - /* Send it out... */ if (!NULL_WritePhone(current,out_buffer)) return (false); @@ -220,7 +203,7 @@ int FBUS_SendMessage(u16 message_length, u8 message_type, u8 *buffer) { return (true); } -static int FBUS_SendAck(u8 message_type, u8 message_seq) { +int FBUS_SendAck(u8 message_type, u8 message_seq) { unsigned char request[6]; @@ -256,18 +239,6 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { int i=0; -// if (CurrentConnectionType==GCT_DLR3) { -// AT_RX_StateMachine(rx_byte); -// } else { - -#ifdef XDEBUG_LaceDisabled - if (isprint(rx_byte)) - fprintf(stdout, "[%02x%c]", rx_byte, rx_byte); - else - fprintf(stdout, "[%02x ]", rx_byte); - fflush(stdout); -#endif - #ifdef DEBUG /* For model sniff only display received bytes */ if (strcmp(GSM_Info->FBUSModels, "sniff")) @@ -301,8 +272,8 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { case FBUS_RX_Sync: if ((CurrentConnectionType==GCT_FBUS && rx_byte == FBUS_FRAME_ID) || - 0/*((CurrentConnectionType==GCT_Infrared || - CurrentConnectionType==GCT_Tekram) && rx_byte == FBUS_IR_FRAME_ID)*/) { + ((CurrentConnectionType==GCT_Infrared || + CurrentConnectionType==GCT_Tekram) && rx_byte == FBUS_IR_FRAME_ID)) { BufferCount = 0; @@ -531,22 +502,15 @@ void FBUS_RX_StateMachine(unsigned char rx_byte) { } #endif - -// } } /* Called by initialisation code to open comm port in asynchronous mode. */ -static bool FBUS_OpenSerial(void) +bool FBUS_OpenSerial(void) { /* Uncomment, if want to test first method for DLR3 */ -// unsigned char req[3] = {"AT\r"}; -// unsigned char req2[5] = {"AT&F\r"}; -// unsigned char req3[13] = {"AT*NOKIAFBUS\r"}; - -// GSM_Error error; - -// GSM_Information *GSMINFOCOPY; -// GSM_Functions *GSMCOPY; + unsigned char req[3] = {"AT\r"}; + unsigned char req2[5] = {"AT&F\r"}; + unsigned char req3[13] = {"AT*NOKIAFBUS\r"}; switch (CurrentConnectionType) { case GCT_FBUS: @@ -572,7 +536,6 @@ static bool FBUS_OpenSerial(void) device_setdtrrts(1, 0); break; -#ifndef UCLINUX case GCT_DLR3: #ifdef DEBUG @@ -581,66 +544,33 @@ static bool FBUS_OpenSerial(void) /* There are 2 ways to init DLR in FBUS: Here is first described by Reuben Harris [reuben.harris@snowvalley.com] and used in Logo Manager, - 1. Firstly set the connection baud to 19200, DTR off, RTS off, - Parity on, one stop bit, - 2. Send "AT\r\n". The response should be "AT\r\n\r\nOK\r\n". - 3. Send "AT&F\r\n". The response should be "AT&F\r\n\r\nOK\r\n". - 4. Send "AT*NOKIAFBUS\r\n". The response should be - "AT*NOKIAFBUS\r\n\r\nOK\r\n". - 5. Set speed to 115200 - - This is one should be used by us, because seems to be compatible with more - phones. But we make something wrong and often phones don't want to start transmision */ + 1. Firstly set the connection baud to 19200, DTR off, RTS off, + Parity on, one stop bit, + 2. Send "AT\r\n". The response should be "AT\r\n\r\nOK\r\n". + 3. Send "AT&F\r\n". The response should be "AT&F\r\n\r\nOK\r\n". + 4. Send "AT*NOKIAFBUS\r\n". The response should be + "AT*NOKIAFBUS\r\n\r\nOK\r\n". + 5. Set speed to 115200 + This seems to be compatible with more phones*/ - /* Uncomment and test if want */ -// device_changespeed(19200); + device_changespeed(19200); /*leave RTS low, DTR low for duration of session.*/ -// device_setdtrrts(0, 0); - - /* Making copy of pointers */ -// GSMCOPY = GSM; -// GSMINFOCOPY =GSM_Info; - - /* Set pointers to relevant addresses - new "AT" module here is required */ -// GSM = &Nat_Functions; -// GSM_Info = &Nat_Information; - - /* Note: We change Protocol inside function pointed by it. - That's why in FBUS_RX_StateMachine we must check it (changing - Protocol is not enough), This is for correct work and be sure... */ -// Protocol = &AT_Functions; - -// error=N6110_SendMessageSequence (50, &CurrentGetHWError, 3, 0x00, req); -// if (error!=GE_NONE) return false; - -// error=N6110_SendMessageSequence (50, &CurrentGetHWError, 5, 0x00, req2); -// if (error!=GE_NONE) return false; - -// error=N6110_SendMessageSequence (50, &CurrentGetHWError, 13, 0x00, req3); -// if (error!=GE_NONE) return false; - - /* Returning to old protocol */ -// Protocol = &FBUS_Functions; - - /* Returning to old module */ -// GSM = GSMCOPY; -// GSM_Info = GSMINFOCOPY; - -// device_changespeed(115200); - - /* Second method for DLR3: - Used by some 7110 soft, but not compatible with some other - phones supporting DLR3 - 7160, NCP2.0 - Used in this moment in mygnokii - */ + device_setdtrrts(0, 0); + + Protocol->WritePhone (3,req );usleep(300); + Protocol->WritePhone (5,req2);usleep(300); + Protocol->WritePhone(13,req3);usleep(300); device_changespeed(115200); - /*leave RTS low, DTR low for duration of session.*/ - device_setdtrrts(0, 0); - - usleep(100000); +// /* Second method for DLR3: +// Used by some 7110 soft, but not compatible with some other +// phones supporting DLR3 - 7160, NCP2.0*/ +// device_changespeed(115200); +// /*leave RTS low, DTR low for duration of session.*/ +// device_setdtrrts(0, 0); +// usleep(100000); CurrentConnectionType=GCT_FBUS; @@ -653,7 +583,6 @@ static bool FBUS_OpenSerial(void) /* It's more complicated and not done here */ break; -#endif /* UCLINUX */ default: #ifdef DEBUG fprintf(stdout,_("Wrong connection type for fbus module. Inform marcin-wiacek@topnet.pl about it\n")); @@ -665,7 +594,7 @@ static bool FBUS_OpenSerial(void) } /* Initialise variables and state machine. */ -static GSM_Error FBUS_Initialise(char *port_device, char *initlength, +GSM_Error FBUS_Initialise(char *port_device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame)) { diff --git a/common/protocol/fbusirda.c b/common/protocol/fbusirda.c index d2180af..b84ae9d 100644 --- a/common/protocol/fbusirda.c +++ b/common/protocol/fbusirda.c @@ -10,8 +10,6 @@ */ -#include "config.h" - /* "Turn on" prototypes in fbusirda.h */ #define __fbusirda_c diff --git a/common/protocol/mbus.c b/common/protocol/mbus.c index a81cd4d..48b4562 100644 --- a/common/protocol/mbus.c +++ b/common/protocol/mbus.c @@ -10,8 +10,6 @@ */ -#include "config.h" - /* "Turn on" prototypes in MBUS.h */ #define __MBUS_c @@ -218,7 +216,7 @@ void MBUS_RX_StateMachine(unsigned char rx_byte) { #endif #ifdef DEBUG - if (strcmp(GSM_Info->MBUSModels, "sniff")) + if (strcmp(GSM_Info->MBUSModels, "mbussniff")) { #endif @@ -384,7 +382,7 @@ void MBUS_RX_StateMachine(unsigned char rx_byte) { } else { #ifdef DEBUG - if (strstr(GSM_Info->MBUSModels, "6110sniff") != NULL) { + if (strstr(GSM_Info->MBUSModels, "sniff") != NULL) { fprintf(stdout, _("PC: ")); fprintf(stdout, "%02x:", MBUS_FRAME_ID); diff --git a/configure b/configure new file mode 100755 index 0000000..54b4344 --- /dev/null +++ b/configure @@ -0,0 +1,6379 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by Autoconf 2.52. +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Name of the executable. +as_me=`echo "$0" |sed 's,.*[\\/],,'` + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +# NLS nuisances. +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +cross_compiling=no +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +ac_unique_file="gnokii/gnokii.c" +ac_default_prefix="/usr/local" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/lib' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='/var/lib' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/share/info' +mandir='${prefix}/man' + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: should be removed in autoconf 3.0. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat < if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +EOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue + cd $ac_subdir + # A "../" for each directory in /$ac_subdir. + ac_dots=`echo $ac_subdir | + sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` + + case $srcdir in + .) # No --srcdir option. We are building in place. + ac_sub_srcdir=$srcdir ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_sub_srcdir=$srcdir/$ac_subdir ;; + *) # Relative path. + ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;; + esac + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_sub_srcdir/configure.gnu; then + echo + $SHELL $ac_sub_srcdir/configure.gnu --help=recursive + elif test -f $ac_sub_srcdir/configure; then + echo + $SHELL $ac_sub_srcdir/configure --help=recursive + elif test -f $ac_sub_srcdir/configure.ac || + test -f $ac_sub_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\EOF +configure +generated by GNU Autoconf 2.52 + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +EOF + exit 0 +fi +exec 5>config.log +cat >&5 </dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +PATH = $PATH + +_ASUNAME +} >&5 + +cat >&5 <\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + ac_sep=" " ;; + *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" + ac_sep=" " ;; + esac + # Get rid of the leading space. +done + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + echo >&5 + echo "## ----------------- ##" >&5 + echo "## Cache variables. ##" >&5 + echo "## ----------------- ##" >&5 + echo >&5 + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} >&5 + sed "/^$/d" confdefs.h >conftest.log + if test -s conftest.log; then + echo >&5 + echo "## ------------ ##" >&5 + echo "## confdefs.h. ##" >&5 + echo "## ------------ ##" >&5 + echo >&5 + cat conftest.log >&5 + fi + (echo; echo) >&5 + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" >&5 + echo "$as_me: exit $exit_status" >&5 + rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:888: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + cat "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:899: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:907: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:923: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:927: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:933: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:935: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:937: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. It doesn't matter if + # we pass some twice (in addition to the command line arguments). + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" + ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:956: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:958: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac +echo "#! $SHELL" >conftest.sh +echo "exit 0" >>conftest.sh +chmod +x conftest.sh +if { (echo "$as_me:978: PATH=\".;.\"; conftest.sh") >&5 + (PATH=".;."; conftest.sh) 2>&5 + ac_status=$? + echo "$as_me:981: \$? = $ac_status" >&5 + (exit $ac_status); }; then + ac_path_separator=';' +else + ac_path_separator=: +fi +PATH_SEPARATOR="$ac_path_separator" +rm -f conftest.sh + +ac_aux_dir= +for ac_dir in config $srcdir/config; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:1007: error: cannot find install-sh or install.sh in config $srcdir/config" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in config $srcdir/config" >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:1017: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:1021: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:1030: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:1034: error: $ac_config_sub $ac_cv_build_alias failed." >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:1039: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +echo "$as_me:1046: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:1055: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:1060: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +echo "$as_me:1067: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:1076: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:1081: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +CFLAGS="-O2 -Wall" +ALL_LINGUAS="cs de et fi nl sk pl it" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:1106: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="${ac_tool_prefix}gcc" +echo "$as_me:1121: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1129: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1132: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:1141: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="gcc" +echo "$as_me:1156: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1164: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1167: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:1180: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="${ac_tool_prefix}cc" +echo "$as_me:1195: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1203: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1206: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:1215: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="cc" +echo "$as_me:1230: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1238: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1241: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:1254: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +fi +ac_cv_prog_CC="cc" +echo "$as_me:1274: found $ac_dir/$ac_word" >&5 +break +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" ${1+"$@"} + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1296: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1299: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:1310: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_CC="$ac_tool_prefix$ac_prog" +echo "$as_me:1325: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1333: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1336: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:1349: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_ac_ct_CC="$ac_prog" +echo "$as_me:1364: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1372: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1375: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + +test -z "$CC" && { { echo "$as_me:1387: error: no acceptable cc found in \$PATH" >&5 +echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:1392:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:1395: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:1398: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1400: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:1403: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1405: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:1408: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line 1412 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:1428: checking for C compiler default output" >&5 +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:1431: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:1434: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. +for ac_file in `ls a.exe conftest.exe 2>/dev/null; + ls a.out conftest 2>/dev/null; + ls a.* conftest.* 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + a.out ) # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool --akim. + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:1457: error: C compiler cannot create executables" >&5 +echo "$as_me: error: C compiler cannot create executables" >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:1463: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:1468: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:1474: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1477: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:1484: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:1492: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:1499: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:1501: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:1504: checking for executable suffix" >&5 +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 +if { (eval echo "$as_me:1506: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:1509: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:1525: error: cannot compute EXEEXT: cannot compile and link" >&5 +echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:1531: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:1537: checking for object suffix" >&5 +echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1543 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:1555: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1558: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:1570: error: cannot compute OBJEXT: cannot compile" >&5 +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:1577: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:1581: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1587 "configure" +#include "confdefs.h" + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1602: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1605: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1608: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1611: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_compiler_gnu=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:1623: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:1629: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 1635 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1647: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1650: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1653: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1656: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_prog_cc_g=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:1666: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1693: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1696: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1699: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1702: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + ''\ + '#include ' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +#line 1714 "configure" +#include "confdefs.h" +#include +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1727: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1730: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1733: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1736: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +continue +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line 1746 "configure" +#include "confdefs.h" +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1758: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1761: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1764: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1767: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:1799: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line 1820 "configure" +#include "confdefs.h" +#include + Syntax error +_ACEOF +if { (eval echo "$as_me:1825: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1831: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line 1854 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:1858: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1864: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:1901: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line 1911 "configure" +#include "confdefs.h" +#include + Syntax error +_ACEOF +if { (eval echo "$as_me:1916: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1922: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line 1945 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:1949: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:1955: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:1983: error: C preprocessor \"$CPP\" fails sanity check" >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +for ac_prog in flex lex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:1998: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_LEX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_LEX="$ac_prog" +echo "$as_me:2013: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +LEX=$ac_cv_prog_LEX +if test -n "$LEX"; then + echo "$as_me:2021: result: $LEX" >&5 +echo "${ECHO_T}$LEX" >&6 +else + echo "$as_me:2024: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$LEX" && break +done +test -n "$LEX" || LEX=":" + +if test -z "$LEXLIB" +then + echo "$as_me:2034: checking for yywrap in -lfl" >&5 +echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 +if test "${ac_cv_lib_fl_yywrap+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 2042 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yywrap (); +int +main () +{ +yywrap (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2061: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2064: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2067: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2070: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_fl_yywrap=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_fl_yywrap=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:2081: result: $ac_cv_lib_fl_yywrap" >&5 +echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 +if test $ac_cv_lib_fl_yywrap = yes; then + LEXLIB="-lfl" +else + echo "$as_me:2086: checking for yywrap in -ll" >&5 +echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 +if test "${ac_cv_lib_l_yywrap+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ll $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 2094 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yywrap (); +int +main () +{ +yywrap (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2113: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2116: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2119: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2122: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_l_yywrap=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_l_yywrap=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:2133: result: $ac_cv_lib_l_yywrap" >&5 +echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 +if test $ac_cv_lib_l_yywrap = yes; then + LEXLIB="-ll" +fi + +fi + +fi + +if test "x$LEX" != "x:"; then + echo "$as_me:2144: checking lex output file root" >&5 +echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 +if test "${ac_cv_prog_lex_root+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # The minimal lex program is just a single line: %%. But some broken lexes +# (Solaris, I think it was) want two %% lines, so accommodate them. +echo '%% +%%' | $LEX +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + { { echo "$as_me:2158: error: cannot find output from $LEX; giving up" >&5 +echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} + { (exit 1); exit 1; }; } +fi +fi +echo "$as_me:2163: result: $ac_cv_prog_lex_root" >&5 +echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +echo "$as_me:2167: checking whether yytext is a pointer" >&5 +echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 +if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # POSIX says lex can declare yytext either as a pointer or an array; the +# default is implementation-dependent. Figure out which it is, since +# not all implementations provide the %pointer and %array declarations. +ac_cv_prog_lex_yytext_pointer=no +echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c +ac_save_LIBS=$LIBS +LIBS="$LIBS $LEXLIB" +cat >conftest.$ac_ext <<_ACEOF +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2183: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2186: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2189: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2192: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_lex_yytext_pointer=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_save_LIBS +rm -f "${LEX_OUTPUT_ROOT}.c" + +fi +echo "$as_me:2204: result: $ac_cv_prog_lex_yytext_pointer" >&5 +echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 +if test $ac_cv_prog_lex_yytext_pointer = yes; then + +cat >>confdefs.h <<\EOF +#define YYTEXT_POINTER 1 +EOF + +fi + +fi +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +echo "$as_me:2217: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_RM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_RM="$ac_dir/$ac_word" + echo "$as_me:2234: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_RM" && ac_cv_path_RM="no" + ;; +esac +fi +RM=$ac_cv_path_RM + +if test -n "$RM"; then + echo "$as_me:2246: result: $RM" >&5 +echo "${ECHO_T}$RM" >&6 +else + echo "$as_me:2249: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +# Extract the first word of "find", so it can be a program name with args. +set dummy find; ac_word=$2 +echo "$as_me:2255: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_FIND+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_FIND="$ac_dir/$ac_word" + echo "$as_me:2272: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_FIND" && ac_cv_path_FIND="no" + ;; +esac +fi +FIND=$ac_cv_path_FIND + +if test -n "$FIND"; then + echo "$as_me:2284: result: $FIND" >&5 +echo "${ECHO_T}$FIND" >&6 +else + echo "$as_me:2287: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +for ac_prog in gmake make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:2295: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_MAKE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$MAKE"; then + ac_cv_prog_MAKE="$MAKE" # Let the user override the test. +else + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + $as_executable_p "$ac_dir/$ac_word" || continue +ac_cv_prog_MAKE="$ac_prog" +echo "$as_me:2310: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +MAKE=$ac_cv_prog_MAKE +if test -n "$MAKE"; then + echo "$as_me:2318: result: $MAKE" >&5 +echo "${ECHO_T}$MAKE" >&6 +else + echo "$as_me:2321: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$MAKE" && break +done + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:2340: checking for a BSD compatible install" >&5 +echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_IFS=$IFS; IFS=$ac_path_separator + for ac_dir in $PATH; do + IFS=$ac_save_IFS + # Account for people who put trailing slashes in PATH elements. + case $ac_dir/ in + / | ./ | .// | /cC/* \ + | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ + | /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if $as_executable_p "$ac_dir/$ac_prog"; then + if test $ac_prog = install && + grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:2389: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +test x"$prefix" = xNONE && prefix="$ac_default_prefix" + +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + CFLAGS="-g -Wall" + cat >>confdefs.h <<\EOF +#define DEBUG 1 +EOF + + debug="yes" +else + debug="no" + +fi; + +# Check whether --enable-xdebug or --disable-xdebug was given. +if test "${enable_xdebug+set}" = set; then + enableval="$enable_xdebug" + cat >>confdefs.h <<\EOF +#define XDEBUG 1 +EOF + + xdebug="yes" +else + xdebug="no" + +fi; + +# Check whether --enable-rlpdebug or --disable-rlpdebug was given. +if test "${enable_rlpdebug+set}" = set; then + enableval="$enable_rlpdebug" + cat >>confdefs.h <<\EOF +#define RLP_DEBUG 1 +EOF + + rlpdebug="yes" +else + rlpdebug="no" + +fi; + +LIBS="" +NLS_LIBS="" +NLS_CFLAGS="" + +# Check whether --with-libintl or --without-libintl was given. +if test "${with_libintl+set}" = set; then + withval="$with_libintl" + if test "x$withval" = "xyes"; then + { echo "$as_me:2450: WARNING: Usage is --with-libintl=DIR" >&5 +echo "$as_me: WARNING: Usage is --with-libintl=DIR" >&2;} + else + NLS_LIBS="-L$withval/lib" + NLS_CFLAGS="-I$withval/include" + fi + +fi; + +# Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes + +fi; + +if test "$USE_NLS" = "yes"; then + echo "$as_me:2469: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:2489: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:2493: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +for ac_header in locale.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:2501: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 2507 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:2511: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:2517: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:2536: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 2555 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2586: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2589: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2592: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2595: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:2605: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <conftest.$ac_ext <<_ACEOF +#line 2617 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:2621: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:2627: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL_H 1 +EOF + + echo "$as_me:2642: result: checking for libintl.h... yes" >&5 +echo "${ECHO_T}checking for libintl.h... yes" >&6 +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + { echo "$as_me:2647: WARNING: not found header file: libintl.h !!!" >&5 +echo "$as_me: WARNING: not found header file: libintl.h !!!" >&2;} + USE_NLS=no + +fi +rm -f conftest.err conftest.$ac_ext +fi + +if test "$USE_NLS" = "yes"; then + echo "$as_me:2656: checking for gettext" >&5 +echo $ECHO_N "checking for gettext... $ECHO_C" >&6 +if test "${ac_cv_func_gettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 2662 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gettext (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gettext (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gettext) || defined (__stub___gettext) +choke me +#else +f = gettext; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2693: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2696: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2699: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2702: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_gettext=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_gettext=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:2712: result: $ac_cv_func_gettext" >&5 +echo "${ECHO_T}$ac_cv_func_gettext" >&6 +if test $ac_cv_func_gettext = yes; then + cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL 1 +EOF + +else + echo "$as_me:2720: checking for gettext in -lintl" >&5 +echo $ECHO_N "checking for gettext in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_gettext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $NLS_LIBS + $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 2729 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gettext (); +int +main () +{ +gettext (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2748: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2751: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2754: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2757: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_gettext=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_intl_gettext=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:2768: result: $ac_cv_lib_intl_gettext" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_gettext" >&6 +if test $ac_cv_lib_intl_gettext = yes; then + NLS_LIBS="$NLS_LIBS -lintl" + cat >>confdefs.h <<\EOF +#define HAVE_LIBINTL 1 +EOF + +else + { echo "$as_me:2777: WARNING: not found library: intl !!!" >&5 +echo "$as_me: WARNING: not found library: intl !!!" >&2;} + USE_NLS=no +fi + +fi + +fi + +if test "$USE_NLS" = "yes"; then + + LOCALEDIR='${prefix}/share/locale' + +# Check whether --with-locale-dir or --without-locale-dir was given. +if test "${with_locale_dir+set}" = set; then + withval="$with_locale_dir" + if test x$withval = xyes; then + { echo "$as_me:2794: WARNING: Usage is: --with-locale-dir=basedir" >&5 +echo "$as_me: WARNING: Usage is: --with-locale-dir=basedir" >&2;} + else + if test x$withval = xno; then + { echo "$as_me:2798: WARNING: Usage is: --with-locale-dir=basedir" >&5 +echo "$as_me: WARNING: Usage is: --with-locale-dir=basedir" >&2;} + else + LOCALEDIR=$withval + fi + fi + +fi; + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:2809: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + echo "$as_me:2826: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="$MSGFMT" + ;; +esac +fi +MSGFMT=$ac_cv_path_MSGFMT + +if test -n "$MSGFMT"; then + echo "$as_me:2838: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:2841: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + if test -n "$MSGFMT"; then + +for ac_func in dcgettext +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:2850: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 2856 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:2887: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:2890: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:2893: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2896: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:2906: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + echo "$as_me:2935: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:2947: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:2950: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:2956: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $XGETTEXT in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + echo "$as_me:2973: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT="$XGETTEXT" + ;; +esac +fi +XGETTEXT=$ac_cv_path_XGETTEXT + +if test -n "$XGETTEXT"; then + echo "$as_me:2985: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:2988: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +echo "$as_me:2994: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGMERGE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MSGMERGE in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word" + echo "$as_me:3011: found $ac_dir/$ac_word" >&5 + break +fi +done + + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE="$MSGMERGE" + ;; +esac +fi +MSGMERGE=$ac_cv_path_MSGMERGE + +if test -n "$MSGMERGE"; then + echo "$as_me:3023: result: $MSGMERGE" >&5 +echo "${ECHO_T}$MSGMERGE" >&6 +else + echo "$as_me:3026: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + if test -n "$XGETTEXT"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + echo "$as_me:3034: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT="" + fi + fi + + if test -n "$XGETTEXT"; then + if $XGETTEXT --help > /dev/null 2> /dev/null; then + : ; + else + echo "$as_me:3044: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT="" + fi + fi + + if test -n "$MSGFMT"; then + if $MSGFMT < /dev/null 2> /dev/null; then + echo "$as_me:3052: result: found msgfmt program is not GNU msgfmt; NLS will not be installed" >&5 +echo "${ECHO_T}found msgfmt program is not GNU msgfmt; NLS will not be installed" >&6 + MSGFMT="" + fi + fi + + cat >conftest.$ac_ext <<_ACEOF +#line 3059 "configure" +#include "confdefs.h" + +int +main () +{ + extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3072: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3075: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3078: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3081: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + CATOBJEXT=.gmo + DATADIRNAME=share +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 + CATOBJEXT=.mo + DATADIRNAME=lib + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + INSTOBJEXT=.mo + fi + + if test -n "$ALL_LINGUAS"; then + for lang in $ALL_LINGUAS; do + CATALOGS="$CATALOGS $lang$CATOBJEXT" + done + fi + +fi + +if test x"$MSGFMT" = x; then + USE_NLS=no +fi + +if test x"$USE_NLS" = xyes; then + cat >>confdefs.h <<\EOF +#define USE_NLS 1 +EOF + +fi + +# Check whether --with-libpthread or --without-libpthread was given. +if test "${with_libpthread+set}" = set; then + withval="$with_libpthread" + if test x$withval = xyes + then + { echo "$as_me:3120: WARNING: Usage is: --with-libpthread=DIR" >&5 +echo "$as_me: WARNING: Usage is: --with-libpthread=DIR" >&2;} + else + PTHREAD_LIBS="-L$withval/lib/" + PTHREAD_CFLAGS="-I$withval/include/" + fi + +fi; + +PTHREAD_LIBS_SAVE="$PTHREAD_LIBS" +PTHREAD_LIBS=error +echo "$as_me:3131: checking for pthread_attr_init in -lpthread" >&5 +echo $ECHO_N "checking for pthread_attr_init in -lpthread... $ECHO_C" >&6 +if test "${ac_cv_lib_pthread_pthread_attr_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 3139 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char pthread_attr_init (); +int +main () +{ +pthread_attr_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3158: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3161: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3164: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3167: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_pthread_pthread_attr_init=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_pthread_pthread_attr_init=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:3178: result: $ac_cv_lib_pthread_pthread_attr_init" >&5 +echo "${ECHO_T}$ac_cv_lib_pthread_pthread_attr_init" >&6 +if test $ac_cv_lib_pthread_pthread_attr_init = yes; then + + PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT" + PTHREAD_LIBS="$PTHREAD_LIBS_SAVE -lpthread" +fi + +if test "x$PTHREAD_LIBS" = xerror; then + echo "$as_me:3187: checking for pthread_attr_init in -lc_r" >&5 +echo $ECHO_N "checking for pthread_attr_init in -lc_r... $ECHO_C" >&6 +if test "${ac_cv_lib_c_r_pthread_attr_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 3195 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char pthread_attr_init (); +int +main () +{ +pthread_attr_init (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3214: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3217: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3220: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3223: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_r_pthread_attr_init=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_c_r_pthread_attr_init=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:3234: result: $ac_cv_lib_c_r_pthread_attr_init" >&5 +echo "${ECHO_T}$ac_cv_lib_c_r_pthread_attr_init" >&6 +if test $ac_cv_lib_c_r_pthread_attr_init = yes; then + + PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE" + PTHREAD_LIBS="-pthread" +fi + +fi + +if test "x$PTHREAD_LIBS" = xerror; then + echo "$as_me:3245: checking for pthread_attr_init" >&5 +echo $ECHO_N "checking for pthread_attr_init... $ECHO_C" >&6 +if test "${ac_cv_func_pthread_attr_init+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 3251 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char pthread_attr_init (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char pthread_attr_init (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_pthread_attr_init) || defined (__stub___pthread_attr_init) +choke me +#else +f = pthread_attr_init; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3282: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3285: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3288: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3291: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_pthread_attr_init=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_pthread_attr_init=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:3301: result: $ac_cv_func_pthread_attr_init" >&5 +echo "${ECHO_T}$ac_cv_func_pthread_attr_init" >&6 +if test $ac_cv_func_pthread_attr_init = yes; then + PTHREAD_LIBS="" +else + { { echo "$as_me:3306: error: not found library: pthread !!!" >&5 +echo "$as_me: error: not found library: pthread !!!" >&2;} + { (exit 1); exit 1; }; } +fi + +fi + +echo "$as_me:3313: checking for tm_gmtoff in struct tm" >&5 +echo $ECHO_N "checking for tm_gmtoff in struct tm... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line 3316 "configure" +#include "confdefs.h" +#include +int +main () +{ +struct tm t; t.tm_gmtoff = 0 + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3328: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3331: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3334: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3337: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:3339: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + cat >>confdefs.h <<\EOF +#define HAVE_TM_GMTON 1 +EOF + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:3348: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +echo "$as_me:3353: checking for timersub" >&5 +echo $ECHO_N "checking for timersub... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line 3356 "configure" +#include "confdefs.h" +#include +int +main () +{ +timersub(NULL, NULL, NULL) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3368: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3371: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3374: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3377: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define HAVE_TIMEOPS 1 +EOF + + cat >>confdefs.h <<\EOF +#define HAVE_TIMEOPS 1 +EOF + + echo "$as_me:3387: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:3392: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +have_termios="no" +echo "$as_me:3398: checking for cfsetspeed in termios.h" >&5 +echo $ECHO_N "checking for cfsetspeed in termios.h... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line 3401 "configure" +#include "confdefs.h" +#include +int +main () +{ +struct termios t; cfsetspeed(&t, B9600); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3413: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3416: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3419: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3422: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define HAVE_CFSETSPEED 1 +EOF + + have_termios="yes" + echo "$as_me:3429: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:3434: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +if test $have_termios = "no"; then + echo "$as_me:3440: checking for cfsetispeed and cfsetospeed in termios.h" >&5 +echo $ECHO_N "checking for cfsetispeed and cfsetospeed in termios.h... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +#line 3443 "configure" +#include "confdefs.h" +#include +int +main () +{ +struct termios t; cfsetispeed(&t, B9600); cfsetospeed(&t, B9600); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3455: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3458: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3461: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3464: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define HAVE_CFSETISPEED 1 +EOF + + cat >>confdefs.h <<\EOF +#define HAVE_CFSETOSPEED 1 +EOF + + have_termios="yes" + echo "$as_me:3475: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:3480: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + + if test $have_termios = "no"; then + echo "$as_me:3486: checking for c_ispeed and c_ospeed in struct termios" >&5 +echo $ECHO_N "checking for c_ispeed and c_ospeed in struct termios... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +#line 3489 "configure" +#include "confdefs.h" +#include +int +main () +{ +struct termios t; t.c_iflag = B9600; t.c_oflag = B9600; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3501: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3504: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3507: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3510: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define HAVE_TERMIOS_CSPEED 1 +EOF + + echo "$as_me:3516: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +echo "$as_me:3521: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi +fi + +echo "$as_me:3528: checking for getopt.h" >&5 +echo $ECHO_N "checking for getopt.h... $ECHO_C" >&6 +if test "${ac_cv_header_getopt_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 3534 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:3538: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:3544: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_getopt_h=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_getopt_h=no +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:3563: result: $ac_cv_header_getopt_h" >&5 +echo "${ECHO_T}$ac_cv_header_getopt_h" >&6 +if test $ac_cv_header_getopt_h = yes; then + : +else + CFLAGS="$CFLAGS -I../getopt" +fi + +# Check whether --with-gnugetopt or --without-gnugetopt was given. +if test "${with_gnugetopt+set}" = set; then + withval="$with_gnugetopt" + if test x$withval=yes; then + { echo "$as_me:3575: WARNING: Usage is: --with-getopt=DIR" >&5 +echo "$as_me: WARNING: Usage is: --with-getopt=DIR" >&2;} + else + GETOPT_LIBS="-L$withval" + fi + +fi; + +OWN_GETOPT="" +echo "$as_me:3584: checking for getopt_long" >&5 +echo $ECHO_N "checking for getopt_long... $ECHO_C" >&6 +if test "${ac_cv_func_getopt_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 3590 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getopt_long (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getopt_long (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_getopt_long) || defined (__stub___getopt_long) +choke me +#else +f = getopt_long; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3621: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3624: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3627: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3630: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_getopt_long=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_getopt_long=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:3640: result: $ac_cv_func_getopt_long" >&5 +echo "${ECHO_T}$ac_cv_func_getopt_long" >&6 +if test $ac_cv_func_getopt_long = yes; then + : +else + + LIBS="$LIBS $GETOPT_LIBS" + echo "$as_me:3647: checking for getopt_long in -lgnugetopt" >&5 +echo $ECHO_N "checking for getopt_long in -lgnugetopt... $ECHO_C" >&6 +if test "${ac_cv_lib_gnugetopt_getopt_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgnugetopt $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 3655 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getopt_long (); +int +main () +{ +getopt_long (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3674: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3677: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3680: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3683: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_gnugetopt_getopt_long=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_gnugetopt_getopt_long=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:3694: result: $ac_cv_lib_gnugetopt_getopt_long" >&5 +echo "${ECHO_T}$ac_cv_lib_gnugetopt_getopt_long" >&6 +if test $ac_cv_lib_gnugetopt_getopt_long = yes; then + LIBS="$LIBS -lgnugetopt" +else + OWN_GETOPT="1" +fi + +fi + +if test "$no_x" = yes -o "$with_x" = "no"; then + x_support="no" + XPM_CFLAGS="" + XPM_LIBS="" + GTK_CFLAGS="" + GTK_LIBS="" +else + echo "$as_me:3711: checking for X" >&5 +echo $ECHO_N "checking for X... $ECHO_C" >&6 + +# Check whether --with-x or --without-x was given. +if test "${with_x+set}" = set; then + withval="$with_x" + +fi; +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + # Both variables are already set. + have_x=yes + else + if test "${ac_cv_have_x+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -fr conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + # Make sure to not put "make" in the Imakefile rules, since we grep it out. + cat >Imakefile <<'EOF' +acfindx: + @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' +EOF + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl; do + if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && + test -f $ac_im_libdir/libX11.$ac_extension; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -fr conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Intrinsic.h. + # First, try using that file with no special directory specified. + cat >conftest.$ac_ext <<_ACEOF +#line 3808 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:3812: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:3818: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # We can compile using X headers with no special include directory. +ac_x_includes= +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Intrinsic.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lXt $LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line 3851 "configure" +#include "confdefs.h" +#include +int +main () +{ +XtMalloc (0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:3863: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:3866: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:3869: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:3872: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +LIBS=$ac_save_LIBS +for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl; do + if test -r $ac_dir/libXt.$ac_extension; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then + # Didn't find X anywhere. Cache the known absence of X. + ac_cv_have_x="have_x=no" +else + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" +fi +fi + + fi + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + echo "$as_me:3910: result: $have_x" >&5 +echo "${ECHO_T}$have_x" >&6 + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + echo "$as_me:3920: result: libraries $x_libraries, headers $x_includes" >&5 +echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 +fi + + CPPFLAGS="$CPPFLAGS -I$x_includes" + +for ac_header in X11/xpm.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:3929: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 3935 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:3939: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:3945: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:3964: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <&5 +echo "$as_me: WARNING: Cannot find include X11/xpm.h" >&2;} + { echo "$as_me:3984: WARNING: Disabling xgnokii." >&5 +echo "$as_me: WARNING: Disabling xgnokii." >&2;} + elif test "x$x_libraries" = "xNONE"; then + x_support="no" + XPM_CFLAGS="" + XPM_LIBS="" + GTK_CFLAGS="" + GTK_LIBS="" + { echo "$as_me:3992: WARNING: Cannot find library libX11." >&5 +echo "$as_me: WARNING: Cannot find library libX11." >&2;} + { echo "$as_me:3994: WARNING: Disabling xgnokii." >&5 +echo "$as_me: WARNING: Disabling xgnokii." >&2;} + else + echo "$as_me:3997: checking for XpmWriteFileFromXpmImage in -lXpm" >&5 +echo $ECHO_N "checking for XpmWriteFileFromXpmImage in -lXpm... $ECHO_C" >&6 +if test "${ac_cv_lib_Xpm_XpmWriteFileFromXpmImage+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXpm -L$x_libraries -lX11 + $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 4006 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XpmWriteFileFromXpmImage (); +int +main () +{ +XpmWriteFileFromXpmImage (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4025: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4028: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4031: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4034: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xpm_XpmWriteFileFromXpmImage=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_Xpm_XpmWriteFileFromXpmImage=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:4045: result: $ac_cv_lib_Xpm_XpmWriteFileFromXpmImage" >&5 +echo "${ECHO_T}$ac_cv_lib_Xpm_XpmWriteFileFromXpmImage" >&6 +if test $ac_cv_lib_Xpm_XpmWriteFileFromXpmImage = yes; then + XPM_CFLAGS="-I$x_includes" XPM_LIBS="-L$x_libraries -lX11 -lXpm" + cat >>confdefs.h <<\EOF +#define XPM 1 +EOF + +else + { echo "$as_me:4054: WARNING: Cannot found library libXpm - disabling XPM support." >&5 +echo "$as_me: WARNING: Cannot found library libXpm - disabling XPM support." >&2;} +fi + + for ac_prog in gtk-config gtk12-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:4062: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GTK_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GTK_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. + ;; + *) + ac_save_IFS=$IFS; IFS=$ac_path_separator +ac_dummy="$PATH" +for ac_dir in $ac_dummy; do + IFS=$ac_save_IFS + test -z "$ac_dir" && ac_dir=. + if $as_executable_p "$ac_dir/$ac_word"; then + ac_cv_path_GTK_CONFIG="$ac_dir/$ac_word" + echo "$as_me:4079: found $ac_dir/$ac_word" >&5 + break +fi +done + + ;; +esac +fi +GTK_CONFIG=$ac_cv_path_GTK_CONFIG + +if test -n "$GTK_CONFIG"; then + echo "$as_me:4090: result: $GTK_CONFIG" >&5 +echo "${ECHO_T}$GTK_CONFIG" >&6 +else + echo "$as_me:4093: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$GTK_CONFIG" && break +done +test -n "$GTK_CONFIG" || GTK_CONFIG="no" + + if test "$GTK_CONFIG" = no; then + x_support="no" + GTK_CFLAGS="" + GTK_LIBS="" + { echo "$as_me:4105: WARNING: Cannot find gtk-config." >&5 +echo "$as_me: WARNING: Cannot find gtk-config." >&2;} + { echo "$as_me:4107: WARNING: Disabling xgnokii." >&5 +echo "$as_me: WARNING: Disabling xgnokii." >&2;} + else + GTK_CFLAGS=`$GTK_CONFIG --cflags` + GTK_LIBS=`$GTK_CONFIG --libs` + x_support="yes" + + XGNOKIIDIR='${prefix}/share' + XGNOKIIPATH=${prefix}/share + +# Check whether --with-xgnokiidir or --without-xgnokiidir was given. +if test "${with_xgnokiidir+set}" = set; then + withval="$with_xgnokiidir" + if test x$withval = xyes; then + { echo "$as_me:4121: WARNING: Usage is: --with-xgnokiilib=DIR" >&5 +echo "$as_me: WARNING: Usage is: --with-xgnokiilib=DIR" >&2;} + else + XGNOKIIDIR="$withval" + XGNOKIIPATH="$withval" + fi + +fi; + fi + fi +fi + +echo "$as_me:4133: checking for socket in -lsocket" >&5 +echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 +if test "${ac_cv_lib_socket_socket+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 4141 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char socket (); +int +main () +{ +socket (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4160: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4163: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4166: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4169: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_socket_socket=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_socket_socket=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:4180: result: $ac_cv_lib_socket_socket" >&5 +echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 +if test $ac_cv_lib_socket_socket = yes; then + cat >>confdefs.h <>confdefs.h <<\EOF +#define SECURITY 1 +EOF + + security="yes" +else + security="no" + +fi; + +# Check whether --enable-win32 or --disable-win32 was given. +if test "${enable_win32+set}" = set; then + enableval="$enable_win32" + cat >>confdefs.h <<\EOF +#define WIN32 1 +EOF + + win32="-DWIN32" +else + win32="" + +fi; + +echo "$as_me:4217: checking for grantpt" >&5 +echo $ECHO_N "checking for grantpt... $ECHO_C" >&6 +if test "${ac_cv_func_grantpt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4223 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char grantpt (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char grantpt (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_grantpt) || defined (__stub___grantpt) +choke me +#else +f = grantpt; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:4254: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4257: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:4260: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4263: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_grantpt=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_grantpt=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:4273: result: $ac_cv_func_grantpt" >&5 +echo "${ECHO_T}$ac_cv_func_grantpt" >&6 +if test $ac_cv_func_grantpt = yes; then + if test "$cross_compiling" = yes; then + { echo "$as_me:4277: WARNING: \"Ensure to disable unix98ptys when crosscompiling\"" >&5 +echo "$as_me: WARNING: \"Ensure to disable unix98ptys when crosscompiling\"" >&2;} +else + cat >conftest.$ac_ext <<_ACEOF +#line 4281 "configure" +#include "confdefs.h" + +#define _XOPEN_SOURCE 500 + +#include +#include +#include +#include +#include +#include + +int main() +{ + char *name = NULL; + int master, err; + + master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK); + if (master >= 0) { + err = grantpt(master); + err = err || unlockpt(master); + if (!err) { + name = ptsname(master); + } else { + exit(-1); + } + } else { + exit(-1); + } + close(master); + exit(0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:4316: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4319: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:4321: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4324: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cat >>confdefs.h <<\EOF +#define USE_UNIX98PTYS 1 +EOF + +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ echo "$as_me:4334: WARNING: \"No unix98ptys\"" >&5 +echo "$as_me: WARNING: \"No unix98ptys\"" >&2;} +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + +fi + +echo "$as_me:4342: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4348 "configure" +#include "confdefs.h" +#include +#include +#include +#include + +_ACEOF +if { (eval echo "$as_me:4356: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:4362: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 4384 "configure" +#include "confdefs.h" +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line 4402 "configure" +#include "confdefs.h" +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line 4423 "configure" +#include "confdefs.h" +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:4449: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:4452: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:4454: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4457: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_stdc=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:4470: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo "$as_me:4480: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 +if test "${ac_cv_header_sys_wait_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4486 "configure" +#include "confdefs.h" +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4508: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4511: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4514: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4517: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_sys_wait_h=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_sys_wait_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4527: result: $ac_cv_header_sys_wait_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 +if test $ac_cv_header_sys_wait_h = yes; then + +cat >>confdefs.h <<\EOF +#define HAVE_SYS_WAIT_H 1 +EOF + +fi + +for ac_header in fcntl.h sys/ioctl.h sys/time.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:4540: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4546 "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:4550: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:4556: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_ext +fi +echo "$as_me:4575: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +#line 4593 "configure" +#include "confdefs.h" +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:4642: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4645: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4648: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4651: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:4668: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:4671: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +echo "$as_me:4676: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4682 "configure" +#include "confdefs.h" + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4740: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4743: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4746: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4749: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_c_const=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4759: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\EOF +#define const +EOF + +fi + +echo "$as_me:4769: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +#line 4777 "configure" +#include "confdefs.h" +#ifndef __cplusplus +static $ac_kw int static_foo () {return 0; } +$ac_kw int foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4786: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4789: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4792: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4795: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_inline=$ac_kw; break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:4806: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 +case $ac_cv_c_inline in + inline | yes) ;; + no) +cat >>confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >>confdefs.h <&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4833 "configure" +#include "confdefs.h" +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4839: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4842: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4845: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4848: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4858: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <&5 +echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 +if test "${ac_cv_type_pid_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4874 "configure" +#include "confdefs.h" +$ac_includes_default +int +main () +{ +if ((pid_t *) 0) + return 0; +if (sizeof (pid_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4889: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4892: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4895: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4898: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_pid_t=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_pid_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4908: result: $ac_cv_type_pid_t" >&5 +echo "${ECHO_T}$ac_cv_type_pid_t" >&6 +if test $ac_cv_type_pid_t = yes; then + : +else + +cat >>confdefs.h <&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4926 "configure" +#include "confdefs.h" +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4941: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4944: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:4947: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:4950: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_size_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:4960: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <&5 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 +if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 4978 "configure" +#include "confdefs.h" +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:4994: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:4997: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5000: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5003: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_time=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_header_time=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:5013: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6 +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + +echo "$as_me:5023: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5029 "configure" +#include "confdefs.h" +#include +#include + +int +main () +{ +struct tm *tp; tp->tm_sec; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:5043: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:5046: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5049: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5052: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_struct_tm=sys/time.h +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:5062: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6 +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\EOF +#define TM_IN_SYS_TIME 1 +EOF + +fi + +if test $ac_cv_c_compiler_gnu = yes; then + echo "$as_me:5073: checking whether $CC needs -traditional" >&5 +echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 +if test "${ac_cv_prog_gcc_traditional+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_pattern="Autoconf.*'x'" + cat >conftest.$ac_ext <<_ACEOF +#line 5080 "configure" +#include "confdefs.h" +#include +Autoconf TIOCGETP +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +else + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + if test $ac_cv_prog_gcc_traditional = no; then + cat >conftest.$ac_ext <<_ACEOF +#line 5095 "configure" +#include "confdefs.h" +#include +Autoconf TCGETA +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi +echo "$as_me:5108: result: $ac_cv_prog_gcc_traditional" >&5 +echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + +echo "$as_me:5115: checking for working memcmp" >&5 +echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6 +if test "${ac_cv_func_memcmp_working+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_working=no +else + cat >conftest.$ac_ext <<_ACEOF +#line 5124 "configure" +#include "confdefs.h" + +int +main () +{ + + /* Some versions of memcmp are not 8-bit clean. */ + char c0 = 0x40, c1 = 0x80, c2 = 0x81; + if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) + exit (1); + + /* The Next x86 OpenStep bug shows up only when comparing 16 bytes + or more and with at least one buffer not starting on a 4-byte boundary. + William Lewis provided this test program. */ + { + char foo[21]; + char bar[21]; + int i; + for (i = 0; i < 4; i++) + { + char *a = foo + i; + char *b = bar + i; + strcpy (a, "--------01111111"); + strcpy (b, "--------10000000"); + if (memcmp (a, b, 16) >= 0) + exit (1); + } + exit (0); + } + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:5160: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5163: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:5165: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5168: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_memcmp_working=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_func_memcmp_working=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:5180: result: $ac_cv_func_memcmp_working" >&5 +echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6 +test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext" + +echo "$as_me:5184: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5190 "configure" +#include "confdefs.h" +#include +#include +#ifdef signal +# undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:5212: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:5215: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:5218: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5221: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_signal=void +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_type_signal=int +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:5231: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6 + +cat >>confdefs.h <&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5247 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5278: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5281: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5284: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5287: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:5297: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <&5 +echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_strftime+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line 5314 "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strftime (); +int +main () +{ +strftime (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5333: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5336: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5339: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5342: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_strftime=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_intl_strftime=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:5353: result: $ac_cv_lib_intl_strftime" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6 +if test $ac_cv_lib_intl_strftime = yes; then + cat >>confdefs.h <<\EOF +#define HAVE_STRFTIME 1 +EOF + +LIBS="-lintl $LIBS" +fi + +fi +done + +for ac_func in mktime select strdup strstr strtol strtok strsep snprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:5369: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line 5375 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:5406: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:5409: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:5412: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:5415: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:5425: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overriden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if cmp -s $cache_file confcache; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:5539: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +SHELL=\${CONFIG_SHELL-$SHELL} +ac_cs_invocation="\$0 \$@" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Name of the executable. +as_me=`echo "$0" |sed 's,.*[\\/],,'` + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +# NLS nuisances. +$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } +$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } +$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } +$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } +$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } +$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } +$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } +$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } + +exec 6>&1 + +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\EOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +EOF + +cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + shift + set dummy "$ac_option" "$ac_optarg" ${1+"$@"} + shift + ;; + -*);; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_need_defaults=false;; + esac + + case $1 in + # Handling of the options. +EOF +cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:5715: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + shift + CONFIG_FILES="$CONFIG_FILES $1" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + shift + CONFIG_HEADERS="$CONFIG_HEADERS $1" + ac_need_defaults=false;; + + # This is an error. + -*) { { echo "$as_me:5734: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +exec 5>>config.log +cat >&5 << _ACEOF + +## ----------------------- ## +## Running config.status. ## +## ----------------------- ## + +This file was extended by $as_me 2.52, executed with + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + > $ac_cs_invocation +on `(hostname || uname -n) 2>/dev/null | sed 1q` + +_ACEOF +EOF + +cat >>$CONFIG_STATUS <<\EOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "include/config.h.in" ) CONFIG_FILES="$CONFIG_FILES include/config.h.in" ;; + "Makefile.global" ) CONFIG_FILES="$CONFIG_FILES Makefile.global" ;; + "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "packaging/RedHat/gnokii.spec" ) CONFIG_FILES="$CONFIG_FILES packaging/RedHat/gnokii.spec" ;; + "packaging/Slackware/SlackBuild" ) CONFIG_FILES="$CONFIG_FILES packaging/Slackware/SlackBuild" ;; + "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; + *) { { echo "$as_me:5776: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/cs$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + +EOF + +cat >>$CONFIG_STATUS <\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@DEFS@,$DEFS,;t t +s,@LIBS@,$LIBS,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@CPP@,$CPP,;t t +s,@LEX@,$LEX,;t t +s,@LEXLIB@,$LEXLIB,;t t +s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t +s,@RM@,$RM,;t t +s,@FIND@,$FIND,;t t +s,@MAKE@,$MAKE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@HAVE_LOCALE_H@,$HAVE_LOCALE_H,;t t +s,@HAVE_LIBINTL_H@,$HAVE_LIBINTL_H,;t t +s,@HAVE_LIBINTL@,$HAVE_LIBINTL,;t t +s,@LOCALEDIR@,$LOCALEDIR,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@MSGMERGE@,$MSGMERGE,;t t +s,@CATALOGS@,$CATALOGS,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@GTK_CONFIG@,$GTK_CONFIG,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@XVERSION@,$XVERSION,;t t +s,@XPACKAGE@,$XPACKAGE,;t t +s,@XGNOKIIDIR@,$XGNOKIIDIR,;t t +s,@XGNOKIIPATH@,$XGNOKIIPATH,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t +s,@GTK_LIBS@,$GTK_LIBS,;t t +s,@PTHREAD_CFLAGS@,$PTHREAD_CFLAGS,;t t +s,@PTHREAD_LIBS@,$PTHREAD_LIBS,;t t +s,@XPM_CFLAGS@,$XPM_CFLAGS,;t t +s,@XPM_LIBS@,$XPM_LIBS,;t t +s,@OWN_GETOPT@,$OWN_GETOPT,;t t +s,@USE_UNIX98PTYS@,$USE_UNIX98PTYS,;t t +s,@HAVE_XGNOKII@,$HAVE_XGNOKII,;t t +CEOF + +EOF + + cat >>$CONFIG_STATUS <<\EOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +EOF +cat >>$CONFIG_STATUS <<\EOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || mkdir "$as_incr_dir" + ;; + esac +done; } + + ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` + else + ac_dir_suffix= ac_dots= + fi + + case $srcdir in + .) ac_srcdir=. + if test -z "$ac_dots"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_dots$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_dots$srcdir ;; + esac + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_dots$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:6032: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated automatically by config.status. */ + configure_input="Generated automatically from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:6050: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:6063: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +EOF +cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +EOF +cat >>$CONFIG_STATUS <<\EOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:6124: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:6135: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:6148: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +EOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\EOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +EOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\EOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +EOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # egrep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\EOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated automatically by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated automatically by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + { echo "$as_me:6265: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || mkdir "$as_incr_dir" + ;; + esac +done; } + + fi + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +EOF +cat >>$CONFIG_STATUS <<\EOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + + case $ac_dest in + default ) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + ;; + esac +done +EOF + +cat >>$CONFIG_STATUS <<\EOF + +{ (exit 0); exit 0; } +EOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + exec 5>/dev/null + $SHELL $CONFIG_STATUS || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +echo " + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999-2000 The Gnokii Development Team. + + 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. + + See file COPYING for more details. + + Host system: $host_os + Gnokii version: $VERSION + Xgnokii version: $XVERSION + X (GTK) support: $x_support + Debug: $debug + XDebug: $xdebug + RLPDebug: $rlpdebug + NLS: $USE_NLS + Security: $security + Win32: $win32 + Prefix: $prefix + + Type '${MAKE}' for compilation or '${MAKE} makelib' when want to compile + all binaries with one shared library + + After it '${MAKE} install', '${MAKE} install-suid', '${MAKE} install-strip' + or '${MAKE} install-ss' to install gnokii. +" diff --git a/configure.in b/configure.in index 827924e..87ea315 100644 --- a/configure.in +++ b/configure.in @@ -15,20 +15,13 @@ AC_CANONICAL_SYSTEM AC_PREFIX_DEFAULT("/usr/local") dnl ======================== Default setting -test -n "$CFLAGS" || export CFLAGS="-O2 -Wall" +CFLAGS="-O2 -Wall" ALL_LINGUAS="cs de et fi nl sk pl it" dnl ======================== Checks for programs. AC_PROG_CC -AC_LANG_C AC_PROG_CPP AC_PROG_LEX -if test -z "$AR";then - AC_PATH_PROG(AR, ar, no) -fi -if test -z "$AS";then - AC_PATH_PROG(AS, as, no) -fi AC_PATH_PROG(RM, rm, no) AC_PATH_PROG(FIND, find, no) AC_CHECK_PROGS(MAKE, gmake make) @@ -37,25 +30,9 @@ AC_PROG_INSTALL dnl Let us have $prefix variable aviable here test x"$prefix" = xNONE && prefix="$ac_default_prefix" -AC_ARG_WITH(cfg_model, - [ --with-cfg-model=5110 specifies the mobile phone model],, - [ with_cfg_model="5110" ]) -AC_DEFINE_UNQUOTED(CONFIG_CFG_MODEL, "$with_cfg_model") -AC_ARG_WITH(cfg_port, - [ --with-cfg-port=/dev/ttyS0 specifies the mobile phone port],, - [ with_cfg_port="/dev/ttyS0" ]) -AC_DEFINE_UNQUOTED(CONFIG_CFG_PORT, "$with_cfg_port") -AC_ARG_WITH(cfg_initlength, - [ --with-cfg-initlength=default specifies the mobile phone initlength],, - [ with_cfg_initlength="default" ]) -AC_DEFINE_UNQUOTED(CONFIG_CFG_INITLENGTH, "$with_cfg_initlength") - AC_ARG_ENABLE(debug, [ --enable-debug compile with debug code], - [ -changequote({,})dnl - CFLAGS="-ggdb3 `echo " $CFLAGS "|sed 's/ -O[0-9]* / /g'`" #CFLAGS="-g -Wall" -changequote([,])dnl + [ CFLAGS="-g -Wall" AC_DEFINE(DEBUG) debug="yes" ], [ debug="no" ] @@ -93,9 +70,9 @@ AC_ARG_WITH(libintl, ) AC_ARG_ENABLE(nls, - [ --enable-nls force use of NLS], + [ --disable-nls do not use NLS], [ USE_NLS=$enableval ], - [ USE_NLS=no ] + [ USE_NLS=yes ] ) if test "$USE_NLS" = "yes"; then @@ -245,7 +222,7 @@ if test "x$PTHREAD_LIBS" = xerror; then fi dnl FIXME: do we really test here if libc contains this function? -if test "x$PTHREAD_LIBS" = xerror -a "x$cross_compiling" = xno; then +if test "x$PTHREAD_LIBS" = xerror; then AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="", AC_MSG_ERROR(not found library: pthread !!!)) fi @@ -467,8 +444,8 @@ LIBS="$LIBS $NLS_LIBS" PACKAGE=gnokii XPACKAGE=xgnokii -AC_DEFINE_UNQUOTED(VERSION, "`cat VERSION`") -AC_DEFINE_UNQUOTED(XVERSION, "`cat xgnokii/VERSION`") +VERSION=`cat VERSION` +XVERSION=`cat xgnokii/VERSION` HAVE_XGNOKII=$x_support case "$INSTALL" in @@ -488,8 +465,6 @@ AC_CONFIG_HEADER(include/config.h) AC_SUBST(PACKAGE) AC_SUBST(VERSION) -AC_SUBST(AR) -AC_SUBST(AS) AC_SUBST(XVERSION) AC_SUBST(XPACKAGE) AC_SUBST(XGNOKIIDIR) @@ -507,6 +482,7 @@ AC_SUBST(USE_UNIX98PTYS) AC_SUBST(HAVE_XGNOKII) AC_OUTPUT( + include/config.h.in Makefile.global po/Makefile.in packaging/RedHat/gnokii.spec diff --git a/do b/do deleted file mode 100755 index 345f2c0..0000000 --- a/do +++ /dev/null @@ -1,30 +0,0 @@ -#! /bin/sh - -target_m68k=1 -enable_debug=1 -stackcheck=60000 -cfg_port="ttyS0" - -exec 2>&1 -set -ex -rm -f config.cache -autoheader -autoconf -# rm -f config.cache -if [ -n "$target_m68k" ];then - test -n "$CC" || export CC="m68k-pic-coff-gcc" - test -n "$AR" || export AR="m68k-pic-coff-ar" - test -n "$AS" || export AS="m68k-pic-coff-as" - test -n "$CFLAGS" || export CFLAGS="-O2 -Wall -fPIC" - test -n "$CPPFLAGS" || export CPPFLAGS="-DUCCOMPAT=1 $CPPFLAGS" - test -n "$LDFLAGS" || export LDFLAGS="gnokii/cleanup.c" - if [ -n "$stackcheck" ];then - export CPPFLAGS="-DSTACKCHECK=$stackcheck $CPPFLAGS" - export CFLAGS="$CFLAGS -fno-omit-frame-pointer" - fi -fi -export CPPFLAGS="-DUCLINUX=1 $CPPFLAGS" -./configure --with-cfg-model=5110 --with-cfg-port=/dev/"$cfg_port" --without-x \ - `if [ -n "$enable_debug" ];then echo "--enable-debug --enable-xdebug";fi` -make clean -make diff --git a/getopt/getopt.c b/getopt/getopt.c index 01a8184..7b4f938 100644 --- a/getopt/getopt.c +++ b/getopt/getopt.c @@ -121,9 +121,6 @@ int opterr = 1; This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ -#ifdef UCLINUX -static -#endif /* UCLINUX */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. @@ -669,8 +666,6 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only) } } -#ifndef UCLINUX - int getopt (argc, argv, optstring) int argc; @@ -683,8 +678,6 @@ getopt (argc, argv, optstring) 0); } -#endif /* UCLINUX */ - #endif /* _LIBC or not __GNU_LIBRARY__. */ #ifdef TEST diff --git a/getopt/getopt1.c b/getopt/getopt1.c index a78fbf4..de8e2ad 100644 --- a/getopt/getopt1.c +++ b/getopt/getopt1.c @@ -75,8 +75,6 @@ getopt_long (argc, argv, options, long_options, opt_index) but does match a short option, it is parsed as a short option instead. */ -#ifndef UCLINUX - int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; @@ -88,8 +86,6 @@ getopt_long_only (argc, argv, options, long_options, opt_index) return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } -#endif /* UCLINUX */ - #endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/gnokii/Makefile b/gnokii/Makefile index 82e5ab3..2018e7d 100644 --- a/gnokii/Makefile +++ b/gnokii/Makefile @@ -6,7 +6,6 @@ TOPDIR=.. include $(TOPDIR)/Makefile.global -STACKSIZE = 150000 CFLAGS += $(PTHREAD_CFLAGS) LDLIBS += $(PTHREAD_LIBS) @@ -23,23 +22,11 @@ endif all: gnokii -gnokii: $(OBJS) $(TOPDIR)/common/data.a $(TOPDIR)/common/common.a cleanup.o # $(TOPDIR)/common/gsm-filetypes.o - $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ -o $@ -ifneq "" "$(findstring -DUCCOMPAT,$(CPPFLAGS))" - /opt/uClinux/m68k-pic-coff/bin/coff2flt -o gnokii -s $(STACKSIZE) gnokii.coff -endif - -hello: hello.o cleanup.o - $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ -o $@ - -cleanup.o: cleanup.c - $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $< - -$(TOPDIR)/common/common.a: - $(MAKE) -C $(TOPDIR)/common common.a +gnokii: $(OBJS) $(TOPDIR)/common/COMMON.o $(TOPDIR)/common/gsm-filetypes.o + $(CC) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@ -$(TOPDIR)/common/data.a: - $(MAKE) -C $(TOPDIR)/common data.a +$(TOPDIR)/common/COMMON.o: + $(MAKE) -C $(TOPDIR)/common COMMON.o $(TOPDIR)/common/gsm-filetypes.o: $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o @@ -56,7 +43,7 @@ gnokiilib: $(OBJS) $(TOPDIR)/common/libmygnokii.so makelib: gnokiilib clean: - $(RM) $(OBJS) cleanup.o hello.o *~ depend gnokii gnokiilib *.exe core *.bak + $(RM) $(OBJS) *~ depend gnokii gnokiilib *.exe core *.bak install: all $(INSTALL) -d $(bindir) diff --git a/gnokii/cleanup.c b/gnokii/cleanup.c deleted file mode 100644 index 82b1c48..0000000 --- a/gnokii/cleanup.c +++ /dev/null @@ -1,79 +0,0 @@ -#ifdef GNOKII_MAIN -#include "config.h" -#endif - -#include - -void _cleanup(void) -{ - /* hack for pic32 gcc */ - -#if 0 -#ifdef LIVE - LIVE; -#endif /* LIVE */ -#endif -} - -#ifdef STACKCHECK - -static volatile int live_check_disable=0; - -void live_check(const char *file,int line,int alloc) -{ -static volatile char *top=NULL,*top_printed=NULL; -static volatile size_t largest=0,largest_printed=0; -volatile char mark; -volatile char *will=&mark-(alloc==-1 ? 0 : alloc); - - if (will > top) - top=will; - if (live_check_disable<=0 && top!=top_printed) { - printf("live_check [%s:%d]: new top=0x%08lX\n",file,line,(long)top); - fflush(stdout); - top_printed=top; - } - if (largest < top-will) - largest = top-will; - if (live_check_disable<=0 && largest!=largest_printed) { - printf("live_check [%s:%d]: largest=%ld\n",file,line,(long)largest); - fflush(stdout); - largest_printed=largest; - } - if (largest >= STACKCHECK) { - if (live_check_disable<=0) - printf("live_check - aborting: limit=%d < largest=%ld!\n",STACKCHECK,(long)largest); - _exit(99); - } -} - -void live_disable(int how) -{ - live_check_disable+=how; -} - -#define STACKCHECK_HEADER_PC_OFFSET 16 - -void stackcheck(void) -{ -volatile static inside=0; -volatile void *func; -volatile int fp_alloc; - - asm("movel %%d0,%0" : "=r" (fp_alloc) : /* input */ : "d0"); - asm("movel %%fp@(4),%0" : "=r" (func) : /* input */); - - if (inside) - return; - inside++; - - if (live_check_disable<=0) - printf("mcount(func=0x%08lX,fp_alloc=%d)\n",((long)func)-STACKCHECK_HEADER_PC_OFFSET,-fp_alloc); -#ifdef LIVE_ALLOC - LIVE_ALLOC((-fp_alloc)+4); -#endif /* LIVE_ALLOC */ - - inside--; -} - -#endif /* STACKCHECK */ diff --git a/gnokii/gnokii.c b/gnokii/gnokii.c index 1cbe8fe..87943ec 100644 --- a/gnokii/gnokii.c +++ b/gnokii/gnokii.c @@ -11,8 +11,6 @@ */ -#include "config.h" - #include #include #include @@ -20,13 +18,6 @@ #include #include #include -#include -#include - -#ifdef UCLINUX -/* or "getopt.h" would include insufficient getopt.h from uClinux */ -#include "../getopt/getopt.h" -#endif /* UCLINUX */ #ifndef VC6 #if defined(__svr4__) || defined(__FreeBSD__) @@ -62,49 +53,32 @@ #include "gsm-common.h" #include "gsm-api.h" #include "gsm-networks.h" -#ifndef UCLINUX #include "gsm-ringtones.h" #include "gsm-bitmaps.h" #include "gsm-wap.h" #include "gsm-sms.h" #include "gsm-datetime.h" -#endif /* UCLINUX */ #include "gsm-phonebook.h" -#ifndef UCLINUX #include "gsm-calendar.h" -#endif /* UCLINUX */ #include "gsm-coding.h" -#ifndef UCLINUX #include "newmodules/n6110.h" -#endif #include "files/cfgreader.h" -#ifndef UCLINUX #include "files/gsm-filetypes.h" -#endif /* UCLINUX */ #include "gnokii.h" -#ifdef UCLINUX -#include "data/virtmodem.h" -#endif /* UCLINUX */ #ifdef USE_NLS #include #endif -static char *model; /* Model from .gnokiirc file. */ -static char *Port; /* Port from .gnokiirc file */ -static char *Initlength; /* Init length from .gnokiirc file */ -static char *Connection; /* Connection type from .gnokiirc file */ -#ifndef UCLINUX +char *model; /* Model from .gnokiirc file. */ +char *Port; /* Port from .gnokiirc file */ +char *Initlength; /* Init length from .gnokiirc file */ +char *Connection; /* Connection type from .gnokiirc file */ char *SynchronizeTime; /* If we set date and time from computer to phone (from .gnokiirc file) */ -#endif /* UCLINUX */ -static char *BinDir; /* Binaries directory from .gnokiirc file - not used here yet */ +char *BinDir; /* Binaries directory from .gnokiirc file - not used here yet */ -#ifndef UCLINUX -static GSM_SMSMessage SMS[4]; -#endif /* UCLINUX */ +GSM_SMSMessage SMS[4]; -#ifndef UCLINUX - char *GetProfileCallAlertString(int code) { switch (code) { @@ -240,7 +214,7 @@ char *GetProfileCallerGroups(int code) return BufferProfileGroups; } -static char *print_error(GSM_Error e) +char *print_error(GSM_Error e) { // case GE_DEVICEOPENFAILED: return "Couldn't open specified serial device."; @@ -286,10 +260,12 @@ static char *print_error(GSM_Error e) case GE_INVALIDBOOKMARKLOCATION: return "Invalid or empty WAP bookmark location"; case GE_INSIDESETTINGSMENU: return "Inside WAP Settings menu. Please leave it and try again"; case GE_INVALIDSETTINGSLOCATION: return "Invalid or empty WAP settings location"; + case GE_EMPTYSMSC: return "Empty SMSC number. Use --smsc"; default: return "Unknown error."; } } + GSM_Error GSM_ReadRingtoneFileOnConsole(char *FileName, GSM_Ringtone *ringtone) { GSM_Error error; @@ -478,8 +454,8 @@ int GSM_SendMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int int w,i; struct option options[] = { - { "smscno", required_argument, NULL, '1'}, - { "smsc", required_argument, NULL, '2'}, + { "smscno", required_argument, NULL, '2'}, + { "smsc", required_argument, NULL, '1'}, { "name", required_argument, NULL, '3'}, { "unicode", no_argument, NULL, '4'}, { "profilestyle", no_argument, NULL, '5'}, @@ -552,7 +528,7 @@ int GSM_SendMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int if (error == GE_SMSSENDOK) { fprintf(stdout, _("SMS %i/%i sent OK !\n"),w+1,MultiSMS->number); } else { - fprintf(stdout, _("SMS %i/%i, sending failed (error=%d)\n"),w+1,MultiSMS->number, error); + fprintf(stdout, _("SMS %i/%i, sending failed (%d, %s)\n"),w+1,MultiSMS->number, error,print_error(error)); } } @@ -562,7 +538,7 @@ int GSM_SendMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int return 0; } -static int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[], +int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argnum, int argc, char *argv[], bool inter, bool unicode, bool profile, bool scale) { int w,i; @@ -570,8 +546,8 @@ static int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argn GSM_SMSMessage SMSold; struct option options[] = { - { "smscno", required_argument, NULL, '1'}, - { "smsc", required_argument, NULL, '2'}, + { "smscno", required_argument, NULL, '2'}, + { "smsc", required_argument, NULL, '1'}, { "name", required_argument, NULL, '3'}, { "unicode", no_argument, NULL, '4'}, { "profilestyle", no_argument, NULL, '5'}, @@ -680,7 +656,7 @@ static int GSM_SaveMultiPartSMSOnConsole(GSM_MultiSMSMessage *MultiSMS, int argn if (error == GE_NONE) fprintf(stdout, _("SMS %i/%i saved at location %i !\n"),w+1,MultiSMS->number,MultiSMS->SMS[w].MessageNumber); else - fprintf(stdout, _("SMS %i/%i saving failed (error=%d, location=%i)\n"), w+1, MultiSMS->number, error,MultiSMS->SMS[w].Location); + fprintf(stdout, _("SMS %i/%i saving failed (%d, %s, location=%i)\n"), w+1, MultiSMS->number,error,print_error(error),MultiSMS->SMS[w].Location); } GSM->Terminate(); @@ -707,11 +683,9 @@ void GSM_PlayRingtoneOnConsole(GSM_Ringtone *ringtone) GSM->PlayTone(255*255,0); } -#endif /* UCLINUX */ - /* This function shows the copyright and some informations usefull for debugging. */ -static int version(void) +int version(void) { fprintf(stdout, _("GNOKII Version %s\n" @@ -725,32 +699,12 @@ static int version(void) /* The function usage is only informative - it prints this program's usage and command-line options. */ -static int usage(void) +int usage(void) { - fprintf(stdout, _(" usage: gnokii [--help] [--version]\n" - )); -#ifndef UCLINUX -" gnokii --monitor [-noloop|-nl]\n" - )); -#endif /* UCLINUX */ - -#ifndef UCLINUX - fprintf(stdout, _( + fprintf(stdout, _(" usage: gnokii [--help|--monitor [-noloop|-nl]|--version]\n" " gnokii --getmemory memory_type [start [end]] [-short|-v30|-v21|-v]\n" - )); -#else /* UCLINUX */ - fprintf(stdout, _( -" gnokii --getmemory memory_type [start [end]] [-short]\n" - )); -#endif /* UCLINUX */ - - fprintf(stdout, _( " gnokii --writephonebook [-i]\n" - )); - -#ifndef UCLINUX - fprintf(stdout, _( " gnokii --sendphonebookentry destination memory_type location\n" " [--smsc message_center_number] [--smscno message_center_index]\n" " [-s] [-v n] [-d]\n" @@ -758,16 +712,9 @@ static int usage(void) " [--smsc message_center_number] [--smscno message_center_index]\n" " [-r] [-i] [-s] [-a] [--name name]\n" " gnokii --getvoicemailbox\n" - )); -#endif /* UCLINUX */ - - fprintf(stdout, _( " gnokii --getspeeddial number\n" " gnokii --setspeeddial number memory_type location\n\n" - )); -#ifndef UCLINUX - fprintf(stdout, _( " gnokii --getsms memory_type start [end] [-f file]\n" " gnokii --getsmsstatus\n" " gnokii --getsmsfolders\n" @@ -868,25 +815,10 @@ static int usage(void) " gnokii --sendprofile destination profile_name ringtonefile\n" " picturefile [--smsc message_center_number]\n" " [--smscno message_center_index] [-s] [-v n] [-d] [--scale]\n\n" - )); -#endif /* UCLINUX */ - fprintf(stdout, _( " gnokii --reset [soft|hard]\n" - )); - -#ifndef UCLINUX - fprintf(stdout, _( " gnokii --dialvoice number\n" - )); -#endif /* UCLINUX */ - - fprintf(stdout, _( " gnokii --cancelcall\n" - )); - -#ifndef UCLINUX - fprintf(stdout, _( " gnokii --displayoutput\n" " gnokii --presskeysequence sequence\n" " gnokii --backupsettings file\n" @@ -903,15 +835,8 @@ static int usage(void) " gnokii --phonetests\n" " gnokii --simlock\n" " gnokii --getdisplaystatus\n" - )); -#endif /* UCLINUX */ - - fprintf(stdout, _( " gnokii --identify\n\n" - )); -#ifndef UCLINUX - fprintf(stdout, _( " gnokii --getwapbookmark location\n" " gnokii --setwapbookmark title url [location]\n" " gnokii --sendwapbookmark location destination\n" @@ -943,14 +868,7 @@ static int usage(void) fprintf(stdout, _( " gnokii --sniff [port]\n" " gnokii --decodefile file\n" - )); -#endif - -#endif /* UCLINUX */ - -#ifdef UCLINUX - fprintf(stdout, _( -" gnokii --gnokiid [--debug] [ [...]]\n" +" gnokii --getbinringfromfile file name offset file2\n" )); #endif @@ -960,7 +878,7 @@ static int usage(void) /* fbusinit is the generic function which waits for the FBUS link. The limit is 10 seconds. After 10 seconds we quit. */ -static void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame)) +void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame)) { int count=0; @@ -972,7 +890,7 @@ static void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame)) #endif /* Initialise the code for the GSM interface. */ - error = GSM_Initialise(model, Port, Initlength, GetConnectionTypeFromString(Connection), rlp_handler, ""/*SynchronizeTime*/); + error = GSM_Initialise(model, Port, Initlength, GetConnectionTypeFromString(Connection), rlp_handler, SynchronizeTime); if (error != GE_NONE) { fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); @@ -993,7 +911,7 @@ static void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame)) /* This function checks that the argument count for a given options is withing an allowed range. */ -static int checkargs(int opt, struct gnokii_arg_len gals[], int argc) +int checkargs(int opt, struct gnokii_arg_len gals[], int argc) { int i; @@ -1027,8 +945,6 @@ static int checkargs(int opt, struct gnokii_arg_len gals[], int argc) else return 1; } -static int gnokiid(int argc, char *argv[]); - /* Main function - handles command line arguments, passes them to separate functions accordingly. */ @@ -1046,19 +962,14 @@ int main(int argc, char *argv[]) { "help", no_argument, NULL, OPT_HELP },// Display usage. { "version", no_argument, NULL, OPT_VERSION },// Display version and build information. -#ifndef UCLINUX { "getsmsfolders", no_argument, NULL, OPT_GETSMSFOLDERS },// Gets SMS folders { "getsmsstatus", no_argument, NULL, OPT_GETSMSSTATUS },// Get SMS Folder Status -#endif /* UCLINUX */ { "identify", no_argument, NULL, OPT_IDENTIFY },// Identify -#ifndef UCLINUX { "pmon", no_argument, NULL, OPT_PMON },// For development purposes: run in passive monitoring mode { "foogle", no_argument, NULL, OPT_FOOGLE },// For development purposes: insert you function calls here { "getdatetime", no_argument, NULL, OPT_GETDATETIME },// Get date and time mode { "getalarm", no_argument, NULL, OPT_GETALARM },// Get alarm -#endif /* UCLINUX */ { "cancelcall", no_argument, NULL, OPT_CANCELCALL },// Cancel Call -#ifndef UCLINUX { "getdisplaystatus", no_argument, NULL, OPT_GETDISPLAYSTATUS },// Get display status mode { "allringtones", no_argument, NULL, OPT_ALLRINGTONES },/* Displays names of available ringtones */ { "displayoutput", no_argument, NULL, OPT_DISPLAYOUTPUT },/* Show texts from phone's display */ @@ -1070,10 +981,8 @@ int main(int argc, char *argv[]) { "receivesms", no_argument, NULL, OPT_RECEIVESMS }, { "setoperatorname", optional_argument, NULL, OPT_SETOPERATORNAME },/* Set downloaded operator name */ { "setdatetime", optional_argument, NULL, OPT_SETDATETIME },// Set date and time -#endif /* UCLINUX */ { "writephonebook", optional_argument, NULL, OPT_WRITEPHONEBOOK },// Write phonebook (memory) mode { "reset", optional_argument, NULL, OPT_RESET },// Resets the phone -#ifndef UCLINUX { "monitor", optional_argument, NULL, OPT_MONITOR },// Monitor mode { "setlogo", optional_argument, NULL, OPT_SETLOGO },// Set logo { "getprofile", optional_argument, NULL, OPT_GETPROFILE },// Show profile @@ -1086,11 +995,9 @@ int main(int argc, char *argv[]) { "sendphonebookentry", required_argument, NULL, OPT_SENDPHONEBOOKENTRY}, { "savephonebookentry", required_argument, NULL, OPT_SAVEPHONEBOOKENTRY}, { "deletecalendarnote", required_argument, NULL, OPT_DELCALENDARNOTE },// Delete calendar note mode -#endif /* UCLINUX */ { "getmemory", required_argument, NULL, OPT_GETMEMORY },// Get memory mode { "getspeeddial", required_argument, NULL, OPT_GETSPEEDDIAL },// Get speed dial mode { "setspeeddial", required_argument, NULL, OPT_SETSPEEDDIAL },// Set speed dial mode -#ifndef UCLINUX { "getsms", required_argument, NULL, OPT_GETSMS },// Get SMS message mode { "deletesms", required_argument, NULL, OPT_DELETESMS },// Delete SMS message mode { "sendsms", required_argument, NULL, OPT_SENDSMS },// Send SMS message mode @@ -1141,12 +1048,8 @@ int main(int argc, char *argv[]) #ifdef DEBUG { "sniff", optional_argument, NULL, OPT_SNIFFER },// Will show datas from port { "decodefile", required_argument, NULL, OPT_DECODEFILE },//decode input file + { "getbinringfromfile", required_argument, NULL, OPT_GETBINRINGFROMFILE }, #endif -#endif /* UCLINUX */ - -#ifdef UCLINUX - { "gnokiid", optional_argument, NULL, OPT_GNOKIID },// gnokiid mode -#endif /* UCLINUX */ { 0, 0, 0, 0}, }; @@ -1157,7 +1060,6 @@ int main(int argc, char *argv[]) struct gnokii_arg_len gals[] = { -#ifndef UCLINUX { OPT_MONITOR, 0, 1, 0 }, #ifdef SECURITY @@ -1168,6 +1070,7 @@ int main(int argc, char *argv[]) #ifdef DEBUG { OPT_SNIFFER, 0, 1, 0 }, { OPT_DECODEFILE, 1, 1, 0 }, + { OPT_GETBINRINGFROMFILE,4, 4, 0 }, #endif { OPT_SETDATETIME, 0, 5, 0 }, @@ -1182,11 +1085,9 @@ int main(int argc, char *argv[]) { OPT_SAVEPHONEBOOKENTRY,2, 9, 0 }, { OPT_SENDPHONEBOOKENTRY,3, 9, 0 }, { OPT_DELCALENDARNOTE, 1, 1, 0 }, -#endif /* UCLINUX */ { OPT_GETMEMORY, 2, 4, 0 }, { OPT_GETSPEEDDIAL, 1, 1, 0 }, { OPT_SETSPEEDDIAL, 3, 3, 0 }, -#ifndef UCLINUX { OPT_GETSMS, 2, 5, 0 }, { OPT_DELETESMS, 2, 3, 0 }, { OPT_SENDSMS, 1,10, 0 }, @@ -1204,15 +1105,11 @@ int main(int argc, char *argv[]) { OPT_SETRINGTONE, 1, 3, 0 }, { OPT_GETRINGTONE, 1, 2, 0 }, { OPT_PRESSKEYSEQUENCE, 1, 1, 0 }, -#endif /* UCLINUX */ { OPT_RESET, 0, 1, 0 }, -#ifndef UCLINUX { OPT_GETPROFILE, 0, 1, 0 }, { OPT_SETPROFILE, 3, 3, 0 }, { OPT_SENDPROFILE, 4,10, 0 }, -#endif /* UCLINUX */ { OPT_WRITEPHONEBOOK, 0, 1, 0 }, -#ifndef UCLINUX { OPT_PLAYRINGTONE, 1, 1, 0 }, { OPT_COMPOSER, 1, 1, 0 }, { OPT_RINGTONECONVERT, 2, 2, 0 }, @@ -1231,17 +1128,10 @@ int main(int argc, char *argv[]) { OPT_SAVEWAPSETTINGS, 1, 9, 0 }, { OPT_SENDWAPSETTINGS, 2, 9, 0 }, { OPT_DIVERT, 3, 5, 0 }, -#endif /* UCLINUX */ - -#ifdef UCLINUX - { OPT_GNOKIID, 0, INT_MAX, 0 }, -#endif /* UCLINUX */ { 0, 0, 0, 0 }, }; - LIVE; - opterr = 0; /* For GNU gettext */ @@ -1257,7 +1147,7 @@ int main(int argc, char *argv[]) #endif /* Read config file */ - if (CFG_ReadConfig(&model, &Port, &Initlength, &Connection, &BinDir, false) < 0) { + if (CFG_ReadConfig(&model, &Port, &Initlength, &Connection, &BinDir, &SynchronizeTime,false) < 0) { exit(-1); } @@ -1282,7 +1172,6 @@ int main(int argc, char *argv[]) for(i = 2; i < argc; i++) nargv[i-2] = argv[i]; - nargv[argc-2] = NULL; /* required by gnokiid() for execv(3) */ if(checkargs(c, gals, nargc)) { @@ -1310,17 +1199,14 @@ int main(int argc, char *argv[]) // Then, options with no arguments case OPT_HELP: rc = usage(); break; case OPT_VERSION: rc = version(); break; -#ifndef UCLINUX case OPT_MONITOR: rc = monitormode(nargc, nargv); break; case OPT_GETSMSFOLDERS: rc = getsmsfolders(); break; case OPT_GETDATETIME: rc = getdatetime(); break; case OPT_GETALARM: rc = getalarm(); break; case OPT_GETDISPLAYSTATUS: rc = getdisplaystatus(); break; case OPT_PMON: rc = pmon(); break; -#endif /* UCLINUX */ case OPT_WRITEPHONEBOOK: rc = writephonebook(nargc, nargv);break; -#ifndef UCLINUX #ifdef SECURITY case OPT_ENTERSECURITYCODE: rc = entersecuritycode(optarg); break; case OPT_GETSECURITYCODESTATUS: rc = getsecuritycodestatus(); break; @@ -1333,15 +1219,14 @@ int main(int argc, char *argv[]) #ifdef DEBUG case OPT_SNIFFER: rc = sniff(nargc, nargv); break; case OPT_DECODEFILE: rc = decodefile(nargc, nargv); break; + case OPT_GETBINRINGFROMFILE: rc = getbinringfromfile(nargc, nargv);break; #endif // Now, options with arguments case OPT_SETDATETIME: rc = setdatetime(nargc, nargv); break; case OPT_SETALARM: rc = setalarm(nargv); break; case OPT_DIALVOICE: rc = dialvoice(optarg); break; -#endif /* UCLINUX */ case OPT_CANCELCALL: rc = cancelcall(); break; -#ifndef UCLINUX case OPT_GETCALENDARNOTE: rc = getcalendarnote(nargc, nargv);break; case OPT_DELCALENDARNOTE: rc = deletecalendarnote(optarg);break; case OPT_SAVECALENDARNOTE: rc = savecalendarnote(nargc, nargv);break; @@ -1349,11 +1234,9 @@ int main(int argc, char *argv[]) case OPT_SAVEPHONEBOOKENTRY: rc = savephonebookentry(nargc, nargv);break; case OPT_SENDPHONEBOOKENTRY: rc = sendphonebookentry(nargc, nargv);break; case OPT_WRITECALENDARNOTE: rc = writecalendarnote(nargv); break; -#endif /* UCLINUX */ case OPT_GETMEMORY: rc = getmemory(nargc, nargv); break; case OPT_GETSPEEDDIAL: rc = getspeeddial(optarg); break; case OPT_SETSPEEDDIAL: rc = setspeeddial(nargv); break; -#ifndef UCLINUX case OPT_GETSMS: rc = getsms(argc, argv); break; case OPT_GETSMSSTATUS: rc = getsmsstatus(argc, argv); break; case OPT_DELETESMS: rc = deletesms(nargc, nargv); break; @@ -1365,9 +1248,7 @@ int main(int argc, char *argv[]) case OPT_GETSMSC: rc = getsmsc(optarg); break; case OPT_RENAMESMSC: rc = renamesmsc(nargc,nargv); break; case OPT_NETMONITOR: rc = netmonitor(optarg); break; -#endif /* UCLINUX */ case OPT_IDENTIFY: rc = identify(); break; -#ifndef UCLINUX case OPT_SETLOGO: rc = setlogo(nargc, nargv); break; case OPT_GETLOGO: rc = getlogo(nargc, nargv); break; case OPT_RECEIVESMS: rc = receivesms(nargc, nargv); break; @@ -1392,9 +1273,7 @@ int main(int argc, char *argv[]) case OPT_PHONETESTS: rc = phonetests(); break; case OPT_SIMLOCKINFO: rc = simlockinfo(); break; case OPT_SENDDTMF: rc = senddtmf(optarg); break; -#endif /* UCLINUX */ case OPT_RESET: rc = reset(nargc,nargv); break; -#ifndef UCLINUX case OPT_GETOPERATORNAME: rc = getoperatorname(); break; case OPT_SETOPERATORNAME: rc = setoperatorname(nargc,nargv);break; case OPT_GETWAPBOOKMARK: rc = getwapbookmark(nargc,nargv);break; @@ -1410,11 +1289,7 @@ int main(int argc, char *argv[]) case OPT_GETVOICEMAILBOX: rc = getvoicemailbox(); break; case OPT_NM_COLLECT: rc = nm_collect(nargc, nargv); break; case OPT_NETMONITORDATA: rc = netmonitordata(nargc, nargv);break; -#endif /* UCLINUX */ -#ifdef UCLINUX - case OPT_GNOKIID: rc = gnokiid(nargc, nargv); break; -#endif /* UCLINUX */ default: fprintf(stderr, _("Unknown option: %d\n"), c); break; } @@ -1429,12 +1304,144 @@ int main(int argc, char *argv[]) exit(-1); } -#ifndef UCLINUX - /* Restores various phone settings from one file */ int restoresettings(char *argv[]) { - fprintf(stdout,_("Work in progress. Not usefull now. Sorry\n")); + GSM_Backup Backup; + GSM_PhonebookEntry pbk; + + int confirm; + char ans[4]; + + int i,pos; + + GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0}; + GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0}; + + if (GSM_ReadBackupFile(argv[0], &Backup)!=GE_NONE) return 1; + + fbusinit(NULL); + + if (Backup.SIMPhonebookUsed!=0) { + confirm=-1; + while (confirm < 0) { + fprintf(stderr, _("Restore SIM phonebook ? ")); + GetLine(stdin, ans, 99); + if (!strcmp(ans, "yes")) confirm = 1; + if (!strcmp(ans, "no" )) confirm = 0; + } + if (confirm==1) { + if (GSM->GetMemoryStatus(&SIMMemoryStatus) != GE_NONE) { + fprintf(stderr,_("Error getting memory status !\n")); + GSM->Terminate(); + } + i=0;pos=1; + + while ((pos-1)!=SIMMemoryStatus.Used+SIMMemoryStatus.Free) { + pbk.Location=pos; + pbk.MemoryType=GMT_SM; + pbk.Name[0]=0; + pbk.Number[0]=0; + pbk.SubEntriesCount = 0; + if (iWritePhonebookLocation(&pbk); + fprintf(stderr,_(".")); + pos++; + } + fprintf(stderr,_("\n")); + } + } + if (Backup.PhonePhonebookUsed!=0) { + confirm=-1; + while (confirm < 0) { + fprintf(stderr, _("Restore phone phonebook ? ")); + GetLine(stdin, ans, 99); + if (!strcmp(ans, "yes")) confirm = 1; + if (!strcmp(ans, "no" )) confirm = 0; + } + if (confirm==1) { + if (GSM->GetMemoryStatus(&PhoneMemoryStatus) != GE_NONE) { + fprintf(stderr,_("Error getting memory status !\n")); + GSM->Terminate(); + } + + i=0;pos=1; + + while ((pos-1)!=PhoneMemoryStatus.Used+PhoneMemoryStatus.Free) { + pbk.Location=pos; + pbk.MemoryType=GMT_ME; + pbk.Name[0]=0; + pbk.Number[0]=0; + pbk.SubEntriesCount = 0; + if (iWritePhonebookLocation(&pbk); + fprintf(stderr,_(".")); + pos++; + } + fprintf(stderr,_("\n")); + } + } + if (Backup.CallerAvailable==true) { + confirm=-1; + while (confirm < 0) { + fprintf(stderr, _("Restore caller groups ? ")); + GetLine(stdin, ans, 99); + if (!strcmp(ans, "yes")) confirm = 1; + if (!strcmp(ans, "no" )) confirm = 0; + } + if (confirm==1) { + for (i=0;i<5;i++) GSM->SetBitmap(&Backup.CallerGroups[i]); + } + } + if (Backup.OperatorLogoAvailable==true) { + confirm=-1; + while (confirm < 0) { + fprintf(stderr, _("Restore operator logo ? ")); + GetLine(stdin, ans, 99); + if (!strcmp(ans, "yes")) confirm = 1; + if (!strcmp(ans, "no" )) confirm = 0; + } + if (confirm==1) { + GSM->SetBitmap(&Backup.OperatorLogo); + } + } + if (Backup.StartupLogoAvailable==true) { + confirm=-1; + while (confirm < 0) { + fprintf(stderr, _("Restore startup logo ? ")); + GetLine(stdin, ans, 99); + if (!strcmp(ans, "yes")) confirm = 1; + if (!strcmp(ans, "no" )) confirm = 0; + } + if (confirm==1) { + GSM->SetBitmap(&Backup.StartupLogo); + } + } + + GSM->Terminate(); + return 0; } @@ -1453,7 +1460,7 @@ int backupsettings(char *argv[]) fprintf(stderr,_("Backup phonebook from SIM...")); Backup.SIMPhonebookUsed=0; - if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE) {//FIXME + if (GSM->GetMemoryStatus(&SIMMemoryStatus) == GE_NONE) { Backup.SIMPhonebookSize=SIMMemoryStatus.Used+SIMMemoryStatus.Free; PbkEntry.MemoryType=GMT_SM; @@ -1528,11 +1535,10 @@ int backupsettings(char *argv[]) Backup.OperatorLogoAvailable=true; Backup.OperatorLogo.type=GSM_7110OperatorLogo; if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) { - Backup.OperatorLogoAvailable=true; Backup.OperatorLogo.type=GSM_OperatorLogo; if (GSM->GetBitmap(&Backup.OperatorLogo)!=GE_NONE) { Backup.OperatorLogoAvailable=false; - fprintf(stderr,_("Error\n")); + fprintf(stderr,_("Error\n")); } else fprintf(stderr,_("Done\n")); } else fprintf(stderr,_("Done\n")); @@ -1574,9 +1580,6 @@ int presskeysequence(char *argv[]) sleep(1); - /* We need to make sure that the init is finished to avoid interrupted */ - /* multiframe packets... */ - fbusinit(NULL); for (i=0;i=1 && num<=3) { bitmap.number=num; @@ -3391,7 +3379,7 @@ int setlogo(int argc, char *argv[]) strncpy(bitmap.netcode,"000 00",7); bitmap.width=72; bitmap.height=14; - bitmap.size=bitmap.width*bitmap.height/8; + bitmap.size=GSM_GetBitmapSize(&bitmap); GSM_ClearBitmap(&bitmap); } if (!strcmp(argv[0],"7110op")) @@ -3400,7 +3388,7 @@ int setlogo(int argc, char *argv[]) strncpy(bitmap.netcode,"000 00",7); bitmap.width=78; bitmap.height=21; - bitmap.size=(bitmap.width*bitmap.height + 7)/8; + bitmap.size=GSM_GetBitmapSize(&bitmap); GSM_ClearBitmap(&bitmap); } /* FIX ME: how to remove startup and group logos ? */ @@ -3461,7 +3449,7 @@ int setlogo(int argc, char *argv[]) } else { GSM->SetBitmap(&bitmap); GSM->GetBitmap(&oldbit); - fprintf(stderr, _("too long, truncated to \"%s\" (length %ld)\n"),oldbit.text,(long)strlen(oldbit.text)); + fprintf(stderr, _("too long, truncated to \"%s\" (length %i)\n"),oldbit.text,strlen(oldbit.text)); } ok=false; } @@ -4113,89 +4101,6 @@ int monitormode(int argc, char *argv[]) return 0; } -#endif /* UCLINUX */ - -/* Emulation of separate gnokiid binary for uClinux */ - -#ifdef UCLINUX - -#define NICE_LEVEL (-20) - -static void gnokiid_SIGCHLD(int signo) -{ - fprintf (stderr, _("Child process exited, aborting...\n")); - exit(2); -} - -static int gnokiid(int argc, char *argv[]) -{ - bool DebugMode; /* When true, run in debug mode */ - char *Model; /* Model from .gnokiirc file. */ - char *Port; /* Port from .gnokiirc file */ - char *Initlength; /* Init length from .gnokiirc file */ - char *Connection; /* Connection type from .gnokiirc file */ - char *BinDir; /* Directory of the mgnokiidev command */ - - /* evaluate for presence of "--debug" argument in parameter */ - DebugMode = false; - if(argc>0) - { - if( !strcmp(argv[0],"--debug" )) - { - DebugMode = true; - argv++; - argc--; - } - } - -#ifdef DEBUG - fprintf (stderr, _("Initializing gnokiid mode...\n")); -#endif - - if (CFG_ReadConfig(&Model, &Port, &Initlength, &Connection, &BinDir, true) < 0) - return(-1); - - if (VM_Initialise(Model, Port, Initlength, GCT_FBUS, BinDir, DebugMode, true, ""/*SynchronizeTime*/) == false) - return (-1); - - if (argc>0) { -#ifdef DEBUG - fprintf (stderr, _("Spawning gnokiid startup child process \"%s\"...\n"), *argv); -#endif - signal(SIGCHLD,gnokiid_SIGCHLD); - errno=0; - switch (vfork()) { - case -1: /* vfork() failure */ - fprintf (stderr, _("vfork() failed! (%s)\n"),strerror(errno)); - return -1; - case 0: /* child */ - execv(*argv,argv); - fprintf (stderr, _("Spawn of child process failed! (%s)\n"),strerror(errno)); - _exit(9); - break; - default: /* parent */ - /* PASSTHRU */ - break; - } - } - -#ifdef DEBUG - fprintf (stderr, _("Entering gnokiid virtual modem main loop...\n")); -#endif - if (nice(NICE_LEVEL)) - fprintf (stderr, _("WARNING: nice level change failed (by %d)\n"),NICE_LEVEL); - - VM_ThreadLoop(); - - VM_Terminate(); - - return 0; -} - -#endif /* UCLINUX */ - -#ifndef UCLINUX - /* Shows texts from phone's display */ int displayoutput() @@ -4680,12 +4585,10 @@ int setprofile(int argc, char *argv[]) } -#endif /* UCLINUX */ - /* Get requested range of memory storage entries and output to stdout in easy-to-parse format */ -static int getmemory(int argc, char *argv[]) +int getmemory(int argc, char *argv[]) { GSM_PhonebookEntry entry; @@ -4713,7 +4616,6 @@ static int getmemory(int argc, char *argv[]) fprintf(stderr, _("Unknown memory type %s!\n"), argv[0]); return (-1); } - GetMemoryTypeString(memory_type_string, &entry.MemoryType); if (argv[argc-1][0] == '-') @@ -4761,7 +4663,6 @@ static int getmemory(int argc, char *argv[]) i_used++; else if (do_all) break; -#ifndef UCLINUX if (output_opt && !strcmp( output_opt,"-v30")) { semicolon_pipe_substitution( &entry, 0 ); fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,30)); @@ -4777,7 +4678,6 @@ static int getmemory(int argc, char *argv[]) fprintf(stdout,_("%s"),GSM_GetVCARD(&entry,10)); formatdone=true; } -#endif /* UCLINUX */ if (output_opt && !strcmp(output_opt,"-short")) { semicolon_pipe_substitution( &entry, 0 ); fprintf(stdout, "%s;%s;%s;%d;%d;", entry.Name, entry.Number, memory_type_string, entry.Location, entry.Group); @@ -4920,7 +4820,7 @@ static int getmemory(int argc, char *argv[]) /* Read data from stdin, parse and write to phone. The parsing is relatively crude and doesn't allow for much variation from the stipulated format. */ -static int writephonebook(int argc, char *args[]) +int writephonebook(int argc, char *args[]) { GSM_PhonebookEntry entry; @@ -5136,7 +5036,7 @@ static int writephonebook(int argc, char *args[]) /* Getting speed dials. */ -static int getspeeddial(char *Number) { +int getspeeddial(char *Number) { GSM_SpeedDial entry; GSM_Error error; @@ -5169,7 +5069,7 @@ static int getspeeddial(char *Number) { /* Setting speed dials. */ -static int setspeeddial(char *argv[]) { +int setspeeddial(char *argv[]) { GSM_SpeedDial entry; @@ -5205,8 +5105,6 @@ static int setspeeddial(char *argv[]) { return 0; } -#ifndef UCLINUX - /* Getting the status of the display. */ int getdisplaystatus() @@ -5266,42 +5164,29 @@ int netmonitor(char *Mode) return 0; } -#endif /* UCLINUX */ - -static int identify( void ) +int identify( void ) { /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */ char imei[64], model[64], rev[64], manufacturer[64]; - LIVE; fbusinit(NULL); - LIVE; while (GSM->GetIMEI(imei) != GE_NONE) sleep(1); - LIVE; while (GSM->GetRevision(rev) != GE_NONE) sleep(1); - LIVE; while (GSM->GetModel(model) != GE_NONE) sleep(1); - LIVE; strcpy(manufacturer, "(unknown)"); - LIVE; GSM->GetManufacturer(manufacturer); - LIVE; fprintf(stdout, _("IMEI: %s\n"), imei); fprintf(stdout, _("Model: %s %s (%s)\n"), manufacturer, GetModelName (model), model); fprintf(stdout, _("Revision: %s\n"), rev); - LIVE; GSM->Terminate(); - LIVE; return 0; } -#ifndef UCLINUX - int senddtmf(char *String) { @@ -5314,10 +5199,8 @@ int senddtmf(char *String) return 0; } -#endif /* UCLINUX */ - /* Resets the phone */ -static int reset(int argc, char *argv[]) +int reset(int argc, char *argv[]) { unsigned char _type=0x03; @@ -5345,8 +5228,6 @@ static int reset(int argc, char *argv[]) return 0; } -#ifndef UCLINUX - /* This is a "convenience" function to allow quick test of new API stuff which doesn't warrant a "proper" command line function. */ @@ -5390,7 +5271,7 @@ int pmon() /* Initialise the code for the GSM interface. */ - error = GSM_Initialise(model, Port, Initlength, connection, RLP_DisplayF96Frame, ""/*SynchronizeTime*/); + error = GSM_Initialise(model, Port, Initlength, connection, RLP_DisplayF96Frame, SynchronizeTime); if (error != GE_NONE) { fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); @@ -7659,53 +7540,34 @@ int getringtone(int argc, char *argv[]) GSM_Error error; GSM_Ringtone SMringtone; - int i; - - char model[64]; - - FILE *file; - ringtone.location=1; if (argc>1) ringtone.location=atoi(argv[1]); /* Initialise the GSM interface. */ fbusinit(NULL); - error=GSM->GetBinRingtone(&ringtone); - - while (GSM->GetModel(model) != GE_NONE) - sleep(1); - - GSM->Terminate(); + error=GSM_GetPhoneRingtone(&ringtone,&SMringtone); fprintf(stdout, _("Downloaded ringtone, location %i: "),ringtone.location); switch (error) { case GE_NONE: fprintf(stdout, _("get succeeded!\n")); - fprintf(stdout, _("Name: %s (binary format)\n"),ringtone.name); + /* In 33.. we have normal "Smart Messaging" format */ + if (GetModelFeature (FN_RINGTONES)==F_RING_SM) { + fprintf(stdout, _("Name: %s (normal format)\n"),SMringtone.name); + GSM_SaveRingtoneFileOnConsole(argv[0], &SMringtone); + } else { + fprintf(stdout, _("Name: %s (binary format)\n"),ringtone.name); + GSM_SaveBinRingtoneFile(argv[0], &ringtone); + } + GSM->Terminate(); + return 0; break; case GE_INVALIDRINGLOCATION: fprintf(stdout, _("invalid location %i!\n"),ringtone.location); break; case GE_UNKNOWNMODEL: - - /* In 3310 we have normal "Smart Messaging" format */ - if (GetModelFeature (FN_RINGTONES)==F_RING_SM) { - - i=7; - if (ringtone.frame[9]==0x4a && ringtone.frame[10]==0x3a) i=8; - ringtone.frame[i]=0x02; - - GSM_UnPackRingtone(&SMringtone, ringtone.frame+i, ringtone.length-i); - - fprintf(stdout, _("Name: %s (normal format)\n"),SMringtone.name); - - GSM_SaveRingtoneFileOnConsole(argv[0], &SMringtone); - - return 0; - } - fprintf(stdout, _("mygnokii doesn't know format for this model!\n")); break; case GE_NOTIMPLEMENTED: @@ -7715,21 +7577,10 @@ int getringtone(int argc, char *argv[]) fprintf(stdout, _("not supported by this model!\n")); break; } - - if (error!=GE_NONE) - return(-1); - - file = fopen(argv[0], "wb"); - - if (!file) - return(GE_CANTOPENFILE); - fwrite(ringtone.frame, 1, ringtone.length, file); - - fclose(file); + GSM->Terminate(); - return 0; - + return(-1); } int binringtoneconvert(int argc, char *argv[]) @@ -7801,32 +7652,32 @@ int binringtoneconvert(int argc, char *argv[]) w=w*2; if (w>z && (w/2)<=z) { switch (m) { - case 1:fprintf(file,_("16"));break; - case 2:fprintf(file,_("8"));break; - case 3:fprintf(file,_("4"));break; - case 4:fprintf(file,_("2"));break; - case 5:fprintf(file,_("1"));break; + case 1:fprintf(file,_("16"));break; + case 2:fprintf(file,_("8"));break; + case 3:fprintf(file,_("4"));break; + case 4:fprintf(file,_("2"));break; + case 5:fprintf(file,_("1"));break; } break; } } if (z>w) fprintf(file,_("1")); pause=false; - switch (GSM_GetNote(j)) { - case Note_C :fprintf(file,_("c"));break; - case Note_Cis:fprintf(file,_("c#"));break; - case Note_D :fprintf(file,_("d"));break; - case Note_Dis:fprintf(file,_("d#"));break; - case Note_E :fprintf(file,_("e"));break; - case Note_F :fprintf(file,_("f"));break; - case Note_Fis:fprintf(file,_("f#"));break; - case Note_G :fprintf(file,_("g"));break; - case Note_Gis:fprintf(file,_("g#"));break; - case Note_A :fprintf(file,_("a"));break; - case Note_Ais:fprintf(file,_("a#"));break; - case Note_H :fprintf(file,_("h"));break; - default :pause=true;fprintf(file,_("p"));break; //Pause ? - } + switch (GSM_GetNote(j)) { + case Note_C :fprintf(file,_("c"));break; + case Note_Cis:fprintf(file,_("c#"));break; + case Note_D :fprintf(file,_("d"));break; + case Note_Dis:fprintf(file,_("d#"));break; + case Note_E :fprintf(file,_("e"));break; + case Note_F :fprintf(file,_("f"));break; + case Note_Fis:fprintf(file,_("f#"));break; + case Note_G :fprintf(file,_("g"));break; + case Note_Gis:fprintf(file,_("g#"));break; + case Note_A :fprintf(file,_("a"));break; + case Note_Ais:fprintf(file,_("a#"));break; + case Note_H :fprintf(file,_("h"));break; + default :pause=true;fprintf(file,_("p"));break; //Pause ? + } w=deflen*1.5; for (m=0;m<6;m++) { w=w*2; @@ -7886,13 +7737,11 @@ int renamesmsc(int argc, char *argv[]) return 0; } -#endif /* UCLINUX */ - /* * Returns number of sostituited characters. * ... may be useful one day ?? */ -static int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction ) +int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction ) /* direction = 0 : after reading phone memory ( * 1 : writing phone memory */ @@ -7928,10 +7777,6 @@ int str_substch( char *str, const char toric, const char sost ) return( i_sost ); } -#ifndef UCLINUX - -extern GSM_Error N6110_EnableExtendedCommands (unsigned char status); - /* Allows to set simlock state. With older phone (older 51xx, 61xx) can open them, with older and newer should be able to close them */ @@ -7971,11 +7816,11 @@ int setsimlock() fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1; } /* Opening all locks (we must check, if we can open them) */ - NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer0); - openbuffer[4]=1;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=2;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=4;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=8;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); + NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer0); + openbuffer[4]=1;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=2;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=4;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=8;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); if (GSM->SimlockInfo(&siml)!=GE_NONE) { fprintf(stderr,_("Error getting simlock info\n"));GSM->Terminate();return -1; } @@ -8024,13 +7869,13 @@ int setsimlock() } /* Closing simlock with given values */ closebuffer[4]=1+2+4+8; - NULL_SendMessageSequence(50, &CurrentMagicError, 20, 0x40,closebuffer); + NULL_SendMessageSequence (50, &CurrentMagicError, 20, 0x40,closebuffer); /* Opening all locks */ - NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer0); - openbuffer[4]=1;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=2;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=4;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); - openbuffer[4]=8;NULL_SendMessageSequence(50, &CurrentMagicError, 10, 0x40,openbuffer); + NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer0); + openbuffer[4]=1;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=2;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=4;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); + openbuffer[4]=8;NULL_SendMessageSequence (50, &CurrentMagicError, 10, 0x40,openbuffer); GSM->Reset(0x03); GSM->Terminate(); return 0; @@ -8130,7 +7975,7 @@ int geteeprom() if ((i/256)!=((i-1)/256)) fprintf(stderr,_(".")); - if (NULL_SendMessageSequence(50, &CurrentMagicError, 9, 0x40,buffer)!=GE_NONE) break; + if (NULL_SendMessageSequence(50, &CurrentMagicError, 9, 0x40,buffer)!=GE_NONE) break; i=i+0x10; } @@ -8931,12 +8776,9 @@ int savephonebookentry(int argc, char *argv[]) case GE_NONE: /* Put entry into SMS structure */ -#ifndef UCLINUX - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) { + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21); - } else -#endif /* UCLINUX */ - { + } else { GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10); } @@ -8979,7 +8821,7 @@ int sendphonebookentry(int argc, char *argv[]) case GE_NONE: /* Put entry into SMS structure */ - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) { + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,21); } else { GSM_SavePhonebookEntryToSMS(&MultiSMS,&entry,10); @@ -8999,4 +8841,74 @@ int sendphonebookentry(int argc, char *argv[]) return 0; } -#endif /* UCLINUX */ +#ifdef DEBUG +int getbinringfromfile(int argc, char *argv[]) +{ + FILE *file; + int i,j; + bool found; + GSM_BinRingtone binring,ringtone; + + fprintf(stdout,_("Offset %ld\n"),atol(argv[2])); + + file = fopen(argv[0], "rb"); + + if (!file) return(GE_CANTOPENFILE); + + fseek(file,atol(argv[2]),0); + + ringtone.length=fread(ringtone.frame, 1, 900, file); + + fclose(file); + + i=0;found=false; + while (true) { + if (ringtone.frame[i ]==0x00 && ringtone.frame[i+1]==0x02 && + ringtone.frame[i+2]==0xFC && ringtone.frame[i+3]==0x09) { + found=true; + break; + } + i++; + if (i==ringtone.length-3) break; + } + + if (!found) { + fprintf(stdout,_("Start not found\n")); + return (-1); + } + + j=0;found=false; + while (true) { + if (ringtone.frame[j]==0x07 && ringtone.frame[j+1]==0x0B) { + found=true; + break; + } + j++; + if (j==ringtone.length-2) break; + } + + if (!found) { + fprintf(stdout,_("End not found\n")); + return (-1); + } + + binring.length=0; + binring.frame[binring.length++]=0x00; + binring.frame[binring.length++]=0x00; + binring.frame[binring.length++]=0x0C; + binring.frame[binring.length++]=0x01; + binring.frame[binring.length++]=0x2C; + + memcpy(binring.frame+binring.length,argv[1],strlen(argv[1])); + binring.length=binring.length+strlen(argv[1]); + + binring.frame[binring.length++]=0x00; + + memcpy(binring.frame+binring.length,ringtone.frame+i,j-i+2); + binring.length=binring.length+j-i+2; + + GSM_SaveBinRingtoneFile(argv[3], &binring); + + return GE_NONE; +} +#endif diff --git a/gnokii/gnokii.h b/gnokii/gnokii.h index aa12300..f4feaa1 100644 --- a/gnokii/gnokii.h +++ b/gnokii/gnokii.h @@ -12,8 +12,6 @@ /* Prototypes */ -#ifndef UCLINUX - int monitormode(int argc, char *argv[]); #ifdef SECURITY @@ -25,15 +23,13 @@ int monitormode(int argc, char *argv[]); #ifdef DEBUG int sniff(int nargc, char *nargv[]); int decodefile(int nargc, char *nargv[]); + int getbinringfromfile(int nargc, char *nargv[]); #endif -#endif /* UCLINUX */ - -static int getmemory(int argc, char *argv[]); -static int writephonebook(int argc, char *argv[]); -static int getspeeddial(char *number); -static int setspeeddial(char *argv[]); -#ifndef UCLINUX +int getmemory(int argc, char *argv[]); +int writephonebook(int argc, char *argv[]); +int getspeeddial(char *number); +int setspeeddial(char *argv[]); int getsms(int argc, char *argv[]); int renamesmsc(int argc, char *argv[]); int deletesms(int argc, char *argv[]); @@ -49,17 +45,13 @@ int getdatetime(void); int setalarm(char *argv[]); int getalarm(void); int dialvoice(char *number); -#endif /* UCLINUX */ -static int cancelcall(void); -#ifndef UCLINUX +int cancelcall(void); int getcalendarnote(int argc, char *argv[]); int writecalendarnote(char *argv[]); int deletecalendarnote(char *index); int getdisplaystatus(); int netmonitor(char *_mode); -#endif /* UCLINUX */ -static int identify(void); -#ifndef UCLINUX +int identify(void); int senddtmf(char *String); int foogle(char *argv[]); int pmon(void); @@ -68,9 +60,7 @@ int getlogo(int argc, char *argv[]); int binringtoneconvert(int argc, char *argv[]); int setringtone(int argc, char *argv[]); int getringtone(int argc, char *argv[]); -#endif /* UCLINUX */ -static int reset(int argc, char *argv[]); -#ifndef UCLINUX +int reset(int argc, char *argv[]); int getprofile(int argc, char *argv[]); int setprofile(int argc, char *argv[]); int allringtones(); @@ -111,7 +101,6 @@ int getsmsstatus(int argc, char *argv[]); int divert(int argc, char *argv[]); int savephonebookentry(int argc, char *argv[]); int sendphonebookentry(int argc, char *argv[]); -#endif /* UCLINUX */ typedef enum { OPT_HELP, @@ -197,7 +186,7 @@ typedef enum { OPT_DIVERT=146, OPT_SENDWAPSETTINGS=147, OPT_SETWAPBOOKMARK=148, - OPT_GNOKIID=149, + OPT_GETBINRINGFROMFILE=149 } opt_index; struct gnokii_arg_len { @@ -219,10 +208,8 @@ struct keys_table_position { int whatcode; }; -#ifndef UCLINUX - /* for --presskeysequence */ -static struct keys_table_position Keys[] = { +struct keys_table_position Keys[] = { {'m',PHONEKEY_MENU}, {'M',PHONEKEY_MENU}, {'n',PHONEKEY_NAMES}, @@ -254,8 +241,6 @@ static struct keys_table_position Keys[] = { {' ',0} }; -#endif /* UCLINUX */ - /* for NETMONITOR */ //maximal number of screens for --nm_collect @@ -291,5 +276,5 @@ typedef struct { unsigned char req_screen[NM_MAX_SCREEN]; } OUT_INFO_MON; -static int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction ); -static int str_substch( char *str, const char toric, const char sost ); +int semicolon_pipe_substitution( GSM_PhonebookEntry *pentry, unsigned int direction ); +int str_substch( char *str, const char toric, const char sost ); diff --git a/gnokii/hello.c b/gnokii/hello.c deleted file mode 100644 index be27e74..0000000 --- a/gnokii/hello.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int main(void) -{ - puts("hello"); - return 0; -} diff --git a/include/config.h.in.in b/include/config.h.in.in new file mode 100644 index 0000000..a5dae23 --- /dev/null +++ b/include/config.h.in.in @@ -0,0 +1,57 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +/* DO NOT EDIT MANUALLY !!! */ + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define VERSION "@VERSION@" +#define XVERSION "@XVERSION@" +#define XGNOKIIDIR "@XGNOKIIDIR@/@XPACKAGE@" + +/* Define if you have timersub() */ +#undef HAVE_TIMEOPS + +/* Define if you have tm_gmtoff field in tm structure */ +#undef HAVE_TM_GMTON + +/* Define if you have cfsetspeed, cfsetispeed, cfsetospeed, c_ispeed and c_ospeed in struct termios */ +#undef HAVE_CFSETSPEED +#undef HAVE_CFSETISPEED +#undef HAVE_CFSETOSPEED +#undef HAVE_TERMIOS_CSPEED + +/* Define if you have snprintf */ +#undef HAVE_SNPRINTF + +/* Define debug level */ +#undef DEBUG +#undef XDEBUG +#undef RLP_DEBUG + +/* Decide if you want security options enabled */ +#undef SECURITY + +/* Define if you have XPM components */ +#undef XPM + +/* Define if you want NLS */ +#undef USE_NLS + +/* Define if you want to use Unix98 PTYs */ +#undef USE_UNIX98PTYS + +/* Define if you compile for M$ Windows */ +#undef WIN32 + +#endif /* __CONFIG_H__ */ diff --git a/include/data/at-emulator.h b/include/data/at-emulator.h index 2edfb23..3f95297 100644 --- a/include/data/at-emulator.h +++ b/include/data/at-emulator.h @@ -18,11 +18,19 @@ /* Prototypes */ bool ATEM_Initialise(int read_fd, int write_fd, char *model, char *port); void ATEM_HandleIncomingData(char *buffer, int length); +void ATEM_InitRegisters(void); +void ATEM_StringOut(char *buffer); +void ATEM_ParseAT(char *cmd_buffer); +void ATEM_ParseSMS(char *cmd_buffer); +void ATEM_ParseDIR(char *cmd_buffer); +bool ATEM_CommandPlusC(char **buf); +bool ATEM_CommandPlusG(char **buf); +int ATEM_GetNum(char **p); void ATEM_ModemResult(int code); void ATEM_CallPassup(char c); /* Global variables */ -extern bool ATEM_Initialised; +bool ATEM_Initialised; /* Definition of modem result codes - these are returned to "terminal" numerically or as a string depending on the setting of S12 */ diff --git a/include/data/datapump.h b/include/data/datapump.h index 921610d..c1e48d1 100644 --- a/include/data/datapump.h +++ b/include/data/datapump.h @@ -19,6 +19,7 @@ void DP_CallFinished(void); bool DP_Initialise(int read_fd, int write_fd); +int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length); void DP_CallPassup(char c); /* All defines and prototypes from here down are specific to diff --git a/include/data/rlp-common.h b/include/data/rlp-common.h index db0dc0f..a03a497 100644 --- a/include/data/rlp-common.h +++ b/include/data/rlp-common.h @@ -172,7 +172,10 @@ typedef struct { /* Prototypes for functions. */ void RLP_DisplayF96Frame(RLP_F96Frame *frame); +void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header); +void RLP_DisplayXID(u8 *frame); void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length)); +void RLP_Init_link_vars(void); void RLP_SetUserRequest(RLP_UserRequests type, bool value); void RLP_Send(char *buffer, int length); diff --git a/include/data/virtmodem.h b/include/data/virtmodem.h index 1d80fc6..6fe838d 100644 --- a/include/data/virtmodem.h +++ b/include/data/virtmodem.h @@ -15,7 +15,7 @@ /* Prototypes */ -extern bool VM_Initialise(char *model, +bool VM_Initialise(char *model, char *port, char *initlength, GSM_ConnectionType connection, @@ -23,7 +23,15 @@ extern bool VM_Initialise(char *model, bool debug_mode, bool GSM_Init, char *synchronizetime); -extern void VM_Terminate(void); -extern bool VM_ThreadLoop(void); +int VM_PtySetup(char *bindir); +void VM_ThreadLoop(void); +void VM_CharHandler(void); +int VM_GetMasterPty(char **name); +void VM_Terminate(void); +GSM_Error VM_GSMInitialise(char *model, + char *port, + char *initlength, + GSM_ConnectionType connection, + char *synchronizetime); #endif /* __virtmodem_h */ diff --git a/include/devices/device.h b/include/devices/device.h index f4b4153..92460be 100644 --- a/include/devices/device.h +++ b/include/devices/device.h @@ -22,24 +22,30 @@ IR (only with 61x0 models) and MBUS (61x0, 640, 6160) */ typedef enum { GCT_FBUS, /* FBUS connection. */ -#ifndef UCLINUX GCT_Infrared, /* FBUS over direct infrared connection - 61xx. */ GCT_Irda, /* FBUS over Irda sockets - 7110, 6210, etc. */ GCT_MBUS, /* MBUS */ GCT_DLR3, /* FBUS over DLR3 cable */ GCT_Tekram, /* FBUS over direct infrared connection (Tekram device) - 61xx. */ GCT_AT, /* AT commands */ - GCT_Default /* Old style module */ -#endif /* UCLINUX */ + GCT_FBUS3110 /* FBUS version 1 used in N3110 */ } GSM_ConnectionType; -extern int device_portfd; - #ifndef WIN32 #include #include "misc.h" + int device_getfd(void); + + int device_open(__const char *__file, int __with_odd_parity); + void device_reset(void); + + size_t device_read(__ptr_t __buf, size_t __nbytes); size_t device_write(__const __ptr_t __buf, size_t __n); + + #ifdef DEBUG + void device_dumpserial(void); + #endif #else size_t device_write(const __ptr_t __buf, size_t __n); #endif @@ -53,6 +59,5 @@ extern int device_portfd; extern char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; bool StartConnection (char *port_device, bool with_odd_parity, GSM_ConnectionType con); -extern void SigHandler(int status); #endif /* __device_h */ diff --git a/include/devices/unixserial.h b/include/devices/unixserial.h index c9be583..b044d43 100644 --- a/include/devices/unixserial.h +++ b/include/devices/unixserial.h @@ -24,20 +24,18 @@ #include "misc.h" -#ifndef UCLINUX -extern int serial_open(__const char *__file, int __oflag); -#endif /* UCLINUX */ -extern int serial_close(int __fd); +int serial_open(__const char *__file, int __oflag); +int serial_close(int __fd); -extern int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake); +int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake); -extern void serial_setdtrrts(int __fd, int __dtr, int __rts); -extern void serial_changespeed(int __fd, int __speed); +void serial_setdtrrts(int __fd, int __dtr, int __rts); +void serial_changespeed(int __fd, int __speed); -extern size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes); -extern size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n); +size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes); +size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n); -extern int serial_select(int fd, struct timeval *timeout); +int serial_select(int fd, struct timeval *timeout); #endif /* __devices_unixserial_h */ diff --git a/include/files/cfgreader.h b/include/files/cfgreader.h index 7c0ebba..15513d7 100644 --- a/include/files/cfgreader.h +++ b/include/files/cfgreader.h @@ -35,8 +35,6 @@ struct CFG_Header { char *section; }; -#ifndef UCLINUX - /* Function prototypes */ struct CFG_Header *CFG_ReadFile(char *filename); @@ -45,16 +43,10 @@ char *CFG_Set(struct CFG_Header *cfg, char *section, char *key, char *value); int CFG_WriteFile(struct CFG_Header *cfg, char *filename); -#endif /* UCLINUX */ - int CFG_ReadConfig(char **model, char **port, char **initlength, - char **connection, char **bindir, + char **connection, char **bindir, char **synchronizetime, bool isgnokiid); -#ifndef UCLINUX - struct CFG_Header *CFG_FindGnokiirc(); -#endif /* UCLINUX */ - #endif /* _CFGREADER_H */ diff --git a/include/files/gsm-filetypes.h b/include/files/gsm-filetypes.h index c153bc3..3e998dc 100644 --- a/include/files/gsm-filetypes.h +++ b/include/files/gsm-filetypes.h @@ -39,6 +39,7 @@ int GetDuration (char *num); /* ----------- Ringtones files ----------- */ GSM_Error GSM_ReadBinRingtoneFile(char *FileName, GSM_BinRingtone *ringtone); +GSM_Error GSM_SaveBinRingtoneFile(char *FileName, GSM_BinRingtone *ringtone); GSM_Error GSM_ReadRingtoneFile(char *FileName, GSM_Ringtone *ringtone); GSM_Error GSM_SaveRingtoneFile(char *FileName, GSM_Ringtone *ringtone); diff --git a/include/gsm-api.h b/include/gsm-api.h index 7efcfa0..fa655b4 100644 --- a/include/gsm-api.h +++ b/include/gsm-api.h @@ -27,16 +27,12 @@ #include "gsm-ringtones.h" #include "gsm-wap.h" -#ifndef UCLINUX - /* Undefined functions in fbus/mbus files */ extern GSM_Error Unimplemented(void); #define UNIMPLEMENTED (void *) Unimplemented extern GSM_Error NotSupported(void); #define NOTSUPPORTED (void *) NotSupported -#endif /* UCLINUX */ - /* Define the structure used to hold pointers to the various API functions. This is in effect the master list of functions provided by the gnokii API. Modules containing the model specific code each contain one of these @@ -231,19 +227,14 @@ typedef struct { typedef struct { - char *FBUSModels; /* Models covered by this type, pipe '|' delimited. */ - - char *MBUSModels; /* Models covered by this type, pipe '|' delimited. */ - - char *InfraredModels; /* Models covered by this type, pipe '|' delimited. */ - - char *DLR3Models; /* Models covered by this type, pipe '|' delimited. */ - - char *ATModels; /* Models covered by this type, pipe '|' delimited. */ - - char *IrdaModels; /* Models covered by this type, pipe '|' delimited. */ - - char *TekramModels; /* Models covered by this type, pipe '|' delimited. */ + char *FBUSModels; /* Models covered by this type, pipe '|' delimited. */ + char *MBUSModels; /* Models covered by this type, pipe '|' delimited. */ + char *InfraredModels; /* Models covered by this type, pipe '|' delimited. */ + char *DLR3Models; /* Models covered by this type, pipe '|' delimited. */ + char *ATModels; /* Models covered by this type, pipe '|' delimited. */ + char *IrdaModels; /* Models covered by this type, pipe '|' delimited. */ + char *TekramModels; /* Models covered by this type, pipe '|' delimited. */ + char *FBUS3110Models; /* Models covered by this type, pipe '|' delimited. */ /* Minimum and maximum levels for RF signal strength. Units are as per the setting of RFLevelUnits. The setting of RFLevelUnits indicates the @@ -292,204 +283,190 @@ extern GSM_Information *GSM_Info; extern GSM_Functions *GSM; extern GSM_Protocol *Protocol; -extern GSM_PhonebookEntry *CurrentPhonebookEntry; -extern GSM_Error CurrentPhonebookError; +GSM_PhonebookEntry *CurrentPhonebookEntry; +GSM_Error CurrentPhonebookError; -extern GSM_SpeedDial *CurrentSpeedDialEntry; -extern GSM_Error CurrentSpeedDialError; +GSM_SpeedDial *CurrentSpeedDialEntry; +GSM_Error CurrentSpeedDialError; -extern unsigned char Current_IMEI[GSM_MAX_IMEI_LENGTH]; -extern unsigned char Current_Revision[GSM_MAX_REVISION_LENGTH]; -extern unsigned char Current_Model[GSM_MAX_MODEL_LENGTH]; +unsigned char Current_IMEI[GSM_MAX_IMEI_LENGTH]; +unsigned char Current_Revision[GSM_MAX_REVISION_LENGTH]; +unsigned char Current_Model[GSM_MAX_MODEL_LENGTH]; -#ifndef UCLINUX -extern GSM_SMSMessage *CurrentSMSMessage; -extern GSM_Error CurrentSMSMessageError; -extern int CurrentSMSPointer; +GSM_SMSMessage *CurrentSMSMessage; +GSM_Error CurrentSMSMessageError; +int CurrentSMSPointer; -extern GSM_SMSFolders *CurrentSMSFolders; -extern GSM_Error CurrentSMSFoldersError; -extern int CurrentSMSFoldersCount; +GSM_SMSFolders *CurrentSMSFolders; +GSM_Error CurrentSMSFoldersError; +int CurrentSMSFoldersCount; -extern GSM_OneSMSFolder CurrentSMSFolder; -extern GSM_Error CurrentSMSFolderError; -extern int CurrentSMSFolderID; -#endif /* UCLINUX */ +GSM_OneSMSFolder CurrentSMSFolder; +GSM_Error CurrentSMSFolderError; +int CurrentSMSFolderID; -extern GSM_MemoryStatus *CurrentMemoryStatus; -extern GSM_Error CurrentMemoryStatusError; +GSM_MemoryStatus *CurrentMemoryStatus; +GSM_Error CurrentMemoryStatusError; -#ifndef UCLINUX -extern GSM_NetworkInfo *CurrentNetworkInfo; -extern GSM_Error CurrentNetworkInfoError; +GSM_NetworkInfo *CurrentNetworkInfo; +GSM_Error CurrentNetworkInfoError; -extern GSM_SMSStatus *CurrentSMSStatus; -extern GSM_Error CurrentSMSStatusError; +GSM_SMSStatus *CurrentSMSStatus; +GSM_Error CurrentSMSStatusError; -extern GSM_MessageCenter *CurrentMessageCenter; -extern GSM_Error CurrentMessageCenterError; +GSM_MessageCenter *CurrentMessageCenter; +GSM_Error CurrentMessageCenterError; -extern int *CurrentSecurityCodeStatus; -extern GSM_Error CurrentSecurityCodeError; -extern GSM_SecurityCode *CurrentSecurityCode; +int *CurrentSecurityCodeStatus; +GSM_Error CurrentSecurityCodeError; +GSM_SecurityCode *CurrentSecurityCode; -extern GSM_DateTime *CurrentDateTime; -extern GSM_Error CurrentDateTimeError; +GSM_DateTime *CurrentDateTime; +GSM_Error CurrentDateTimeError; -extern GSM_Error CurrentResetPhoneSettingsError; +GSM_Error CurrentResetPhoneSettingsError; -extern GSM_DateTime *CurrentAlarm; -extern GSM_Error CurrentAlarmError; +GSM_DateTime *CurrentAlarm; +GSM_Error CurrentAlarmError; -extern GSM_CalendarNote *CurrentCalendarNote; -extern GSM_Error CurrentCalendarNoteError; +GSM_CalendarNote *CurrentCalendarNote; +GSM_Error CurrentCalendarNoteError; -extern GSM_NotesInfo CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2; -extern GSM_Error CurrentCalendarNotesInfoError; +GSM_NotesInfo CurrentCalendarNotesInfo,*CurrentCalendarNotesInfo2; +GSM_Error CurrentCalendarNotesInfoError; -extern GSM_Error CurrentSetDateTimeError; -extern GSM_Error CurrentSetAlarmError; +int *CurrentFirstCalendarFreePos; +GSM_Error CurrentFirstCalendarFreePosError; -extern int *CurrentFirstCalendarFreePos; -extern GSM_Error CurrentFirstCalendarFreePosError; -#endif /* UCLINUX */ +GSM_Error CurrentSetDateTimeError; +GSM_Error CurrentSetAlarmError; -extern GSM_Error CurrentEnableExtendedCommandsError; +GSM_Error CurrentEnableExtendedCommandsError; -extern int CurrentRFLevel, +int CurrentRFLevel, CurrentBatteryLevel, CurrentPowerSource; -#ifndef UCLINUX -extern int CurrentDisplayStatus; -extern GSM_Error CurrentDisplayStatusError; +int CurrentDisplayStatus; +GSM_Error CurrentDisplayStatusError; -extern char *CurrentNetmonitor; -extern GSM_Error CurrentNetmonitorError; +char *CurrentNetmonitor; +GSM_Error CurrentNetmonitorError; -extern GSM_Bitmap *CurrentGetBitmap; -extern GSM_Error CurrentGetBitmapError; +GSM_Bitmap *CurrentGetBitmap; +GSM_Error CurrentGetBitmapError; -extern GSM_Error CurrentSetBitmapError; +GSM_Error CurrentSetBitmapError; -extern GSM_Error CurrentSendDTMFError; +GSM_Error CurrentSendDTMFError; -extern GSM_Profile *CurrentProfile; -extern GSM_Error CurrentProfileError; +GSM_Profile *CurrentProfile; +GSM_Error CurrentProfileError; -extern GSM_Error CurrentDisplayOutputError; +GSM_Error CurrentDisplayOutputError; -extern GSM_CBMessage *CurrentCBMessage; -extern GSM_Error CurrentCBError; +GSM_CBMessage *CurrentCBMessage; +GSM_Error CurrentCBError; -extern int CurrentPressKeyEvent; -extern GSM_Error CurrentPressKeyError; +int CurrentPressKeyEvent; +GSM_Error CurrentPressKeyError; -extern GSM_Error CurrentPlayToneError; -#endif /* UCLINUX */ +GSM_Error CurrentPlayToneError; -extern GSM_Error CurrentDialVoiceError; +GSM_Error CurrentDialVoiceError; -#ifndef UCLINUX -extern GSM_Error CurrentGetOperatorNameError; -extern GSM_Network *CurrentGetOperatorNameNetwork; -extern GSM_Error CurrentSetOperatorNameError; -#endif /* UCLINUX */ +GSM_Error CurrentGetOperatorNameError; +GSM_Network *CurrentGetOperatorNameNetwork; +GSM_Error CurrentSetOperatorNameError; -extern GSM_Error CurrentGetIMEIError; +GSM_Error CurrentGetIMEIError; -extern GSM_Error CurrentGetHWError; +GSM_Error CurrentGetHWError; -#ifndef UCLINUX -extern unsigned char CurrentPPS[4]; -extern GSM_Error CurrentProductProfileSettingsError; +unsigned char CurrentPPS[4]; +GSM_Error CurrentProductProfileSettingsError; -extern char CurrentIncomingCall[20]; +char CurrentIncomingCall[20]; -extern GSM_Error CurrentBinRingtoneError; -extern GSM_BinRingtone *CurrentGetBinRingtone; +GSM_Error CurrentBinRingtoneError; +GSM_BinRingtone *CurrentGetBinRingtone; -extern GSM_Error CurrentRingtoneError; -#endif /* UCLINUX */ +GSM_Error CurrentRingtoneError; -extern GSM_Error CurrentMagicError; +GSM_Error CurrentMagicError; -#ifndef UCLINUX -extern GSM_Error CurrentSimlockInfoError; -extern GSM_AllSimlocks *CurrentSimLock; +GSM_Error CurrentSimlockInfoError; +GSM_AllSimlocks *CurrentSimLock; -extern GSM_Error CurrentGetWAPBookmarkError; -extern GSM_Error CurrentSetWAPBookmarkError; -extern GSM_WAPBookmark *WAPBookmark; +GSM_Error CurrentGetWAPBookmarkError; +GSM_Error CurrentSetWAPBookmarkError; +GSM_WAPBookmark *WAPBookmark; -extern GSM_Error CurrentGetWAPSettingsError; -extern GSM_WAPSettings *WAPSettings; +GSM_Error CurrentGetWAPSettingsError; +GSM_WAPSettings *WAPSettings; -extern GSM_Error CurrentCallDivertError; -extern GSM_CallDivert *CurrentCallDivert; +GSM_Error CurrentCallDivertError; +GSM_CallDivert *CurrentCallDivert; -extern char *CurrentManufacturer; -#endif /* UCLINUX */ +char *CurrentManufacturer; /* This is the connection type used in gnokii. */ -extern GSM_ConnectionType CurrentConnectionType; +GSM_ConnectionType CurrentConnectionType; /* Pointer to a callback function used to return changes to a calls status */ /* This saves unreliable polling */ -extern void (*CurrentCallPassup)(char c); +void (*CurrentCallPassup)(char c); /* Pointer to callback function in user code to be called when RLP frames are received. */ -extern void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame); +void (*CurrentRLP_RXCallback)(RLP_F96Frame *frame); /* Used to disconnect the call */ -extern u8 CurrentCallSequenceNumber; +u8 CurrentCallSequenceNumber; -extern bool CurrentLinkOK; +bool CurrentLinkOK; -extern bool CurrentRequestTerminate; +bool CurrentRequestTerminate; -#ifndef UCLINUX -extern bool CurrentDisableKeepAlive; -#endif /* UCLINUX */ +bool CurrentDisableKeepAlive; /* Prototype for the functions actually provided by gsm-api.c. */ -extern GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime); +GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), char* SynchronizeTime); -#ifndef UCLINUX -extern bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection); -#endif /* UCLINUX */ +bool CheckModel (GSM_Information InfoToCheck, char *model, GSM_ConnectionType connection); -extern char *GetMygnokiiVersion(); +char *GetMygnokiiVersion(); typedef enum { - F_CAL61=0,/*Calendar in 6110 style - 4 types,...*/ + F_CAL61=1,/*Calendar in 6110 style - 4 types,...*/ F_CAL33, /*Calendar in 3310 style - 10 reminders, Unicode, 3 coding types*/ F_CAL71, /*Calendar in 7110 style - 4 types, recurrance, etc.*/ - F_PBK33, /*Phonebook in Unicode. 3310 style - name and entry*/ - F_PBK71, /*Extended phonebook - multiple numbers,Unicode.Like in 7110*/ + F_PBK33SIM,/*Phonebook in Unicode(3310 style).Name and number.No internal*/ + F_PBK33INT,/*Phonebook in Unicode(3310 style).Name and number.Internal available*/ + F_PBK71INT,/*Extended phonebook-multiple numbers,Unicode(7110 style).Internal available*/ + F_PBK61INT,/*Name and number,no Unicode(6110 style).Internal available*/ F_DATA61, /*We can make data calls using gnokiid. Like in 6110*/ F_DATA71, /*Datacalls using AT commands*/ - F_SMS, /*SMS with Inbox, Outbox*/ - F_SMS71, /*SMS with SMS folders like in 7110*/ + F_SMS, /*SMS with Inbox, Outbox*/ /*10*/ + F_SMS71, /*SMS with SMS folders like in 7110*/ F_AUTH, /*We can make authentication and have "Accessory connected" like in 6110*/ - F_NETMON, /*Netmonitor available*/ /*10*/ + F_NETMON, /*Netmonitor available*/ F_CALER61,/*Caller groups in 6110 style - 5 groups with members*/ F_KEYB, /*We can press keys*/ F_SMSCDEF,/*SMSC can have default recipient*/ F_SPEED, /*We can handle speed dials*/ F_SCRSAV, /*We have screen savers*/ F_DTMF, /*We can handle DTMF sequences*/ - F_NOPOWER,/*We must get power/battery info from netmonitor*/ + F_NOPOWER,/*We must get power/battery info from netmonitor*/ /*20*/ - F_STANIM, /*Startup logo animated or static*/ + F_STANIM, /*Startup logo animated or static*/ F_STA , /*Startup logo static*/ - F_STA62 , /*Startup logo static size 6210*/ /*20*/ + F_STA62 , /*Startup logo static size 6210*/ F_STA71 , /*Startup logo static size 7110*/ F_PROF61, /*Profiles numbered like in N6110*/ @@ -499,7 +476,7 @@ typedef enum { F_RING_SM,/*Binary ringtone in Smart Messaging*/ F_RINGBIN,/*Binary ringtone in binary format*/ - F_WAP /*WAP functions available*/ + F_WAP /*WAP functions available*/ /*30*/ } feat_index; typedef enum { @@ -519,26 +496,22 @@ typedef enum { FN_STARTUP, FN_PROFILES, FN_RINGTONES, - FN_WAP + FN_WAP, + FN_RINGNUMBER } featnum_index; /* For models table */ typedef struct { char *model; char *number; - feat_index features[17]; + feat_index features[18]; } OnePhoneModel; extern char *GetModelName (); -extern int GetModelFeature (featnum_index num); +int GetModelFeature (featnum_index num); -#ifndef UCLINUX extern bool AppendLog(u8 *buffer, int length,bool format); extern bool AppendLogText(u8 *buffer,bool format); -#else /* UCLINUX */ -#define AppendLog(buffer,length,format) -#define AppendLogText(buffer,format) -#endif /* UCLINUX */ typedef struct { int SIMPhonebookUsed; diff --git a/include/gsm-bitmaps.h b/include/gsm-bitmaps.h index f65acc2..9d40713 100644 --- a/include/gsm-bitmaps.h +++ b/include/gsm-bitmaps.h @@ -55,5 +55,6 @@ void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target); void GSM_PrintBitmap(GSM_Bitmap *bitmap); GSM_Error GSM_ReadBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap); int GSM_SaveBitmapToSMS(GSM_MultiSMSMessage *SMS, GSM_Bitmap *bitmap,bool ScreenSaver, bool UnicodeText); +int GSM_GetBitmapSize(GSM_Bitmap *bitmap); #endif diff --git a/include/gsm-coding.h b/include/gsm-coding.h index 6b802e6..3414f1f 100644 --- a/include/gsm-coding.h +++ b/include/gsm-coding.h @@ -11,14 +11,11 @@ #ifndef __gsm_coding_h #define __gsm_coding_h -#ifndef UCLINUX extern void EncodeDefault (unsigned char* dest, const unsigned char* src, int len); extern void DecodeDefault (unsigned char* dest, const unsigned char* src, int len); -#endif /* UCLINUX */ extern void EncodeUnicode (unsigned char* dest, const unsigned char* src, int len); extern void DecodeUnicode (unsigned char* dest, const unsigned char* src, int len); extern void EncodeUTF8 (unsigned char* dest, const unsigned char* src, int len); -#ifndef UCLINUX extern void DecodeUTF8 (unsigned char* dest, const unsigned char* src, int len); extern void DecodeHexBin (unsigned char* dest, const unsigned char* src, int len); extern void EncodeHexBin (unsigned char* dest, const unsigned char* src, int len); @@ -35,6 +32,5 @@ extern int DecodeWithHexBinAlphabet (unsigned char mychar); extern unsigned char EncodeWithHexBinAlphabet (int digit); extern unsigned char EncodeWithBCDAlphabet (int value); extern int DecodeWithBCDAlphabet (unsigned char value); -#endif /* UCLINUX */ #endif diff --git a/include/gsm-common.h b/include/gsm-common.h index c91a4c5..9433499 100644 --- a/include/gsm-common.h +++ b/include/gsm-common.h @@ -69,8 +69,8 @@ #define GSM_MAX_REVISION_LENGTH (20) #define GSM_MAX_MODEL_LENGTH (10) -/* In 6210 test 57 there seems to be 75 chars */ -#define NM_MAX_SCREEN_WIDTH 75 +/* In 6210 test 57 there seems to be 75 chars */ +#define NM_MAX_SCREEN_WIDTH 75 /* Power source types */ typedef enum { @@ -301,11 +301,11 @@ typedef enum { GE_WRONGCOLORS, /* Wrong colors in bitmap file */ GE_INVALIDFILEFORMAT, /* Invalid format of file */ GE_SUBFORMATNOTSUPPORTED, /* Subformat of file not supported */ - GE_TOOSHORT, /* Too short file, structure, etc. to read */ + GE_TOOSHORT, /* Too short file, structure, etc. to read */ /*30*/ GE_TOOLONG, /* Too long file, structure, etc. to read */ GE_INVALIDIMAGESIZE, /* Invalid size of bitmap (in file, etc.) */ GE_BUSY, /* Command is still being executed. */ - GE_UNKNOWN, /* Unknown error - well better than nothing!! */ + GE_UNKNOWN, /* Unknown error - well better than nothing!! */ /*34*/ GE_NOACCESS, GE_USERCANCELED, GE_MEMORYFULL, @@ -314,6 +314,7 @@ typedef enum { GE_INVALIDBOOKMARKLOCATION, GE_INSIDESETTINGSMENU, GE_INVALIDSETTINGSLOCATION, + GE_EMPTYSMSC, /* The following are here in anticipation of data call requirements. */ diff --git a/include/gsm-networks.h b/include/gsm-networks.h index 177dd67..367a964 100644 --- a/include/gsm-networks.h +++ b/include/gsm-networks.h @@ -48,12 +48,10 @@ typedef struct { /* These functions are used to search the structure defined above.*/ char *GSM_GetNetworkName(char *NetworkCode); -#ifndef UCLINUX char *GSM_GetNetworkCode(char *NetworkName); char *GSM_GetCountryName(char *CountryCode); char *GSM_GetCountryCode(char *CountryName); -#endif /* UCLINUX */ void EncodeNetworkCode(unsigned char* buffer, unsigned char* output); void DecodeNetworkCode(unsigned char* buffer, unsigned char* output); diff --git a/include/gsm-ringtones.h b/include/gsm-ringtones.h index 92e439e..948966d 100644 --- a/include/gsm-ringtones.h +++ b/include/gsm-ringtones.h @@ -191,4 +191,6 @@ int RingingToneMenu(int code); int NumberOfRingtones(); +GSM_Error GSM_GetPhoneRingtone(GSM_BinRingtone *ringtone,GSM_Ringtone *SMringtone); + #endif /* __gsm_ringtones_h */ diff --git a/include/gsm-sms.h b/include/gsm-sms.h index 6870150..fac18b9 100644 --- a/include/gsm-sms.h +++ b/include/gsm-sms.h @@ -266,35 +266,27 @@ typedef struct { TP-Status-Report-Request (1 bit). See GSM 03.40 section 9.2.3.5 */ } GSM_ETSISMSMessage; -#ifndef UCLINUX -extern int GSM_PackSemiOctetNumber (u8 *Number, u8 *Output, bool semioctet); -extern char *GSM_UnpackSemiOctetNumber(u8 *Number, bool semioctet); +int GSM_PackSemiOctetNumber (u8 *Number, u8 *Output, bool semioctet); +char *GSM_UnpackSemiOctetNumber(u8 *Number, bool semioctet); -extern int GSM_UnpackEightBitsToSeven(int fillbits, int in_length, int out_length, unsigned char *input, unsigned char *output); -extern int GSM_PackSevenBitsToEight (int offset, unsigned char *input, unsigned char *output); -#endif /* UCLINUX */ +int GSM_UnpackEightBitsToSeven(int fillbits, int in_length, int out_length, unsigned char *input, unsigned char *output); +int GSM_PackSevenBitsToEight (int offset, unsigned char *input, unsigned char *output); -extern GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length); -extern GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); +GSM_Error GSM_EncodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI, SMS_MessageType PDU, int *length); +GSM_Error GSM_DecodeETSISMS(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); -#ifndef UCLINUX -extern GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req); -#endif /* UCLINUX */ +GSM_Error GSM_EncodeSMSDateTime(GSM_DateTime *DT, unsigned char *req); -extern GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); +GSM_Error GSM_DecodeETSISMSSubmitData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); -extern GSM_Error GSM_DecodeETSISMSStatusReportData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); +GSM_Error GSM_DecodeETSISMSStatusReportData(GSM_SMSMessage *SMS, GSM_ETSISMSMessage *ETSI); -#ifndef UCLINUX -extern void GSM_SetDefaultSMSData(GSM_SMSMessage *SMS); -extern GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType); -#endif /* UCLINUX */ +void GSM_SetDefaultSMSData(GSM_SMSMessage *SMS); +GSM_Error EncodeUDHHeader(char *text, GSM_UDH UDHType); -#ifndef UCLINUX -extern int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS, +int GSM_MakeSinglePartSMS2(GSM_SMSMessage *SMS, unsigned char *MessageBuffer,int cur, GSM_UDH UDHType, GSM_Coding_Type Coding); -#endif /* UCLINUX */ -extern void GSM_MakeMultiPartSMS2(GSM_MultiSMSMessage *SMS, +void GSM_MakeMultiPartSMS2(GSM_MultiSMSMessage *SMS, unsigned char *MessageBuffer,int MessageLength, GSM_UDH UDHType, GSM_Coding_Type Coding); #endif /* __gsm_sms_h */ diff --git a/include/newmodules/n6110.h b/include/newmodules/n6110.h index da1bcdd..34a3988 100644 --- a/include/newmodules/n6110.h +++ b/include/newmodules/n6110.h @@ -51,192 +51,168 @@ extern GSM_Functions N6110_Functions; extern GSM_Information N6110_Information; /* Prototypes for the functions designed to be used externally. */ -static GSM_Error N6110_Initialise(char *port_device, char *initlength, +GSM_Error N6110_Initialise(char *port_device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame)); -static void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, +void N6110_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); GSM_Error N6110_SendStatusRequest(void); -static int N6110_GetMemoryType(GSM_MemoryType memory_type); +int N6110_GetMemoryType(GSM_MemoryType memory_type); -#ifndef UCLINUX -static GSM_Error N6110_GetVoiceMailbox ( GSM_PhonebookEntry *entry); +GSM_Error N6110_GetVoiceMailbox ( GSM_PhonebookEntry *entry); -static GSM_Error N6110_GetOperatorName ( GSM_Network *operator); -static GSM_Error N6110_SetOperatorName ( GSM_Network *operator); -#endif /* UCLINUX */ +GSM_Error N6110_GetOperatorName ( GSM_Network *operator); +GSM_Error N6110_SetOperatorName ( GSM_Network *operator); -static GSM_Error N6110_GetMemoryLocation(GSM_PhonebookEntry *entry); -static GSM_Error N6110_WritePhonebookLocation(GSM_PhonebookEntry *entry); +GSM_Error N6110_GetMemoryLocation(GSM_PhonebookEntry *entry); +GSM_Error N6110_WritePhonebookLocation(GSM_PhonebookEntry *entry); -static GSM_Error N6110_GetSpeedDial(GSM_SpeedDial *entry); -static GSM_Error N6110_SetSpeedDial(GSM_SpeedDial *entry); +GSM_Error N6110_GetSpeedDial(GSM_SpeedDial *entry); +GSM_Error N6110_SetSpeedDial(GSM_SpeedDial *entry); -static GSM_Error N6110_GetMemoryStatus(GSM_MemoryStatus *Status); -#ifndef UCLINUX -static GSM_Error N6110_GetSMSStatus(GSM_SMSStatus *Status); -static GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error N6110_GetMemoryStatus(GSM_MemoryStatus *Status); +GSM_Error N6110_GetSMSStatus(GSM_SMSStatus *Status); +GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter); -static GSM_Error N6110_GetSMSMessage(GSM_SMSMessage *Message); -static GSM_Error N6110_DeleteSMSMessage(GSM_SMSMessage *Message); -static GSM_Error N6110_SendSMSMessage(GSM_SMSMessage *Message); -static GSM_Error N6110_SaveSMSMessage(GSM_SMSMessage *Message); -#endif /* UCLINUX */ +GSM_Error N6110_GetSMSMessage(GSM_SMSMessage *Message); +GSM_Error N6110_DeleteSMSMessage(GSM_SMSMessage *Message); +GSM_Error N6110_SendSMSMessage(GSM_SMSMessage *Message); +GSM_Error N6110_SaveSMSMessage(GSM_SMSMessage *Message); -static GSM_Error N6110_GetRFLevel(GSM_RFUnits *units, float *level); -static GSM_Error N6110_GetBatteryLevel(GSM_BatteryUnits *units, float *level); -static GSM_Error N6110_GetPowerSource(GSM_PowerSource *source); -#ifndef UCLINUX -static GSM_Error N6110_GetDisplayStatus(int *Status); +GSM_Error N6110_GetRFLevel(GSM_RFUnits *units, float *level); +GSM_Error N6110_GetBatteryLevel(GSM_BatteryUnits *units, float *level); +GSM_Error N6110_GetPowerSource(GSM_PowerSource *source); +GSM_Error N6110_GetDisplayStatus(int *Status); -static GSM_Error N6110_EnterSecurityCode(GSM_SecurityCode SecurityCode); -static GSM_Error N6110_GetSecurityCodeStatus(int *Status); -static GSM_Error N6110_GetSecurityCode(GSM_SecurityCode *SecurityCode); +GSM_Error N6110_EnterSecurityCode(GSM_SecurityCode SecurityCode); +GSM_Error N6110_GetSecurityCodeStatus(int *Status); +GSM_Error N6110_GetSecurityCode(GSM_SecurityCode *SecurityCode); -static GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter); -static GSM_Error N6110_SetSMSCenter(GSM_MessageCenter *MessageCenter); -#endif /* UCLINUX */ +GSM_Error N6110_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error N6110_SetSMSCenter(GSM_MessageCenter *MessageCenter); -static GSM_Error N6110_GetIMEI(char *imei); -static GSM_Error N6110_GetRevision(char *revision); -static GSM_Error N6110_GetModel(char *model); -static GSM_Error N6110_GetManufacturer(char *manufacturer); +GSM_Error N6110_GetIMEI(char *imei); +GSM_Error N6110_GetRevision(char *revision); +GSM_Error N6110_GetModel(char *model); +GSM_Error N6110_GetManufacturer(char *manufacturer); -#ifndef UCLINUX -static GSM_Error N6110_GetDateTime(GSM_DateTime *date_time); -static GSM_Error N6110_SetDateTime(GSM_DateTime *date_time); +GSM_Error N6110_GetDateTime(GSM_DateTime *date_time); +GSM_Error N6110_SetDateTime(GSM_DateTime *date_time); -static GSM_Error N6110_PrivGetDateTime(GSM_DateTime *date_time, int msgtype); -static GSM_Error N6110_PrivSetDateTime(GSM_DateTime *date_time, int msgtype); +GSM_Error N6110_PrivGetDateTime(GSM_DateTime *date_time, int msgtype); +GSM_Error N6110_PrivSetDateTime(GSM_DateTime *date_time, int msgtype); -static GSM_Error N6110_GetAlarm(int alarm_number, GSM_DateTime *date_time); -static GSM_Error N6110_SetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error N6110_GetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error N6110_SetAlarm(int alarm_number, GSM_DateTime *date_time); -static GSM_Error N6110_PrivGetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype); -static GSM_Error N6110_PrivSetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype); +GSM_Error N6110_PrivGetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype); +GSM_Error N6110_PrivSetAlarm(int alarm_number, GSM_DateTime *date_time, int msgtype); -static GSM_Error N6110_DialVoice(char *Number); -#endif /* UCLINUX */ -static GSM_Error N6110_DialData(char *Number, char type, void (* callpassup)(char c)); -#ifndef UCLINUX -static GSM_Error N6110_AnswerCall(char s); +GSM_Error N6110_DialVoice(char *Number); +GSM_Error N6110_DialData(char *Number, char type, void (* callpassup)(char c)); +GSM_Error N6110_AnswerCall(char s); -static GSM_Error N6110_GetIncomingCallNr(char *Number); +GSM_Error N6110_GetIncomingCallNr(char *Number); -static GSM_Error N6110_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo); +GSM_Error N6110_SendBitmap(char *NetworkCode, int width, int height, + unsigned char *bitmap); +GSM_Error N6110_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo); -static GSM_Error N6110_GetCalendarNote(GSM_CalendarNote *CalendarNote); -static GSM_Error N6110_WriteCalendarNote(GSM_CalendarNote *CalendarNote); -static GSM_Error N6110_DeleteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error N6110_GetCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error N6110_WriteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error N6110_DeleteCalendarNote(GSM_CalendarNote *CalendarNote); -static GSM_Error N6110_NetMonitor(unsigned char mode, char *Screen); +GSM_Error N6110_NetMonitor(unsigned char mode, char *Screen); -static GSM_Error N6110_PlayTone(int Herz, u8 Volume); +GSM_Error N6110_PlayTone(int Herz, u8 Volume); -static GSM_Error N6110_SetBitmap( GSM_Bitmap *Bitmap ); -static GSM_Error N6110_GetBitmap( GSM_Bitmap *Bitmap ); +GSM_Error N6110_SetBitmap( GSM_Bitmap *Bitmap ); +GSM_Error N6110_GetBitmap( GSM_Bitmap *Bitmap ); -static GSM_Error N6110_SetRingTone(GSM_Ringtone *ringtone, int *maxlength); -static GSM_Error N6110_SetBinRingTone(GSM_BinRingtone *ringtone); -static GSM_Error N6110_GetBinRingTone(GSM_BinRingtone *ringtone); +GSM_Error N6110_SetRingTone(GSM_Ringtone *ringtone, int *maxlength); +GSM_Error N6110_SetBinRingTone(GSM_BinRingtone *ringtone); +GSM_Error N6110_GetBinRingTone(GSM_BinRingtone *ringtone); -static GSM_Error N6110_EnableDisplayOutput(); -static GSM_Error N6110_DisableDisplayOutput(); +GSM_Error N6110_EnableDisplayOutput(); +GSM_Error N6110_DisableDisplayOutput(); -static GSM_Error N6110_EnableCellBroadcast (); -static GSM_Error N6110_DisableCellBroadcast(void); -static GSM_Error N6110_ReadCellBroadcast (GSM_CBMessage *Message); +GSM_Error N6110_EnableCellBroadcast (); +GSM_Error N6110_DisableCellBroadcast(void); +GSM_Error N6110_ReadCellBroadcast (GSM_CBMessage *Message); -static GSM_Error N6110_SendDTMF(char *String); -#endif /* UCLINUX */ +GSM_Error N6110_SendDTMF(char *String); -static GSM_Error N6110_Reset(unsigned char type); +GSM_Error N6110_Reset(unsigned char type); -#ifndef UCLINUX -static GSM_Error N6110_GetProfile(GSM_Profile *Profile); -static GSM_Error N6110_SetProfile(GSM_Profile *Profile); -#endif /* UCLINUX */ -static bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx); +GSM_Error N6110_GetProfile(GSM_Profile *Profile); +GSM_Error N6110_SetProfile(GSM_Profile *Profile); +bool N6110_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx); -static GSM_Error N6110_CancelCall(void); +GSM_Error N6110_CancelCall(void); -#ifndef UCLINUX -static GSM_Error N6110_PressKey(int key, int event); +GSM_Error N6110_PressKey(int key, int event); -static GSM_Error N6110_GetProductProfileSetting (GSM_PPS *PPS); -static GSM_Error N6110_SetProductProfileSetting (GSM_PPS *PPS); +GSM_Error N6110_GetProductProfileSetting (GSM_PPS *PPS); +GSM_Error N6110_SetProductProfileSetting (GSM_PPS *PPS); -static GSM_Error N6110_CallDivert(GSM_CallDivert *cd); -#endif /* UCLINUX */ +GSM_Error N6110_CallDivert(GSM_CallDivert *cd); -static void N6110_RX_HandleRLPMessage(u8 *MessageBuffer); +void N6110_RX_HandleRLPMessage(u8 *MessageBuffer); -static GSM_Error N6110_SendIMEIFrame(); -static GSM_Error N6110_SendIDFrame(); -static GSM_Error N6110_SendHWFrame(); +GSM_Error N6110_SendIMEIFrame(); +GSM_Error N6110_SendIDFrame(); +GSM_Error N6110_SendHWFrame(); -static GSM_Error N6110_EnableExtendedCommands (unsigned char status); +GSM_Error N6110_EnableExtendedCommands (unsigned char status); -#ifndef UCLINUX -static GSM_Error N6110_Tests(); +GSM_Error N6110_Tests(); -static void N6110_DisplayTestsInfo(u8 *MessageBuffer); +void N6110_DisplayTestsInfo(u8 *MessageBuffer); -static GSM_Error N6110_SimlockInfo(GSM_AllSimlocks *siml); -static GSM_Error N6110_GetSMSFolders ( GSM_SMSFolders *folders); +GSM_Error N6110_SimlockInfo(GSM_AllSimlocks *siml); +GSM_Error N6110_GetSMSFolders ( GSM_SMSFolders *folders); -static GSM_Error N6110_ResetPhoneSettings(); -#endif /* UCLINUX */ +GSM_Error N6110_ResetPhoneSettings(); -static void N6110_Dispatch0x01Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_Dispatch0x01Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -#ifndef UCLINUX -static void N6110_ReplySendSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplySetSMSCenter (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyGetSMSCenter (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_Dispatch0x02Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplySetCellBroadcast (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyReadCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplySendSMSMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplySetSMSCenter (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplyGetSMSCenter (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_Dispatch0x02Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplySetCellBroadcast (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplyReadCellBroadcast(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyCallDivert (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_Dispatch0x06Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -#endif /* UCLINUX */ +void N6110_ReplyCallDivert (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_Dispatch0x06Message(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -#ifndef UCLINUX -static void N6110_ReplySetDateTime(u16 MessageLength,u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyGetDateTime(u16 MessageLength,u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplySetAlarm (u16 MessageLength,u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyGetAlarm (u16 MessageLength,u8 *MessageBuffer, u8 MessageType); -#endif /* UCLINUX */ +void N6110_ReplySetDateTime(u16 MessageLength,u8 *MessageBuffer, u8 MessageType); +void N6110_ReplyGetDateTime(u16 MessageLength,u8 *MessageBuffer, u8 MessageType); +void N6110_ReplySetAlarm (u16 MessageLength,u8 *MessageBuffer, u8 MessageType); +void N6110_ReplyGetAlarm (u16 MessageLength,u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyEnableExtendedCommands (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -#ifndef UCLINUX -static void N6110_ReplyResetPhoneSettings (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -#endif /* UCLINUX */ -static void N6110_ReplyIMEI (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -#ifndef UCLINUX -static void N6110_ReplyGetProductProfileSetting(u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_ReplySetProductProfileSetting(u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_ReplyNetmonitor (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_ReplySimlockInfo (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_ReplyPlayTone (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -#endif /* UCLINUX */ -static void N6110_ReplyHW (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_Dispatch0x40Message (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyEnableExtendedCommands (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyResetPhoneSettings (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyIMEI (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyGetProductProfileSetting(u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplySetProductProfileSetting(u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyNetmonitor (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplySimlockInfo (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyPlayTone (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_ReplyHW (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); +void N6110_Dispatch0x40Message (u16 MessageLength,u8 *MessageBuffer,u8 MessageType); -static void N6110_DispatchACKMessage (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -static void N6110_ReplyID(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_DispatchACKMessage (u16 MessageLength, u8 *MessageBuffer, u8 MessageType); +void N6110_ReplyID(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); -#ifndef UCLINUX -static GSM_Error GSM_EncodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int *length, SMS_MessageType PDU); -static GSM_Error GSM_DecodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int length); +GSM_Error GSM_EncodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int *length, SMS_MessageType PDU); +GSM_Error GSM_DecodeNokiaSMSFrame(GSM_SMSMessage *SMS, unsigned char *req, int length); -static int N6110_MakeCallerGroupFrame (unsigned char *req,GSM_Bitmap Bitmap); -static int N6110_MakeOperatorLogoFrame(unsigned char *req,GSM_Bitmap Bitmap); -static int N6110_MakeStartupLogoFrame (unsigned char *req,GSM_Bitmap Bitmap); -#endif /* UCLINUX */ +int N6110_MakeCallerGroupFrame (unsigned char *req,GSM_Bitmap Bitmap); +int N6110_MakeOperatorLogoFrame(unsigned char *req,GSM_Bitmap Bitmap); +int N6110_MakeStartupLogoFrame (unsigned char *req,GSM_Bitmap Bitmap); #endif /* __n_6110_h */ diff --git a/include/newmodules/n7110.h b/include/newmodules/n7110.h index c9a85ea..75f79ca 100644 --- a/include/newmodules/n7110.h +++ b/include/newmodules/n7110.h @@ -101,7 +101,9 @@ GSM_Error N7110_DeleteSMSMessage(GSM_SMSMessage *Message); GSM_Error N7110_SaveSMSMessage(GSM_SMSMessage *SMS); GSM_Error N7110_GetMemoryLocation(GSM_PhonebookEntry *entry); +void N7110_DecodePhonebookFrame(GSM_PhonebookEntry *entry,u8 *MessageBuffer,u16 MessageLength); GSM_Error N7110_WritePhonebookLocation(GSM_PhonebookEntry *entry); +int N7110_EncodePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int *block); GSM_Error N7110_DeletePhonebookLocation(GSM_PhonebookEntry *entry); GSM_Error N7110_WriteGroupDataLocation(GSM_Bitmap *bitmap); @@ -142,6 +144,4 @@ void N7110_ReplyGetWAPSettings (u16 MessageLength,u8 *MessageBuffer,u8 Message void N7110_Fake2SMSLocation(int smsnum, u8 *folder, int *location); void N7110_SMS2FakeLocation(int *smsnum, u8 folder, int location); -int N7110_MakePhonebookFrame(unsigned char *req, GSM_PhonebookEntry entry, int *block); - #endif /* __n_7110_h */ diff --git a/include/newmodules/sniff/sniff.h b/include/newmodules/sniff/sniff.h index 27b979c..f2c20af 100644 --- a/include/newmodules/sniff/sniff.h +++ b/include/newmodules/sniff/sniff.h @@ -1,32 +1,32 @@ -/* - - G N O K I I - - A Linux/Unix toolset and driver for Nokia mobile phones. - - Released under the terms of the GNU GPL, see file COPYING for more details. - - Header file for the various functions, definitions etc. used to implement - the handset interface. See fbus-sniff.c for more details. - -*/ - -#ifndef __n_sniff_h -#define __n_sniff_h - -#include "gsm-api.h" - -/* Global variables */ -extern bool Nsniff_LinkOK; -extern GSM_Functions Nsniff_Functions; -extern GSM_Information Nsniff_Information; - -/* Prototypes for the functions designed to be used externally. */ -GSM_Error Nsniff_Initialise(char *port_device, char *initlength, - GSM_ConnectionType connection, - void (*rlp_callback)(RLP_F96Frame *frame)); - +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the various functions, definitions etc. used to implement + the handset interface. See fbus-sniff.c for more details. + +*/ + +#ifndef __n_sniff_h +#define __n_sniff_h + +#include "gsm-api.h" + +/* Global variables */ +extern bool Nsniff_LinkOK; +extern GSM_Functions Nsniff_Functions; +extern GSM_Information Nsniff_Information; + +/* Prototypes for the functions designed to be used externally. */ +GSM_Error Nsniff_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + void Nsniff_DispatchMessage(u16 MessageLength, u8 *MessageBuffer, u8 MessageType); - -#endif /* __n_sniff_h */ + +#endif /* __n_sniff_h */ diff --git a/include/protocol/fbus.h b/include/protocol/fbus.h index a42a7fa..1340262 100644 --- a/include/protocol/fbus.h +++ b/include/protocol/fbus.h @@ -49,4 +49,13 @@ enum FBUS_RX_States { FBUS_RX_GetMessage }; +GSM_Error FBUS_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + +int FBUS_SendMessage(u16 message_length, u8 message_type, u8 *buffer); +int FBUS_SendFrame(u16 message_length, u8 message_type, u8 *buffer); +void FBUS_Terminate(void); +void FBUS_RX_StateMachine(unsigned char rx_byte); + #endif /* __fbus_h */ diff --git a/include/uccompat.h b/include/uccompat.h deleted file mode 100644 index f3676c9..0000000 --- a/include/uccompat.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - - $Id$ - - G N O K I I - - A Linux/Unix toolset and driver for Nokia mobile phones. - - Released under the terms of the GNU GPL, see file COPYING for more details. - -*/ - -#ifndef __UCCOMPAT_H__ -#define __UCCOMPAT_H__ - -#ifdef UCCOMPAT - - -/* Handle non-existing atoi() */ -#include -#define atoi(s) ({ \ - long _atoi_l=strtol((s), (char **)NULL, 10); \ - /**/ if (_atoi_lINT_MAX) _atoi_l=INT_MAX; \ - _atoi_l; \ - }) - -#define strchr _Xstrchr -#define strrchr _Xstrrchr -#include -#undef strchr -#undef strrchr -extern char * strchr __P ((const char *, int)); -extern char * strrchr __P ((const char *, int)); - -extern pid_t getpid(void); -extern int execv(const char *path, char *const argv[]); -extern int nice(int inc); - - -#endif /* UCCOMPAT */ - -#endif /* __UCCOMPAT_H__ */ diff --git a/readme b/readme deleted file mode 100644 index 5556190..0000000 --- a/readme +++ /dev/null @@ -1,83 +0,0 @@ -1.What is this ? ----------------- -This is my own version of gnokii... - -It's related rather to improvements in command line gnokii and in the main code. -It was created from CVS gnokii 0.3.3_pre8-gold and contains many other changes. -I decided to make it, since gnokii project seemed to be frozen (from 07.2000 ?) -and my changes were ignored - -In this moment CVS gnokii is developed again. It went into different -direction (doesn't use threads and probably will work better on multi CPU -systems), but many functions still are worse than in mygnokii -Now there is small cooperation of these two projects(some new CVS source is in mygnokii and some things from mygnokii are in CVS),but they're more and more different and I don't know, if they will join -again (well, I implemented almost all Smart Messaging and other functions -Everything works rather correct and only bugs need to be removed. Because of -it I'm not sure, if it will have sence for me to write it again for CVS gnokii- especially, that I don't like organisation there and IMHO every change needs -there tons of explanations and emails) - -So, if you think, that mygnokii works better for you, use it and please help -in improving or testing. I will try to answer on each your email (of course, -I can't promise :-( ). - -If you like more CVS gnokii, use gnokii. That's all. - -2.Where to send your updates to gnokii ? ----------------------------------------- -If you made something - patch, script, etc., which could be useful for gnokii -users, please send it to the Marcin-Wiacek@Topnet.PL. THX - -3.How to apply patches ? ------------------------- -Make "patch < patchfile", where patchfile is name of file with patch. - -4.How to create patches ? -------------------------- -1.copy source with gnokii, you start from, into "gnokii" dir -2.copy source with gnokii, you want to modify, into "work" dir -3.make changes in "work" -4.go into subdirectory with "gnokii" and "work" -5.make "diff -urx CVS gnokii work > patchfile" -6.send "patchfile" to me ;-) - -5.TODO ------- -6210: - * setting Picture Images - * support for voice tags in phonebook - * NBS (with preview) uploading for caller/op logos - * test and eventually make full support for speed dials - -Other: - * make DLR3 init using AT-commands (will work for more phones) - * support for 5210, 5510, 6310, 6510, 8310 (sniffs required) - * support for irda sockets in win32 - * EMS - * support for more AT phones and commands - * compatibility with gnomecal (Bostjan - I remember ;-)) - * end backup/restore - * end xgnokii and delphi gui - * move some things from gnokii (lockfile, setting smsc in gnokii) - -6.BUGS and INCOMPATIBILITIES ----------------------------- -6210: - * why during saving startup logo last few bytes are cut ? - (need to use gnokii --setlogo 7110startup ... first) - -Other: - * gnome viewers have sometimes problems with displaying bmp files - written by gnokii. This is NOT mygnokii fault. - * phone sometimes doesn't want to speak over mbus (when previous - transmission was cut - some ACK were not sent/received) in command line - gnokii in Unix/Linux. Must restart phone and then and works... - * sometimes, when read alphanumeric numbers, name is 1 char too long - * when save some SMS to phone (8 bit with UDH), after forwarding them - from phone menu they're changed. 100% firmware bug (6210, probably - each Nokia phone with SMS memory) - ------ -If know some other, please let me know to marcin-wiacek@topnet.pl. -Please include version of mygnokii, description of bug and debug info from it -(you can use "logfile" option in gnokiirc to make it). - \ No newline at end of file diff --git a/utils/Makefile b/utils/Makefile index e724eac..04af119 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -11,7 +11,7 @@ include $(TOPDIR)/Makefile.global OBJS = mgnokiidev.o -all: #mgnokiidev +all: mgnokiidev mgnokiidev: $(OBJS) diff --git a/win32_makefile/dll_vc6/GnokiiAPI.def b/win32_makefile/dll_vc6/GnokiiAPI.def index b446cd6..ef34458 100644 --- a/win32_makefile/dll_vc6/GnokiiAPI.def +++ b/win32_makefile/dll_vc6/GnokiiAPI.def @@ -69,3 +69,9 @@ EXPORTS mywritephonebooklocation @61 mysavewapbookmarktosms @62 mysavewapsettingstosms @63 + mysavebackupfile @64 + myreadbackupfile @65 + mygetphoneringtone @66 + mysaveringtonefile @67 + mysavebinringtonefile @68 + mydialvoice @69 diff --git a/win32_makefile/dll_vc6/GnokiiAPI.dsp b/win32_makefile/dll_vc6/GnokiiAPI.dsp index e5c0034..e507cb5 100644 --- a/win32_makefile/dll_vc6/GnokiiAPI.dsp +++ b/win32_makefile/dll_vc6/GnokiiAPI.dsp @@ -31,8 +31,6 @@ RSC=rc.exe !IF "$(CFG)" == "GnokiiAPI - Win32 Release" - - # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" @@ -43,8 +41,8 @@ RSC=rc.exe # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" -# ADD BASE CPP /nologo /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /MT /W3 /GX /O2 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /c -# ADD CPP /nologo /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /MT /W3 /GX /O2 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /c +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x404 /d "NDEBUG" @@ -68,8 +66,8 @@ LINK32=link.exe # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /Gm /GX /ZI /Od /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /FR /YX /FD /GZ /c +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "USE_NLS" /D "SECURITY" /D "HAVE_TIMEOPS" /D "WIN32" /D "VC6" /D "__svr4__" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GNOKIIAPI_EXPORTS" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x404 /d "_DEBUG" @@ -92,7 +90,7 @@ LINK32=link.exe # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File -SOURCE=".\gnokiiapi.def" +SOURCE=".\at.c" # End Source File # Begin Source File @@ -100,95 +98,99 @@ SOURCE=".\cfgreader.c" # End Source File # Begin Source File -SOURCE=".\gsm-calendar.c" +SOURCE=".\device.c" # End Source File # Begin Source File -SOURCE=".\gsm-phonebook.c" +SOURCE=".\fbus.c" # End Source File # Begin Source File -SOURCE=".\gsm-sms.c" +SOURCE=".\fbus3110.c" # End Source File # Begin Source File -SOURCE=".\gsm-wap.c" +SOURCE=".\fbusirda.c" # End Source File # Begin Source File -SOURCE=".\device.c" +SOURCE=".\getopt.c" # End Source File # Begin Source File -SOURCE=".\n7110.c" +SOURCE=".\gnokiiapi.c" # End Source File # Begin Source File -SOURCE=".\n6110.c" +SOURCE=".\gnokiiapi.def" # End Source File # Begin Source File -SOURCE=".\sniff.c" +SOURCE=".\gsm-api.c" # End Source File # Begin Source File -SOURCE=".\mbus.c" +SOURCE=".\gsm-bitmaps.c" # End Source File # Begin Source File -SOURCE=".\fbusirda.c" +SOURCE=".\gsm-calendar.c" # End Source File # Begin Source File -SOURCE=".\fbus.c" +SOURCE=".\gsm-coding.c" # End Source File # Begin Source File -SOURCE=".\gsm-ringtones.c" +SOURCE=".\gsm-datetime.c" # End Source File # Begin Source File -SOURCE=".\gsm-bitmaps.c" +SOURCE=".\gsm-filetypes.c" # End Source File # Begin Source File -SOURCE=".\midifile.c" +SOURCE=".\gsm-networks.c" # End Source File # Begin Source File -SOURCE=".\getopt.c" +SOURCE=".\gsm-phonebook.c" # End Source File # Begin Source File -SOURCE=".\gnokiiapi.c" +SOURCE=".\gsm-ringtones.c" # End Source File # Begin Source File -SOURCE=".\gsm-api.c" +SOURCE=".\gsm-sms.c" # End Source File # Begin Source File -SOURCE=".\gsm-filetypes.c" +SOURCE=".\gsm-wap.c" # End Source File # Begin Source File -SOURCE=".\gsm-networks.c" +SOURCE=".\mbus.c" # End Source File # Begin Source File -SOURCE=".\rlp-common.c" +SOURCE=".\midifile.c" # End Source File # Begin Source File -SOURCE=".\rlp-crc24.c" +SOURCE=".\misc.c" # End Source File # Begin Source File -SOURCE=".\winserial.c" +SOURCE=".\n3110.c" # End Source File # Begin Source File -SOURCE=".\at.c" +SOURCE=".\n6110.c" +# End Source File +# Begin Source File + +SOURCE=".\n7110.c" # End Source File # Begin Source File @@ -196,15 +198,19 @@ SOURCE=".\newat.c" # End Source File # Begin Source File -SOURCE=".\gsm-datetime.c" +SOURCE=".\rlp-common.c" # End Source File # Begin Source File -SOURCE=".\gsm-coding.c" +SOURCE=".\rlp-crc24.c" # End Source File # Begin Source File -SOURCE=".\misc.c" +SOURCE=".\sniff.c" +# End Source File +# Begin Source File + +SOURCE=".\winserial.c" # End Source File # End Group # Begin Group "Header Files" @@ -212,11 +218,15 @@ SOURCE=".\misc.c" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File +SOURCE=".\at.h" +# End Source File +# Begin Source File + SOURCE=.\cfgreader.h # End Source File # Begin Source File -SOURCE=".\n6110.h" +SOURCE=.\fbusirda.h # End Source File # Begin Source File @@ -232,55 +242,55 @@ SOURCE=".\gsm-api.h" # End Source File # Begin Source File -SOURCE=".\gsm-common.h" +SOURCE=".\gsm-coding.h" # End Source File # Begin Source File -SOURCE=".\at.h" +SOURCE=".\gsm-common.h" # End Source File # Begin Source File -SOURCE=".\gsm-wap.h" +SOURCE=".\gsm-datetime.h" # End Source File # Begin Source File -SOURCE=".\gsm-coding.h" +SOURCE=".\gsm-filetypes.h" # End Source File # Begin Source File -SOURCE=".\gsm-datetime.h" +SOURCE=".\gsm-networks.h" # End Source File # Begin Source File -SOURCE=".\newat.h" +SOURCE=".\gsm-wap.h" # End Source File # Begin Source File -SOURCE=".\gsm-filetypes.h" +SOURCE=.\misc.h # End Source File # Begin Source File -SOURCE=".\gsm-networks.h" +SOURCE=".\win32\misc_win32.h" # End Source File # Begin Source File -SOURCE=.\misc.h +SOURCE=".\n3110.h" # End Source File # Begin Source File -SOURCE=".\rlp-common.h" +SOURCE=".\n6110.h" # End Source File # Begin Source File -SOURCE=.\fbusirda.h +SOURCE=".\newat.h" # End Source File # Begin Source File -SOURCE=".\rlp-crc24.h" +SOURCE=".\rlp-common.h" # End Source File # Begin Source File -SOURCE=".\win32\misc_win32.h" +SOURCE=".\rlp-crc24.h" # End Source File # Begin Source File @@ -290,6 +300,10 @@ SOURCE=.\winserial.h # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Script1.rc +# End Source File # End Group # End Target # End Project diff --git a/win32_makefile/dll_vc6/clean.bat b/win32_makefile/dll_vc6/clean.bat index d39fbe0..c726be5 100644 --- a/win32_makefile/dll_vc6/clean.bat +++ b/win32_makefile/dll_vc6/clean.bat @@ -1,6 +1,7 @@ @echo off ren gnokiiapi.c gnokiiapi.1 > nul ren gnokiiapi.h gnokiiapi.2 > nul +ren resource.h resource.1 > nul call ..\clean.bat make del release\*.pch > nul del release\*.exe > nul @@ -18,4 +19,5 @@ del debug\*.ilk > nul rmdir debug > nul ren gnokiiapi.1 gnokiiapi.c > nul ren gnokiiapi.2 gnokiiapi.h > nul +ren resource.1 resource.h > nul del log > nul \ No newline at end of file diff --git a/win32_makefile/dll_vc6/gnokiiapi.c b/win32_makefile/dll_vc6/gnokiiapi.c index 627e3ea..cfd5652 100644 --- a/win32_makefile/dll_vc6/gnokiiapi.c +++ b/win32_makefile/dll_vc6/gnokiiapi.c @@ -415,3 +415,34 @@ int WINAPI mysetwapbookmark(GSM_WAPBookmark *bookmark) { return GSM->SetWAPBookmark(bookmark); } + +int WINAPI mysavebackupfile(char *FileName, GSM_Backup *backup) +{ + return GSM_SaveBackupFile(FileName,backup); +} + +int WINAPI myreadbackupfile(char *FileName, GSM_Backup *backup) +{ + return GSM_ReadBackupFile(FileName,backup); +} + +int WINAPI mygetphoneringtone(GSM_BinRingtone *ringtone,GSM_Ringtone *SMringtone) +{ + return GSM_GetPhoneRingtone(ringtone,SMringtone); +} + +int WINAPI mysaveringtonefile(char *FileName, GSM_Ringtone *ringtone) +{ + return GSM_SaveRingtoneFile(FileName,ringtone); +} + +int WINAPI mysavebinringtonefile(char *FileName, GSM_BinRingtone *ringtone) +{ + return GSM_SaveBinRingtoneFile(FileName,ringtone); +} + +int WINAPI mydialvoice(char *Number) +{ + return GSM->DialVoice(Number); +} + diff --git a/win32_makefile/dll_vc6/gnokiiapi.h b/win32_makefile/dll_vc6/gnokiiapi.h index 6e073a8..5d35068 100644 --- a/win32_makefile/dll_vc6/gnokiiapi.h +++ b/win32_makefile/dll_vc6/gnokiiapi.h @@ -32,6 +32,9 @@ int WINAPI mygettempo(int beats); int WINAPI myplaytone(int Herz, u8 Volume); int WINAPI myreadbinringtonefile(char *FileName, GSM_BinRingtone *ringtone); int WINAPI mysetbinringtone(GSM_BinRingtone *ringtone); +int WINAPI mygetphoneringtone(GSM_BinRingtone *ringtone,GSM_Ringtone *SMringtone); +int WINAPI mysaveringtonefile(char *FileName, GSM_Ringtone *ringtone); +int WINAPI mysavebinringtonefile(char *FileName, GSM_BinRingtone *ringtone); int WINAPI myreadbitmapfile(char *FileName, GSM_Bitmap *bitmap); int WINAPI mysavebitmapfile(char *FileName, GSM_Bitmap *bitmap); @@ -104,3 +107,8 @@ int WINAPI mysetwapbookmark(GSM_WAPBookmark *bookmark); int WINAPI mygetwapsettings(GSM_WAPSettings *settings); int WINAPI mycalldivert(GSM_CallDivert *divert); + +int WINAPI mysavebackupfile(char *FileName, GSM_Backup *backup); +int WINAPI myreadbackupfile(char *FileName, GSM_Backup *backup); + +int WINAPI mydialvoice(char *Number); diff --git a/win32_makefile/gnokii_vc6/gnokii.mak b/win32_makefile/gnokii_vc6/gnokii.mak index c68a939..2c0346e 100644 --- a/win32_makefile/gnokii_vc6/gnokii.mak +++ b/win32_makefile/gnokii_vc6/gnokii.mak @@ -45,11 +45,13 @@ CLEAN : -@erase "$(INTDIR)\device.obj" -@erase "$(INTDIR)\at.obj" -@erase "$(INTDIR)\fbus.obj" + -@erase "$(INTDIR)\fbus3110.obj" -@erase "$(INTDIR)\fbusirda.obj" -@erase "$(INTDIR)\mbus.obj" -@erase "$(INTDIR)\n7110.obj" -@erase "$(INTDIR)\newat.obj" -@erase "$(INTDIR)\n6110.obj" + -@erase "$(INTDIR)\n3110.obj" -@erase "$(INTDIR)\sniff.obj" -@erase "$(INTDIR)\misc.obj" -@erase "$(INTDIR)\getopt.obj" @@ -118,12 +120,14 @@ LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi3 LINK32_OBJS= \ "$(INTDIR)\cfgreader.obj" \ "$(INTDIR)\n6110.obj" \ + "$(INTDIR)\n3110.obj" \ "$(INTDIR)\sniff.obj" \ "$(INTDIR)\fbusirda.obj" \ "$(INTDIR)\n7110.obj" \ "$(INTDIR)\newat.obj" \ "$(INTDIR)\mbus.obj" \ "$(INTDIR)\fbus.obj" \ + "$(INTDIR)\fbus3110.obj" \ "$(INTDIR)\at.obj" \ "$(INTDIR)\device.obj" \ "$(INTDIR)\gsm-sms.obj" \ @@ -164,10 +168,12 @@ ALL : "$(OUTDIR)\gnokii.exe" CLEAN : -@erase "$(INTDIR)\cfgreader.obj" -@erase "$(INTDIR)\fbus.obj" + -@erase "$(INTDIR)\fbus3110.obj" -@erase "$(INTDIR)\mbus.obj" -@erase "$(INTDIR)\at.obj" -@erase "$(INTDIR)\n7110.obj" -@erase "$(INTDIR)\n6110.obj" + -@erase "$(INTDIR)\n3110.obj" -@erase "$(INTDIR)\sniff.obj" -@erase "$(INTDIR)\fbusirda.obj" -@erase "$(INTDIR)\newat.obj" @@ -242,8 +248,10 @@ LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi3 LINK32_OBJS= \ "$(INTDIR)\cfgreader.obj" \ "$(INTDIR)\n6110.obj" \ + "$(INTDIR)\n3110.obj" \ "$(INTDIR)\sniff.obj" \ "$(INTDIR)\fbusirda.obj" \ + "$(INTDIR)\fbus3110.obj" \ "$(INTDIR)\n7110.obj" \ "$(INTDIR)\newat.obj" \ "$(INTDIR)\mbus.obj" \ @@ -342,6 +350,11 @@ SOURCE="n6110.c" "$(INTDIR)\n6110.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) +SOURCE="n3110.c" + +"$(INTDIR)\n3110.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + SOURCE="sniff.c" "$(INTDIR)\sniff.obj" : $(SOURCE) "$(INTDIR)" @@ -362,6 +375,11 @@ SOURCE="fbus.c" "$(INTDIR)\fbus.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) +SOURCE="fbus3110.c" + +"$(INTDIR)\fbus3110.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + SOURCE="gsm-ringtones.c" "$(INTDIR)\gsm-ringtones.obj" : $(SOURCE) "$(INTDIR)" diff --git a/win32_makefile/gui_delphi/Calendar.dfm b/win32_makefile/gui_delphi/Calendar.dfm index a790c8f..9fb78db 100644 --- a/win32_makefile/gui_delphi/Calendar.dfm +++ b/win32_makefile/gui_delphi/Calendar.dfm @@ -78,7 +78,7 @@ object CalendarForm: TCalendarForm DateMode = dmComboBox Kind = dtkDate ParseInput = False - TabOrder = 3 + TabOrder = 2 OnChange = DateTimePicker1Change end object GroupBox1: TGroupBox @@ -87,7 +87,7 @@ object CalendarForm: TCalendarForm Width = 289 Height = 73 Caption = 'Alarm' - TabOrder = 5 + TabOrder = 4 object Label6: TLabel Left = 80 Top = 16 @@ -168,7 +168,7 @@ object CalendarForm: TCalendarForm Width = 81 Height = 25 Caption = '&OK' - TabOrder = 6 + TabOrder = 5 OnClick = Button1Click end object Button2: TButton @@ -177,7 +177,7 @@ object CalendarForm: TCalendarForm Width = 89 Height = 25 Caption = '&Cancel' - TabOrder = 7 + TabOrder = 6 OnClick = Button2Click end object DateTimePicker3: TDateTimePicker @@ -192,15 +192,7 @@ object CalendarForm: TCalendarForm DateMode = dmComboBox Kind = dtkTime ParseInput = False - TabOrder = 4 - end - object Edit1: TEdit - Left = 88 - Top = 80 - Width = 137 - Height = 21 - TabOrder = 2 - Text = 'Edit1' + TabOrder = 3 end object CheckBox2: TCheckBox Left = 16 @@ -208,7 +200,7 @@ object CalendarForm: TCalendarForm Width = 81 Height = 17 Caption = 'Recurrance' - TabOrder = 8 + TabOrder = 7 OnClick = CheckBox2Click end object ComboBox2: TComboBox @@ -218,7 +210,7 @@ object CalendarForm: TCalendarForm Height = 21 ItemHeight = 13 ItemIndex = 0 - TabOrder = 9 + TabOrder = 8 Text = '1 day' Items.Strings = ( '1 day' @@ -226,4 +218,12 @@ object CalendarForm: TCalendarForm '2 weeks (14 days)' '1 year (365 days)') end + object ComboBox3: TComboBox + Left = 88 + Top = 80 + Width = 201 + Height = 21 + ItemHeight = 13 + TabOrder = 9 + end end diff --git a/win32_makefile/gui_delphi/Calendar.pas b/win32_makefile/gui_delphi/Calendar.pas index 882d5d3..6b8a03b 100644 --- a/win32_makefile/gui_delphi/Calendar.pas +++ b/win32_makefile/gui_delphi/Calendar.pas @@ -22,13 +22,13 @@ type Button2: TButton; DateTimePicker3: TDateTimePicker; DateTimePicker4: TDateTimePicker; - Edit1: TEdit; Label5: TLabel; Label6: TLabel; CheckBox2: TCheckBox; ComboBox2: TComboBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; + ComboBox3: TComboBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure CheckBox1Click(Sender: TObject); @@ -52,7 +52,7 @@ implementation procedure TCalendarForm.Button1Click(Sender: TObject); var - i:integer; + i,j,z:integer; s:string; begin case ComboBox1.ItemIndex of @@ -69,8 +69,39 @@ begin for i:=1 to 37 do setcalendarnote.Phone[i]:=chr(0); - for i:=1 to strlen(pchar(Edit1.text)) do - setcalendarnote.Phone[i]:=Edit1.Text[i]; + if (ComboBox3.ItemIndex=-1) then + begin + for i:=1 to strlen(pchar(ComboBox3.text)) do + setcalendarnote.Phone[i]:=ComboBox3.Text[i]; + end else + begin + ReadPBKOffline; + for z:=1 to PBKOfflineNumber do + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[z].Name; + if (MainForm.Label16.Caption=ComboBox3.Text) then + begin + if (PhoneBackup.PhonePhonebook[z].Number[1]<>chr(0)) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[z].Number; + for i:=1 to strlen(pchar(MainForm.Label14.Caption)) do + setcalendarnote.Phone[i]:=PhoneBackup.PhonePhonebook[z].Number[i]; + end else + begin + for j:=1 to PhoneBackup.PhonePhonebook[z].SubEntriesCount do + begin + if PhoneBackup.PhonePhonebook[z].SubEntries[j].EntryType=GSM_Number then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[z].SubEntries[j].Number; + for i:=1 to strlen(pchar(MainForm.Label14.Caption)) do + setcalendarnote.Phone[i]:=PhoneBackup.PhonePhonebook[z].SubEntries[j].Number[i]; + break; + end; + end; + end; + end; + end; + end; DateTimeToString(s, 'yyyy',CalendarForm.DateTimePicker1.Date); setcalendarnote.Time.Year:=strtoint(s); @@ -203,11 +234,11 @@ begin end; if ComboBox1.ItemIndex=1 then //call begin - CalendarForm.Edit1.Enabled:=True; + CalendarForm.ComboBox3.Enabled:=True; CalendarForm.Label4.Enabled:=True; end else begin - CalendarForm.Edit1.Enabled:=False; + CalendarForm.ComboBox3.Enabled:=False; CalendarForm.Label4.Enabled:=False; end; end; diff --git a/win32_makefile/gui_delphi/GnokiiAPI.pas b/win32_makefile/gui_delphi/GnokiiAPI.pas index 02ac803..4d6e425 100644 --- a/win32_makefile/gui_delphi/GnokiiAPI.pas +++ b/win32_makefile/gui_delphi/GnokiiAPI.pas @@ -9,6 +9,7 @@ uses Classes,Forms,SysUtils; const GSM_General = 10; + GSM_General2= 11; GSM_Mobile = 3; GSM_Work = 6; GSM_Fax = 4; @@ -92,19 +93,32 @@ const const FN_CALENDAR=0; FN_CALLERGROUPS=2; + FN_PHONEBOOK=3; FN_SMS=11; + FN_STARTUP=13; FN_PROFILES=14; + FN_RINGTONES=15; FN_WAP=16; - - F_CAL61=0;//Calendar in 6110 style - 4 types,... - F_CAL33=1;//Calendar in 3310 style - 10 reminders, Unicode, 3 coding types - F_CAL71=2;//Calendar in 7110 style - 4 types, recurrance, etc. - - F_SMS =7; //SMS with Inbox, Outbox - F_SMS71=8; //SMS with SMS folders like in 7110 - F_PROF61=22;//Profiles numbered like in N6110 - F_PROF51=23;//Profiles numbered like in N5110 - F_PROF33=24;//Profiles numbered like in N3310.Unicode names + FN_RINGNUMBER=17; + + F_CAL61=1; //Calendar in 6110 style - 4 types,... + F_CAL33=2; //Calendar in 3310 style - 10 reminders, Unicode, 3 coding types + F_CAL71=3; //Calendar in 7110 style - 4 types, recurrance, etc. + F_PBK33SIM=4;//Phonebook in Unicode(3310 style).Name and number.No internal + F_PBK33INT=5;//Phonebook in Unicode(3310 style).Name and number.Internal available + F_PBK71INT=6;//Extended phonebook-multiple numbers,Unicode(7110 style).Internal available + F_PBK61INT=7;//Name and number,no Unicode(6110 style).Internal available + F_SMS =10; //SMS with Inbox, Outbox + F_SMS71=11; //SMS with SMS folders like in 7110 + F_STANIM=21; //Startup logo animated or static + F_STA=22; //Startup logo static + F_STA62=23; //Startup logo static size 6210 + F_STA71=24; //Startup logo static size 7110 + F_PROF61=25; //Profiles numbered like in N6110 + F_PROF51=26; //Profiles numbered like in N5110 + F_PROF33=27; //Profiles numbered like in N3310.Unicode names + F_RING_SM=28;//Binary ringtone in Smart Messaging + F_RINGBIN=29;//Binary ringtone in binary format const GE_SMSTOOLONG=22; @@ -223,7 +237,7 @@ type GSM_Bitmap=record heigh:byte; width:byte; - size:smallint; + size:word; type2:integer; netcode:array[1..7] of char; text:array[1..256] of char; @@ -430,6 +444,31 @@ type end; PGSM_CallDivert=^GSM_CallDivert; + GSM_Backup=record + SIMPhonebookUsed:integer; + SIMPhonebookSize:integer; + SIMPhonebook:array[1..250] of GSM_PhonebookEntry; + + PhonePhonebookUsed:integer; + PhonePhonebookSize:integer; + PhonePhonebook:array[1..500] of GSM_PhonebookEntry; + + CallerAvailable:integer; + CallerGroups:array[1..5] of GSM_Bitmap; + + SpeedAvailable:integer; + SpeedDials:array[1..8] of GSM_SpeedDial; + + OperatorLogoAvailable:integer; + OperatorLogo:GSM_Bitmap; + + StartupLogoAvailable:integer; + StartupLogo:GSM_Bitmap; + + StartupText:GSM_Bitmap; + end; + PGSM_Backup=^GSM_Backup; + var GSMPhoneConnected: boolean=false; GSMNetworkInfo: GSM_NetworkInfo; @@ -467,7 +506,10 @@ function GSM_ReadRingtoneFile(filename:Pchar;ringtone:PGSM_Ringtone): integer; s function GSM_SetRingtone(ringtone:PGSM_Ringtone;notes:Pinteger): integer; stdcall; external 'gnokiiapi.dll' name 'mysetringtone'; function GSM_ReadBinRingtoneFile(filename:Pchar;ringtone:PGSM_BinRingtone): integer; stdcall; external 'gnokiiapi.dll' name 'myreadbinringtonefile'; function GSM_SetBinRingtone(ringtone:PGSM_BinRingtone): integer; stdcall; external 'gnokiiapi.dll' name 'mysetbinringtone'; +function GSM_GetPhoneRingtone(ringtone:PGSM_BinRingtone;SMringtone:PGSM_Ringtone): integer; stdcall; external 'gnokiiapi.dll' name 'mygetphoneringtone'; function GSM_PlayRingtone(ringtone:PGSM_Ringtone): integer; stdcall; external 'gnokiiapi.dll' name 'myplayringtone'; +function GSM_SaveRingtoneFile(filename:Pchar;ringtone:PGSM_Ringtone): integer; stdcall; external 'gnokiiapi.dll' name 'mysaveringtonefile'; +function GSM_SaveBinRingtoneFile(filename:Pchar;ringtone:PGSM_BinRingtone): integer; stdcall; external 'gnokiiapi.dll' name 'mysavebinringtonefile'; function GSM_PlayNote(note:GSM_RingtoneNote): integer; stdcall; external 'gnokiiapi.dll' name 'myplaynote'; function GSM_PlayTone(herz:integer;volume:byte): integer; stdcall; external 'gnokiiapi.dll' name 'myplaytone'; function GSM_GetTempo(beats:integer): integer; stdcall; external 'gnokiiapi.dll' name 'mygettempo'; @@ -536,6 +578,11 @@ function GSM_GetWAPSettings(settings:PGSM_WAPSettings): integer; stdcall; extern function GSM_CallDivertOperation(divert:PGSM_CallDivert): integer; stdcall; external 'gnokiiapi.dll' name 'mycalldivert'; +function GSM_SaveBackupFile(filename:Pchar;backup:PGSM_Backup): integer; stdcall; external 'gnokiiapi.dll' name 'mysavebackupfile'; +function GSM_ReadBackupFile(filename:Pchar;backup:PGSM_Backup): integer; stdcall; external 'gnokiiapi.dll' name 'myreadbackupfile'; + +function GSM_DialVoice(Number:PChar): integer; stdcall; external 'gnokiiapi.dll' name 'mydialvoice'; + implementation procedure TSparkyThread.Execute; @@ -548,7 +595,8 @@ begin begin GSMPhoneConnected:=false; GSM_Terminate(); - end else begin + end else + begin if not SparkyThread.Suspended then SparkyThread.Suspend; end; end else diff --git a/win32_makefile/gui_delphi/Project1.dof b/win32_makefile/gui_delphi/Project1.dof index 8aac424..3c454bd 100644 --- a/win32_makefile/gui_delphi/Project1.dof +++ b/win32_makefile/gui_delphi/Project1.dof @@ -60,7 +60,7 @@ DebugCWD= IncludeVerInfo=1 AutoIncBuild=1 MajorVer=0 -MinorVer=1 +MinorVer=3 Release=0 Build=0 Debug=0 @@ -73,13 +73,13 @@ CodePage=1250 [Version Info Keys] CompanyName= FileDescription= -FileVersion=0.1.0.0 +FileVersion=0.3.0.0 InternalName= -LegalCopyright= +LegalCopyright=Marcin Wiacek http://marcin-wiacek.topnet.pl LegalTrademarks= OriginalFilename= ProductName= -ProductVersion=1.0.0.0 +ProductVersion=0.3.0.0 Comments= [HistoryLists\hlUnitAliases] Count=1 diff --git a/win32_makefile/gui_delphi/Project1.dpr b/win32_makefile/gui_delphi/Project1.dpr index 67d832d..48b8209 100644 --- a/win32_makefile/gui_delphi/Project1.dpr +++ b/win32_makefile/gui_delphi/Project1.dpr @@ -9,7 +9,11 @@ uses Calendar in 'Calendar.pas' {CalendarForm}, SMSEdit in 'smsedit.pas' {SMSEditForm}, smscedit in 'smscedit.pas' {SMSCEditForm}, - pbkedit in 'pbkedit.pas' {PbkForm}; + pbkedit in 'pbkedit.pas' {PbkForm}, + backup in 'backup.pas' {BackupForm}, + backup2 in 'backup2.pas' {BackupProgressForm}, + pbkedit2 in 'pbkedit2.pas' {PBKEditForm}, + wapbook in 'wapbook.pas' {WAPBookForm}; {$R *.res} @@ -24,5 +28,9 @@ begin Application.CreateForm(TSMSCEditForm, SMSCEditForm); Application.CreateForm(TPbkForm, PbkForm); Application.CreateForm(TNetmonForm, NetmonForm); + Application.CreateForm(TBackupForm, BackupForm); + Application.CreateForm(TBackupProgressForm, BackupProgressForm); + Application.CreateForm(TPBKEditForm, PBKEditForm); + Application.CreateForm(TWAPBookForm, WAPBookForm); Application.Run; end. diff --git a/win32_makefile/gui_delphi/Project1.dsk b/win32_makefile/gui_delphi/Project1.dsk deleted file mode 100644 index 53514f0..0000000 --- a/win32_makefile/gui_delphi/Project1.dsk +++ /dev/null @@ -1,218 +0,0 @@ -[Closed Files] -File_0=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\Calendar.pas',0,1,202,1,212,0,0 -File_1=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\smsedit.pas',0,1,285,36,173,3,0 -File_2=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\pbkedit.pas',0,1,1,1,1,0,0 -File_3=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\smscedit.pas',0,1,1,1,1,1,0 -File_4=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\about.pas',0,1,31,6,39,0,1 -File_5=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\netmon.pas',0,1,1,1,1,0,1 -File_6=SourceModule,'D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\Unit7.pas',0,1,1,1,1,0,0 -File_7=SourceModule,'D:\gnokii\mygnokii\win32_makefile\gui_delphi\mainunit.pas',0,1,1,1,1,0,1 -File_8=SourceModule,'D:\gnokii\new\win32_makefile\gui_delphi\mainunit.pas',0,1,1,1,1,0,1 - -[Modules] -Module0=D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\mainunit.pas -Module1=D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\GnokiiAPI.pas -Count=2 -EditWindowCount=1 - -[D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\mainunit.pas] -ModuleType=SourceModule -FormState=1 -FormOnTop=1 - -[D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\GnokiiAPI.pas] -ModuleType=SourceModule -FormState=0 -FormOnTop=0 - -[D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\ProjectGroup1.bpg] -FormState=0 -FormOnTop=0 - -[D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\Project1.dpr] -FormState=0 -FormOnTop=0 - -[EditWindow0] -ViewCount=2 -CurrentView=0 -View0=0 -View1=1 -MessageView=MessageView@EditWindow0 -Create=1 -Visible=1 -State=0 -Left=251 -Top=136 -Width=542 -Height=376 -MaxLeft=-4 -MaxTop=97 -ClientWidth=534 -ClientHeight=349 -LeftPanelSize=0 -RightPanelSize=0 -BottomPanelSize=0 -BottomPanelClients=MessageView@EditWindow0 -BottomPanelData=00000400010000000B0000004D6573736167655669657716020000000000000234000000000000000100000000000000000000000001000000001802000000000000010000000018020000000000000100000000180200000000000001000000001602000000000000010000000016020000000000000100000000160200000000000001000000001602000000000000010000000016020000000000000100000000160200000000000001000000001602000000000000FFFFFFFF - -[View0] -Module=D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\mainunit.pas -CursorX=1 -CursorY=3524 -TopLine=3524 -LeftCol=1 - -[View1] -Module=D:\gnokii\mygnokii\new\win32_makefile\gui_delphi\GnokiiAPI.pas -CursorX=25 -CursorY=541 -TopLine=536 -LeftCol=1 - -[Watches] -Count=0 - -[Breakpoints] -Count=0 - -[AddressBreakpoints] -Count=0 - -[Main Window] -Create=1 -Visible=1 -State=2 -Left=0 -Top=0 -Width=800 -Height=105 -MaxLeft=-1 -MaxTop=-1 -MaxWidth=808 -MaxHeight=105 -ClientWidth=800 -ClientHeight=78 - -[ProjectManager] -Create=1 -Visible=0 -State=0 -Left=369 -Top=372 -Width=438 -Height=303 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=430 -ClientHeight=279 -TBDockHeight=303 -LRDockWidth=438 -Dockable=1 - -[CPUWindow] -Create=1 -Visible=0 -State=0 -Left=133 -Top=123 -Width=533 -Height=353 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=525 -ClientHeight=326 -DumpPane=79 -DisassemblyPane=187 -RegisterPane=231 -FlagPane=64 - -[AlignmentPalette] -Create=1 -Visible=0 -State=0 -Left=200 -Top=107 -Width=156 -Height=82 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=150 -ClientHeight=60 - -[PropertyInspector] -Create=1 -Visible=1 -State=0 -Left=0 -Top=0 -Width=192 -Height=376 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=192 -ClientHeight=376 -TBDockHeight=285 -LRDockWidth=182 -Dockable=1 -SplitPos=85 -ArrangeBy=Name -SelectedItem=Name -ExpandedItems= -HiddenCategories= - -[ObjectTree] -Create=1 -Visible=1 -State=0 -Left=0 -Top=0 -Width=192 -Height=376 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=192 -ClientHeight=376 -TBDockHeight=186 -LRDockWidth=182 -Dockable=1 - -[MessageView@EditWindow0] -Create=1 -Visible=0 -State=0 -Left=12 -Top=0 -Width=522 -Height=52 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=522 -ClientHeight=52 -TBDockHeight=52 -LRDockWidth=443 -Dockable=1 - -[DockHosts] -DockHostCount=1 - -[DockSite0] -DockSiteType=1 -Create=1 -Visible=1 -State=0 -Left=6 -Top=106 -Width=208 -Height=429 -MaxLeft=-1 -MaxTop=-1 -ClientWidth=200 -ClientHeight=405 -TBDockHeight=429 -LRDockWidth=208 -Dockable=1 -TabPosition=0 -ActiveTab=Object Inspector -TabDockClients=PropertyInspector,ObjectTree - diff --git a/win32_makefile/gui_delphi/Project1.res b/win32_makefile/gui_delphi/Project1.res deleted file mode 100644 index b8917e6b9c1d7046a55bed13b7252f151755c151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmaJ=L2FY%5dK~h@;uoDErI(x%BA2> z@lt3543$kVKK#^c2LHRaOm_7!JF_;3R6RRH{^9;3hQo|02iG1RV0xZQgODr}$ z{D(=*8*@Th>J+G)0jK8(&TKDrZjYy}tm^;@G;6Qo1)g99FKJJ)%H6N=cOkDKKt7+= zS0S$`Kxg!pvX{Q4&Qy`5*0F{SexKnrPb=DCL;IC@mh~ z06)~Rh7MZTMjcxyaj#*MmFqBQkoZ+O1r#xl1x{O}h6nWDX0?E`Hn79TP$B;lr>+of z`trE19A9&pkv86HuO@qLGq*nC7I1}Z&s`_CMRvj|V2%prs6fp37o8pD*4evuLBU<^ z|D5qHjf&bPb;`6`c+X6?oX&*zhKvf{F>i-^3soxd%W+rZ8ggsW*XtIP+ + ColumnClick = False GridLines = True + ReadOnly = True RowSelect = True PopupMenu = PBKPopupMenu SortType = stData @@ -243,22 +249,22 @@ object MainForm: TMainForm object GroupBox3: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Phone' TabOrder = 0 object Label14: TLabel - Left = 432 - Top = 24 + Left = 440 + Top = 240 Width = 38 Height = 13 Caption = 'Label14' Visible = False end object Label16: TLabel - Left = 432 - Top = 64 + Left = 440 + Top = 280 Width = 38 Height = 13 Caption = 'Label16' @@ -266,7 +272,7 @@ object MainForm: TMainForm end object GroupBox12: TGroupBox Left = 8 - Top = 24 + Top = 16 Width = 257 Height = 121 Caption = 'Info' @@ -325,8 +331,8 @@ object MainForm: TMainForm end end object Button9: TButton - Left = 304 - Top = 24 + Left = 272 + Top = 208 Width = 81 Height = 25 Caption = 'Reset' @@ -336,16 +342,16 @@ object MainForm: TMainForm end object GroupBox14: TGroupBox Left = 8 - Top = 216 + Top = 200 Width = 257 - Height = 105 + Height = 97 Caption = 'Simlocks' TabOrder = 3 object ListView8: TListView Left = 2 Top = 15 Width = 253 - Height = 88 + Height = 80 Align = alClient Columns = < item @@ -362,29 +368,36 @@ object MainForm: TMainForm item Caption = 'counter' end> + ColumnClick = False + Ctl3D = False + FlatScrollBars = True GridLines = True + ReadOnly = True + RowSelect = True TabOrder = 0 ViewStyle = vsReport end end object GroupBox11: TGroupBox Left = 8 - Top = 152 + Top = 144 Width = 257 - Height = 57 + Height = 49 Caption = 'Alarm' TabOrder = 1 object CheckBox1: TCheckBox - Left = 16 - Top = 24 + Left = 8 + Top = 16 Width = 105 Height = 17 Caption = 'Enabled in phone' + Ctl3D = False + ParentCtl3D = False TabOrder = 0 end object DateTimePicker1: TDateTimePicker - Left = 128 - Top = 24 + Left = 120 + Top = 16 Width = 65 Height = 25 CalAlignment = dtaLeft @@ -399,6 +412,60 @@ object MainForm: TMainForm TabOrder = 1 end end + object GroupBox26: TGroupBox + Left = 272 + Top = 16 + Width = 265 + Height = 177 + Caption = 'Settings' + TabOrder = 4 + Visible = False + object Label46: TLabel + Left = 8 + Top = 24 + Width = 63 + Height = 13 + Caption = 'LCD Contrast' + end + object CheckBox3: TCheckBox + Left = 8 + Top = 48 + Width = 193 + Height = 17 + Caption = 'Alternative Line Service' + TabOrder = 0 + end + object TrackBar1: TTrackBar + Left = 88 + Top = 16 + Width = 169 + Height = 25 + Orientation = trHorizontal + Frequency = 1 + Position = 0 + SelEnd = 0 + SelStart = 0 + TabOrder = 1 + TickMarks = tmBottomRight + TickStyle = tsAuto + end + object CheckBox4: TCheckBox + Left = 8 + Top = 64 + Width = 201 + Height = 17 + Caption = 'Additional games' + TabOrder = 2 + end + object CheckBox5: TCheckBox + Left = 8 + Top = 80 + Width = 217 + Height = 17 + Caption = 'Vibra menu' + TabOrder = 3 + end + end end end object LogosTabSheet: TTabSheet @@ -408,8 +475,8 @@ object MainForm: TMainForm object GroupBox4: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'logos' TabOrder = 0 @@ -425,7 +492,7 @@ object MainForm: TMainForm Left = 2 Top = 15 Width = 143 - Height = 312 + Height = 320 Align = alLeft Transparent = True OnMouseDown = Image1MouseDown @@ -2341,28 +2408,28 @@ object MainForm: TMainForm object GroupBox5: TGroupBox Left = 0 Top = 0 - Width = 512 + Width = 502 Height = 329 Align = alClient Caption = 'Ringtones' TabOrder = 0 object GroupBox15: TGroupBox Left = 8 - Top = 16 + Top = 24 Width = 393 - Height = 177 + Height = 81 Caption = 'RTTL format' TabOrder = 0 object Label11: TLabel Left = 8 - Top = 24 + Top = 16 Width = 31 Height = 13 Caption = 'Name:' end object Button1: TButton - Left = 288 - Top = 16 + Left = 184 + Top = 48 Width = 97 Height = 25 Caption = 'Read from file' @@ -2379,8 +2446,8 @@ object MainForm: TMainForm OnClick = Button2Click end object Button3: TButton - Left = 288 - Top = 80 + Left = 184 + Top = 16 Width = 49 Height = 25 Caption = 'Play' @@ -2389,15 +2456,15 @@ object MainForm: TMainForm end object Edit1: TEdit Left = 48 - Top = 24 - Width = 73 + Top = 16 + Width = 113 Height = 21 TabOrder = 3 OnChange = Edit1Change end object Button16: TButton - Left = 344 - Top = 80 + Left = 240 + Top = 16 Width = 41 Height = 25 Caption = 'Stop' @@ -2406,7 +2473,7 @@ object MainForm: TMainForm end object Button17: TButton Left = 288 - Top = 144 + Top = 16 Width = 97 Height = 25 Caption = 'SMS (Send/Save)' @@ -2416,20 +2483,20 @@ object MainForm: TMainForm end object GroupBox16: TGroupBox Left = 8 - Top = 200 + Top = 112 Width = 393 - Height = 105 + Height = 49 Caption = 'Binary format' TabOrder = 1 object Label15: TLabel Left = 8 - Top = 24 + Top = 16 Width = 31 Height = 13 Caption = 'Name:' end object Button13: TButton - Left = 288 + Left = 184 Top = 16 Width = 97 Height = 25 @@ -2439,7 +2506,7 @@ object MainForm: TMainForm end object Button14: TButton Left = 288 - Top = 48 + Top = 16 Width = 97 Height = 25 Caption = 'Set in phone' @@ -2448,13 +2515,22 @@ object MainForm: TMainForm end object Edit2: TEdit Left = 48 - Top = 24 - Width = 73 + Top = 16 + Width = 113 Height = 21 ReadOnly = True TabOrder = 2 end end + object Button22: TButton + Left = 296 + Top = 176 + Width = 97 + Height = 25 + Caption = 'Get from phone' + TabOrder = 2 + OnClick = Button22Click + end end end object SMSTabSheet: TTabSheet @@ -2465,15 +2541,15 @@ object MainForm: TMainForm object GroupBox6: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'SMS' TabOrder = 0 object Panel2: TPanel Left = 2 Top = 15 - Width = 508 + Width = 538 Height = 26 Align = alTop BevelOuter = bvNone @@ -2490,7 +2566,7 @@ object MainForm: TMainForm Top = 0 Width = 233 Height = 21 - ItemHeight = 0 + ItemHeight = 13 TabOrder = 0 Text = 'None' OnChange = ComboBox3Change @@ -2499,8 +2575,8 @@ object MainForm: TMainForm object Panel3: TPanel Left = 2 Top = 41 - Width = 508 - Height = 286 + Width = 538 + Height = 294 Align = alClient BevelOuter = bvNone Caption = 'Panel3' @@ -2508,7 +2584,7 @@ object MainForm: TMainForm object Splitter2: TSplitter Left = 0 Top = 96 - Width = 508 + Width = 538 Height = 5 Cursor = crVSplit Align = alTop @@ -2516,7 +2592,7 @@ object MainForm: TMainForm object ListView2: TListView Left = 0 Top = 0 - Width = 508 + Width = 538 Height = 96 Align = alTop Columns = < @@ -2539,6 +2615,7 @@ object MainForm: TMainForm Caption = 'Time' Width = 80 end> + ColumnClick = False GridLines = True ReadOnly = True RowSelect = True @@ -2550,7 +2627,7 @@ object MainForm: TMainForm object Memo1: TMemo Left = 0 Top = 101 - Width = 508 + Width = 538 Height = 52 Align = alTop BevelInner = bvNone @@ -2563,8 +2640,8 @@ object MainForm: TMainForm object Memo2: TMemo Left = 0 Top = 153 - Width = 508 - Height = 133 + Width = 538 + Height = 141 Align = alClient Lines.Strings = ( '' @@ -2583,15 +2660,15 @@ object MainForm: TMainForm object GroupBox7: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Speed dials' TabOrder = 0 object ListView3: TListView Left = 2 Top = 15 - Width = 508 + Width = 538 Height = 162 Align = alTop Columns = < @@ -2606,7 +2683,9 @@ object MainForm: TMainForm Caption = 'Number' Width = 150 end> + ColumnClick = False GridLines = True + ReadOnly = True RowSelect = True TabOrder = 0 ViewStyle = vsReport @@ -2621,8 +2700,8 @@ object MainForm: TMainForm object GroupBox8: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Calendar' Ctl3D = True @@ -2631,8 +2710,8 @@ object MainForm: TMainForm object ListView4: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -2659,12 +2738,14 @@ object MainForm: TMainForm Caption = 'Alarm' Width = 130 end> + ColumnClick = False GridLines = True ReadOnly = True RowSelect = True PopupMenu = CalendarPopupMenu TabOrder = 0 ViewStyle = vsReport + OnDblClick = ListView4DblClick OnSelectItem = ListView4SelectItem end end @@ -2677,16 +2758,16 @@ object MainForm: TMainForm object GroupBox9: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'SMS Center' TabOrder = 0 object ListView6: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -2712,7 +2793,9 @@ object MainForm: TMainForm Caption = 'Default recipient' Width = 100 end> + ColumnClick = False GridLines = True + ReadOnly = True RowSelect = True PopupMenu = SMSCPopupMenu TabOrder = 0 @@ -2729,16 +2812,16 @@ object MainForm: TMainForm object GroupBox10: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Caller groups' TabOrder = 0 object ListView5: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -2756,7 +2839,9 @@ object MainForm: TMainForm Caption = 'Logo' Width = 120 end> + ColumnClick = False GridLines = True + ReadOnly = True RowSelect = True TabOrder = 0 ViewStyle = vsReport @@ -2771,16 +2856,16 @@ object MainForm: TMainForm object GroupBox13: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Profiles' TabOrder = 0 object ListView7: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -2823,7 +2908,10 @@ object MainForm: TMainForm Caption = 'Alert for' Width = 70 end> + ColumnClick = False GridLines = True + ReadOnly = True + RowSelect = True TabOrder = 0 ViewStyle = vsReport end @@ -2837,16 +2925,16 @@ object MainForm: TMainForm object GroupBox17: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'WAP bookmarks' TabOrder = 0 object ListView9: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -2860,10 +2948,14 @@ object MainForm: TMainForm Caption = 'URL' Width = 200 end> + ColumnClick = False GridLines = True + ReadOnly = True RowSelect = True + PopupMenu = WAPBookPopupMenu TabOrder = 0 ViewStyle = vsReport + OnSelectItem = ListView9SelectItem end end end @@ -2875,8 +2967,8 @@ object MainForm: TMainForm object GroupBox18: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Configuration' TabOrder = 0 @@ -2948,18 +3040,20 @@ object MainForm: TMainForm Width = 193 Height = 21 ItemHeight = 13 - ItemIndex = 0 TabOrder = 3 Text = 'auto' Items.Strings = ( 'auto' + 'modelauto' '3210' '3310' '5110' '5130' + '5190' '6110' '6130' '6150' + '6190' '6210' '6250' '7110' @@ -2975,8 +3069,8 @@ object MainForm: TMainForm object GroupBox19: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'WAP Settings' TabOrder = 0 @@ -3284,6 +3378,15 @@ object MainForm: TMainForm 'IP address' 'service number') end + object Button23: TButton + Left = 360 + Top = 16 + Width = 105 + Height = 25 + Caption = 'SMS (Send/Save)' + TabOrder = 17 + OnClick = Button23Click + end end end object DivertTabSheet: TTabSheet @@ -3292,8 +3395,8 @@ object MainForm: TMainForm object GroupBox20: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Call diverts' TabOrder = 0 @@ -3421,8 +3524,8 @@ object MainForm: TMainForm object GroupBox21: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'About' TabOrder = 0 @@ -3443,7 +3546,7 @@ object MainForm: TMainForm object Memo3: TMemo Left = 2 Top = 15 - Width = 508 + Width = 538 Height = 282 Align = alTop Lines.Strings = ( @@ -3453,9 +3556,9 @@ object MainForm: TMainForm 'available in various cellular phones.' 'In this moment you shouldn'#39't have big problems with using' - 'Nokia 3210, 33xx, 5110, 5130, 6110, 6130, 6150, 6210, 6250, 7110' + - ', 8210, 8850, 9110' - 'with this software.' + 'Nokia 3210, 33xx, 5110, 5130, 5190, 6110, 6130, 6150, 6190, 6210' + + ', 6250, 7110,' + '8210, 8850, 9110 with this software.' 'There are supported MBUS, FBUS, DLR3 cables and direct infrared' '(for 61xx from main menu, in 8210/8850 from 2 players snake menu' + @@ -3491,12 +3594,15 @@ object MainForm: TMainForm '3.6210 compatibility' '4.config sheet available' '' + 'Version 0.3:' + '1.almost everything provided' + '2.everything important can be edited' + '' 'TODO:' '1.better error handling' '2.support for new models' '3.extending support to new models in gnokiiapi.dll' - '4.synchronization tools with Outlook, etc.' - '5.allow editing everything') + '4.synchronization tools with Outlook, etc.') ReadOnly = True ScrollBars = ssVertical TabOrder = 0 @@ -3510,15 +3616,15 @@ object MainForm: TMainForm object GroupBox22: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'SMS Offline' TabOrder = 0 object Splitter3: TSplitter Left = 2 Top = 160 - Width = 508 + Width = 538 Height = 2 Cursor = crVSplit Align = alTop @@ -3526,7 +3632,7 @@ object MainForm: TMainForm object Panel4: TPanel Left = 2 Top = 15 - Width = 508 + Width = 538 Height = 145 Align = alTop BevelOuter = bvNone @@ -3535,7 +3641,7 @@ object MainForm: TMainForm object ListView10: TListView Left = 0 Top = 0 - Width = 508 + Width = 538 Height = 145 Align = alClient Columns = < @@ -3559,6 +3665,7 @@ object MainForm: TMainForm Caption = 'Time' Width = 100 end> + ColumnClick = False GridLines = True ReadOnly = True RowSelect = True @@ -3571,8 +3678,8 @@ object MainForm: TMainForm object Panel5: TPanel Left = 2 Top = 162 - Width = 508 - Height = 165 + Width = 538 + Height = 173 Align = alClient BevelOuter = bvNone Caption = 'Panel5' @@ -3580,7 +3687,7 @@ object MainForm: TMainForm object Memo4: TMemo Left = 0 Top = 0 - Width = 508 + Width = 498 Height = 49 Align = alTop BevelInner = bvNone @@ -3593,7 +3700,7 @@ object MainForm: TMainForm object Memo5: TMemo Left = 0 Top = 49 - Width = 508 + Width = 498 Height = 116 Align = alClient ReadOnly = True @@ -3609,16 +3716,16 @@ object MainForm: TMainForm object GroupBox23: TGroupBox Left = 0 Top = 0 - Width = 512 - Height = 329 + Width = 542 + Height = 337 Align = alClient Caption = 'Calendar offline' TabOrder = 0 object ListView11: TListView Left = 2 Top = 15 - Width = 508 - Height = 312 + Width = 538 + Height = 320 Align = alClient Columns = < item @@ -3644,6 +3751,7 @@ object MainForm: TMainForm Caption = 'Alarm' Width = 110 end> + ColumnClick = False GridLines = True ReadOnly = True RowSelect = True @@ -3660,7 +3768,7 @@ object MainForm: TMainForm object GroupBox24: TGroupBox Left = 0 Top = 0 - Width = 512 + Width = 502 Height = 329 Align = alClient Caption = 'Offline' @@ -3695,12 +3803,62 @@ object MainForm: TMainForm end end end + object PCPBKTabSheet: TTabSheet + Caption = 'PBKOffline' + ImageIndex = 19 + OnShow = PCPBKTabSheetShow + object GroupBox25: TGroupBox + Left = 0 + Top = 0 + Width = 542 + Height = 337 + Align = alClient + Caption = 'Phonebook offline' + TabOrder = 0 + object ListView12: TListView + Left = 2 + Top = 15 + Width = 538 + Height = 320 + Align = alClient + Columns = < + item + Caption = 'Num' + end + item + Caption = 'Name' + Width = 150 + end + item + Caption = 'Number' + Width = 150 + end> + ColumnClick = False + GridLines = True + ReadOnly = True + RowSelect = True + TabOrder = 0 + ViewStyle = vsReport + end + end + end end object MainMenu1: TMainMenu Left = 72 - Top = 312 + Top = 328 object File1: TMenuItem Caption = 'File' + object Savebackuptofile1: TMenuItem + Caption = 'Save backup to file/another application' + OnClick = Savebackuptofile1Click + end + object Restorebackupfromfile1: TMenuItem + Caption = 'Restore backup from file/another application' + OnClick = Restorebackupfromfile1Click + end + object N6: TMenuItem + Caption = '-' + end object Configuration1: TMenuItem Caption = 'Configuration' OnClick = Configuration1Click @@ -3725,21 +3883,23 @@ object MainForm: TMainForm object Timer1: TTimer Interval = 500 OnTimer = Timer1Timer - Left = 72 - Top = 280 + Left = 136 + Top = 328 end object OpenDialog1: TOpenDialog + Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] Left = 8 - Top = 312 + Top = 328 end object SaveDialog1: TSaveDialog + Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] Left = 40 - Top = 312 + Top = 328 end object CalendarPopupMenu: TPopupMenu OnPopup = CalendarPopupMenuPopup - Left = 40 - Top = 280 + Left = 264 + Top = 328 object New1: TMenuItem Caption = 'New' OnClick = New1Click @@ -3766,8 +3926,8 @@ object MainForm: TMainForm end object SMSPopupMenu: TPopupMenu OnPopup = SMSPopupMenuPopup - Left = 8 - Top = 280 + Left = 200 + Top = 328 object New2: TMenuItem Caption = 'New (Send/Save)' OnClick = New2Click @@ -3790,35 +3950,58 @@ object MainForm: TMainForm end object SMSCPopupMenu: TPopupMenu OnPopup = SMSCPopupMenuPopup - Left = 40 - Top = 248 + Left = 232 + Top = 328 object Edit5: TMenuItem Caption = 'Edit' OnClick = Edit5Click end end object PBKPopupMenu: TPopupMenu - Left = 8 - Top = 248 - object Edit7: TMenuItem + OnPopup = PBKPopupMenuPopup + Left = 296 + Top = 328 + object Delete4: TMenuItem + Caption = 'Delete' + OnClick = Delete4Click + end + object Edit19: TMenuItem Caption = 'Edit' + OnClick = Edit19Click + end + object Edit7: TMenuItem + Caption = 'View' OnClick = Edit7Click end + object N10: TMenuItem + Caption = '-' + end object SMSSendSave1: TMenuItem Caption = 'SMS (Send/Save)' OnClick = SMSSendSave1Click end + object N7: TMenuItem + Caption = '-' + end + object CopyphonebooktoPC1: TMenuItem + Caption = 'Copy phonebook to PC' + OnClick = CopyphonebooktoPC1Click + end + object Savephonebooktofileanotherapplication1: TMenuItem + Caption = 'Save phonebook to file/another application' + OnClick = Savephonebooktofileanotherapplication1Click + end end object Timer2: TTimer Interval = 2000 OnTimer = Timer2Timer - Left = 72 - Top = 248 + Left = 104 + Top = 328 end object PCSMSPopupMenu: TPopupMenu OnPopup = PCSMSPopupMenuPopup - Left = 8 - Top = 216 + Left = 328 + Top = 328 object SendSave1: TMenuItem Caption = 'SMS (Send/Save)' OnClick = SendSave1Click @@ -3833,8 +4016,8 @@ object MainForm: TMainForm end object PCCalendarPopupMenu: TPopupMenu OnPopup = PCCalendarPopupMenuPopup - Left = 40 - Top = 216 + Left = 168 + Top = 328 object Copytocalendar1: TMenuItem Caption = 'Copy to phone' OnClick = Copytocalendar1Click @@ -3847,4 +4030,24 @@ object MainForm: TMainForm OnClick = Delete5Click end end + object WAPBookPopupMenu: TPopupMenu + OnPopup = WAPBookPopupMenuPopup + Left = 360 + Top = 328 + object New20: TMenuItem + Caption = 'New' + OnClick = New20Click + end + object Edit20: TMenuItem + Caption = 'Edit' + OnClick = Edit20Click + end + object N8: TMenuItem + Caption = '-' + end + object SMSSendSave2: TMenuItem + Caption = 'SMS (Send/Save)' + OnClick = SMSSendSave2Click + end + end end diff --git a/win32_makefile/gui_delphi/mainunit.pas b/win32_makefile/gui_delphi/mainunit.pas index 9bf8351..b88de77 100644 --- a/win32_makefile/gui_delphi/mainunit.pas +++ b/win32_makefile/gui_delphi/mainunit.pas @@ -222,6 +222,31 @@ type Label45: TLabel; TabSheet2: TTabSheet; TabSheet3: TTabSheet; + N6: TMenuItem; + Savebackuptofile1: TMenuItem; + Restorebackupfromfile1: TMenuItem; + N7: TMenuItem; + Savephonebooktofileanotherapplication1: TMenuItem; + PCPBKTabSheet: TTabSheet; + GroupBox25: TGroupBox; + ListView12: TListView; + Edit19: TMenuItem; + N10: TMenuItem; + Delete4: TMenuItem; + Button22: TButton; + WAPBookPopupMenu: TPopupMenu; + New20: TMenuItem; + SMSSendSave2: TMenuItem; + N8: TMenuItem; + Edit20: TMenuItem; + Button23: TButton; + CopyphonebooktoPC1: TMenuItem; + GroupBox26: TGroupBox; + CheckBox3: TCheckBox; + TrackBar1: TTrackBar; + Label46: TLabel; + CheckBox4: TCheckBox; + CheckBox5: TCheckBox; procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); @@ -321,6 +346,25 @@ type procedure Delete5Click(Sender: TObject); procedure Copytocalendar1Click(Sender: TObject); procedure PCCalendarPopupMenuPopup(Sender: TObject); + procedure Savebackuptofile1Click(Sender: TObject); + procedure Restorebackupfromfile1Click(Sender: TObject); + procedure PBKPopupMenuPopup(Sender: TObject); + procedure Savephonebooktofileanotherapplication1Click(Sender: TObject); + procedure ListView4DblClick(Sender: TObject); + procedure Edit19Click(Sender: TObject); + procedure Delete4Click(Sender: TObject); + procedure Button22Click(Sender: TObject); + procedure New20Click(Sender: TObject); + procedure ListView9SelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); + procedure Edit20Click(Sender: TObject); + procedure WAPBookPopupMenuPopup(Sender: TObject); + procedure SMSSendSave2Click(Sender: TObject); + procedure Button23Click(Sender: TObject); + procedure CopyphonebooktoPC1Click(Sender: TObject); + procedure PCPBKTabSheetShow(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public @@ -338,14 +382,23 @@ var calenda:GSM_CalendarNote; pbk:GSM_PhonebookEntry; previewcolor:TColor; + bookmarknum2:integer; + bookma:GSM_WAPBookmark; + wapset:GSM_WAPSettings; + pbkofflinenumber:integer; + + PhoneBackup: GSM_Backup; + PhoneBackupAvailable:boolean; procedure AddCalendarNote(note:GSM_CalendarNote;myview:TListView); function DayOFweek3(date:TDateTime):string; procedure SetSMSC(num:integer); +procedure ReadPBKOffline; implementation -uses Calendar, SMSEdit, LogosRing, Netmon, smscedit, pbkedit; +uses Calendar, SMSEdit, LogosRing, Netmon, smscedit, pbkedit, backup, + backup2, pbkedit2, wapbook; {$R *.dfm} @@ -405,7 +458,7 @@ var phonebookfound:integer; PhonebookThread: TPhonebookThread; pbknumberentry:integer; - + //logos pointsize:integer; x2,y2:byte; @@ -438,6 +491,9 @@ var calendarselect:integer; readcalendar:boolean; + CalendarOffline:array[1..300] of GSM_CalendarNote; + CalendarOfflineNumber:integer; + //profiles profilenum:integer; ProfileThread: TProfileThread; @@ -457,9 +513,6 @@ var WAPBookmarkThread: TWAPBookmarkThread; bookmarknum:integer; - CalendarOffline:array[1..300] of GSM_CalendarNote; - CalendarOfflineNumber:integer; - function Inttostr2(I: Longint;digits:integer): string; { Convert any integer type to a string } @@ -476,6 +529,19 @@ begin Result:= S; end; +procedure SaveMainConfig; +var + MyIniFile: TIniFile; +begin + MyIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'\gnokiirc'); + MyIniFile.WriteString('win32gui', 'x', inttostr(MainForm.Left)); + MyIniFile.WriteString('win32gui', 'y', inttostr(MainForm.Top)); + MyIniFile.WriteString('win32gui', 'width', inttostr(MainForm.Width)); + MyIniFile.WriteString('win32gui', 'height', inttostr(MainForm.Height)); + MyIniFile.WriteString('win32gui', 'treewidth', inttostr(MainForm.Treeview1.Width)); + MyIniFile.Free; +end; + function DayOFweek3(date:TDateTime):string; var days: array[1..7] of string; @@ -520,6 +586,63 @@ begin end; end; +procedure ReadPBKOffline; +var F:file of GSM_PhonebookEntry; +begin + AssignFile(F, 'gnokiipbk'); + Reset(F); + if (ioresult=0) then + begin + phonebackup.PhonePhonebookUsed:=0; + pbkofflinenumber:=0; + while not eof(f) do + begin + pbkofflinenumber:=pbkofflinenumber+1; + read(f,PhoneBackup.PhonePhonebook[pbkofflinenumber]); + end; + CloseFile(F); + end; +end; + +procedure SavePBKOffline; +var F:file of GSM_PhonebookEntry; + i:integer; +begin + AssignFile(F, 'gnokiipbk'); + Rewrite(F); + for i:=1 to PBKOfflineNumber do + begin + Write(f,PhoneBackup.PhonePhonebook[i]); + end; + CloseFile(F); +end; + +procedure AddSMSEditSenderList; +var i,j:integer; +begin + ReadPBKOffline; + SMSEditForm.ComboBox9.Items.Clear; + SMSEditForm.ComboBox9.Sorted:=false; + for i:=1 to PBKOfflineNumber do + begin + if (PhoneBackup.PhonePhonebook[i].Number[1]<>chr(0)) then + begin + SMSEditForm.ComboBox9.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + end else + begin + for j:=1 to PhoneBackup.PhonePhonebook[i].SubEntriesCount do + begin + if PhoneBackup.PhonePhonebook[i].SubEntries[j].EntryType=GSM_Number then + begin + SMSEditForm.ComboBox9.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + break; + end; + end; + end; + end; + SMSEditForm.ComboBox9.Sorted:=true; +end; + procedure ReadCallerGroup(); var logo:GSM_Bitmap; @@ -574,15 +697,20 @@ end; procedure ReadAllCallerGroups(); begin - if callerinit=false then + if (GSM_GetModelFeature(FN_CALLERGROUPS)<>0) then begin - MainForm.ListView5.Items.Clear; - callernum:=1; - while callerinit=false do + if callerinit=false then begin - ReadCallerGroup(); - if callerinit then break; + MainForm.ListView5.Items.Clear; + callernum:=1; + while callerinit=false do + begin + ReadCallerGroup(); + if callerinit then break; + end; end; + end else + begin end; end; @@ -715,15 +843,41 @@ var begin case ComboBox2.ItemIndex of 0:bittype:=GSM_CallerLogo; - 1:bittype:=GSM_OperatorLogo; + 1:begin + bittype:=GSM_OperatorLogo; + if GSMPhoneConnected then + begin + case GSM_GetModelFeature(FN_STARTUP) of + F_STA62:bittype:=GSM_7110OperatorLogo; + F_STA71:bittype:=GSM_7110OperatorLogo; + end; + end; + end; 2:bittype:=GSM_PictureImage; - 3:bittype:=GSM_StartupLogo; + 3:begin + bittype:=GSM_StartupLogo; + if GSMPhoneConnected then + begin + case GSM_GetModelFeature(FN_STARTUP) of + F_STA62:bittype:=GSM_6210StartupLogo; + F_STA71:bittype:=GSM_7110StartupLogo; + end; + end; + end; else bittype:=GSM_StartupLogo; + if GSMPhoneConnected then + begin + case GSM_GetModelFeature(FN_STARTUP) of + F_STA62:bittype:=GSM_6210StartupLogo; + F_STA71:bittype:=GSM_7110StartupLogo; + end; + end; end; GSM_ResizeBitmap(@bitma,bittype); DrawBitmap(); - if bitma.type2<>GSM_OperatorLogo then + if (bitma.type2<>GSM_OperatorLogo) and + (bitma.type2<>GSM_7110OperatorLogo) then Button8.Enabled:=false else Button8.Enabled:=true; @@ -815,8 +969,11 @@ begin case bitma.type2 of GSM_CallerLogo :ComboBox2.ItemIndex:=0; GSM_OperatorLogo:ComboBox2.ItemIndex:=1; + GSM_7110OperatorLogo:ComboBox2.ItemIndex:=1; GSM_PictureImage:ComboBox2.ItemIndex:=2; GSM_StartupLogo :ComboBox2.ItemIndex:=3; + GSM_7110StartupLogo :ComboBox2.ItemIndex:=3; + GSM_6210StartupLogo :ComboBox2.ItemIndex:=3; end; end; end; @@ -856,6 +1013,68 @@ begin if (LogosRingForm.ComboBox3.Visible) then GSM_SetBitmap(@bitma); end; + GSM_7110OperatorLogo: + begin + LogosRingForm.ComboBox3.Visible:=true; + LogosRingForm.ComboBox3.Items.Add('Preview'); + //preparing network names + i:=0; + while true do + begin + GSM_GetNetworkData(i,@Name,@Data); + + // conversion problems + Label14.Caption:=Name; + if strcomp(PChar(Label14.Caption),PChar('unknown'))=0 then break; + + // conversion problems + Label14.Caption:=' - '+Label14.Caption; + for j:=6 downto 1 do + begin + Label14.Caption:=Data[j]+Label14.Caption; + end; + + LogosRingForm.ComboBox3.Items.Add(Pchar(Label14.Caption)); + i:=i+1; + end; + //looking for current network + if GSMPhoneConnected then + begin + // conversion problems + Label14.Caption:=MainForm.StatusBar1.Panels[1].Text; + Label14.Caption:=' - '+Label14.Caption; + for j:=6 downto 1 do + begin + Label14.Caption:=GSMNetworkInfo.NetworkCode[j]+Label14.Caption; + end; + + i:=1; + while true do + begin + if strcomp(pchar(LogosRingForm.ComboBox3.Items[i]),pchar(Label14.Caption))=0 + then break; + i:=i+1; + end; + LogosRingForm.ComboBox3.ItemIndex:=i; + end; + LogosRingForm.ShowModal(); + if (LogosRingForm.ComboBox3.Visible) then + begin + if LogosRingForm.ComboBox3.ItemIndex=0 then + begin + bitma.number:=255; + for i:=1 to 6 do + begin + bitma.netcode[i]:=GSMNetworkInfo.NetworkCode[i]; + end; + bitma.netcode[7]:=chr(0); + end else + begin + GSM_GetNetworkData(LogosRingForm.ComboBox3.ItemIndex-1,@Name,@bitma.netcode); + end; + GSM_SetBitmap(@bitma); + end; + end; GSM_OperatorLogo: begin LogosRingForm.ComboBox3.Visible:=true; @@ -1027,7 +1246,8 @@ begin 13: MainForm.PageControl1.ActivePage:=WAPSettTabSheet; 14: MainForm.PageControl1.ActivePage:=PCOfflineTabSheet; 15: MainForm.PageControl1.ActivePage:=PCCalendarTabSheet; - 16: MainForm.PageControl1.ActivePage:=PCSMSTabSheet; + 16: MainForm.PageControl1.ActivePage:=PCPBKTabSheet; + 17: MainForm.PageControl1.ActivePage:=PCSMSTabSheet; end; end; @@ -1063,6 +1283,7 @@ begin MainForm.PCSMSTabSheet.TabVisible:=false; MainForm.PCCalendarTabSheet.TabVisible:=false; MainForm.PCOfflineTabSheet.TabVisible:=false; + MainForm.PCPBKTabSheet.TabVisible:=false; MainForm.PageControl1.ActivePage:=PhoneTabSheet; PreviewColor:=Image2.Canvas.Pixels[70,170]; @@ -1088,7 +1309,8 @@ begin smsofflinenumber:=0; calendarofflinenumber:=0; - + pbkofflinenumber:=0; + readcalendar:=false; end; @@ -1104,6 +1326,9 @@ begin if PhonebookThread=nil then ComboBox1.Enabled:=true; + SaveBackupTofile1.Enabled:=true; + Restorebackupfromfile1.Enabled:=true; + ListView1.Enabled:=true; NetmonGroupBox.Enabled:=true; SpinEdit1.Enabled:=true; @@ -1116,10 +1341,9 @@ begin //ringtones Button16.Enabled:=true; - if Edit1.Text<>'' then - Edit1.Enabled:=true; - if Edit2.Text<>'' then - Edit2.Enabled:=true; + if Edit1.Text<>'' then Edit1.Enabled:=true; + if Edit2.Text<>'' then Edit2.Enabled:=true; + Button22.Enabled:=true; If MainForm.PageControl1.ActivePage=MainForm.NetmonitorTabSheet then NetmonitorTabSheetShow(Sender); @@ -1136,7 +1360,8 @@ begin SpeedTabSheetShow(Sender); end; - if bitma.type2<>GSM_OperatorLogo then + if (bitma.type2<>GSM_OperatorLogo) and + (bitma.type2<>GSM_7110OperatorLogo) then Button8.Enabled:=false else Button8.Enabled:=true; @@ -1171,7 +1396,8 @@ begin Button18.Enabled:=false; if bitma.type2=GSM_PictureImage then Button18.Enabled:=true; - if bitma.type2=GSM_OperatorLogo then + if (bitma.type2=GSM_OperatorLogo) or + (bitma.type2=GSM_7110OperatorLogo) then Button18.Enabled:=true; if bitma.type2=GSM_CallerLogo then Button18.Enabled:=true; @@ -1180,6 +1406,7 @@ begin WAPSettTabSheet.Enabled:=true; if GSM_GetModelFeature(FN_WAP)=0 then begin + Button23.Enabled:=false; GroupBox19.Enabled:=false; groupbox19.Ctl3D:=false; ComboBox7.enabled:=false; @@ -1220,6 +1447,8 @@ begin Edit13.Enabled:=true; Edit14.Enabled:=true; Edit15.Enabled:=true; + Button23.Enabled:=false; + if ComboBox7.ItemIndex<>0 then Button23.Enabled:=true; end; button19.Enabled:=true; @@ -1229,6 +1458,9 @@ begin // Here we should disabled interface MainForm.StatusBar1.Panels[1].Text:='Not connected'; + SaveBackupTofile1.Enabled:=false; + Restorebackupfromfile1.Enabled:=false; + callerinit:=false; MainForm.ComboBox1.Enabled:=false; @@ -1250,6 +1482,7 @@ begin Button17.Enabled:=false; Edit1.Enabled:=false; Edit2.Enabled:=false; + Button22.Enabled:=false; MainForm.NetmonitorTabSheetHide(Sender); MainForm.PhonebookTabSheetHide(Sender); @@ -1273,6 +1506,7 @@ begin Edit13.Enabled:=false; Edit14.Enabled:=false; Edit15.Enabled:=false; + Button23.Enabled:=false; button19.Enabled:=false; button20.Enabled:=false; @@ -1284,6 +1518,7 @@ end; procedure TMainForm.Quit1Click(Sender: TObject); begin if GSMPhoneConnected then GSM_Terminate(); + SaveMainConfig; Halt; end; @@ -1362,10 +1597,53 @@ begin end; end; +procedure AddPBKEntry(MyListView:TListView;x:GSM_PhonebookEntry;number:integer); +var j:integer; +begin + MyListView.Items.Item[number].Subitems.Add(x.Name); + + if (x.Number[1]<>chr(0)) then + MyListView.Items.Item[number].Subitems.Add(x.Number) + else begin + for j:=1 to x.SubEntriesCount do + begin + if x.SubEntries[j].EntryType=GSM_Number then + begin + MyListView.Items.Item[number].Subitems.Add(x.subentries[j].Number); + break; + end; + end; + end; + + case x.Group of + 0:MyListView.Items.Item[number].Subitems.Add(caller[x.Group+1].text); + 1:MyListView.Items.Item[number].Subitems.Add(caller[x.Group+1].text); + 2:MyListView.Items.Item[number].Subitems.Add(caller[x.Group+1].text); + 3:MyListView.Items.Item[number].Subitems.Add(caller[x.Group+1].text); + 4:MyListView.Items.Item[number].Subitems.Add(caller[x.Group+1].text); + else + MyListView.Items.Item[number].Subitems.Add('not set'); + end; + + for j:=1 to x.SubEntriesCount do + begin + if x.SubEntries[j].EntryType=GSM_Date then + begin + MyListView.Items.Item[number].Subitems.Add( + DayOfweek2(x.SubEntries[j].Date.Day,x.SubEntries[j].Date.Month,x.SubEntries[j].Date.Year)+' '+ + inttostr2(x.SubEntries[j].Date.Day,2)+'-'+inttostr2(x.SubEntries[j].Date.Month,2)+'-'+ + inttostr(x.SubEntries[j].Date.Year)); + MyListView.Items.Item[number].Subitems.Add( + inttostr2(x.SubEntries[j].Date.Hour,2)+':'+inttostr2(x.SubEntries[j].Date.Minute,2)+':'+ + inttostr2(x.SubEntries[j].Date.Second,2)); + break; + end; + end; +end; + procedure TPhonebookThread.Execute; var x:GSM_PhonebookEntry; - i,j:integer; begin while not Terminated do begin @@ -1385,40 +1663,21 @@ begin if (x.MemoryType=GMT_RC) then x.Location:=x.Location-1; if GSM_GetMemoryLocation(@x)=0 then begin - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(x.Name); - if (x.Number[1]<>chr(0)) then - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(x.Number) - else begin - for j:=1 to x.SubEntriesCount do - begin - if x.SubEntries[j].EntryType=GSM_Number then - begin - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(x.subentries[j].Number); - break; - end; - end; + if (x.MemoryType=GMT_ME) then + begin + PhoneBackup.PhonePhonebookUsed:=PhoneBackup.PhonePhonebookUsed+1; end; - case x.Group of - 0:MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(caller[x.Group+1].text); - 1:MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(caller[x.Group+1].text); - 2:MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(caller[x.Group+1].text); - 3:MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(caller[x.Group+1].text); - 4:MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(caller[x.Group+1].text); - else - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add('not set'); - end; + PBKOfflineNumber:=PBKOfflineNumber+1; + PhoneBackup.PhonePhonebook[PBKOfflineNumber]:=x; - for i:=1 to x.SubEntriesCount do + if (x.MemoryType=GMT_SM) then begin - if x.SubEntries[i].EntryType=GSM_Date then - begin - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(DayOfweek2(x.SubEntries[i].Date.Day,x.SubEntries[i].Date.Month,x.SubEntries[i].Date.Year)+' '+inttostr2(x.SubEntries[i].Date.Day,2)+'-'+inttostr2(x.SubEntries[i].Date.Month,2)+'-'+inttostr(x.SubEntries[i].Date.Year)); - MainForm.ListView1.Items.Item[phonebookcur-1].Subitems.Add(inttostr2(x.SubEntries[i].Date.Hour,2)+':'+inttostr2(x.SubEntries[i].Date.Minute,2)+':'+inttostr2(x.SubEntries[i].Date.Second,2)); - break; - end; + PhoneBackup.SIMPhonebookUsed:=PhoneBackup.SIMPhonebookUsed+1; + PhoneBackup.SIMPhonebook[PhoneBackup.SIMPhonebookUsed]:=x; end; + AddPBKEntry(MainForm.ListView1,x,phonebookcur-1); if (x.Name[1]<>chr(0)) then phonebookfound:=phonebookfound+1; end; end; @@ -1471,11 +1730,24 @@ begin phonebookcur:=0; phonebookfound:=0; + PBKOfflineNumber:=0; + PhoneBackup.PhonePhonebookUsed:=0; + PhoneBackup.SIMPhonebookUsed:=0; + if (phonebookstatus.MemoryType=GMT_ME) then + begin + PhoneBackup.PhonePhonebookSize:=phonebookstatus.Free+phonebookstatus.Used; + end; + if (phonebookstatus.MemoryType=GMT_SM) then + begin + PhoneBackup.SIMPhonebookSize:=phonebookstatus.Free+phonebookstatus.Used; + end; + ComboBox1.Enabled:=false; ReadAllCallerGroups(); MainForm.ListView1.Items.Clear; + MainForm.Timer2.Enabled:=false; PhonebookThread:=TPhonebookThread.Create(false); end; @@ -1538,14 +1810,30 @@ end; procedure TMainForm.Button2Click(Sender: TObject); var i:integer; + mybinring:GSM_BinRingtone; + myring:GSM_Ringtone; begin LogosRingForm.Label1.Caption:='Do you want to set ringtone ?'; + LogosRingForm.ComboBox3.Visible:=true; LogosRingForm.ComboBox3.Items.Clear(); LogosRingForm.ComboBox3.Items.Add('Preview'); - for i:=1 to 7 do + MainForm.Timer2.Enabled:=false; + for i:=1 to GSM_GetModelFeature(FN_RINGNUMBER) do begin - LogosRingForm.ComboBox3.Items.Add('Location '+inttostr(i)); + mybinring.location:=i; + if (GSM_GetPhoneRingtone(@mybinring,@myring)=0) then + begin + if GSM_GetModelFeature(FN_RINGTONES)=F_RING_SM then + begin + LogosRingForm.ComboBox3.Items.Add(myring.name); + end else + begin + LogosRingForm.ComboBox3.Items.Add(mybinring.name); + end; + end else + LogosRingForm.ComboBox3.Items.Add('Location '+inttostr(i)); end; + MainForm.Timer2.Enabled:=true; LogosRingForm.ComboBox3.ItemIndex:=1; LogosRingForm.ShowModal; if LogosRingForm.ComboBox3.Visible then @@ -1697,6 +1985,9 @@ begin end; procedure AddCalendarNote(note:GSM_CalendarNote;myview:TListView); +var + j,z:integer; + found:boolean; begin myview.Items.Add; myview.Items.Item[myview.Items.Count-1].Caption:=inttostr(myview.Items.Count); @@ -1707,7 +1998,38 @@ begin GCN_Birthday:myview.Items.Item[myview.Items.Count-1].Subitems.Add('Birthday'); end; myview.Items.Item[myview.Items.Count-1].Subitems.Add(note.Text); - myview.Items.Item[myview.Items.Count-1].Subitems.Add(note.Phone); + + found:=false; + if note.Type2=GCN_Call then + begin + MainForm.Label14.Caption:=note.Phone; + for z:=1 to PBKOfflineNumber do + begin + if (PhoneBackup.PhonePhonebook[z].Number[1]<>chr(0)) then + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[z].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + myview.Items.Item[myview.Items.Count-1].Subitems.Add(PhoneBackup.PhonePhonebook[z].Name); + found:=true; + break; + end; + end; + for j:=1 to PhoneBackup.PhonePhonebook[z].SubEntriesCount do + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[z].SubEntries[j].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + myview.Items.Item[myview.Items.Count-1].Subitems.Add(PhoneBackup.PhonePhonebook[z].Name); + found:=true; + break; + end; + end; + end; + end; + if not found then + myview.Items.Item[myview.Items.Count-1].Subitems.Add(note.Phone); + myview.Items.Item[myview.Items.Count-1].Subitems.Add(DayOfweek2(note.Time.Day,note.Time.Month,note.Time.Year)+' '+inttostr2(note.Time.Day,2)+'-'+inttostr2(note.Time.Month,2)+'-'+inttostr(note.Time.Year)+' '+inttostr2(note.Time.Hour,2)+':'+inttostr2(note.Time.Minute,2)+':'+inttostr2(note.Time.Second,2)); if note.Alarm.Year<>0 then myview.Items.Item[myview.Items.Count-1].Subitems.Add(DayOfweek2(note.Alarm.Day,note.Alarm.Month,note.Alarm.Year)+' '+inttostr2(note.Alarm.Day,2)+'-'+inttostr2(note.Alarm.Month,2)+'-'+inttostr(note.Alarm.Year)+' '+inttostr2(note.Alarm.Hour,2)+':'+inttostr2(note.Alarm.Minute,2)+':'+inttostr2(note.Alarm.Second,2)) @@ -1749,6 +2071,9 @@ begin CalendarNum:=1; MainForm.Timer2.Enabled:=false; readcalendar:=false; + + ReadPBKOffline; + CalendarThread:=TCalendarThread.Create(false); end else begin @@ -1766,21 +2091,45 @@ begin end; procedure TMainForm.New1Click(Sender: TObject); +var i,j:integer; begin setcalendarnote.Location:=MainForm.ListView4.Items.Count+1; CalendarForm.ComboBox1.ItemIndex:=0; CalendarForm.ComboBox1.OnSelect(nil); CalendarForm.Edit2.Text:=''; - CalendarForm.Edit1.Text:=''; + CalendarForm.ComboBox3.Text:=''; CalendarForm.DateTimePicker1.DateTime:=Date; CalendarForm.DateTimePicker3.Time:=Time; CalendarForm.DateTimePicker2.DateTime:=Date; CalendarForm.DateTimePicker4.Time:=Time; + + ReadPBKOffline; + CalendarForm.ComboBox3.Items.Clear; + CalendarForm.ComboBox3.Sorted:=false; + for i:=1 to PBKOfflineNumber do + begin + if (PhoneBackup.PhonePhonebook[i].Number[1]<>chr(0)) then + begin + CalendarForm.ComboBox3.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + end else + begin + for j:=1 to PhoneBackup.PhonePhonebook[i].SubEntriesCount do + begin + if PhoneBackup.PhonePhonebook[i].SubEntries[j].EntryType=GSM_Number then + begin + CalendarForm.ComboBox3.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + break; + end; + end; + end; + end; + CalendarForm.ComboBox3.Sorted:=true; + CalendarForm.ShowModal; end; procedure EditCalendarNote; -var i:integer; +var i,j,z:integer; begin i:=0; @@ -1798,7 +2147,7 @@ begin end; CalendarForm.Edit2.Text:=setcalendarnote.Text; - CalendarForm.Edit1.Text:=setcalendarnote.Phone; + CalendarForm.ComboBox3.Text:=setcalendarnote.Phone; if setcalendarnote.Alarm.Year<>0 then begin @@ -1847,6 +2196,70 @@ begin end; CalendarForm.ComboBox1.OnSelect(nil); + ReadPBKOffline; + CalendarForm.ComboBox3.Items.Clear; + CalendarForm.ComboBox3.Sorted:=false; + for i:=1 to PBKOfflineNumber do + begin + if (PhoneBackup.PhonePhonebook[i].Number[1]<>chr(0)) then + begin + CalendarForm.ComboBox3.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + end else + begin + for j:=1 to PhoneBackup.PhonePhonebook[i].SubEntriesCount do + begin + if PhoneBackup.PhonePhonebook[i].SubEntries[j].EntryType=GSM_Number then + begin + CalendarForm.ComboBox3.Items.Add(PhoneBackup.PhonePhonebook[i].Name); + break; + end; + end; + end; + end; + CalendarForm.ComboBox3.Sorted:=true; + + if setcalendarnote.Type2=GCN_Call then + begin + MainForm.Label14.Caption:=setcalendarnote.Phone; + for i:=1 to PBKOfflineNumber do + begin + if (PhoneBackup.PhonePhonebook[i].Number[1]<>chr(0)) then + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[i].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[i].Name; + for z:=0 to CalendarForm.ComboBox3.Items.Count do + begin + if (MainForm.Label14.Caption=CalendarForm.ComboBox3.Items[z]) then + begin + CalendarForm.ComboBox3.ItemIndex:=z; + break; + end; + end; + break; + end; + end; + for j:=1 to PhoneBackup.PhonePhonebook[i].SubEntriesCount do + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[i].SubEntries[j].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[i].Name; + for z:=0 to CalendarForm.ComboBox3.Items.Count do + begin + if (MainForm.Label14.Caption=CalendarForm.ComboBox3.Items[z]) then + begin + CalendarForm.ComboBox3.ItemIndex:=z; + break; + end; + end; + break; + end; + end; + end; + end; + CalendarForm.ShowModal; end; @@ -2097,14 +2510,44 @@ end; //sms procedure AddSMSInfo(myobject:TListView;mysms:GSM_SMSMessage); -var number:integer; +var number,i,z:integer; + found:boolean; begin number:=myobject.Items.Count; myobject.Items.Add; myobject.Items.Item[number].Caption:=inttostr(number+1); myobject.Items.Item[number].Subitems.Add(mysms.MessageText); - myobject.Items.Item[number].Subitems.Add(mysms.Sender); + + found:=false; + for z:=1 to PBKOfflineNumber do + begin + mainform.Label14.Caption:=mysms.Sender; + mainform.Label16.Caption:=PhoneBackup.PhonePhonebook[z].Number; + if (PhoneBackup.PhonePhonebook[z].Number[1]<>chr(0)) then + begin + if (mainform.Label14.Caption=mainform.Label16.Caption) then + begin + myobject.Items.Item[number].Subitems.Add(PhoneBackup.PhonePhonebook[z].Name); + found:=true; + break; + end; + end; + for i:=1 to PhoneBackup.PhonePhonebook[z].SubEntriesCount do + begin + mainform.Label16.Caption:=PhoneBackup.PhonePhonebook[z].SubEntries[i].Number; + if (PhoneBackup.PhonePhonebook[z].SubEntries[i].EntryType=GSM_Number) + and (mainform.Label14.Caption=mainform.Label16.Caption) then + begin + myobject.Items.Item[number].Subitems.Add(PhoneBackup.PhonePhonebook[z].Name); + found:=true; + break; + end; + end; + if found then break; + end; + if not found then myobject.Items.Item[number].Subitems.Add(mysms.Sender); + if mysms.SMSData=1 then begin myobject.Items.Item[number].Subitems.Add(DayOfweek2(mysms.Time.Day,mysms.Time.Month,mysms.Time.Year)+' '+inttostr2(mysms.Time.Day,2)+'-'+inttostr2(mysms.Time.Month,2)+'-'+inttostr(mysms.Time.Year)); @@ -2130,19 +2573,58 @@ begin end; procedure SendSaveSMS(mysms:GSM_SMSMessage); -var i:integer; +var i,j,z:integer; begin //text SMSEditForm.Memo1.Text:=mysms.MessageText; //number - SMSEditForm.Edit2.Text:=mysms.sender; - - //sms folder - SMSEditForm.ComboBox1.Items.Clear; - for i:=0 to MainForm.ComboBox3.items.count-1 do + SMSEditForm.ComboBox9.Text:=mysms.sender; + AddSMSEditSenderList; + MainForm.Label14.Caption:=mysms.sender; + for i:=1 to PBKOfflineNumber do begin - SMSEditForm.ComboBox1.Items.Add(MainForm.ComboBox3.Items.Strings[i]); + if (PhoneBackup.PhonePhonebook[i].Number[1]<>chr(0)) then + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[i].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[i].Name; + for z:=0 to SMSEditForm.ComboBox9.Items.Count do + begin + if (MainForm.Label14.Caption=SMSEditForm.ComboBox9.Items[z]) then + begin + SMSEditForm.ComboBox9.ItemIndex:=z; + break; + end; + end; + break; + end; + end; + for j:=1 to PhoneBackup.PhonePhonebook[i].SubEntriesCount do + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[i].SubEntries[j].Number; + if (MainForm.Label14.Caption=MainForm.Label16.Caption) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[i].Name; + for z:=0 to SMSEditForm.ComboBox9.Items.Count do + begin + if (MainForm.Label14.Caption=SMSEditForm.ComboBox9.Items[z]) then + begin + SMSEditForm.ComboBox9.ItemIndex:=z; + break; + end; + end; + break; + end; + end; + end; + + //sms folder + SMSEditForm.ComboBox1.Items.Clear; + for i:=0 to MainForm.ComboBox3.items.count-1 do + begin + SMSEditForm.ComboBox1.Items.Add(MainForm.ComboBox3.Items.Strings[i]); end; SMSEditForm.ComboBox1.ItemIndex:=MainForm.ComboBox3.ItemIndex; @@ -2178,6 +2660,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PbkSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.TextSMSTabSheet; @@ -2209,7 +2693,8 @@ begin SMSEditForm.Memo1.Text:=''; //number - SMSEditForm.Edit2.Text:=''; + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; //folders SMSEditForm.ComboBox1.Items.Clear; @@ -2236,6 +2721,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PBKSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.TextSMSTabSheet; @@ -2335,12 +2822,14 @@ begin smsnum2:=1; MainForm.ListView2.Items.Clear; MainForm.Timer2.Enabled:=false; + ReadPBKOffline; SMSThread:=TSMSThread.Create(false); end; end; procedure TMainForm.ComboBox3Change(Sender: TObject); begin + ReadPBKOffline; DisplaySMSfolder(); end; @@ -2369,12 +2858,12 @@ begin ch:=' (reply via the same SMSC) '+ch; firstmemo.Lines.Add('SMSC: '+ch); - if mysms.type2=GST_DR then + if (mysms.type2=GST_DR) and (mysms.MessageText[1]='D') then begin firstmemo.Lines.Add(pchar('Date & time: '+ DayOfweek2(mysms.Time.Day,mysms.Time.Month,mysms.Time.Year)+' '+inttostr2(mysms.Time.Day,2)+'-'+inttostr2(mysms.Time.Month,2)+'-'+inttostr(mysms.Time.Year)+' '+ inttostr2(mysms.Time.Hour,2)+':'+inttostr2(mysms.Time.Minute,2)+':'+inttostr2(mysms.Time.Second,2))+ - ' SMSC desponse date & time: '+ + ' SMSC response date & time: '+ DayOfweek2(mysms.SMSCTime.Day,mysms.SMSCTime.Month,mysms.SMSCTime.Year)+' '+inttostr2(mysms.SMSCTime.Day,2)+'-'+inttostr2(mysms.SMSCTime.Month,2)+'-'+inttostr(mysms.SMSCTime.Year)+' '+ inttostr2(mysms.SMSCTime.Hour,2)+':'+inttostr2(mysms.SMSCTime.Minute,2)+':'+inttostr2(mysms.SMSCTime.Second,2)); end else @@ -2554,8 +3043,8 @@ var current:integer; i:integer; begin - if listview1.Selected<>nil then - begin +// if listview1.Selected<>nil then +// begin pbk.Location:=pbknumberentry; case ComboBox1.ItemIndex of 1:begin pbk.MemoryType:=GMT_DC;pbk.Location:=pbk.Location-1;end; @@ -2585,6 +3074,7 @@ begin case pbk.SubEntries[i].EntryType of GSM_Number:case pbk.SubEntries[i].NumberType of GSM_General :pbkform.ListView1.Items.Item[current].Caption:='General number'; + GSM_General2:pbkform.ListView1.Items.Item[current].Caption:='General number'; GSM_Mobile :pbkform.ListView1.Items.Item[current].Caption:='Mobile'; GSM_Work :pbkform.ListView1.Items.Item[current].Caption:='Work'; GSM_Fax :pbkform.ListView1.Items.Item[current].Caption:='Fax'; @@ -2603,6 +3093,7 @@ begin if (pbk.SubEntries[i].EntryType<>GSM_Date) then pbkform.ListView1.Items.Item[current].SubItems.Add(pbk.SubEntries[i].Number); end; + if (pbk.Group>=0) and (pbk.Group<=4) then begin current:=current+1; @@ -2611,7 +3102,7 @@ begin pbkform.ListView1.Items.Item[current].SubItems.Add(caller[pbk.Group+1].text); end; pbkform.showmodal; - end; +// end; end; procedure TMainForm.Button18Click(Sender: TObject); @@ -2634,8 +3125,9 @@ begin SMSEditForm.Memo1.Text:=''; //number - SMSEditForm.Edit2.Text:=''; - + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + //folders GSM_GetSMSFolders(@SMSfolders); SMSEditForm.ComboBox1.Items.Clear; @@ -2662,6 +3154,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PBKSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.BitmapSMSTabSheet; @@ -2763,8 +3257,9 @@ begin SMSEditForm.Memo1.Text:=''; //number - SMSEditForm.Edit2.Text:=''; - + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + //folders GSM_GetSMSFolders(@SMSfolders); SMSEditForm.ComboBox1.Items.Clear; @@ -2791,6 +3286,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PBKSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.RingtoneSMSTabSheet; @@ -2826,8 +3323,9 @@ begin SMSEditForm.Memo1.Text:=''; //number - SMSEditForm.Edit2.Text:=''; - + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + //folders GSM_GetSMSFolders(@SMSfolders); SMSEditForm.ComboBox1.Items.Clear; @@ -2854,6 +3352,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PBKSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.CalendarSMSTabSheet; @@ -2894,8 +3394,9 @@ begin SMSEditForm.Memo1.Text:=''; //number - SMSEditForm.Edit2.Text:=''; - + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + //folders GSM_GetSMSFolders(@SMSfolders); SMSEditForm.ComboBox1.Items.Clear; @@ -2922,6 +3423,8 @@ begin SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; SMSEditForm.PBKSMSTabSheet.TabVisible:=false; SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.PBKSMSTabSheet; @@ -2969,13 +3472,29 @@ end; procedure TMainForm.Button14Click(Sender: TObject); var i:integer; + mybinring:GSM_BinRingtone; + myring:GSM_Ringtone; begin LogosRingForm.Label1.Caption:='Do you want to set ringtone ?'; + LogosRingForm.ComboBox3.Visible:=true; LogosRingForm.ComboBox3.Items.Clear(); - for i:=1 to 7 do + MainForm.Timer2.Enabled:=false; + for i:=1 to GSM_GetModelFeature(FN_RINGNUMBER) do begin - LogosRingForm.ComboBox3.Items.Add('Location '+inttostr(i)); + mybinring.location:=i; + if (GSM_GetPhoneRingtone(@mybinring,@myring)=0) then + begin + if GSM_GetModelFeature(FN_RINGTONES)=F_RING_SM then + begin + LogosRingForm.ComboBox3.Items.Add(myring.name); + end else + begin + LogosRingForm.ComboBox3.Items.Add(mybinring.name); + end; + end else + LogosRingForm.ComboBox3.Items.Add('Location '+inttostr(i)); end; + MainForm.Timer2.Enabled:=true; LogosRingForm.ComboBox3.ItemIndex:=0; LogosRingForm.ShowModal; if LogosRingForm.ComboBox3.Visible then @@ -3052,7 +3571,7 @@ end; procedure TMainForm.Timer2Timer(Sender: TObject); begin if SparkyThread.Suspended then SparkyThread.Resume; - Timer2.Interval:=4000; + Timer2.Interval:=2000; end; procedure TMainForm.AboutTabSheetShow(Sender: TObject); @@ -3084,6 +3603,7 @@ begin Reset(F); if (ioresult=0) then begin + ReadPBKOffline; smsofflinenumber:=0; while not eof(f) do begin @@ -3178,6 +3698,9 @@ begin begin MainForm.ListView9.Items.Item[bookmarknum-1].Subitems.Add(bookmark.title); MainForm.ListView9.Items.Item[bookmarknum-1].Subitems.Add(bookmark.adress); + end else + begin + MainForm.ListView9.Items.Item[bookmarknum-1].Subitems.Add(''); end; bookmarknum:=bookmarknum+1; if bookmarknum=15 then EndWAPBookmarkThread; @@ -3515,10 +4038,655 @@ end; procedure TMainForm.PCCalendarPopupMenuPopup(Sender: TObject); begin CopyTocalendar1.Enabled:=False; - if (GSMPhoneConnected) and (GSM_GetModelFeature(FN_Calendar)<>0) then copytocalendar1.Enabled:=True; + if (GSMPhoneConnected) and (GSM_GetModelFeature(FN_Calendar)<>0) + and (listview11.selected<>nil) then copytocalendar1.Enabled:=True; Delete5.Enabled:=false; if listview11.selected<>nil then Delete5.Enabled:=True; end; +procedure TMainForm.Savebackuptofile1Click(Sender: TObject); +begin + PhoneBackup.PhonePhonebookUsed:=0; + PhoneBackup.SIMPhonebookUsed:=0; + PhoneBackup.CallerAvailable:=0; + PhoneBackup.StartupLogoAvailable:=0; + PhoneBackup.StartupText.text[1]:=chr(0); + PhoneBackup.OperatorLogoAvailable:=0; + PhoneBackup.SpeedAvailable:=0; + + BackupForm.CheckBox3.Enabled:=true; + BackupForm.CheckBox4.Enabled:=true; + BackupForm.CheckBox2.Enabled:=true; + BackupForm.CheckBox1.Enabled:=true; + BackupForm.CheckBox5.Enabled:=true; + + BackupForm.GroupBox1.Caption:=' What do you want to backup ? '; + PhoneBackupAvailable:=True; + BackupForm.ListBox1.ItemIndex:=0; + BackupForm.GroupBox2.Visible:=true; + BackupForm.ShowModal; + if PhoneBackupAvailable then + begin + BackupProgressForm.ShowModal; + end; +end; + +procedure TMainForm.Restorebackupfromfile1Click(Sender: TObject); +begin + if OpenDialog1.Execute then + begin + if GSM_ReadBackupFile(PChar(OpenDialog1.FileName),@phonebackup)=0 then + begin + BackupForm.CheckBox3.Enabled:=true; + if PhoneBackup.CallerAvailable=0 then + BackupForm.CheckBox3.Enabled:=false; + + BackupForm.CheckBox4.Enabled:=true; + if PhoneBackup.OperatorLogoAvailable=0 then + BackupForm.CheckBox4.Enabled:=false; + + BackupForm.CheckBox2.Enabled:=true; + if PhoneBackup.PhonePhonebookUsed=0 then + BackupForm.CheckBox2.Enabled:=false; + + BackupForm.CheckBox1.Enabled:=true; + if PhoneBackup.SIMPhonebookUsed=0 then + BackupForm.CheckBox1.Enabled:=false; + + BackupForm.CheckBox5.Enabled:=true; + + BackupForm.GroupBox1.Caption:=' What do you want to restore ? '; + PhoneBackupAvailable:=true; + BackupForm.GroupBox2.Visible:=false; + BackupForm.ShowModal; + if PhoneBackupAvailable then + begin + PhoneBackupAvailable:=false; + BackupProgressForm.ShowModal; + end; + end; + end; +end; + +procedure TMainForm.PBKPopupMenuPopup(Sender: TObject); +begin + Savephonebooktofileanotherapplication1.enabled:=false; + Delete4.enabled:=false; + Edit19.Enabled:=false; + Edit7.Enabled:=false; + SMSSendSave1.Enabled:=false; + copyphonebooktopc1.Enabled:=false; + if GSMPhoneConnected then + begin + if (pbkofflinenumber<>0) then copyphonebooktopc1.Enabled:=true; + if (ComboBox1.ItemIndex=4) or (ComboBox1.ItemIndex=5) then + begin + Savephonebooktofileanotherapplication1.enabled:=true; + if listview1.Selected<>nil then + begin + Delete4.enabled:=true; + Edit19.Enabled:=true; + end; + end; + if listview1.Selected<>nil then + begin + SMSSendSave1.Enabled:=true; + Edit7.Enabled:=true; + end; + end; +end; + +procedure TMainForm.Savephonebooktofileanotherapplication1Click( + Sender: TObject); +begin + PhoneBackup.CallerAvailable:=0; + PhoneBackup.StartupLogoAvailable:=0; + PhoneBackup.StartupText.text[1]:=chr(0); + PhoneBackup.OperatorLogoAvailable:=0; + + BackupForm.CheckBox3.Enabled:=false; + BackupForm.CheckBox4.Enabled:=false; + + BackupForm.CheckBox2.Enabled:=true; + if PhoneBackup.PhonePhonebookUsed=0 then + BackupForm.CheckBox2.Enabled:=false; + + BackupForm.CheckBox1.Enabled:=true; + if PhoneBackup.SIMPhonebookUsed=0 then + BackupForm.CheckBox1.Enabled:=false; + + BackupForm.CheckBox5.Enabled:=false; + + BackupForm.GroupBox1.Caption:=' What do you want to backup ? '; + PhoneBackupAvailable:=True; + BackupForm.ListBox1.ItemIndex:=0; + BackupForm.GroupBox2.Visible:=true; + BackupForm.ShowModal; + if PhoneBackupAvailable then + begin + if MainForm.SaveDialog1.Execute then + begin + GSM_SaveBackupFile(PChar(MainForm.SaveDialog1.FileName),@phonebackup); + end; + end; +end; + +procedure TMainForm.ListView4DblClick(Sender: TObject); +begin +// if (GSMPhoneConnected) and (ListView4.Selected<>nil) then +// Edit3Click(Sender); +end; + +procedure TMainForm.Edit19Click(Sender: TObject); +var + i,j:integer; + num_num,text_num:integer; +begin + if listview1.Selected<>nil then + begin + PBKEditForm.ComboBox1.ItemIndex:=1; + PBKEditForm.COmboBox2.Items:=PBKEditForm.COmboBox1.Items; + PBKEditForm.ComboBox2.ItemIndex:=1; + PBKEditForm.COmboBox3.Items:=PBKEditForm.COmboBox1.Items; + PBKEditForm.ComboBox3.ItemIndex:=1; + PBKEditForm.COmboBox4.Items:=PBKEditForm.COmboBox1.Items; + PBKEditForm.ComboBox4.ItemIndex:=1; + PBKEditForm.COmboBox5.Items:=PBKEditForm.COmboBox1.Items; + PBKEditForm.ComboBox5.ItemIndex:=1; + PBKEditForm.ComboBox6.ItemIndex:=0; + PBKEditForm.COmboBox7.Items:=PBKEditForm.COmboBox6.Items; + PBKEditForm.ComboBox7.ItemIndex:=0; + PbkEditForm.Edit2.Text:=''; + + num_num:=1; + text_num:=1; + pbk.Location:=pbknumberentry; + case ComboBox1.ItemIndex of + 4:pbk.MemoryType:=GMT_ME; + 5:pbk.MemoryType:=GMT_SM; + end; + GSM_GetMemoryLocation(@pbk); + + pbkeditform.ComboBox1.enabled:=false; + pbkeditform.ComboBox2.enabled:=false; + pbkeditform.ComboBox3.enabled:=false; + pbkeditform.ComboBox4.enabled:=false; + pbkeditform.ComboBox5.enabled:=false; + pbkeditform.ComboBox6.enabled:=false; + pbkeditform.ComboBox7.enabled:=false; + pbkeditform.Edit3.enabled:=false; + pbkeditform.Edit4.enabled:=false; + pbkeditform.Edit5.enabled:=false; + pbkeditform.Edit6.enabled:=false; + pbkeditform.Edit7.enabled:=false; + pbkeditform.Edit8.enabled:=false; + PbkEditForm.Edit3.Text:='Not available'; + PbkEditForm.Edit4.Text:='Not available'; + PbkEditForm.Edit5.Text:='Not available'; + PbkEditForm.Edit6.Text:='Not available'; + PbkEditForm.Edit7.Text:='Not available'; + PbkEditForm.Edit8.Text:='Not available'; + if (pbk.MemoryType=GMT_ME) and + (GSM_GetModelFeature(FN_PHONEBOOK)=F_PBK71INT) then + begin + pbkeditform.ComboBox1.enabled:=true; + pbkeditform.ComboBox2.enabled:=true; + pbkeditform.ComboBox3.enabled:=true; + pbkeditform.ComboBox4.enabled:=true; + pbkeditform.ComboBox5.enabled:=true; + pbkeditform.ComboBox6.enabled:=true; + pbkeditform.ComboBox7.enabled:=true; + pbkeditform.Edit3.enabled:=true; + pbkeditform.Edit4.enabled:=true; + pbkeditform.Edit5.enabled:=true; + pbkeditform.Edit6.enabled:=true; + pbkeditform.Edit7.enabled:=true; + pbkeditform.Edit8.enabled:=true; + PbkEditForm.Edit3.Text:=''; + PbkEditForm.Edit4.Text:=''; + PbkEditForm.Edit5.Text:=''; + PbkEditForm.Edit6.Text:=''; + PbkEditForm.Edit7.Text:=''; + PbkEditForm.Edit8.Text:=''; + end; + + pbkeditform.Label2.Enabled:=true; + pbkeditform.ComboBox8.Enabled:=true; + if (GSM_GetModelFeature(FN_CALLERGROUPS)=0) then + begin + pbkeditform.Label2.Enabled:=false; + pbkeditform.ComboBox8.Enabled:=false; + end; + + pbkeditform.Edit1.Text:=pbk.name; + if (pbk.Number[1]<>chr(0)) then + begin + pbkeditform.ComboBox1.ItemIndex:=1; + pbkeditform.Edit2.Text:=pbk.number; + num_num:=num_num+1; + end; + for i:=1 to pbk.SubEntriesCount do + begin + case pbk.SubEntries[i].EntryType of + GSM_Number: + begin + j:=1; + case pbk.SubEntries[i].NumberType of + GSM_General :j:=1; + GSM_General2:j:=1; + GSM_Mobile :j:=3; + GSM_Work :j:=4; + GSM_Fax :j:=0; + GSM_Home :j:=2; + end; + case num_num of + 1:begin + pbkeditform.ComboBox1.ItemIndex:=j; + pbkeditform.edit2.text:=pbk.SubEntries[i].Number; + end; + 2:begin + pbkeditform.ComboBox2.ItemIndex:=j; + pbkeditform.edit3.text:=pbk.SubEntries[i].Number; + end; + 3:begin + pbkeditform.ComboBox3.ItemIndex:=j; + pbkeditform.edit4.text:=pbk.SubEntries[i].Number; + end; + 4:begin + pbkeditform.ComboBox4.ItemIndex:=j; + pbkeditform.edit5.text:=pbk.SubEntries[i].Number; + end; + 5:begin + pbkeditform.ComboBox5.ItemIndex:=j; + pbkeditform.edit6.text:=pbk.SubEntries[i].Number; + end; + end; + num_num:=num_num+1; + end; + GSM_Note : + begin + j:=1; + case text_num of + 1:begin + pbkeditform.ComboBox6.ItemIndex:=j; + pbkeditform.edit7.text:=pbk.SubEntries[i].Number; + end; + 2:begin + pbkeditform.ComboBox7.ItemIndex:=j; + pbkeditform.edit8.text:=pbk.SubEntries[i].Number; + end; + end; + text_num:=text_num+1; + end; + GSM_Postal: + begin + j:=2; + case text_num of + 1:begin + pbkeditform.ComboBox6.ItemIndex:=j; + pbkeditform.edit7.text:=pbk.SubEntries[i].Number; + end; + 2:begin + pbkeditform.ComboBox7.ItemIndex:=j; + pbkeditform.edit8.text:=pbk.SubEntries[i].Number; + end; + end; + text_num:=text_num+1; + end; + GSM_Email : + begin + j:=0; + case text_num of + 1:begin + pbkeditform.ComboBox6.ItemIndex:=j; + pbkeditform.edit7.text:=pbk.SubEntries[i].Number; + end; + 2:begin + pbkeditform.ComboBox7.ItemIndex:=j; + pbkeditform.edit8.text:=pbk.SubEntries[i].Number; + end; + end; + text_num:=text_num+1; + end; + + end; + end; + + pbkeditform.ComboBox8.items.clear; + pbkeditform.ComboBox8.items.add('Not assigned'); + for i:=1 to 5 do + begin + pbkeditform.ComboBox8.items.add(caller[i].text); + end; + pbkeditform.ComboBox8.itemindex:=0; + if (GSM_GetModelFeature(FN_CALLERGROUPS)<>0) then + begin + if (pbk.Group>=0) and (pbk.Group<=4) then + begin + pbkeditform.ComboBox8.itemindex:=pbk.Group+1; + end; + end; + + PbkEditForm.ShowModal; + end; + +end; + +procedure TMainForm.Delete4Click(Sender: TObject); +begin + if Application.MessageBox('Do you want to delete this phonebook entry ?','Question',MB_YESNO)=IDYES then + begin + + pbk.Location:=pbknumberentry; + case ComboBox1.ItemIndex of + 4:pbk.MemoryType:=GMT_ME; + 5:pbk.MemoryType:=GMT_SM; + end; + + MainForm.Timer2.Enabled:=false; + GSM_GetMemoryLocation(@pbk); + + pbk.SubEntriesCount:=0; + pbk.Name[1]:=chr(0); + pbk.Number[1]:=chr(0); + GSM_WritePhonebookLocation(@pbk); + MainForm.Timer2.Enabled:=true; + MainForm.ComboBox1Change(nil); + end; +end; + + +procedure TMainForm.Button22Click(Sender: TObject); +var + i:integer; + mybinring:GSM_BinRingtone; + myring:GSM_Ringtone; +begin + LogosRingForm.Label1.Caption:='Do you want to get ringtone ?'; + LogosRingForm.ComboBox3.Visible:=true; + LogosRingForm.ComboBox3.Items.Clear(); + MainForm.Timer2.Enabled:=false; + for i:=1 to GSM_GetModelFeature(FN_RINGNUMBER) do + begin + mybinring.location:=i; + if (GSM_GetPhoneRingtone(@mybinring,@myring)=0) then + begin + if GSM_GetModelFeature(FN_RINGTONES)=F_RING_SM then + begin + LogosRingForm.ComboBox3.Items.Add(myring.name); + end else + begin + LogosRingForm.ComboBox3.Items.Add(mybinring.name); + end; + end else + LogosRingForm.ComboBox3.Items.Add('Location '+inttostr(i)); + end; + MainForm.Timer2.Enabled:=true; + LogosRingForm.ComboBox3.ItemIndex:=0; + LogosRingForm.ShowModal; + if LogosRingForm.ComboBox3.Visible then + begin + mybinring.location:=LogosRingForm.ComboBox3.ItemIndex+1; + MainForm.Timer2.Enabled:=false; + if (GSM_GetPhoneRingtone(@mybinring,@myring)=0) then + begin + MainForm.Timer2.Enabled:=true; + if GSM_GetModelFeature(FN_RINGTONES)=F_RING_SM then + begin + application.MessageBox('Smart Messaging format','',0); + if SaveDialog1.Execute then + begin + GSM_SaveRingtoneFile(PChar(SaveDialog1.FileName),@myring); + end; + end else + begin + application.MessageBox('Binary format','',0); + if SaveDialog1.Execute then + begin + GSM_SaveBinRingtoneFile(PChar(SaveDialog1.FileName),@mybinring); + end; + end; + end; + + MainForm.Timer2.Enabled:=true; + end; + +end; + +procedure TMainForm.New20Click(Sender: TObject); +begin + bookmarknum:=65535; + WAPBookForm.Edit1.Text:=''; + WAPBookForm.Edit2.Text:=''; + WAPBookForm.ShowModal; +end; + +procedure TMainForm.ListView9SelectItem(Sender: TObject; Item: TListItem; + Selected: Boolean); +begin + if Selected then bookmarknum2:=item.Index+1; +end; + +procedure TMainForm.Edit20Click(Sender: TObject); +var + bookmark:GSM_WAPBookmark; +begin + bookmark.location:=bookmarknum2; + mainform.Timer2.Enabled:=false; + GSM_GetWAPBookmark(@bookmark); + mainform.Timer2.Enabled:=true; + WAPBookForm.Edit1.Text:=bookmark.title; + WAPBookForm.Edit2.Text:=bookmark.adress; + WAPBookForm.ShowModal; +end; + +procedure TMainForm.WAPBookPopupMenuPopup(Sender: TObject); +begin + New20.Enabled:=false; + Edit20.Enabled:=false; + SMSSendSave2.Enabled:=false; + if (WAPBookmarkThread=nil) and (GSMPhoneConnected) then + begin + New20.Enabled:=true; + if (ListView9.Selected<>nil) and + (ListView9.Selected.SubItems[0]<>'') then + begin + Edit20.Enabled:=true; + SMSSendSave2.Enabled:=true; + end; + end; +end; + +procedure TMainForm.SMSSendSave2Click(Sender: TObject); +var + i:integer; +begin + if smscinit=false then + begin + MainForm.ListView6.Items.Clear; + smscnum:=1; + while true do + begin + ReadSMSC; + if smscinit then break; + end; + end; + + //sms text + SMSEditForm.Memo1.Text:=''; + + //number + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + + //folders + GSM_GetSMSFolders(@SMSfolders); + SMSEditForm.ComboBox1.Items.Clear; + for i:=1 to SMSFolders.number do + begin + SMSEditForm.ComboBox1.Items.Add(SMSfolders.folder[i].Name); + end; + SMSEditForm.ComboBox1.ItemIndex:=0; + + //smsc + SetSMSC(1); + SMSEditForm.ComboBox2.Items.Clear; + SMSEditForm.ComboBox2.Items.Add('custom'); + for i:=1 to smscnum-1 do + begin + if SMSC2[i].Name[1]<>chr(0) then + SMSEditForm.ComboBox2.Items.Add('set '+inttostr(i)+' - '+SMSC2[i].Name) + else + SMSEditForm.ComboBox2.Items.Add('set '+inttostr(i)); + end; + SMSEditForm.ComboBox2.ItemIndex:=1; + + SMSEditForm.TextSMSTabSheet.TabVisible:=false; + SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; + SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; + SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; + SMSEditForm.PBKSMSTabSheet.TabVisible:=false; + SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.WAPBookTabSheet; + + bookma.location:=bookmarknum2; + mainform.Timer2.Enabled:=false; + GSM_GetWAPBookmark(@bookma); + mainform.Timer2.Enabled:=true; + + if (GSM_GetModelFeature(FN_SMS)=F_SMS71) then + begin + SMSEditForm.edit3.Visible:=true; + SMSEditForm.label14.Visible:=true; + end else + begin + SMSEditForm.edit3.Visible:=false; + SMSEditForm.label14.Visible:=false; + end; + + SMSEditForm.ShowModal; +end; + +procedure TMainForm.Button23Click(Sender: TObject); +var + i:integer; +begin + if smscinit=false then + begin + MainForm.ListView6.Items.Clear; + smscnum:=1; + while true do + begin + ReadSMSC; + if smscinit then break; + end; + end; + + //sms text + SMSEditForm.Memo1.Text:=''; + + //number + SMSEditForm.ComboBox9.Text:=''; + AddSMSEditSenderList; + + //folders + GSM_GetSMSFolders(@SMSfolders); + SMSEditForm.ComboBox1.Items.Clear; + for i:=1 to SMSFolders.number do + begin + SMSEditForm.ComboBox1.Items.Add(SMSfolders.folder[i].Name); + end; + SMSEditForm.ComboBox1.ItemIndex:=0; + + //smsc + SetSMSC(1); + SMSEditForm.ComboBox2.Items.Clear; + SMSEditForm.ComboBox2.Items.Add('custom'); + for i:=1 to smscnum-1 do + begin + if SMSC2[i].Name[1]<>chr(0) then + SMSEditForm.ComboBox2.Items.Add('set '+inttostr(i)+' - '+SMSC2[i].Name) + else + SMSEditForm.ComboBox2.Items.Add('set '+inttostr(i)); + end; + SMSEditForm.ComboBox2.ItemIndex:=1; + + SMSEditForm.TextSMSTabSheet.TabVisible:=false; + SMSEditForm.BitmapSMSTabSheet.TabVisible:=false; + SMSEditForm.RingtoneSMSTabSheet.TabVisible:=false; + SMSEditForm.CalendarSMSTabSheet.TabVisible:=false; + SMSEditForm.WAPBookTabSheet.TabVisible:=false; + SMSEditForm.WAPSettTabSheet.TabVisible:=false; + SMSEditForm.PBKSMSTabSheet.TabVisible:=false; + SMSEditForm.SMSEditPageControl.ActivePage:=Smseditform.WAPSettTabSheet; + + Wapset.location:=combobox7.ItemIndex; + MainForm.Timer2.Enabled:=false; + GSM_GetWAPSettings(@wapset); + MainForm.Timer2.Enabled:=true; + + if (GSM_GetModelFeature(FN_SMS)=F_SMS71) then + begin + SMSEditForm.edit3.Visible:=true; + SMSEditForm.label14.Visible:=true; + end else + begin + SMSEditForm.edit3.Visible:=false; + SMSEditForm.label14.Visible:=false; + end; + + SMSEditForm.ShowModal; +end; + +procedure TMainForm.CopyphonebooktoPC1Click(Sender: TObject); +begin + SavePBKOffline; +end; + +procedure TMainForm.PCPBKTabSheetShow(Sender: TObject); +var i:integer; +begin + ReadPBKOffline; + ListView12.Items.Clear; + for i:=1 to PBKOfflineNumber do + begin + MainForm.ListView12.Items.Add; + MainForm.ListView12.Items.Item[i-1].Caption:=inttostr(PhoneBackup.PhonePhonebook[i].Location); + AddPBKEntry(ListView12,PhoneBackup.PhonePhonebook[i],i-1); + end; +end; + +procedure TMainForm.FormShow(Sender: TObject); +var + MyIniFile: TIniFile; + x:string; +begin + MyIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'\gnokiirc'); + + x:=MyInifile.ReadString('win32gui', 'x', '100'); + MainForm.Left:=strtoint(x); + + x:=MyInifile.ReadString('win32gui', 'y', '100'); + MainForm.Top:=strtoint(x); + + x:=MyInifile.ReadString('win32gui', 'treewidth', '93'); + MainForm.TreeView1.Width:=strtoint(x); + + x:=MyInifile.ReadString('win32gui', 'width', '655'); + MainForm.Width:=strtoint(x); + + x:=MyInifile.ReadString('win32gui', 'height', '431'); + MainForm.Height:=strtoint(x); + + MyIniFile.Free; + +end; + +procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + SaveMainConfig; +end; + end. diff --git a/win32_makefile/gui_delphi/pbkedit.dfm b/win32_makefile/gui_delphi/pbkedit.dfm index 2f78d20..81d0fdb 100644 --- a/win32_makefile/gui_delphi/pbkedit.dfm +++ b/win32_makefile/gui_delphi/pbkedit.dfm @@ -1,10 +1,10 @@ object PbkForm: TPbkForm - Left = 187 - Top = 121 + Left = 263 + Top = 136 BorderStyle = bsDialog - Caption = 'Edit phonebook entry' - ClientHeight = 212 - ClientWidth = 309 + Caption = 'View phonebook entry' + ClientHeight = 207 + ClientWidth = 313 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -15,10 +15,10 @@ object PbkForm: TPbkForm PixelsPerInch = 96 TextHeight = 13 object ListView1: TListView - Left = 4 + Left = 8 Top = 8 - Width = 301 - Height = 169 + Width = 297 + Height = 161 Columns = < item Caption = 'Type' @@ -28,14 +28,15 @@ object PbkForm: TPbkForm Caption = 'Entry' Width = 190 end> + ReadOnly = True RowSelect = True TabOrder = 0 ViewStyle = vsReport end object Button1: TButton - Left = 4 - Top = 184 - Width = 73 + Left = 8 + Top = 176 + Width = 77 Height = 25 Caption = 'OK' TabOrder = 1 @@ -43,7 +44,7 @@ object PbkForm: TPbkForm end object Button2: TButton Left = 224 - Top = 184 + Top = 176 Width = 81 Height = 25 Caption = 'Cancel' diff --git a/win32_makefile/gui_delphi/pbkedit.pas b/win32_makefile/gui_delphi/pbkedit.pas index cca501d..7611e98 100644 --- a/win32_makefile/gui_delphi/pbkedit.pas +++ b/win32_makefile/gui_delphi/pbkedit.pas @@ -4,7 +4,7 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, StdCtrls, ComCtrls; + Dialogs, StdCtrls, ComCtrls, MainUnit, GnokiiAPI, Menus; type TPbkForm = class(TForm) diff --git a/win32_makefile/gui_delphi/smsedit.dfm b/win32_makefile/gui_delphi/smsedit.dfm index 26cd7a6..cd87931 100644 --- a/win32_makefile/gui_delphi/smsedit.dfm +++ b/win32_makefile/gui_delphi/smsedit.dfm @@ -42,7 +42,7 @@ object SMSEditForm: TSMSEditForm Width = 75 Height = 25 Caption = 'OK' - TabOrder = 5 + TabOrder = 4 OnClick = Button1Click end object CheckBox2: TCheckBox @@ -62,13 +62,6 @@ object SMSEditForm: TSMSEditForm TabOrder = 2 OnClick = Button3Click end - object Edit2: TEdit - Left = 384 - Top = 48 - Width = 153 - Height = 21 - TabOrder = 4 - end object GroupBox2: TGroupBox Left = 328 Top = 160 @@ -169,7 +162,7 @@ object SMSEditForm: TSMSEditForm Width = 241 Height = 17 Caption = 'Read' - TabOrder = 8 + TabOrder = 7 end object ComboBox1: TComboBox Left = 384 @@ -185,10 +178,10 @@ object SMSEditForm: TSMSEditForm Top = 64 Width = 313 Height = 269 - ActivePage = CalendarSMSTabSheet + ActivePage = PBKSMSTabSheet Style = tsFlatButtons - TabIndex = 2 - TabOrder = 7 + TabIndex = 4 + TabOrder = 6 object TextSMSTabSheet: TTabSheet Caption = 'TextSMSTabSheet' object GroupBox1: TGroupBox @@ -301,7 +294,7 @@ object SMSEditForm: TSMSEditForm Top = 176 Width = 153 Height = 21 - ItemHeight = 13 + ItemHeight = 0 TabOrder = 0 Text = 'ComboBox7' end @@ -2243,6 +2236,32 @@ object SMSEditForm: TSMSEditForm end end end + object WAPBookTabSheet: TTabSheet + Caption = 'WAPBookTabSheet' + ImageIndex = 5 + object GroupBox7: TGroupBox + Left = 0 + Top = 0 + Width = 305 + Height = 238 + Align = alClient + Caption = 'WAP Bookmark' + TabOrder = 0 + end + end + object WAPSettTabSheet: TTabSheet + Caption = 'WAPSettTabSheet' + ImageIndex = 6 + object GroupBox8: TGroupBox + Left = 0 + Top = 0 + Width = 305 + Height = 238 + Align = alClient + Caption = 'WAP Settings' + TabOrder = 0 + end + end end object RadioGroup1: TRadioGroup Left = 8 @@ -2254,7 +2273,7 @@ object SMSEditForm: TSMSEditForm Items.Strings = ( 'Save SMS' 'Send SMS') - TabOrder = 6 + TabOrder = 5 OnClick = RadioGroup1Click end object Edit3: TEdit @@ -2262,6 +2281,14 @@ object SMSEditForm: TSMSEditForm Top = 80 Width = 201 Height = 21 + TabOrder = 8 + end + object ComboBox9: TComboBox + Left = 384 + Top = 48 + Width = 201 + Height = 21 + ItemHeight = 13 TabOrder = 9 end end diff --git a/win32_makefile/gui_delphi/smsedit.pas b/win32_makefile/gui_delphi/smsedit.pas index 62a45d8..0961742 100644 --- a/win32_makefile/gui_delphi/smsedit.pas +++ b/win32_makefile/gui_delphi/smsedit.pas @@ -19,7 +19,6 @@ type CheckBox2: TCheckBox; Button3: TButton; Edit1: TEdit; - Edit2: TEdit; GroupBox2: TGroupBox; ComboBox2: TComboBox; Label4: TLabel; @@ -58,6 +57,11 @@ type ComboBox8: TComboBox; Label14: TLabel; Edit3: TEdit; + WAPBookTabSheet: TTabSheet; + WAPSettTabSheet: TTabSheet; + GroupBox7: TGroupBox; + GroupBox8: TGroupBox; + ComboBox9: TComboBox; procedure Button3Click(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure Button1Click(Sender: TObject); @@ -91,7 +95,7 @@ end; procedure TSMSEditForm.Button1Click(Sender: TObject); var - i:integer; + p,i,j:integer; z:integer; w:word; unicode,screensaver:integer; @@ -140,6 +144,14 @@ begin begin GSM_SaveRingtoneToSMS(@setsms,@rington,1); end; + if (SMSEditPageControl.ActivePage=WAPBookTabSheet) then + begin + GSM_SaveWAPBookmarkToSMS(@setsms,@bookma); + end; + if (SMSEditPageControl.ActivePage=WAPSettTabSheet) then + begin + GSM_SaveWAPSettingsToSMS(@setsms,@wapset); + end; if (SMSEditPageControl.ActivePage=CalendarSMSTabSheet) then begin GSM_SaveCalendarNoteToSMS(@setsms,@calenda); @@ -165,8 +177,39 @@ begin for i:=1 to 41 do setsms.sms[z].destination[i]:=chr(0); - for i:=1 to strlen(pchar(Edit2.text)) do - setsms.sms[z].destination[i]:=Edit2.Text[i]; + if (ComboBox9.ItemIndex=-1) then + begin + for i:=1 to strlen(pchar(ComboBox9.text)) do + setsms.sms[z].destination[i]:=ComboBox9.Text[i]; + end else + begin + ReadPBKOffline; + for p:=1 to PBKOfflineNumber do + begin + MainForm.Label16.Caption:=PhoneBackup.PhonePhonebook[p].Name; + if (MainForm.Label16.Caption=ComboBox9.Text) then + begin + if (PhoneBackup.PhonePhonebook[p].Number[1]<>chr(0)) then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[p].Number; + for i:=1 to strlen(pchar(MainForm.Label14.Caption)) do + setsms.sms[z].destination[i]:=PhoneBackup.PhonePhonebook[p].Number[i]; + end else + begin + for j:=1 to PhoneBackup.PhonePhonebook[p].SubEntriesCount do + begin + if PhoneBackup.PhonePhonebook[p].SubEntries[j].EntryType=GSM_Number then + begin + MainForm.Label14.Caption:=PhoneBackup.PhonePhonebook[p].SubEntries[j].Number; + for i:=1 to strlen(pchar(MainForm.Label14.Caption)) do + setsms.sms[z].destination[i]:=PhoneBackup.PhonePhonebook[p].SubEntries[j].Number[i]; + break; + end; + end; + end; + end; + end; + end; setsms.sms[z].folder:=combobox1.ItemIndex; diff --git a/xgnokii/xgnokii_contacts.c b/xgnokii/xgnokii_contacts.c index d7c5f78..39ef62b 100644 --- a/xgnokii/xgnokii_contacts.c +++ b/xgnokii/xgnokii_contacts.c @@ -251,7 +251,7 @@ static void OkEditEntryDialog (GtkWidget *widget, gpointer data) max_phonebook_name_length); entry->entry.Name[max_phonebook_name_length] = '\0'; - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -297,7 +297,7 @@ because you save it into SIM memory!")); gtk_widget_show (errorDialog.dialog); } - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -331,7 +331,7 @@ because you save it into SIM memory!")); max_phonebook_name_length); ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0'; - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -356,7 +356,7 @@ because you save it into SIM memory!")); gtk_widget_show (errorDialog.dialog); } - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -473,7 +473,7 @@ static void OkNewEntryDialog(GtkWidget *widget, gpointer data ) max_phonebook_name_length); entry->entry.Name[max_phonebook_name_length] = '\0'; - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -511,7 +511,7 @@ because you save it into SIM memory!")); gtk_widget_show (errorDialog.dialog); } - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -537,7 +537,7 @@ because you save it into SIM memory!")); max_phonebook_name_length); ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0'; - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -562,7 +562,7 @@ because you save it into SIM memory!")); gtk_widget_show (errorDialog.dialog); } - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { } else @@ -1077,7 +1077,7 @@ static void CreateEditDialog (EditEntryData *editEntryData, gchar *title, gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); gtk_widget_show (label); - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { button = gtk_button_new (); editEntryData->number = gtk_label_new (""); @@ -1097,7 +1097,7 @@ static void CreateEditDialog (EditEntryData *editEntryData, gchar *title, gtk_widget_show (editEntryData->number); } -/* if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) { +/* if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { hbox = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox); @@ -1160,7 +1160,7 @@ static void EditPbEntry(PhonebookEntry *pbEntry, gint row) gtk_entry_set_text (GTK_ENTRY (editEditEntryData.name), pbEntry->entry.Name); - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) gtk_label_set_text (GTK_LABEL (editEditEntryData.number), pbEntry->entry.Number); else gtk_entry_set_text (GTK_ENTRY (editEditEntryData.number), pbEntry->entry.Number); @@ -1253,7 +1253,7 @@ void NewPbEntry(PhonebookEntry *pbEntry) gtk_entry_set_text (GTK_ENTRY (newEditEntryData.name), ""); - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) gtk_label_set_text (GTK_LABEL (newEditEntryData.number), ""); else gtk_entry_set_text (GTK_ENTRY (newEditEntryData.number), ""); @@ -1297,7 +1297,7 @@ void DuplicatePbEntry (PhonebookEntry *pbEntry) gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.name), pbEntry->entry.Name); - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) gtk_label_set_text (GTK_LABEL (duplicateEditEntryData.number), pbEntry->entry.Number); else gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.number), pbEntry->entry.Number); @@ -2361,7 +2361,7 @@ static void ExportVCARD (FILE *f) fprintf (f, "X_GSM_CALLERGROUP:%d\n", pbEntry->entry.Group); /* Add ext. pbk info if required */ - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) for (j = 0; j < pbEntry->entry.SubEntriesCount; j++) { if (pbEntry->entry.SubEntries[j].EntryType == GSM_Number) @@ -2420,7 +2420,7 @@ static void ExportNative (FILE *f) strcat (buf, buf2); /* Add ext. pbk info if required */ - if (GetModelFeature(FN_PHONEBOOK)==F_PBK71) + if (GetModelFeature(FN_PHONEBOOK)==F_PBK71INT) { for (j = 0; j < pbEntry->entry.SubEntriesCount; j++) if (pbEntry->entry.SubEntries[j].EntryType==GSM_Number) diff --git a/xgnokii/xgnokii_logos.c b/xgnokii/xgnokii_logos.c index 5f806cf..61a6ae9 100644 --- a/xgnokii/xgnokii_logos.c +++ b/xgnokii/xgnokii_logos.c @@ -994,7 +994,7 @@ static void SetLogoEvent(GtkWidget *widget) { static void ClearLogoEvent(GtkWidget *widget) { - bitmap.size=bitmap.width*bitmap.height/8; + bitmap.size=GSM_GetBitmapSize(&bitmap); GSM_ClearBitmap(&bitmap); diff --git a/xgnokii/xgnokii_sms.c b/xgnokii/xgnokii_sms.c index a9726b9..d5da1f4 100644 --- a/xgnokii/xgnokii_sms.c +++ b/xgnokii/xgnokii_sms.c @@ -1005,7 +1005,7 @@ static void SendSMS (void) if (GTK_TOGGLE_BUTTON (sendSMS.report)->active) Multisms.SMS[j].Type = GST_DR; - if (GTK_TOGGLE_BUTTON (sendSMS.class)->active) Multisms.SMS[j].Class = 0; + if (GTK_TOGGLE_BUTTON (sendSMS.class)->active) Multisms.SMS[j].Class = 0; Multisms.SMS[j].Validity = Multisms.SMS[j].MessageCenter.Validity; @@ -1226,9 +1226,9 @@ static void CreateSMSSendWindow (void) gtk_box_pack_start (GTK_BOX (vbox), sendSMS.longSMS, FALSE, FALSE, 3); gtk_widget_show (sendSMS.longSMS); - sendSMS.class = gtk_check_button_new_with_label (_("Send as Flash SMS (Class 0)")); - gtk_box_pack_start (GTK_BOX (vbox), sendSMS.class, FALSE, FALSE, 3); - gtk_widget_show (sendSMS.class); + sendSMS.class = gtk_check_button_new_with_label (_("Send as Flash SMS (Class 0)")); + gtk_box_pack_start (GTK_BOX (vbox), sendSMS.class, FALSE, FALSE, 3); + gtk_widget_show (sendSMS.class); label = gtk_label_new (_("SMS Center:")); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 1); -- 1.8.3.1