summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2007-08-20 20:50:29 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2007-08-20 20:50:29 +0000
commitb65cc92385ee1d75a39e5fe31c5f97a221d46e91 (patch)
tree11a324fba0744daacccad982f7ac4c7afe2aa86e /plugins
parent331d267b5075a5cda2b901145d06cd53b01744fa (diff)
downloadwireshark-b65cc92385ee1d75a39e5fe31c5f97a221d46e91.tar.gz
Add the UNISTIM plugin to Wireshark.
svn path=/trunk/; revision=22558
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Makefile.am1
-rw-r--r--plugins/Makefile.nmake22
-rw-r--r--plugins/unistim/AUTHORS4
-rw-r--r--plugins/unistim/COPYING340
-rw-r--r--plugins/unistim/ChangeLog5
-rw-r--r--plugins/unistim/Makefile.am126
-rw-r--r--plugins/unistim/Makefile.common43
-rw-r--r--plugins/unistim/Makefile.nmake96
-rw-r--r--plugins/unistim/TODO8
-rw-r--r--plugins/unistim/audio.h574
-rw-r--r--plugins/unistim/basic.h84
-rw-r--r--plugins/unistim/broadcast.h100
-rw-r--r--plugins/unistim/defines.h236
-rw-r--r--plugins/unistim/display.h251
-rw-r--r--plugins/unistim/header_field.h1290
-rw-r--r--plugins/unistim/key.h166
-rw-r--r--plugins/unistim/moduleinfo.h16
-rw-r--r--plugins/unistim/moduleinfo.nmake28
-rw-r--r--plugins/unistim/network.h233
-rw-r--r--plugins/unistim/packet-unistim.c2353
-rw-r--r--plugins/unistim/packet-unistim.h144
-rw-r--r--plugins/unistim/plugin.rc.in34
22 files changed, 6151 insertions, 3 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index b8a625499c..eb99da0e3f 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -45,6 +45,7 @@ SUBDIRS = \
rudp \
sbus \
stats_tree \
+ unistim \
v5ua \
wimax
diff --git a/plugins/Makefile.nmake b/plugins/Makefile.nmake
index 9c9d0279bf..2f4de9b616 100644
--- a/plugins/Makefile.nmake
+++ b/plugins/Makefile.nmake
@@ -31,6 +31,7 @@ all: \
rudp \
sbus \
stats_tree \
+ unistim \
v5ua \
wimax
@@ -144,15 +145,20 @@ rudp::
cd ..
sbus::
- cd sbus
- $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
- cd ..
+ cd sbus
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
+ cd ..
stats_tree::
cd stats_tree
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
cd ..
+unistim::
+ cd unistim
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
+ cd ..
+
v5ua::
cd v5ua
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
@@ -234,6 +240,9 @@ clean:
cd stats_tree
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
+ cd unistim
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
+ cd ..
cd v5ua
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
@@ -312,6 +321,9 @@ distclean: clean
cd stats_tree
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
cd ..
+ cd unistim
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
+ cd ..
cd v5ua
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
cd ..
@@ -387,6 +399,9 @@ maintainer-clean: distclean
cd stats_tree
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
cd ..
+ cd unistim
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
+ cd ..
cd v5ua
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
cd ..
@@ -427,6 +442,7 @@ install-plugins:
xcopy rudp\*.dll $(VERSION) /d
xcopy sbus\*.dll $(VERSION) /d
xcopy stats_tree\*.dll $(VERSION) /d
+ xcopy unistim\*.dll $(VERSION) /d
xcopy v5ua\*.dll $(VERSION) /d
xcopy wimax\*.dll $(VERSION) /d
if exist Custom.nmake $(MAKE) /$(MAKEFLAGS) -f Custom.nmake install-plugins
diff --git a/plugins/unistim/AUTHORS b/plugins/unistim/AUTHORS
new file mode 100644
index 0000000000..d71dd2908d
--- /dev/null
+++ b/plugins/unistim/AUTHORS
@@ -0,0 +1,4 @@
+Author:
+Don Newton <dnewton [AT] cypresscom.net>
+Chad Singer<csinger [AT] cypresscom.net>
+
diff --git a/plugins/unistim/COPYING b/plugins/unistim/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/plugins/unistim/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ 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.
+
+ Preamble
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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) year 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.
+
+ <signature of Ty Coon>, 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/plugins/unistim/ChangeLog b/plugins/unistim/ChangeLog
new file mode 100644
index 0000000000..ddacecff3a
--- /dev/null
+++ b/plugins/unistim/ChangeLog
@@ -0,0 +1,5 @@
+2004-04-14 Don Newton <dnewton@cypresscom.net>
+
+ * initial version
+
+
diff --git a/plugins/unistim/Makefile.am b/plugins/unistim/Makefile.am
new file mode 100644
index 0000000000..cf44953102
--- /dev/null
+++ b/plugins/unistim/Makefile.am
@@ -0,0 +1,126 @@
+# Makefile.am
+# Automake file for Nortel Unistim plugin
+# Copyright 2007, Don Newton <dnewton@cypresscom.net>
+#
+# $Id$
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# 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.
+#
+
+INCLUDES = -I$(top_srcdir) -I$(includedir)
+
+include Makefile.common
+
+if HAVE_WARNINGS_AS_ERRORS
+AM_CFLAGS = -Werror
+endif
+
+plugindir = @plugindir@
+
+plugin_LTLIBRARIES = unistim.la
+unistim_la_SOURCES = \
+ plugin.c \
+ moduleinfo.h \
+ $(DISSECTOR_SRC) \
+ $(DISSECTOR_INCLUDES)
+unistim_la_LDFLAGS = -module -avoid-version
+unistim_la_LIBADD = @PLUGIN_LIBS@
+
+# Libs must be cleared, or else libtool won't create a shared module.
+# If your module needs to be linked against any particular libraries,
+# add them here.
+LIBS =
+
+#
+# Build plugin.c, which contains the plugin version[] string, a
+# function plugin_register() that calls the register routines for all
+# protocols, and a function plugin_reg_handoff() that calls the handoff
+# registration routines for all protocols.
+#
+# We do this by scanning sources. If that turns out to be too slow,
+# maybe we could just require every .o file to have an register routine
+# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
+#
+# Formatting conventions: The name of the proto_register_* routines an
+# proto_reg_handoff_* routines must start in column zero, or must be
+# preceded only by "void " starting in column zero, and must not be
+# inside #if.
+#
+# DISSECTOR_SRC is assumed to have all the files that need to be scanned.
+#
+# For some unknown reason, having a big "for" loop in the Makefile
+# to scan all the files doesn't work with some "make"s; they seem to
+# pass only the first few names in the list to the shell, for some
+# reason.
+#
+# Therefore, we have a script to generate the plugin.c file.
+# The shell script runs slowly, as multiple greps and seds are run
+# for each input file; this is especially slow on Windows. Therefore,
+# if Python is present (as indicated by PYTHON being defined), we run
+# a faster Python script to do that work instead.
+#
+# The first argument is the directory in which the source files live.
+# The second argument is "plugin", to indicate that we should build
+# a plugin.c file for a plugin.
+# All subsequent arguments are the files to scan.
+#
+plugin.c: $(DISSECTOR_SRC) $(top_srcdir)/tools/make-dissector-reg \
+ $(top_srcdir)/tools/make-dissector-reg.py
+ @if test -n $(PYTHON); then \
+ echo Making plugin.c with python ; \
+ $(PYTHON) $(top_srcdir)/tools/make-dissector-reg.py $(srcdir) \
+ plugin $(DISSECTOR_SRC) ; \
+ else \
+ echo Making plugin.c with shell script ; \
+ $(top_srcdir)/tools/make-dissector-reg $(srcdir) \
+ $(plugin_src) plugin $(DISSECTOR_SRC) ; \
+ fi
+
+#
+# Currently plugin.c can be included in the distribution because
+# we always build all protocol dissectors. We used to have to check
+# whether or not to build the snmp dissector. If we again need to
+# variably build something, making plugin.c non-portable, uncomment
+# the dist-hook line below.
+#
+# Oh, yuk. We don't want to include "plugin.c" in the distribution, as
+# its contents depend on the configuration, and therefore we want it
+# to be built when the first "make" is done; however, Automake insists
+# on putting *all* source into the distribution.
+#
+# We work around this by having a "dist-hook" rule that deletes
+# "plugin.c", so that "dist" won't pick it up.
+#
+#dist-hook:
+# @rm -f $(distdir)/plugin.c
+
+CLEANFILES = \
+ unistim \
+ *~
+
+MAINTAINERCLEANFILES = \
+ Makefile.in \
+ plugin.c
+
+EXTRA_DIST = \
+ Makefile.common \
+ Makefile.nmake \
+ moduleinfo.nmake \
+ plugin.rc.in
+
diff --git a/plugins/unistim/Makefile.common b/plugins/unistim/Makefile.common
new file mode 100644
index 0000000000..8fdb9ec94d
--- /dev/null
+++ b/plugins/unistim/Makefile.common
@@ -0,0 +1,43 @@
+# Makefile.common for unistim plugin
+# Contains the stuff from Makefile.am and Makefile.nmake that is
+# a) common to both files and
+# b) portable between both files
+# Copyright 2007 Don Newton <dnewton@cypresscom.net>
+#
+# $Id$
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# 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.
+
+# the name of the plugin
+PLUGIN_NAME = unistim
+
+# the dissector sources (without any helpers)
+DISSECTOR_SRC = \
+ packet-unistim.c
+
+DISSECTOR_INCLUDES = \
+ audio.h \
+ basic.h \
+ broadcast.h \
+ defines.h \
+ display.h \
+ header_field.h \
+ key.h \
+ network.h \
+ packet-unistim.h
diff --git a/plugins/unistim/Makefile.nmake b/plugins/unistim/Makefile.nmake
new file mode 100644
index 0000000000..dbc7d1c4e7
--- /dev/null
+++ b/plugins/unistim/Makefile.nmake
@@ -0,0 +1,96 @@
+# Makefile.nmake
+# nmake file for Wireshark plugin
+#
+# $Id$
+#
+
+include ..\..\config.nmake
+include moduleinfo.nmake
+
+include Makefile.common
+
+CFLAGS=/WX /DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
+ /I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
+
+LDFLAGS = $(PLUGIN_LDFLAGS)
+
+!IFDEF ENABLE_LIBWIRESHARK
+LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib
+CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+
+DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj)
+
+DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj)
+
+OBJECTS = $(DISSECTOR_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS) plugin.obj
+
+RESOURCE=$(PLUGIN_NAME).res
+
+all: $(PLUGIN_NAME).dll
+
+$(PLUGIN_NAME).rc : moduleinfo.nmake
+ sed -e s/@PLUGIN_NAME@/$(PLUGIN_NAME)/ \
+ -e s/@RC_MODULE_VERSION@/$(RC_MODULE_VERSION)/ \
+ -e s/@RC_VERSION@/$(RC_VERSION)/ \
+ -e s/@MODULE_VERSION@/$(MODULE_VERSION)/ \
+ -e s/@PACKAGE@/$(PACKAGE)/ \
+ -e s/@VERSION@/$(VERSION)/ \
+ -e s/@MSVC_VARIANT@/$(MSVC_VARIANT)/ \
+ < plugin.rc.in > $@
+
+$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) $(LINK_PLUGIN_WITH) $(RESOURCE)
+ link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
+ $(GLIB_LIBS) $(RESOURCE)
+
+#
+# Build plugin.c, which contains the plugin version[] string, a
+# function plugin_register() that calls the register routines for all
+# protocols, and a function plugin_reg_handoff() that calls the handoff
+# registration routines for all protocols.
+#
+# We do this by scanning sources. If that turns out to be too slow,
+# maybe we could just require every .o file to have an register routine
+# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
+#
+# Formatting conventions: The name of the proto_register_* routines an
+# proto_reg_handoff_* routines must start in column zero, or must be
+# preceded only by "void " starting in column zero, and must not be
+# inside #if.
+#
+# DISSECTOR_SRC is assumed to have all the files that need to be scanned.
+#
+# For some unknown reason, having a big "for" loop in the Makefile
+# to scan all the files doesn't work with some "make"s; they seem to
+# pass only the first few names in the list to the shell, for some
+# reason.
+#
+# Therefore, we have a script to generate the plugin.c file.
+# The shell script runs slowly, as multiple greps and seds are run
+# for each input file; this is especially slow on Windows. Therefore,
+# if Python is present (as indicated by PYTHON being defined), we run
+# a faster Python script to do that work instead.
+#
+# The first argument is the directory in which the source files live.
+# The second argument is "plugin", to indicate that we should build
+# a plugin.c file for a plugin.
+# All subsequent arguments are the files to scan.
+#
+plugin.c: $(DISSECTOR_SRC) ../../tools/make-dissector-reg.py ../../tools/make-dissector-reg
+!IFDEF PYTHON
+ @echo Making plugin.c (using python)
+ @$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC)
+!ELSE
+ @echo Making plugin.c (using sh)
+ @$(SH) ../../tools/make-dissector-reg . plugin $(DISSECTOR_SRC)
+!ENDIF
+
+!ENDIF
+
+clean:
+ rm -f $(OBJECTS) $(RESOURCE) plugin.c *.pdb \
+ $(PLUGIN_NAME).dll $(PLUGIN_NAME).dll.manifest $(PLUGIN_NAME).lib \
+ $(PLUGIN_NAME).exp $(PLUGIN_NAME).rc
+
+distclean: clean
+
+maintainer-clean: distclean
diff --git a/plugins/unistim/TODO b/plugins/unistim/TODO
new file mode 100644
index 0000000000..f5148e5f59
--- /dev/null
+++ b/plugins/unistim/TODO
@@ -0,0 +1,8 @@
+
+ * Replace the recursion to dissect_message by a while loop.
+ This requires returning the offset from the detailed dissectors.
+
+ * Handle msg_len consistently
+
+ * Split up ett_unistim for various purposes
+
diff --git a/plugins/unistim/audio.h b/plugins/unistim/audio.h
new file mode 100644
index 0000000000..60b431ec84
--- /dev/null
+++ b/plugins/unistim/audio.h
@@ -0,0 +1,574 @@
+/* audio.h
+ * header field declarations, value_string definitions and true_false_string
+ * definitions for audio manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_AUDIO_H
+#define UNISTIM_AUDIO_H
+
+static int hf_audio_mgr_attr=-1;
+static int hf_audio_mgr_opts=-1;
+static int hf_audio_mgr_alert=-1;
+static int hf_audio_mgr_adj_rx_vol=-1;
+static int hf_audio_mgr_def_rx_vol=-1;
+static int hf_audio_mgr_handset=-1;
+static int hf_audio_mgr_headset=-1;
+static int hf_audio_default_rx_vol_id=-1;
+
+static int hf_audio_mgr_opt_max_vol=-1;
+static int hf_audio_mgr_opt_adj_vol=-1;
+static int hf_audio_mgr_opt_aa_rx_vol_rpt=-1;
+static int hf_audio_mgr_opt_hs_on_air=-1;
+static int hf_audio_mgr_opt_hd_on_air=-1;
+static int hf_audio_mgr_opt_noise_squelch=-1;
+
+static int hf_audio_mgr_mute=-1;
+static int hf_audio_mgr_tx_rx=-1;
+static int hf_audio_mgr_stream_id=-1;
+
+static int hf_audio_mgr_transducer_based_tone_id=-1;
+static int hf_audio_mgr_attenuated=-1;
+static int hf_audio_mgr_warbler_select=-1;
+static int hf_audio_mgr_transducer_routing=-1;
+static int hf_audio_mgr_tone_vol_range=-1;
+static int hf_audio_mgr_cadence_select=-1;
+static int hf_audio_special_tone=-1;
+static int hf_audio_tone_level=-1;
+static int hf_audio_visual_tones=-1;
+
+static int hf_audio_stream_based_tone_id=-1;
+static int hf_audio_stream_based_tone_rx_tx=-1;
+static int hf_audio_stream_based_tone_mute=-1;
+static int hf_audio_stream_id=-1;
+static int hf_audio_stream_based_volume=-1;
+
+static int hf_audio_apb_number=-1;
+static int hf_audio_apb_op_code=-1;
+static int hf_audio_apb_param_len=-1;
+static int hf_audio_apb_data=-1;
+static int hf_audio_vocoder_id=-1;
+static int hf_audio_vocoder_param=-1;
+static int hf_audio_vocoder_entity=-1;
+static int hf_audio_vocoder_annexa=-1;
+static int hf_audio_vocoder_annexb=-1;
+static int hf_audio_sample_rate=-1;
+static int hf_audio_rtp_type=-1;
+static int hf_audio_bytes_per_frame=-1;
+
+static int hf_audio_rx_stream_id=-1;
+static int hf_audio_tx_stream_id=-1;
+static int hf_rx_vocoder_type=-1;
+static int hf_tx_vocoder_type=-1;
+static int hf_frames_per_packet=-1;
+static int hf_audio_tos=-1;
+static int hf_audio_precedence=-1;
+static int hf_audio_frf_11=-1;
+static int hf_rtcp_bucket_id=-1;
+static int hf_audio_lcl_rtp_port=-1;
+static int hf_audio_lcl_rtcp_port=-1;
+static int hf_audio_far_rtp_port=-1;
+static int hf_audio_far_rtcp_port=-1;
+static int hf_audio_far_ip_add=-1;
+static int hf_audio_rtcp_bucket_id=-1;
+static int hf_audio_clear_bucket=-1;
+
+static int hf_audio_transducer_pair=-1;
+static int hf_audio_rx_enable=-1;
+static int hf_audio_tx_enable=-1;
+static int hf_audio_sidetone_disable=-1;
+static int hf_audio_destruct_additive=-1;
+static int hf_audio_dont_force_active=-1;
+static int hf_audio_source_descr=-1;
+static int hf_audio_sdes_rtcp_bucket=-1;
+static int hf_audio_desired_jitter=-1;
+static int hf_audio_high_water_mark=-1;
+static int hf_audio_early_packet_resync_thresh=-1;
+static int hf_audio_late_packet_resync_thresh=-1;
+static int hf_audio_resolve_phone_port=-1;
+static int hf_audio_far_end_echo_port=-1;
+static int hf_audio_far_end_ip_address=-1;
+static int hf_audio_nat_port=-1;
+static int hf_audio_nat_ip_address=-1;
+static int hf_audio_direction_code=-1;
+static int hf_audio_hf_support=-1;
+static int hf_audio_opt_rpt_max=-1;
+static int hf_audio_opt_rpt_adj_vol=-1;
+static int hf_audio_opt_rpt_auto_adj_vol=-1;
+static int hf_audio_opt_rpt_hs_on_air=-1;
+static int hf_audio_opt_rpt_hd_on_air=-1;
+static int hf_audio_opt_rpt_noise_squelch=-1;
+static int hf_audio_rx_vol_apb_rpt=-1;
+static int hf_audio_rx_vol_vol_up=-1;
+static int hf_audio_rx_vol_vol_floor=-1;
+static int hf_audio_rx_vol_vol_ceiling=-1;
+static int hf_audio_current_adj_vol_id=-1;
+static int hf_audio_current_rx_level=-1;
+static int hf_audio_current_rx_range=-1;
+static int hf_audio_cadence_select=-1;
+static int hf_audio_warbler_select=-1;
+static int hf_audio_open_stream_rpt=-1;
+static int hf_audio_sdes_rpt_source_desc=-1;
+static int hf_audio_sdes_rpt_buk_id=-1;
+static int hf_audio_phone_port=-1;
+static int hf_audio_phone_ip=-1;
+
+static int hf_audio_phone_add_len=-1;
+static int hf_audio_nat_listen_port=-1;
+static int hf_audio_nat_ip=-1;
+static int hf_audio_nat_add_len=-1;
+static int hf_audio_stream_direction_code=-1;
+static int hf_audio_stream_state=-1;
+static int hf_audio_transducer_list_length=-1;
+
+
+static const value_string audio_switch_msgs[]={
+ {0x00,"Query Audio Manager"},
+ {0x01,"Query Supervisor Headset Status"},
+ {0x02,"Audio Manager Options"},
+ {0x04,"Mute/Unmute"},
+ {0x10,"Transducer Based Tone On"},
+ {0x11,"Transducer Based Tone Off"},
+ {0x12,"Alerting Tone Configuration"},
+ {0x13,"Special Tone Configuration"},
+ {0x14,"Paging Tone Configuration"},
+ {0x15,"Alerting Tone Cadence Download"},
+ {0x17,"Paging Tone Cadence Download"},
+ {0x18,"Transducer Based Tone Volume Level"},
+ {0x1a,"Visual Transducer Based Tone Enable"},
+ {0x1b,"Stream Based Tone On"},
+ {0x1c,"Stream Based Tone Off"},
+ {0x1d,"Stream Based Tone Frequency Component List Download"},
+ {0x1e,"Stream Based Tone Cadence Download"},
+ {0x20,"Select Adjustable Rx Volume"},
+ {0x21,"Set APB's Rx Volume Level"},
+ {0x22,"Change Adjustable Rx Volume (quieter)"},
+ {0x23,"Change Adjustable Rx Volume (louder)"},
+ {0x24,"Adjust Default Rx Volume (quieter)"},
+ {0x25,"Adjust Default Rx Volume (louder)"},
+ {0x28,"APB Download"},
+ {0x30,"Open Audio Stream"},
+ {0x31,"Close Audio Stream"},
+ {0x32,"Connect Transducer"},
+ {0x34,"Filter Block Download"},
+ {0x37,"Query RTCP Statistics"},
+ {0x38,"Configure Vocoder Parameters"},
+ {0x39,"Query RTCP Bucket's SDES Information"},
+ {0x3a,"Jitter Buffer Parameters Configuration"},
+ {0x3b,"Resolve Port Mapping"},
+ {0x3c,"Port Mpping Discovery"},
+ {0x3d,"Query Audio Stream Status"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string audio_phone_msgs[]={
+ {0x00,"Handset Connected"},
+ {0x01,"Handset Disconnected"},
+ {0x02,"Headset Connected"},
+ {0x03,"Headset Disconnected"},
+ {0x04,"Supervisor Headset Connected"},
+ {0x05,"Supervisor Headset Disconnected"},
+ {0x07,"Audio Manager Attributes Info"},
+ {0x08,"Audio Manager Options Report"},
+ {0x09,"Adjustable Rx Volume Report"},
+ {0x0a,"Adjustable Rx Volume Information"},
+ {0x0b,"APB's Default Rx Volume Value"},
+ {0x0c,"Alerting Tone Select"},
+ {0x0e,"RTCP Statistics Report"},
+ {0x0f,"Open Audio Stream Report"},
+ {0x10,"RTCP Bucket SDES Information Report"},
+ {0x11,"Port Mapping Discovery"},
+ {0x12,"Resolve Port Mapping"},
+ {0x13,"Audio Stream Status Report"},
+ {0x14,"Query APB Response"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+
+
+static const true_false_string stream_states={
+ "Stream in use.",
+ "Stream not in use."
+};
+
+static const value_string stream_direction_codes[]={
+ {0x00,"Invalid"},
+ {0x01,"Command contains information about an Rx Audio stream"},
+ {0x02,"Command contains information about a Tx Audio stream"},
+ {0x03,"Invalid"},
+ {0,NULL}
+};
+
+
+
+static const value_string source_descipts[]={
+ {0x00,"Information Not Available"},
+ {0x01,"Canonical End-Point Identifier associated with the IT"},
+ {0x02,"Name used to describe the IT e.g. Homer Does IT "},
+ {0x03,"E-mail address associated with the IT"},
+ {0x04,"Phone number of the IT"},
+ {0x05,"Geographic location of the IT"},
+ {0x06,"IT software version"},
+ {0x07,"Notice/Status information"},
+ {0,NULL}
+};
+
+static const value_string stream_result[]={
+ {0x00,"Stream opened successfully"},
+ {0x01,"Operation failed: Invalid Stream ID"},
+ {0x02,"Operation failed: Unsupported Vocoder"},
+ {0x03,"Operation failed: Stream already in use"},
+ {0x04,"Operation failed: Local port already in use"},
+ {0x05,"Operation failed: No streams specified"},
+ {0x06,"Operation failed: Audio packet size too large based on frames per packets"},
+ {0x07,"Operation failed: Invalid Frames Per Packet value"},
+ {0x08,"Operation failed: Invalid Bucket ID"},
+ {0x09,"Operation failed: RTP and RTCP ports Identical"},
+ {0x0a,"Operation failed: Inconsistent Parameters on full duplex promotion"},
+ {0x0b,"Operation failed: No Empty Vocoder Bins"},
+ {0x0c,"Operation failed: Vocoders Not Identical"},
+ {0,NULL}
+};
+
+
+static const value_string volume_rpt_apbs[]={
+ {0x01,"Audio Param Bank 1"},
+ {0x02,"Audio Param Bank 2"},
+ {0x03,"Audio Param Bank 3"},
+ {0x04,"Audio Param Bank 4"},
+ {0x05,"Audio Param Bank 5"},
+ {0x06,"Audio Param Bank 6"},
+ {0x07,"Audio Param Bank 7"},
+ {0x08,"Audio Param Bank 8"},
+ {0x09,"Audio Param Bank 9"},
+ {0x0a,"Audio Param Bank 10"},
+ {0x0b,"Audio Param Bank 11"},
+ {0x0c,"Audio Param Bank 12"},
+ {0x0d,"Audio Param Bank 13"},
+ {0x0e,"Audio Param Bank 14"},
+ {0x0f,"Audio Param Bank 15"},
+ {0x10,"Special Tones"},
+ {0x11,"Paging Tones"},
+ {0,NULL}
+};
+static const true_false_string opt_rpt_adjust_volume={
+ "Volume level adjustments are performed locally in the IT",
+ "Volume level adjustments are not performed locally in the IT"
+};
+static const true_false_string opt_rpt_automatic_adjustable_rx_volume_report={
+ "Adjustable Rx volume reports sent to the NI when volume keys are pressed",
+ "Adjustable Rx volume reports not sent to the NI when volume keys are pressed"
+};
+static const true_false_string opt_rpt_enable_max_tone_vol={
+ "Maximum tone volume is set equal to the physical maximum",
+ "Maximum tone volume is one level lower than physical maximum"
+};
+static const true_false_string opt_rpths_on_air_feature={
+ "Single tone frequency sent to HS port while call in progress",
+ "Single tone frequency NOT sent to HS port while call in progress"
+};
+static const true_false_string opt_rpt_hd_on_air_feature={
+ "Single tone frequency sent to HD port while call in progress",
+ "Single tone frequency NOT sent to HD port while call in progress"
+};
+static const true_false_string opt_rpt_noise_sqlch_disable={
+ "Automatic noise squelching enabled",
+ "Automatic noise squelching disabled"
+};
+
+static const value_string direction_codes[]={
+ {0x00,"Invalid"},
+ {0x01,"Rx Audio stream is queried"},
+ {0x02,"Tx Audio stream is queried"},
+ {0x03,"Rx and Tx Audio streams are queried"},
+ {0,NULL}
+};
+
+static const value_string source_descriptions[]={
+ {0x01,"Canonical End-Point Identifier associated with the Phone"},
+ {0x02,"Name used to describe the Phone e.g. Homer Does Phone"},
+ {0x03,"E-mail address associated with the Phone"},
+ {0x04,"Phone number of the Phone"},
+ {0x05,"Geographic location of the Phone"},
+ {0x06,"Phone software version"},
+ {0x07,"Notice/Status information"},
+ {0,NULL}
+};
+
+static const true_false_string dont_force_active={
+ "The APB specified will NOT be the active one",
+ "The APB specified will be the active one"
+};
+
+
+static const true_false_string destruct_additive={
+ "This will not affect the connections that were established prior",
+ "All transducers that were connected prior will be disconnected"
+};
+
+
+
+static const value_string transducer_pairs[]={
+ {0x00,"Handset"},
+ {0x01,"Headset"},
+ {0x02,"Handsfree Speaker/Microphone"},
+ {0x3F,"All Transducer Pairs"},
+ {0,NULL}
+};
+
+static const value_string types_of_service[]={
+ {0x08,"Minimize Delay"},
+ {0x04,"Maximize Throughput"},
+ {0x02,"Maximize Reliability"},
+ {0x01,"Minimize Monetary Cost"},
+ {0x00,"Normal Service"},
+ {0,NULL}
+};
+static const value_string precedences[]={
+ {0x00,"Routine"},
+ {0x01,"Priority"},
+ {0x02,"Immediate"},
+ {0x03,"Flash"},
+ {0x04,"Flash Override"},
+ {0x05,"Critical"},
+ {0x06,"Internetwork Control"},
+ {0x07,"Network Control"},
+ {0,NULL}
+};
+static const value_string sample_rates[]={
+ {0x00,"8 kbit/sec"},
+ {0x01,"16 kbit/sec"},
+ {0x02,"44.1 kbit/sec"},
+ {0,NULL}
+};
+
+static const value_string config_param_entities[]={
+ {0x01,"Configuration Parameter in byte only affects the encoder"},
+ {0x02,"Configuration Parameter in byte only affects decoder"},
+ {0x03," Configuration Parameter in byte affects the whole vocoder"},
+ {0,NULL}
+};
+static const value_string vocoder_config_params[]={
+ {0x00,"Turn Off Voice Activity Detection"},
+ {0x01,"Turn On Voice Activity Detection"},
+ {0x02,"Turn Off Bad Frame Interpolation Algorithm"},
+ {0x03,"Turn On Bad Frame Interpolation Algorithm"},
+ {0x04,"Disable Post Filter"},
+ {0x05,"Enable Post Filter"},
+ {0x06,"Disable High Pass Filter"},
+ {0x07,"Enable High Pass Filter"},
+ {0x08,"G.723 6.3kbps Working Rate "},
+ {0x09,"G.723 5.3kbps Working Rate "},
+ {0x0A,"G.729 Annexes Selection "},
+ {0x0B,"Set the sampling Rate of the vocoder "},
+ {0x0C,"Set RTP Payload Type "},
+ {0x20,"Set number of bytes per frame "},
+ {0,NULL}
+};
+static const value_string vocoder_ids[]={
+ {0x00,"G.711, Mu-Law"},
+ {0x04,"G.723"},
+ {0x08,"G.711, A-Law"},
+ {0x0A,"16-bit Linear"},
+ {0x12,"G.729"},
+ {0x60,"8-bit Linear"},
+ {0x61,"G.711, Mu-Law with PLP"},
+ {0x62,"G.711, A-Law with PLP"},
+ {0,NULL}
+};
+
+
+static const value_string apb_op_codes[]={
+ {0x00,"Enable Return To Default Option"},
+ {0x01,"Disable Return To Default Option"},
+ {0x02,"Enable Automatic Gain Control Option"},
+ {0x03,"Disable Automatic Gain Control Option"},
+ {0x04,"Select APB for Volume Control Option"},
+ {0x05,"Deselect APB for Volume Control Option"},
+ {0x06,"Enable Listener Sidetone Option"},
+ {0x07,"Disable Listener Sidetone Option"},
+ {0x08,"Enable Acoustic Echo Canceller (AEC) Option"},
+ {0x09,"Disable Acoustic Echo Canceller (AEC) Option"},
+ {0x10,"Enable Hearing Impaired (HIP) Option"},
+ {0x11,"Disable Hearing Impaired (HIP) Option"},
+ {0x0A,"Enable Rx Squelch Option"},
+ {0x0B,"Disable Rx Squelch Option"},
+ {0x0C,"Enable Rx Compressor Option"},
+ {0x0D,"Disable Rx Compressor Option"},
+ {0x0E,"Enable Tx Echo Squelch Option"},
+ {0x0F,"Disable Tx Echo Squelch Option"},
+ {0x40,"Query Audio Parameters"},
+ {0x41,"Step Size setting"},
+ {0x42,"Maximum Volume setting"},
+ {0x43,"Minimum Volume setting"},
+ {0x44,"Rx CODEC Gain Value"},
+ {0x45,"Tx CODEC Gain Value"},
+ {0x46,"Rx DSP Gain Value"},
+ {0x47,"Tx DSP Gain Value"},
+ {0x48,"Sidetone Gain Value"},
+ {0x49,"Switched Loss Depth"},
+ {0x4A,"Length of AEC"},
+ {0x4B,"MCS_NOISE_THR"},
+ {0x4C,"LineDelayLength"},
+ {0x4D,"MaxReturnLossTG"},
+ {0x4E,"SWL_AEC_OFF"},
+ {0x4F,"NormDelta"},
+ {0x50,"TxLevelCompHD"},
+ {0x51,"TxRL_BOOT"},
+ {0x52,"NoiseWaitCounter" },
+ {0x53,"Whole APS" },
+ {0x54,"Change Default Volume setting"},
+ {0x55,"Change Current Volume setting"},
+ {0x56,"Sampling Rate setting"},
+ {0x57,"The filter(s) to be used when the HIP is enabled"},
+ {0x58,"The threshold that should be used when AGC is enabled"},
+ {0x59,"The threshold that should be used when Listener Sidetone (LST) is enabled"},
+ {0,NULL}
+};
+static const true_false_string stream_based_tone_rx_tx_yn={
+ "Stream ID specified in last byte is in the tx direction",
+ "Stream ID specified in last byte is in the rx direction"
+};
+static const true_false_string stream_based_tone_mute_yn={
+ "Stream Based Tone will replace Stream Data",
+ "Stream Based tone will be summed with Stream Data"
+};
+static const value_string stream_based_tone_vals[]={
+ {0x00,"Dial Tone F1=0x0B33 - 350 Hz F2=0x0E14 - 440 Hz F3=0x00 - not present F4=0x00 - not present"},
+ {0x01,"Recall Dial Tone F1=0x0B33 - 350 Hz F2=0x0E14 - 440 Hz F3=0x00 - not present F4=0x00 - not present"},
+ {0x02,"Line Busy F1 = 0x0F5C - 480 Hz F2 = 0x13D7 - 620 Hz F3 = 0x00 - not present F4 = 0x00 - not present"},
+ {0x03,"Reorder F1 = 0x0F5C - 480 Hz F2 = 0x13D7 - 620 Hz F3 = 0x00 - not present F4 = 0x00 - not present"},
+ {0x04,"Audible Ringing F1=0x0E14 - 440 Hz F2=0x0F5C - 480 Hz F3=0x00 - not presen F4=0x00 - not present"},
+ {0x05,"Receiver Off Hook (ROH) F1=0x2CCC-1400 Hz F2=0x4851-2260 Hz F3=0x4E66-2450 Hz F4=0x5333 - 2600 Hz"},
+ {0x06,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x07,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x08,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x09,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0a,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0b,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0c,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0d,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0e,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0x0f,"No Tone F1=0x00-0 Hz F2=0x00-0 Hz F3=0x00-0 Hz F4=0x00-0 Hz 0x00 C1=0x00 C2=0x00 C3=0x0 c4=0x0"},
+ {0,NULL}
+};
+static const value_string stream_base_vol_level[]={
+ {0x6F,"C1=0xFF00 C2=0x00 C3=0x00 c4=0x00 Steady on. -13 dBmO per frequency."},
+ {0x6F,"C1=0x0505 C2=0x0505 C3=0x0505 c4=0xFF00 3 burst(0.1 sec on,0.1 sec off),Then steady on.-13 dBmO per frequency."},
+ {0x60,"C1=0x1919 C2=0x00 C3=0x00 c4=0x00 0.5 sec on, 0.5 sec off, repeating. -24 dBmO per frequency."},
+ {0x67,"C1=0x64C8 C2=0x00 C3=0x00 c4=0x00 2 sec on, 4 sec off, repeating. -19 dBmO per frequency."},
+ {0x80,"C1=0xFF00 C2=0x00 C3=0x00 c4=0x00 0.1 sec on, 0.1 sec off, repeating. +3 to -6 dBmO/frequency."},
+ {0,NULL}
+};
+static const value_string special_tones_vals[]={
+ {0x01,"250Hz"},
+ {0x02,"333Hz"},
+ {0x04,"500Hz"},
+ {0x08,"667Hz"},
+ {0x10,"1000Hz"},
+ {0,NULL}
+};
+
+
+static const value_string transducer_routing_vals[]={
+ {0x00,"Handset Speaker"},
+ {0x01,"Headset Speaker"},
+ {0x02,"Handsfree Speaker"},
+ {0,NULL}
+};
+static const value_string cadence_select_vals[]={
+ {0x00,"cadence 0 (2 secs on, 4 secs off, cyclic)"},
+ {0x01,"cadence 1 (0.5 secs on, 0.3 secs off, 1.2 secs on, 4 secs off, cyclic)"},
+ {0x02,"cadence 2 (0.7 secs on, 0.5 secs off, 0.7 secs on, 4 secs off, cyclic)"},
+ {0x03,"cadence 3 (0.5 secs on then off, one-shot)"},
+ {0x04,"cadence 4 (test cadence)"},
+ {0x05,"cadence 5 (test cadence)"},
+ {0x06," cadence 6 (test cadence)"},
+ {0x07,"downloadable alerter tone cadence"},
+ {0,NULL}
+};
+
+static const true_false_string audio_mgr_mute_val={
+ "Following Stream will be Muted",
+ "Following Stream will be UnMuted"
+};
+static const true_false_string audio_mgr_tx_rx_val={
+ "Next Byte specifies an RX Stream ID",
+ "Next Byte specifies an TX Stream ID"
+};
+
+static const true_false_string audio_opts_enable_max_tone_vol={
+ "Maximum tone volume is set equal to the physical maximum",
+ "Maximum tone volume is one level lower than physical maximum"
+};
+static const true_false_string audio_opts_adjust_volume={
+ "Volume level adjustments are performed locally in the phone",
+ "Volume level adjustments are not performed locally in the phone"
+};
+static const true_false_string audio_opts_automatic_adjustable={
+ "Adjustable Rx volume reports sent to the switch when volume keys are pressed",
+ "Adjustable Rx volume reports not sent to the switch when volume keys are pressed Rx Volume Report"
+};
+static const true_false_string audio_opts_hs_on_air_feature={
+ "Single tone frequency sent to Handset port while call in progress",
+ "Single tone frequency NOT sent to Handset (HS) port while call in progress"
+};
+static const true_false_string audio_opts_hd_on_air_feature={
+ "Single tone frequency sent to Headset (HD) port while call in progress",
+ "Single tone frequency NOT sent to Headset (HD) port while call in progress"
+};
+static const true_false_string noise_sqlch_disable={
+ "Automatic noise squelching enabled",
+ "Automatic noise squelching disabled"
+};
+
+static const value_string default_rx_vol_id[]={
+ {0x00,"none"},
+ {0x01,"Audio Param Bank 1"},
+ {0x02,"Audio Param Bank 2"},
+ {0x03,"Audio Param Bank 3"},
+ {0x04,"Audio Param Bank 4"},
+ {0x05,"Audio Param Bank 5"},
+ {0x06,"Audio Param Bank 6"},
+ {0x07,"Audio Param Bank 7"},
+ {0x08,"Audio Param Bank 8"},
+ {0x09,"Audio Param Bank 9"},
+ {0x0a,"Audio Param Bank a"},
+ {0x0b,"Audio Param Bank b"},
+ {0x0c,"Audio Param Bank c"},
+ {0x0d,"Audio Param Bank d"},
+ {0x0e,"Audio Param Bank e"},
+ {0x0f,"Audio Param Bank f"},
+ {0x10,"Alerting"},
+ {0x11,"Special Tones"},
+ {0x12,"Paging Tones"},
+ {0,NULL}
+};
+
+static const value_string trans_base_tone_ids[]={
+ {0x00,"Alerting"},
+ {0x01,"Special Tones"},
+ {0x02,"Paging Tones"},
+ {0,NULL}
+};
+#endif
diff --git a/plugins/unistim/basic.h b/plugins/unistim/basic.h
new file mode 100644
index 0000000000..4288280b2d
--- /dev/null
+++ b/plugins/unistim/basic.h
@@ -0,0 +1,84 @@
+/* basic.h
+ * header field declarations, value_string def and true_false_string
+ * definitions for basic manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_BASIC_H
+#define UNISTIM_BASIC_H
+
+static int hf_basic_switch_query_flags=-1;
+static int hf_basic_switch_query_attr=-1;
+static int hf_basic_switch_query_opts=-1;
+static int hf_basic_switch_query_fw=-1;
+static int hf_basic_switch_query_hw_id=-1;
+static int hf_basic_switch_query_it_type=-1;
+static int hf_basic_switch_query_prod_eng_code=-1;
+static int hf_basic_switch_query_gray_mkt_info=-1;
+static int hf_basic_switch_options_secure=-1;
+static int hf_basic_switch_element_id=-1;
+static int hf_basic_switch_eeprom_data=-1;
+static int hf_basic_switch_terminal_id=-1;
+
+static int hf_basic_phone_eeprom_stat_cksum=-1;
+static int hf_basic_phone_eeprom_dynam=-1;
+static int hf_basic_phone_eeprom_net_config_cksum=-1;
+static int hf_basic_phone_hw_id=-1;
+static int hf_basic_phone_fw_ver=-1;
+static int hf_basic_it_type=-1;
+static int hf_basic_prod_eng_code=-1;
+static int hf_basic_ether_address=-1;
+
+static const value_string it_types[]={
+ {0x02,"i2004"},
+ {0x03,"i2002 Basic Etherset"},
+ {0x10,"Juniper 7308"},
+ {0x11,"i2050 Softphone"},
+ {0x30,"Meridian M6350"},
+ {0,NULL}
+};
+static const value_string basic_switch_msgs[]={
+ {0x01,"Query Basic Manager"},
+ {0x02,"Basic Manager Options"},
+ {0x06,"EEprom Write"},
+ {0x07,"Assign Terminal ID"},
+ {0x08,"Encapsulate Command"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string basic_phone_msgs[]={
+ {0x00,"Basic Manager Attributes Info"},
+ {0x01,"Basic Manager Options Report"},
+ {0x02,"Firmware Version"},
+ {0x03,"IT Type"},
+ {0x07,"Hardware ID"},
+ {0x08,"Product Engineering Code"},
+ {0x09,"Grey Market Info"},
+ {0x0a,"Encapsulate Command"},
+ {0x11,"Phone Ethernet Address"},
+ {0x0b,"Startup reason"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+
+#endif
diff --git a/plugins/unistim/broadcast.h b/plugins/unistim/broadcast.h
new file mode 100644
index 0000000000..7020eb6af7
--- /dev/null
+++ b/plugins/unistim/broadcast.h
@@ -0,0 +1,100 @@
+/* broadcast.h
+ * header field declarations, value_string def and true_false_string
+ * definitions for broadcast manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_BROADCAST_H
+#define UNISTIM_BROADCAST_H
+
+static int hf_broadcast_year=-1;
+static int hf_broadcast_month=-1;
+static int hf_broadcast_day=-1;
+static int hf_broadcast_hour=-1;
+static int hf_broadcast_minute=-1;
+static int hf_broadcast_second=-1;
+static int hf_broadcast_icon_state=-1;
+static int hf_broadcast_icon_cadence=-1;
+
+
+static const value_string broadcast_switch_msgs[]={
+ {0x00,"Accessory Sync Update"},
+ {0x01,"Logical Icon Update"},
+ {0x02,"Time and Date Download"},
+ {0x03,"Set Default Character Table Config"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string broadcast_phone_msgs[]={
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+
+static const value_string bcast_icon_states[]={
+ {0x00,"I-Idle"},
+ {0x01,"U-Idle"},
+ {0x02,"I-Ring"},
+ {0x03,"U-Ring"},
+ {0x04,"I-Active"},
+ {0x05,"U-Active"},
+ {0x06,"I-Hold"},
+ {0x07,"U-Hold"},
+ {0x08,"I-Group Listen"},
+ {0x09,"U-Group Listen"},
+ {0x0A,"Feature Active"},
+ {0x0B,"Feature Inactive"},
+ {0x0C,"I-Hold Ringing"},
+ {0x0D,"U-Hold Ringing"},
+ {0x0E,"Active Audio"},
+ {0x0F,"Hold Audio"},
+ {0x10,"Home"},
+ {0x11,"Business"},
+ {0x12,"Extension Number"},
+ {0x13,"Pager"},
+ {0x14,"Voice"},
+ {0x15,"Fax"},
+ {0x16,"Email"},
+ {0x17,"Wireless"},
+ {0x18,"Internet Address"},
+ {0x19,"Set-to-Set command"},
+ {0x1A,"Secured"},
+ {0x1B,"Trash Can"},
+ {0x1C,"In Box"},
+ {0x1D,"Out box"},
+ {0x1E,"Video"},
+ {0x1F,"Other/Misc"},
+ {0,NULL}
+};
+
+static const value_string bcast_icon_cadence[]={
+ {0x00,"Cadence off, On continuously"},
+ {0x01,"Cadence on, Off continuously"},
+ {0x02,"Flash, [1Hz]/[1/2]"},
+ {0x03,"Flicker, [0.5Hz]/[13/16]"},
+ {0x04,"Wink, [2Hz]/[3/4]"},
+ {0x07,"Downloaded Cadence"},
+ {0,NULL}
+};
+
+#endif
+
diff --git a/plugins/unistim/defines.h b/plugins/unistim/defines.h
new file mode 100644
index 0000000000..928a7072b3
--- /dev/null
+++ b/plugins/unistim/defines.h
@@ -0,0 +1,236 @@
+/* defines.h
+ * Contains all bitmask defines for unistim dissecting
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+*/
+
+#ifndef UNISTIM_DEFINES
+#define UNISTIM_DEFINES
+
+
+
+#define QUERY_AUDIO_MGR_ATTRIBUTES 0x01
+#define QUERY_AUDIO_MGR_OPTIONS 0x02
+#define QUERY_AUDIO_MGR_ALERTING 0x04
+#define QUERY_AUDIO_MGR_ADJ_RX_VOL 0x08
+#define QUERY_AUDIO_MGR_DEF_RX_VOL 0x10
+#define QUERY_AUDIO_MGR_HANDSET 0x40
+#define QUERY_AUDIO_MGR_HEADSET 0x80
+#define AUDIO_MGR_OPTS_MAX_VOL 0x01
+#define AUDIO_MGR_ADJ_VOL 0x02
+#define AUDIO_MGR_AUTO_RX_VOL_RPT 0x04
+#define AUDIO_MGR_HS_ON_AIR 0x08
+#define AUDIO_MGR_HD_ON_AIR 0x10
+#define AUDIO_MGR_NOISE_SQUELCH 0x20
+#define AUDIO_MGR_MUTE 0x01
+#define AUDIO_MGR_TX_RX 0x02
+#define AUDIO_MGR_ATTENUATED 0x08
+#define AUDIO_MGR_VISUAL_TONE 0x01
+#define AUDIO_STREAM_BASED_TONE_RX_TX 0x40
+#define AUDIO_STREAM_BASED_TONE_MUTE 0x80
+#define AUDIO_VOCODER_CONFIG_PARAM 0x3f
+#define AUDIO_VOCODER_CONFIG_ENTITY 0xc0
+#define AUDIO_VOCODER_ANNEXA 0x01
+#define AUDIO_VOCODER_ANNEXB 0x02
+#define AUDIO_TYPE_OF_SERVICE 0x0f
+#define AUDIO_PRECENDENCE 0x70
+#define AUDIO_FRF_11 0x80
+#define AUDIO_RTCP_BUCKET_ID 0x0f
+#define AUDIO_CLEAR_BUCKET 0x10
+#define AUDIO_TRANSDUCER_PAIR_ID 0x3f
+#define AUDIO_RX_ENABLE 0x40
+#define AUDIO_TX_ENABLE 0x80
+#define AUDIO_APB_NUMBER 0x0f
+#define AUDIO_SIDETONE_DISABLE 0x10
+#define AUDIO_DESTRUCT_ADD 0x20
+#define AUDIO_DONT_FORCE_ACTIVE 0x40
+#define AUDIO_SOURCE_DESCRIPTION 0x0f
+#define AUDIO_SDES_RTCP_BUCKET 0xf0
+#define AUDIO_DIRECTION_CODE 0x03
+#define AUDIO_HF_SUPPORT 0x01
+#define AUDIO_ENABLED_MAX_TONE 0x01
+#define AUDIO_ENABLED_ADJ_VOL 0x02
+#define AUDIO_AUTO_ADJ_RX_REP 0x04
+#define AUDIO_HS_ON_AIR_FEATURE 0x08
+#define AUDIO_HD_ON_AIR_FEATURE 0x10
+#define AUDIO_NOISE_SQUELCH_DIS 0x20
+#define AUDIO_APB_VOL_RPT 0x1f
+#define AUDIO_VOL_UP_RPT 0x20
+#define AUDIO_VOL_FLR_RPT 0x40
+#define AUDIO_VOL_CEIL_RPT 0x80
+#define AUDIO_ALERT_CADENCE_SEL 0x07
+#define AUDIO_ALERT_WARBLER_SEL 0x38
+#define AUDIO_SDES_INFO_RPT_DESC 0x0f
+#define AUDIO_SDES_INFO_RPT_BUK 0xf0
+#define AUDIO_STREAM_DIRECTION 0x03
+#define AUDIO_STREAM_DIRECTION_RX 0x01
+#define AUDIO_STREAM_DIRECTION_TX 0x02
+#define AUDIO_STREAM_STATE 0x01
+
+
+#define BASIC_QUERY_ATTRIBUTES 0x01
+#define BASIC_QUERY_OPTIONS 0x02
+#define BASIC_QUERY_FW 0x04
+#define BASIC_QUERY_HW_ID 0x08
+#define BASIC_QUERY_IT_TYPE 0x10
+#define BASIC_QUERY_PROD_ENG_CODE 0x40
+#define BASIC_QUERY_GRAY_MKT_INFO 0x80
+#define BASIC_OPTION_SECURE 0x01
+
+
+
+
+#define QUERY_NETWORK_MANAGER_DIAGNOSTIC 0x01
+#define QUERY_NETWORK_MANAGER_MANAGERS 0x02
+#define QUERY_NETWORK_MANAGER_ATTRIBUTES 0x04
+#define QUERY_NETWORK_MANAGER_SERVER_INFO 0x08
+#define QUERY_NETWORK_MANAGER_OPTIONS 0x10
+#define QUERY_NETWORK_MANAGER_SANITY 0x80
+#define NETWORK_MANAGER_ENABLE_DIAG 0x01
+#define NETWORK_MANAGER_ENABLE_RUDP 0x02
+#define RX_BUFFER_OVERFLOW 0x01
+#define TX_BUFFER_OVERFLOW 0x02
+#define RX_UNEXPECT_EMPTY 0x08
+#define INVALID_MSG 0x20
+#define EEPROM_INSANE 0x40
+#define EEPROM_UNSAFE 0x80
+#define NETWORK_MGR_REPORT_DIAG 0x01
+#define NETWORK_MGR_REPORT_RUDP 0x02
+
+
+
+
+#define DISPLAY_WRITE_ADDRESS_NUMERIC_FLAG 0x01
+#define DISPLAY_WRITE_ADDRESS_CONTEXT_FLAG 0x02
+#define DISPLAY_WRITE_ADDRESS_LINE_FLAG 0x04
+#define DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG 0x08
+#define DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG 0x10
+#define DISPLAY_WRITE_ADDRESS_SOFT_KEY_ID 0xe0
+#define DISPLAY_WRITE_ADDRESS_CHAR_POS 0x1f
+#define DISPLAY_WRITE_ADDRESS_LINE_NUM 0xe0
+#define DISPLAY_WRITE_CURSOR_MOVE 0x01
+#define DISPLAY_WRITE_CLEAR_LEFT 0x02
+#define DISPLAY_WRITE_CLEAR_RIGHT 0x04
+#define DISPLAY_WRITE_SHIFT_LEFT 0x08
+#define DISPLAY_WRITE_SHIFT_RIGHT 0x10
+#define DISPLAY_WRITE_HIGHLIGHT 0x20
+#define DISPLAY_CURSOR_BLINK 0x80
+#define DISPLAY_CURSOR_MOVE_CMD 0x0f
+
+#define DISPLAY_CLEAR_NUMERIC 0x01
+#define DISPLAY_CLEAR_CONTEXT 0x02
+#define DISPLAY_CLEAR_DATE 0x04
+#define DISPLAY_CLEAR_TIME 0x08
+#define DISPLAY_CLEAR_LINE 0x10
+#define DISPLAY_CLEAR_STATUS_BAR_ICON 0x20
+#define DISPLAY_CLEAR_SOFTKEY 0x40
+#define DISPLAY_CLEAR_SOFTKEY_LABEL 0x80
+
+#define DISPLAY_CLEAR_LINE_1 0x01
+#define DISPLAY_CLEAR_LINE_2 0x02
+#define DISPLAY_CLEAR_LINE_3 0x04
+#define DISPLAY_CLEAR_LINE_4 0x08
+#define DISPLAY_CLEAR_LINE_5 0x10
+#define DISPLAY_CLEAR_LINE_6 0x20
+#define DISPLAY_CLEAR_LINE_7 0x40
+#define DISPLAY_CLEAR_LINE_8 0x80
+
+#define DISPLAY_STATUS_BAR_ICON_1 0x01
+#define DISPLAY_STATUS_BAR_ICON_2 0x02
+#define DISPLAY_STATUS_BAR_ICON_3 0x04
+#define DISPLAY_STATUS_BAR_ICON_4 0x08
+#define DISPLAY_STATUS_BAR_ICON_5 0x10
+#define DISPLAY_STATUS_BAR_ICON_6 0x20
+#define DISPLAY_STATUS_BAR_ICON_7 0x40
+#define DISPLAY_STATUS_BAR_ICON_8 0x80
+#define DISPLAY_ICON_ID 0x1f
+
+#define DISPLAY_SOFT_KEY_1 0x01
+#define DISPLAY_SOFT_KEY_2 0x02
+#define DISPLAY_SOFT_KEY_3 0x04
+#define DISPLAY_SOFT_KEY_4 0x08
+#define DISPLAY_SOFT_KEY_5 0x10
+#define DISPLAY_SOFT_KEY_6 0x20
+#define DISPLAY_SOFT_KEY_7 0x40
+#define DISPLAY_SOFT_KEY_8 0x80
+
+#define DISPLAY_CLEAR_SK_LABEL_KEY_ID 0x1f
+#define DISPLAY_CLEAR_ALL_SLKS 0x20
+
+#define KEY_LED_CADENCE 0x07
+#define KEY_LED_ID 0x18
+
+#define DISPLAY_LINE_WIDTH 0x1f
+#define DISPLAY_LINES 0xe0
+#define DISPLAY_SKEY_WIDTH 0x0f
+#define DISPLAY_SKEYS 0x70
+#define DISPLAY_ICON 0x80
+#define DISPLAY_SOFTLABEL_WIDTH 0x0f
+#define DISPLAY_CONTEXT_WIDTH 0xf0
+#define DISPLAY_NUMERIC_WIDTH 0x03
+#define DISPLAY_TIME_WIDTH 0x1c
+#define DISPLAY_DATE_WIDTH 0xe0
+#define DISPLAY_CHAR_DLOAD 0x0f
+#define DISPLAY_FFORM_ICON_DLOAD 0x70
+#define DISPLAY_ICON_TYPE 0x80
+#define DISPLAY_CHARSET 0x0f
+#define DISPLAY_CURSOR_NUMERIC 0x01
+#define DISPLAY_CURSOR_CONTEXT 0x02
+#define DISPLAY_CURSOR_LINE 0x04
+#define DISPLAY_CURSOR_SKEY 0x08
+#define DISPLAY_CURSOR_SKEY_ID 0xe0
+#define DISPLAY_CURSOR_CHAR_POS 0x1f
+#define DISPLAY_CURSOR_LINE_NUM 0xe0
+#define DISPLAY_TIME_FORMAT 0x03
+#define DISPLAY_DATE_FORMAT 0x0c
+#define DISPLAY_USE_DATE_FORMAT 0x20
+#define DISPLAY_USE_TIME_FORMAT 0x10
+#define DISPLAY_CTX_FORMAT 0x0f
+#define DISPLAY_CTX_FIELD 0x30
+#define DISPLAY_LAYER_SKEY_ID 0x07
+#define DISPLAY_LAYER_ALL_SKEYS 0x80
+#define DISPLAY_ONE_OR_CYCLIC 0x80
+
+#define KEY_NUM_PROG_KEYS 0x1f
+#define KEY_NUM_SOFT_KEYS 0xe0
+#define KEY_HD_KEY_EXISTS 0x01
+#define KEY_MUTE_KEY_EXISTS 0x02
+#define KEY_QUIT_KEY_EXISTS 0x04
+#define KEY_COPY_KEY_EXISTS 0x08
+#define KEY_MWI_EXISTS 0x10
+#define KEY_NUM_NAV_KEYS 0x03
+#define KEY_NUM_CONSPIC_KEYS 0x1c
+#define KEY_SEND_KEY_RELEASE 0x01
+#define KEY_ENABLE_VOL_KEY 0x02
+#define KEY_CONSPIC_PROG_KEY0 0x08
+#define KEY_ACD_SUP_CONTROL 0x10
+#define KEY_LOCAL_DIAL_PAD_FEED 0x60
+#define KEY_ADMIN_CMD 0xe0
+
+#define NETWORK_FILE_XFER_MODE 0x1f
+#define NETWORK_FORCE_DLOAD 0x20
+#define NETWORK_USE_FSERV_PORT 0x40
+#define NETWORK_USE_LOCAL_PORT 0x80
+
+
+
+#endif
diff --git a/plugins/unistim/display.h b/plugins/unistim/display.h
new file mode 100644
index 0000000000..54058ab281
--- /dev/null
+++ b/plugins/unistim/display.h
@@ -0,0 +1,251 @@
+/*display.h
+ * header field declarations, value_string def and true_false_string
+ * definitions for display manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_DISPLAY_H
+#define UNISTIM_DISPLAY_H
+
+static int hf_display_write_cursor_move=-1;
+static int hf_display_write_clear_left=-1;
+static int hf_display_write_clear_right=-1;
+static int hf_display_write_shift_left=-1;
+static int hf_display_write_shift_right=-1;
+static int hf_display_write_highlight=-1;
+static int hf_display_write_tag=-1;
+static int hf_display_write_address_numeric=-1;
+static int hf_display_write_address_context=-1;
+static int hf_display_write_address_line=-1;
+static int hf_display_write_address_soft_key=-1;
+static int hf_display_write_address_soft_label=-1;
+static int hf_display_write_address_softkey_id=-1;
+static int hf_display_write_address_char_pos=-1;
+static int hf_display_write_address_line_number=-1;
+static int hf_display_cursor_move_cmd=-1;
+static int hf_display_cursor_blink=-1;
+static int hf_icon_id=-1;
+static int hf_display_arrow=-1;
+static int hf_display_clear_numeric =-1;
+static int hf_display_clear_context =-1;
+static int hf_display_clear_date =-1;
+static int hf_display_clear_time =-1;
+static int hf_display_clear_line =-1;
+static int hf_display_clear_status_bar_icon =-1;
+static int hf_display_clear_softkey =-1;
+static int hf_display_clear_softkey_label =-1;
+static int hf_display_clear_line_1 =-1;
+static int hf_display_clear_line_2 =-1;
+static int hf_display_clear_line_3 =-1;
+static int hf_display_clear_line_4 =-1;
+static int hf_display_clear_line_5 =-1;
+static int hf_display_clear_line_6 =-1;
+static int hf_display_clear_line_7 =-1;
+static int hf_display_clear_line_8 =-1;
+static int hf_display_clear_status_bar_icon_1 =-1;
+static int hf_display_clear_status_bar_icon_2 =-1;
+static int hf_display_clear_status_bar_icon_3 =-1;
+static int hf_display_clear_status_bar_icon_4 =-1;
+static int hf_display_clear_status_bar_icon_5 =-1;
+static int hf_display_clear_status_bar_icon_6 =-1;
+static int hf_display_clear_status_bar_icon_7 =-1;
+static int hf_display_clear_status_bar_icon_8 =-1;
+static int hf_display_clear_soft_key_1 =-1;
+static int hf_display_clear_soft_key_2 =-1;
+static int hf_display_clear_soft_key_3 =-1;
+static int hf_display_clear_soft_key_4 =-1;
+static int hf_display_clear_soft_key_5 =-1;
+static int hf_display_clear_soft_key_6 =-1;
+static int hf_display_clear_soft_key_7 =-1;
+static int hf_display_clear_soft_key_8 =-1;
+static int hf_display_clear_sk_label_key_id=-1;
+static int hf_display_clear_all_slks=-1;
+
+
+static int hf_display_line_width=-1;
+static int hf_display_lines=-1;
+static int hf_display_softkey_width=-1;
+static int hf_display_softkeys=-1;
+static int hf_display_icon=-1;
+static int hf_display_softlabel_key_width=-1;
+static int hf_display_context_width=-1;
+static int hf_display_numeric_width=-1;
+static int hf_display_time_width=-1;
+static int hf_display_date_width=-1;
+static int hf_display_char_dload=-1;
+static int hf_display_freeform_icon_dload=-1;
+static int hf_display_icon_type=-1;
+static int hf_display_charsets=-1;
+static int hf_display_contrast=-1;
+static int hf_display_cursor_numeric=-1;
+static int hf_display_cursor_context =-1;
+static int hf_display_cursor_line =-1;
+static int hf_display_cursor_softkey =-1;
+static int hf_display_cursor_softkey_id =-1;
+static int hf_display_cursor_char_pos =-1;
+static int hf_display_cursor_line_number =-1;
+static int hf_display_hlight_start=-1;
+static int hf_display_hlight_end=-1;
+static int hf_display_date_format=-1;
+static int hf_display_time_format=-1;
+static int hf_display_use_time_format=-1;
+static int hf_display_use_date_format=-1;
+static int hf_display_context_format=-1;
+static int hf_display_context_field=-1;
+static int hf_display_char_address=-1;
+static int hf_display_layer_number=-1;
+static int hf_display_layer_skey_id=-1;
+static int hf_display_layer_all_skeys=-1;
+static int hf_display_once_or_cyclic=-1;
+static int hf_display_layer_duration=-1;
+
+
+static const value_string arrow_dirs[]={
+ {0x00,"Down"},
+ {0x01,"Up"},
+ {0x02,"Right"},
+ {0x03,"Left"},
+ {0,NULL}
+};
+
+
+static const value_string cursor_move_cmds[]={
+ {0x00,"Set cursor at home (first character on the first text line)"},
+ {0x01,"Set cursor at the address specified in the following byte"},
+ {0x02,"Move the cursor by one to the left"},
+ {0x03,"Move the cursor by one to the right"},
+ {0x04,"Move the cursor to the left as specified by the Character Position field contained in the last byte"},
+ {0x05,"Move the cursor to the right as specified by the Character Position field contained in the last byte"},
+ {0x06,"Cursor ON"},
+ {0x07,"Cursor OFF"},
+ {0xff,"No Movement command"},
+ {0,NULL}
+};
+
+static const value_string display_switch_msgs[]={
+ {0x01,"Restore Default Character Table Configuration"},
+ {0x04,"Arrow"},
+ {0x05,"Query Status Bar Icon"},
+ {0x06,"Highlight Off"},
+ {0x07,"Highlight On"},
+ {0x09,"Restore Time and Date"},
+ {0x0a,"Clear Time and Date"},
+ {0x0b,"Call Duration Timer"},
+ {0x0c,"Query Display Manager"},
+ {0x0d,"Download Call Duration Timer Delay"},
+ {0x0e,"Disable Display Field"},
+ {0x0f,"Clear Field"},
+ {0x10,"Cursor Control"},
+ {0x12,"Display Scroll with Data (before)"},
+ {0x13,"Display Scroll with Data (after)"},
+ {0x14,"Status Bar Icon Update"},
+ {0x15,"Month Labels Download"},
+ {0x16,"Call Duration Timer Label Download"},
+ {0x17,"Time and Date Format"},
+ {0x18,"Display Data Write address|no control|no tag|no"},
+ {0x19,"Display Data Write address|yes control|no tag|no"},
+ {0x1a,"Display Data Write address|no contral|yes tag|no"},
+ {0x1b,"Display Data Write address|yes control|yes tag|no"},
+ {0x1c,"Display Data Write address|no control|no tag|yes"},
+ {0x1d,"Display Data Write address|yes control|no tag|yes"},
+ {0x1e,"Display Data Write address|no control|yes tag|yes"},
+ {0x1f,"Display Data Write address|yes control|yes tag|yes"},
+ {0x20,"Context Info Bar Format"},
+ {0x21,"Set Default Character Table Configuration"},
+ {0x22,"Special Character Download"},
+ {0x23,"Highlighted Field Definition"},
+ {0x24,"Contrast"},
+ {0x25,"Caller Log Download"},
+ {0x30,"Layered Softkey Text Download"},
+ {0x31,"Layered Softkey Clear"},
+ {0x32,"Set Visible Softkey Layer"},
+ {0x33,"Layered Softkey Cadence Download"},
+ {0x34,"Layered Softkey Cadencing On"},
+ {0x35,"Layered Softkey Cadencing Off"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string display_phone_msgs[]={
+ {0x00,"Display Manager Attributes Info"},
+ {0x01,"Contrast Level Report"},
+ {0x02,"Cursor Location Report"},
+ {0x03,"Highlight Status On"},
+ {0x04,"Current Character Table Configuration Status"},
+ {0x05,"Default Character Table Configuration Status"},
+ {0x06,"Timer And Date Format Report"},
+ {0x07,"Status Bar Icon State Report"},
+ {0x0a,"Highlight Status Off"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+
+static const true_false_string once_or_cyclic={
+ "After the full cadence sequence is executed, softkey field will be updated ",
+ "After the full cadence sequence is executed, it is restarted from the top"
+};
+
+
+static const value_string display_formats[]={
+ {0x00,"None"},
+ {0x01,"Underline"},
+ {0x02,"Overline"},
+ {0x03,"Marquee (combination of an overline and an underline)"},
+ {0x04,"Border"},
+ {0x05,"Reverse-video"},
+ {0x06,"Reverse-video with border"},
+ {0,NULL}
+};
+static const value_string display_format_fields[]={
+ {0x00,"Numeric Index field"},
+ {0x01,"Context field"},
+ {0x02,"Date field"},
+ {0x03,"Time field"},
+ {0,NULL}
+};
+
+
+static const value_string time_formats[]={
+ {0x00,"12-hour clock, e.g. 10:34pm"},
+ {0x01,"French clock, e.g. 22h34"},
+ {0x02,"24-hour clock, e.g. 22:34"},
+ {0x03,"Reserved"},
+ {0,NULL}
+};
+
+static const value_string date_formats[]={
+ {0x00,"Day first, e.g. 16Sep"},
+ {0x01,"Month first, e.g. Sep16"},
+ {0x02," Numeric standard, e.g. 09/16"},
+ {0x03,"Numeric inverse, e.g. 16/09"},
+ {0,NULL}
+};
+
+static const value_string icon_types[]={
+ {0x00,"Fixed Form Icons"},
+ {0x01,"Free Form Icons"},
+ {0,NULL}
+};
+
+
+#endif
+
diff --git a/plugins/unistim/header_field.h b/plugins/unistim/header_field.h
new file mode 100644
index 0000000000..d98e6fdf10
--- /dev/null
+++ b/plugins/unistim/header_field.h
@@ -0,0 +1,1290 @@
+/* header_field.h
+ * Contains the header_field array
+ * Pulled into separate file due to size
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+
+#ifndef UNISTIM_HEADER_FIELD_H
+#define UNISTIM_HEADER_FIELD_H
+
+static hf_register_info hf[] = {
+ { &hf_unistim_seq_nu,
+ { "RUDP Seq Num","unistim.num",FT_UINT32,
+ BASE_HEX|BASE_RANGE_STRING, RVALS(sequence_numbers), 0x0, NULL, HFILL}
+ },
+ { &hf_unistim_cmd_add,
+ { "UNISTIM CMD Address","unistim.add",FT_UINT8,
+ BASE_HEX,VALS(command_address),0x0,NULL,HFILL}
+ },
+ { &hf_unistim_packet_type,
+ { "RUDP Pkt type","unistim.type",FT_UINT8,
+ BASE_DEC, VALS(packet_names),0x0,NULL,HFILL}
+ },
+ { &hf_unistim_payload,
+ { "UNISTIM Payload","unistim.pay",FT_UINT8,
+ BASE_HEX, VALS(payload_names),0x0,NULL,HFILL}
+ },
+ { &hf_unistim_len ,
+ { "UNISTIM CMD Length","unistim.len",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_basic_bit_field,
+ {"FLAGS","unistim.bit.fields",FT_BOOLEAN,
+ 8,TFS(&basic_bit_yn),0xff,NULL,HFILL}
+ },
+ { &hf_basic_switch_cmd ,
+ {"Basic Cmd (switch)","unistim.basic.switch",FT_UINT8,
+ BASE_HEX,VALS(basic_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_basic_phone_cmd ,
+ {"Basic Cmd (phone)","unistim.basic.phone",FT_UINT8,
+ BASE_HEX,VALS(basic_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_switch_cmd ,
+ {"Broadcast Cmd (switch)","unistim.broadcast.switch",FT_UINT8,
+ BASE_HEX,VALS(broadcast_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_phone_cmd ,
+ {"Broadcas Cmd (phone)","unistim.broadcast.phone",FT_UINT8,
+ BASE_HEX,VALS(broadcast_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_audio_switch_cmd ,
+ {"Audio Cmd (switch)","unistim.audio.switch",FT_UINT8,
+ BASE_HEX,VALS(audio_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_audio_phone_cmd ,
+ {"Audio Cmd (phone)","unistim.audio.phone",FT_UINT8,
+ BASE_HEX,VALS(audio_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_display_switch_cmd ,
+ {"Display Cmd (switch)","unistim.display.switch",FT_UINT8,
+ BASE_HEX,VALS(display_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_display_phone_cmd ,
+ {"Display Cmd (phone)","unistim.display.phone",FT_UINT8,
+ BASE_HEX,VALS(display_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_key_switch_cmd ,
+ {"Key Cmd (switch)","unistim.key.switch",FT_UINT8,
+ BASE_HEX,VALS(key_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_key_phone_cmd ,
+ {"Key Cmd (phone)","unistim.key.phone",FT_UINT8,
+ BASE_HEX,VALS(key_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_network_switch_cmd ,
+ {"Network Cmd (switch)","unistim.network.switch",FT_UINT8,
+ BASE_HEX,VALS(network_switch_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_network_phone_cmd ,
+ {"Network Cmd (phone)","unistim.network.phone",FT_UINT8,
+ BASE_HEX,VALS(network_phone_msgs),0x0,NULL,HFILL}
+ },
+ { &hf_terminal_id,
+ {"Terminal ID","unistim.terminal.id",FT_IPv4,
+ BASE_HEX,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_year,
+ {"Year","unistim.broadcast.year",FT_UINT8,
+ BASE_DEC,NULL,0x7f,NULL,HFILL}
+ },
+ { &hf_broadcast_month,
+ {"Month","unistim.broadcast.month",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_day,
+ {"Day","unistim.broadcast.day",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_hour,
+ {"Hour","unistim.broadcast.hour",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_minute,
+ {"Minute","unistim.broadcast.minute",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_broadcast_second,
+ {"Second","unistim.broadcast.second",FT_UINT8,
+ BASE_DEC,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_net_diag_flag,
+ {"Query Network Manager Diagnostic","unistim.query.diagnostic",
+ FT_BOOLEAN,8, NULL,
+ QUERY_NETWORK_MANAGER_DIAGNOSTIC, NULL,HFILL}
+ },
+ { &hf_net_managers_flag,
+ {"Query Network Manager Managers","unistim.query.managers",
+ FT_BOOLEAN,8, NULL,
+ QUERY_NETWORK_MANAGER_MANAGERS, NULL,HFILL}
+ },
+ { &hf_net_attributes_flag,
+ {"Query Network Manager Attributes","unistim.query.attributes",
+ FT_BOOLEAN, 8,NULL,
+ QUERY_NETWORK_MANAGER_ATTRIBUTES,NULL,HFILL}
+ },
+ { &hf_net_serv_info_flag,
+ {"Query Network Manager Server Info","unistim.query.serverInfo",
+ FT_BOOLEAN, 8,NULL,
+ QUERY_NETWORK_MANAGER_SERVER_INFO,NULL,HFILL}
+ },
+ { &hf_net_options_flag,
+ {"Query Network Manager Options","unistim.query.options",
+ FT_BOOLEAN, 8,NULL,
+ QUERY_NETWORK_MANAGER_OPTIONS,NULL,HFILL}
+ },
+ { &hf_net_sanity_flag,
+ {"Query Network Manager Sanity","unistim.query.sanity",
+ FT_BOOLEAN, 8,NULL,
+ QUERY_NETWORK_MANAGER_SANITY,NULL,HFILL}
+ },
+ { &hf_net_enable_diag,
+ {"Network Manager Enable DIAG","unistim.enable.diag",
+ FT_BOOLEAN, 8,NULL,
+ NETWORK_MANAGER_ENABLE_DIAG,NULL,HFILL}
+ },
+ { &hf_net_enable_rudp,
+ {"Network Manager Enable RUDP","unistim.enable.network.rel.udp",
+ FT_BOOLEAN, 8,NULL,
+ NETWORK_MANAGER_ENABLE_RUDP,NULL,HFILL}
+ },
+ { &hf_net_server_id,
+ {"Download Server ID","unistim.download.id",FT_UINT8,
+ BASE_HEX, VALS(network_server_id),0x00,NULL,HFILL}
+ },
+ { &hf_net_server_port,
+ {"Download Server Port","unistim.download.port",FT_UINT16,
+ BASE_DEC, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_server_action,
+ {"Download Server Action","unistim.download.action",FT_UINT8,
+ BASE_HEX, VALS(server_action),0x00,NULL,HFILL}
+ },
+ { &hf_net_server_retry_count,
+ {"Download Retry Count","unistim.download.retry",FT_UINT8,
+ BASE_DEC, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_server_failover_id,
+ {"Download Failover Server ID","unistim.download.failover",FT_UINT8,
+ BASE_HEX, VALS(network_server_id),0x00,NULL,HFILL}
+ },
+ { &hf_net_server_ip_address,
+ {"Download Server Address","unistim.download.address",FT_UINT32,
+ BASE_HEX, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_server_time_out,
+ {"Watchdog Timeout","unistim.watchdog.timeout",FT_UINT16,
+ BASE_DEC, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_server_config_element,
+ {"Configure Network Element","unistim.config.element",FT_UINT8,
+ BASE_HEX, VALS(network_elements),0x00,NULL,HFILL}
+ },
+ { &hf_net_server_recovery_time_low,
+ {"Recovery Procedure Idle Low Boundary","unistim.recovery.low",FT_UINT16,
+ BASE_DEC, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_server_recovery_time_high,
+ {"Recovery Procedure Idle High Boundary","unistim.recovery.high",FT_UINT16,
+ BASE_DEC, NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_rx_ovr_flag,
+ {"Receive Buffer Overflow","unistim.receive.overflow",
+ FT_BOOLEAN, 8,NULL,
+ RX_BUFFER_OVERFLOW,NULL,HFILL}
+ },
+ { &hf_net_phone_tx_ovr_flag,
+ {"Transmit Buffer Overflow","unistim.trans.overflow",
+ FT_BOOLEAN, 8,NULL,
+ TX_BUFFER_OVERFLOW,NULL,HFILL}
+ },
+ { &hf_net_phone_rx_empty_flag,
+ {"Receive Buffer Unexpectedly Empty","unistim.receive.empty",
+ FT_BOOLEAN, 8,NULL,
+ RX_UNEXPECT_EMPTY,NULL,HFILL}
+ },
+ { &hf_net_phone_invalid_msg_flag,
+ {"Received Invalid MSG","unistim.invalid.msg",
+ FT_BOOLEAN, 8,NULL,
+ INVALID_MSG,NULL,HFILL}
+ },
+ { &hf_net_phone_eeprom_insane_flag,
+ {"EEProm Insane","unistim.eeprom.insane",
+ FT_BOOLEAN, 8,NULL,
+ EEPROM_INSANE,NULL,HFILL}
+ },
+ { &hf_net_phone_eeprom_unsafe_flag,
+ {"EEProm Unsafe","unistim.eeprom.unsafe",
+ FT_BOOLEAN, 8,NULL,
+ EEPROM_UNSAFE,NULL,HFILL}
+ },
+ { &hf_net_phone_diag,
+ {"Diagnostic Command Enabled","unistim.diag.enabled",FT_BOOLEAN,
+ 8,NULL,NETWORK_MGR_REPORT_DIAG,NULL,HFILL}
+ },
+ { &hf_net_phone_rudp,
+ {"Reliable UDP Active","unistim.rudp.active",FT_BOOLEAN,
+ 8,NULL,NETWORK_MGR_REPORT_RUDP,NULL,HFILL}
+ },
+ { &hf_basic_switch_query_flags,
+ {"Query Basic Manager","unistim.basic.query",FT_UINT8,
+ BASE_HEX, NULL,0x00,"INITIAL PHONE QUERY",HFILL}
+ },
+ { &hf_basic_switch_query_attr,
+ {"Query Basic Manager Attributes","unistim.basic.attrs",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_ATTRIBUTES,"Basic Query Atrributes",HFILL}
+ },
+ { &hf_basic_switch_query_opts,
+ {"Query Basic Manager Options","unistim.basic.opts",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_OPTIONS,"Basic Query Options",HFILL}
+ },
+ { &hf_basic_switch_query_fw,
+ {"Query Basic Switch Firmware","unistim.basic.fw",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_FW,"Basic Query Firmware",HFILL}
+ },
+ { &hf_basic_switch_query_hw_id,
+ {"Query Basic Manager Hardware ID","unistim.basic.hwid",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_HW_ID,"Basic Query Hardware ID",HFILL}
+ },
+ { &hf_basic_switch_query_it_type,
+ {"Query Basic Manager Phone Type","unistim.basic.type",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_IT_TYPE,"Basic Query Phone Type",HFILL}
+ },
+ { &hf_basic_switch_query_prod_eng_code,
+ {"Query Basic Manager Prod Eng Code","unistim.basic.code",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_PROD_ENG_CODE,"Basic Query Production Engineering Code",HFILL}
+ },
+ { &hf_basic_switch_query_gray_mkt_info,
+ {"Query Basic Manager Gray Mkt Info","unistim.basic.gray",FT_BOOLEAN,
+ 8,NULL,BASIC_QUERY_GRAY_MKT_INFO,"Basic Query Gray Market Info",HFILL}
+ },
+ { &hf_basic_switch_options_secure,
+ {"Basic Switch Options Secure Code","unistim.basic.secure",FT_BOOLEAN,
+ 8,NULL,BASIC_OPTION_SECURE,NULL,HFILL}
+ },
+ { &hf_basic_switch_element_id,
+ {"Basic Element ID","unistim.basic.element.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_switch_eeprom_data,
+ {"EEProm Data","unistim.basic.eeprom.data",FT_BYTES,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_phone_eeprom_stat_cksum,
+ {"Basic Phone EEProm Static Checksum","unistim.static.cksum",FT_UINT8,
+ BASE_HEX,NULL,0x0,NULL,HFILL}
+ },
+ { &hf_basic_phone_eeprom_dynam,
+ {"Basic Phone EEProm Dynamic Checksum","unistim.dynam.cksum",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_phone_eeprom_net_config_cksum,
+ {"Basic Phone EEProm Net Config Checksum","unistim.netconfig.cksum",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_phone_hw_id,
+ {"Basic Phone Hardware ID","unistim.basic.hw.id",FT_BYTES,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_phone_fw_ver,
+ {"Basic Phone Firmware Version","unistim.basic.fw.ver",FT_STRING,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_key_code,
+ {"Key Name","unistim.key.name",FT_UINT8,
+ BASE_HEX,VALS(key_names),0x3f,NULL,HFILL}
+ },
+ { &hf_key_command,
+ {"Key Action","unistim.key.action",FT_UINT8,
+ BASE_HEX,VALS(key_cmds),0xc0,NULL,HFILL}
+ },
+ { &hf_icon_id,
+ {"Icon ID","unistim.icon.id",FT_UINT8,
+ BASE_HEX,NULL, DISPLAY_ICON_ID,NULL,HFILL}
+ },
+ { &hf_broadcast_icon_state,
+ {"Icon State","unistim.icon.state",FT_UINT8,
+ BASE_HEX,VALS(bcast_icon_states),0x1f,NULL,HFILL}
+ },
+ { &hf_broadcast_icon_cadence,
+ {"Icon Cadence","unistim.icon.cadence",FT_UINT8,
+ BASE_HEX,VALS(bcast_icon_cadence),0xe0,NULL,HFILL}
+ },
+ { &hf_audio_mgr_attr,
+ {"Query Audio Manager Attributes","unistim.audio.attr",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_ATTRIBUTES,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opts,
+ {"Query Audio Manager Options","unistim.audio.options",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_OPTIONS,NULL,HFILL}
+ },
+ { &hf_audio_mgr_alert,
+ {"Query Audio Manager Alerting","unistim.audio.alerting",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_ALERTING ,NULL,HFILL}
+ },
+ { &hf_audio_mgr_adj_rx_vol,
+ {"Query Audio Manager Adjustable Receive Volume","unistim.audio.adj.volume",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_ADJ_RX_VOL,NULL,HFILL}
+ },
+ { &hf_audio_mgr_def_rx_vol,
+ {"Query Audio Manager Default Receive Volume","unistim.audio.def.volume",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_DEF_RX_VOL,NULL,HFILL}
+ },
+ { &hf_audio_mgr_handset,
+ {"Query Audio Manager Handset","unistim.audio.handset",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_HANDSET,NULL,HFILL}
+ },
+ { &hf_audio_mgr_headset,
+ {"Query Audio Manager Headset","unistim.audio.headset",FT_BOOLEAN,
+ 8,NULL,QUERY_AUDIO_MGR_HEADSET,NULL,HFILL}
+ },
+ { &hf_audio_default_rx_vol_id,
+ {"Audio Manager Default Receive Volume ID","unistim.audio.volume.id",FT_UINT8,
+ BASE_HEX,VALS(default_rx_vol_id),0x00,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_max_vol,
+ {"Audio Manager Enable Max Tone Volume","unistim.audio.max.tone",FT_BOOLEAN,
+ 8,TFS(&audio_opts_enable_max_tone_vol),AUDIO_MGR_OPTS_MAX_VOL,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_adj_vol,
+ {"Audio Manager Adjust Volume","unistim.audio.opts.adj.vol",FT_BOOLEAN,
+ 8,TFS(&audio_opts_adjust_volume),AUDIO_MGR_ADJ_VOL,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_aa_rx_vol_rpt,
+ {"Audio Manager Auto Adjust Volume RPT","unistim.audio.aa.vol.rpt",FT_BOOLEAN,
+ 8,TFS(&audio_opts_automatic_adjustable),AUDIO_MGR_AUTO_RX_VOL_RPT,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_hs_on_air,
+ {"Audio Manager Handset","unistim.audio.handset",FT_BOOLEAN,
+ 8,TFS(&audio_opts_hs_on_air_feature),AUDIO_MGR_HS_ON_AIR,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_hd_on_air,
+ {"Audio Manager Headset","unistim.audio.headset",FT_BOOLEAN,
+ 8,TFS(&audio_opts_hd_on_air_feature),AUDIO_MGR_HD_ON_AIR,NULL,HFILL}
+ },
+ { &hf_audio_mgr_opt_noise_squelch,
+ {"Audio Manager Noise Squelch","unistim.audio.squelch",FT_BOOLEAN,
+ 8,TFS(&noise_sqlch_disable), AUDIO_MGR_NOISE_SQUELCH,NULL,HFILL}
+ },
+ { &hf_audio_mgr_mute,
+ {"Audio Manager Mute","unistim.audio.mute",FT_BOOLEAN,
+ 8,TFS(&audio_mgr_mute_val),AUDIO_MGR_MUTE,NULL,HFILL}
+ },
+ { &hf_audio_mgr_tx_rx,
+ {"Audio Manager RX or TX","unistim.audio.rx.tx",FT_BOOLEAN,
+ 8,TFS(&audio_mgr_tx_rx_val),AUDIO_MGR_TX_RX,NULL,HFILL}
+ },
+ { &hf_audio_mgr_stream_id,
+ {"Audio Manager Stream ID","unistim.audio.stream.id",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_mgr_transducer_based_tone_id,
+ {"Audio Manager Transducer Based Tone On","unistim.audio.transducer.on",FT_UINT8,
+ BASE_HEX,VALS(trans_base_tone_ids),0x07,NULL,HFILL}
+ },
+ { &hf_audio_mgr_attenuated,
+ {"Audio Manager Transducer Tone Attenuated","unistim.audio.attenuated.on",FT_BOOLEAN,
+ 8,NULL,AUDIO_MGR_ATTENUATED,NULL,HFILL}
+ },
+ { &hf_audio_mgr_warbler_select,
+ {"Warbler Select","unistim.warbler.select",FT_UINT8,
+ BASE_HEX,NULL,0x07,NULL,HFILL}
+ },
+ { &hf_audio_mgr_transducer_routing,
+ {"Transducer Routing","unistim.transducer.routing",FT_UINT8,
+ BASE_HEX,VALS(transducer_routing_vals),0xf8,NULL,HFILL}
+ },
+ { &hf_audio_mgr_tone_vol_range,
+ {"Tone Volume Range in Steps","unistim.tone.volume.range",FT_UINT8,
+ BASE_HEX,NULL,0x0f,NULL,HFILL}
+ },
+ { &hf_audio_mgr_cadence_select,
+ {"Cadence Select","unistim.cadence.select",FT_UINT8,
+ BASE_HEX,VALS(cadence_select_vals),0xf0,NULL,HFILL}
+ },
+ { &hf_audio_special_tone,
+ {"Special Tone Select","unistim.special.tone.select",FT_UINT8,
+ BASE_HEX,VALS(special_tones_vals),0x00,NULL,HFILL}
+ },
+ { &hf_audio_tone_level,
+ {"Tone Level","unistim.audio.tone.level",FT_UINT8,
+ BASE_DEC,NULL,0xf0,NULL,HFILL}
+ },
+ { &hf_audio_visual_tones,
+ {"Enable Visual Tones","unistim.visual.tones",FT_BOOLEAN,
+ 8,NULL,AUDIO_MGR_VISUAL_TONE,NULL,HFILL}
+ },
+ { &hf_audio_stream_based_tone_id,
+ {"Stream Based Tone ID","unistim.stream.tone.id",FT_UINT8,
+ BASE_HEX,VALS(stream_based_tone_vals),0x1f,NULL,HFILL}
+ },
+ { &hf_audio_stream_based_tone_rx_tx,
+ {"Stream Based Tone RX or TX","unistim.stream.based.tone.rx.tx",FT_BOOLEAN,
+ 8,TFS(&stream_based_tone_rx_tx_yn),AUDIO_STREAM_BASED_TONE_RX_TX,NULL,HFILL}
+ },
+ { &hf_audio_stream_based_tone_mute,
+ {"Stream Based Tone Mute","unistim.stream.tone.mute",FT_BOOLEAN,
+ 8,TFS(&stream_based_tone_mute_yn),AUDIO_STREAM_BASED_TONE_MUTE,NULL,HFILL}
+ },
+ { &hf_audio_stream_id,
+ {"Stream ID","unistim.audio.stream.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_stream_based_volume,
+ {"Stream Based Volume ID","unistim.stream.volume.id",FT_UINT8,
+ BASE_HEX,VALS(stream_base_vol_level),0x00,NULL,HFILL}
+ },
+ { &hf_basic_switch_terminal_id,
+ {"Terminal ID assigned by Switch","unistim.switch.terminal.id",FT_IPv4,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_basic_it_type,
+ {"IT (Phone) Type","unistim.it.type",FT_UINT8,
+ BASE_HEX,VALS(it_types),0x00,NULL,HFILL}
+ },
+ { &hf_basic_prod_eng_code,
+ {"Product Engineering Code for phone","unistim.basic.eng.code",FT_STRING,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_primary_server_id,
+ {"Phone Primary Server ID","unistim.net.phone.primary.id",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_server_port,
+ {"Port Number","unistim.server.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_server_action,
+ {"Action","unistim.server.action.byte",FT_UINT8,
+ BASE_HEX,VALS(action_bytes),0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_server_retry_count,
+ {"Number of times to Retry","unistim.server.retry.count",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_server_failover_id,
+ {"Failover Server ID","unistim.server.failover.id",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_phone_server_ip,
+ {"IP address","unistim.server.ip.address",FT_IPv4,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_apb_number,
+ {"APB Number","unistim.audio.apb.number",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { & hf_audio_apb_op_code,
+ {"APB Operation Code","unistim.audio.apb.op.code",FT_UINT8,
+ BASE_HEX,VALS(apb_op_codes),0x00,NULL,HFILL}
+ },
+ { &hf_audio_apb_param_len,
+ {"APB Operation Parameter Length","unistim.apb.param.len",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_apb_data,
+ {"APB Operation Data","unistim.apb.operation.data",FT_BYTES,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_write_address_numeric,
+ {"Is Address Numberic","unistim.write.address.numeric",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_ADDRESS_NUMERIC_FLAG,NULL,HFILL}
+ },
+ { &hf_display_write_address_context,
+ {"Context Field in the Info Bar","unistim.write.address.context",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_ADDRESS_CONTEXT_FLAG,NULL,HFILL}
+ },
+ { &hf_display_write_address_line,
+ {"Write A Line","unistim.write.address.line",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_ADDRESS_LINE_FLAG ,NULL,HFILL}
+ },
+ { &hf_display_write_address_soft_key,
+ {"Write a SoftKey","unistim.write.address.softkey",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG,NULL,HFILL}
+ },
+ { &hf_display_write_address_soft_label,
+ {"Write A Softkey Label","unistim.write.address.softkey.label",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG,NULL,HFILL}
+ },
+ { &hf_display_write_address_softkey_id,
+ {"Soft Key ID","unistim.write.addres.softkey.id",FT_UINT8,
+ BASE_HEX,NULL,DISPLAY_WRITE_ADDRESS_SOFT_KEY_ID,NULL,HFILL}
+ },
+ { &hf_display_write_address_char_pos,
+ {"Character Position or Soft-Label Key ID","unistim.display.write.address.char.pos",FT_UINT8,
+ BASE_HEX,NULL,DISPLAY_WRITE_ADDRESS_CHAR_POS,NULL,HFILL}
+ },
+ { &hf_display_write_address_line_number,
+ {"Line Number","unistim.write.address.line.number",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_WRITE_ADDRESS_LINE_NUM,NULL,HFILL}
+ },
+ { &hf_display_write_cursor_move,
+ {"Cursor Move","unistim.display.cursor.move",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_CURSOR_MOVE,NULL,HFILL}
+ },
+ { &hf_display_write_clear_left,
+ {"Clear Left","unistim.display.clear.left",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_CLEAR_LEFT,NULL,HFILL}
+ },
+ { &hf_display_write_clear_right,
+ {"Clear Right","unistim.display.clear.right",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_CLEAR_RIGHT,NULL,HFILL}
+ },
+ { &hf_display_write_shift_left,
+ {"Shift Left","unistim.display.shift.left",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_SHIFT_LEFT,NULL,HFILL}
+ },
+ { &hf_display_write_shift_right,
+ {"Shift Right","unistim.display.shift.right",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_SHIFT_RIGHT,NULL,HFILL}
+ },
+ { &hf_display_write_highlight,
+ {"Highlight","unistim.display.hightlight",FT_BOOLEAN,
+ 8,NULL,DISPLAY_WRITE_HIGHLIGHT,NULL,HFILL}
+ },
+ { &hf_display_write_tag,
+ {"Tag for text","unistim.display.text.tag",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_cursor_move_cmd,
+ {"Cursor Movement Command","unistim.cursor.move.cmd",FT_UINT8,
+ BASE_HEX,VALS(cursor_move_cmds),DISPLAY_CURSOR_MOVE_CMD,NULL,HFILL}
+ },
+ { &hf_display_cursor_blink,
+ {"Should Cursor Blink","unistim.cursor.blink",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CURSOR_BLINK,NULL,HFILL}
+ },
+ { &hf_audio_vocoder_id,
+ {"Vocoder Protocol","unistim.vocoder.id",FT_UINT8,
+ BASE_HEX,VALS(vocoder_ids),0x00,NULL,HFILL}
+ },
+ { &hf_audio_vocoder_param,
+ {"Vocoder Config Param","unistim.vocoder.config.param",FT_UINT8,
+ BASE_HEX,VALS(vocoder_config_params),AUDIO_VOCODER_CONFIG_PARAM,NULL,HFILL}
+ },
+ { &hf_audio_vocoder_entity,
+ {"Vocoder Entity","unistim.vocoder.entity",FT_UINT8,
+ BASE_HEX,VALS(config_param_entities),AUDIO_VOCODER_CONFIG_ENTITY,NULL,HFILL}
+ },
+ { &hf_audio_vocoder_annexa,
+ {"Enable Annex A","unistim.enable.annexa",FT_BOOLEAN,
+ 8,NULL,AUDIO_VOCODER_ANNEXA,NULL,HFILL}
+ },
+ { &hf_audio_vocoder_annexb,
+ {"Enable Annex B","unistim.enable.annexb",FT_BOOLEAN,
+ 8,NULL,AUDIO_VOCODER_ANNEXB,NULL,HFILL}
+ },
+ { &hf_audio_sample_rate,
+ {"Sample Rate","unistim.audio.sample.rate",FT_UINT8,
+ BASE_HEX,VALS(sample_rates),0x00,NULL,HFILL}
+ },
+ { &hf_audio_rtp_type,
+ {"RTP Type","unistim.audio.rtp.type",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_bytes_per_frame,
+ {"Bytes Per Frame","unistim.audio.bytes.per.frame",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_rx_stream_id,
+ {"Receive Stream Id","unistim.rx.stream.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_tx_stream_id,
+ {"Transmit Stream Id","unistim.rx.stream.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_rx_vocoder_type,
+ {"Receive Vocoder Protocol","unistim.vocoder.id",FT_UINT8,
+ BASE_HEX,VALS(vocoder_ids),0x00,NULL,HFILL}
+ },
+ { &hf_tx_vocoder_type,
+ {"Transmit Vocoder Protocol","unistim.vocoder.id",FT_UINT8,
+ BASE_HEX,VALS(vocoder_ids),0x00,NULL,HFILL}
+ },
+ { &hf_frames_per_packet,
+ {"Frames Per Packet","unistim.vocoder.frames.per.packet",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_tos,
+ {"Type of Service","unistim.audio.type.service",FT_UINT8,
+ BASE_HEX,VALS(types_of_service),AUDIO_TYPE_OF_SERVICE,NULL,HFILL}
+ },
+ { &hf_audio_precedence,
+ {"Precedence","unistim.audio.precedence",FT_UINT8,
+ BASE_HEX,VALS(precedences),AUDIO_PRECENDENCE,NULL,HFILL}
+ },
+ { &hf_audio_frf_11,
+ {"FRF.11 Enable","unistim.audio.frf.11",FT_BOOLEAN,
+ 8,NULL,AUDIO_FRF_11,NULL,HFILL}
+ },
+ { &hf_audio_lcl_rtp_port,
+ {"Phone RTP Port","unistim.local.rtp.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_lcl_rtcp_port,
+ {"Phone RTCP Port","unistim.local.rtcp.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_far_rtp_port,
+ {"Distant RTP Port","unistim.far.rtp.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_far_rtcp_port,
+ {"Distant RTCP Port","unistim.far.rtcp.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_far_ip_add,
+ {"Distant IP Address for RT[C]P","unistim.far.ip.address",FT_IPv4,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_rtcp_bucket_id,
+ {"RTCP Bucket ID","unistim.rtcp.bucket.id",FT_UINT16,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_key_icon_id,
+ {"Icon ID","unistim.key.icon.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_clear_numeric,
+ {"Numeric Index Field in InfoBar","unistim.display.clear.numeric",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_NUMERIC,NULL,HFILL}
+ },
+ { &hf_display_clear_context ,
+ {"Context Field in InfoBar","unistim.display.clear.context",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_CONTEXT,NULL,HFILL}
+ },
+ { &hf_display_clear_date ,
+ {"Date Field","unistim.display.clear.date",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_DATE,NULL,HFILL}
+ },
+ { &hf_display_clear_time,
+ {"Time Field","unistim.display.clear.time",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_TIME,NULL,HFILL}
+ },
+ { &hf_display_clear_line,
+ {"Line Data","unistim.display.clear.line",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon,
+ {"Status Bar Icon","unistim.display.statusbar.icon",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_STATUS_BAR_ICON,NULL,HFILL}
+ },
+ { &hf_display_clear_softkey,
+ {"Soft Key","unistim.display.clear.softkey",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_SOFTKEY,NULL,HFILL}
+ },
+ { &hf_display_clear_softkey_label ,
+ {"Soft Key Label","unistim.display.clear.softkey.label",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_SOFTKEY_LABEL,NULL,HFILL}
+ },
+ { &hf_display_clear_line_1 ,
+ {"Line 1","unistim.display.clear.line1",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_1,NULL,HFILL}
+ },
+ { &hf_display_clear_line_2 ,
+ {"Line 2","unistim.display.clear.line2",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_2,NULL,HFILL}
+ },
+ { &hf_display_clear_line_3 ,
+ {"Line 3","unistim.display.clear.line3",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_3,NULL,HFILL}
+ },
+ { &hf_display_clear_line_4 ,
+ {"Line 4","unistim.display.clear.line4",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_4,NULL,HFILL}
+ },
+ { &hf_display_clear_line_5 ,
+ {"Line 5","unistim.display.clear.line5",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_5,NULL,HFILL}
+ },
+ { &hf_display_clear_line_6 ,
+ {"Line 6","unistim.display.clear.line6",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_6,NULL,HFILL}
+ },
+ { &hf_display_clear_line_7 ,
+ {"Line 7","unistim.display.clear.line7",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_7,NULL,HFILL}
+ },
+ { &hf_display_clear_line_8 ,
+ {"Line 8","unistim.display.clear.line8",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_LINE_8,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_1 ,
+ {"Status Bar Icon 1","unistim.display.clear.sbar.icon1",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_1,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_2 ,
+ {"Status Bar Icon 2","unistim.display.clear.sbar.icon2",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_2,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_3 ,
+ {"Status Bar Icon 3","unistim.display.clear.sbar.icon3",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_3,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_4 ,
+ {"Status Bar Icon 4","unistim.display.clear.sbar.icon4",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_4,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_5 ,
+ {"Status Bar Icon 5","unistim.display.clear.sbar.icon5",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_5,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_6 ,
+ {"Status Bar Icon 6","unistim.display.clear.sbar.icon6",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_6,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_7 ,
+ {"Status Bar Icon 7","unistim.display.clear.sbar.icon7",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_7,NULL,HFILL}
+ },
+ { &hf_display_clear_status_bar_icon_8 ,
+ {"Status Bar Icon 8","unistim.display.clear.sbar.icon8",FT_BOOLEAN,
+ 8,NULL,DISPLAY_STATUS_BAR_ICON_8,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_1 ,
+ {"Soft Key 1","unistim.display.clear.soft.key1",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_1,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_2 ,
+ {"Soft Key 2","unistim.display.clear.soft.key2",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_2,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_3 ,
+ {"Soft Key 3","unistim.display.clear.soft.key3",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_3,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_4 ,
+ {"Soft Key 4","unistim.display.clear.soft.key4",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_4,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_5 ,
+ {"Soft Key 5","unistim.display.clear.soft.key5",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_5,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_6 ,
+ {"Soft Key 6","unistim.display.clear.soft.key6",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_6,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_7 ,
+ {"Soft Key 7","unistim.display.clear.soft.key7",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_7,NULL,HFILL}
+ },
+ { &hf_display_clear_soft_key_8 ,
+ {"Soft Key 8","unistim.display.clear.soft.key8",FT_BOOLEAN,
+ 8,NULL,DISPLAY_SOFT_KEY_8,NULL,HFILL}
+ },
+ { &hf_display_clear_sk_label_key_id,
+ {"Soft Key Label ID","unistim.display.clear.sk.label.id",FT_UINT8,
+ BASE_HEX,NULL, DISPLAY_CLEAR_SK_LABEL_KEY_ID,NULL,HFILL}
+ },
+ { &hf_display_clear_all_slks,
+ {"Clear All Soft Key Labels","unistim.display.clear.all.sks",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CLEAR_ALL_SLKS,NULL,HFILL}
+ },
+ { &hf_key_led_cadence,
+ {"LED Cadence","unistim.key.led.cadence",FT_UINT8,
+ BASE_HEX,VALS(led_cadences),KEY_LED_CADENCE,NULL,HFILL}
+ },
+ { &hf_key_led_id,
+ {"LED ID","unistim.key.led.id",FT_UINT8,
+ BASE_HEX,VALS(led_ids),KEY_LED_ID,NULL,HFILL}
+ },
+ { &hf_basic_ether_address,
+ {"Phone Ethernet Address","unistim.phone.ether",FT_ETHER,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_rtcp_bucket_id,
+ {"RTCP Bucket ID","unistim.audio.rtcp.bucket.id",FT_UINT8,
+ BASE_HEX,NULL,AUDIO_RTCP_BUCKET_ID,NULL,HFILL}
+ },
+ { &hf_audio_clear_bucket,
+ {"Clear Bucket Counter","unistim.clear.bucket",FT_BOOLEAN,
+ 8,NULL,AUDIO_CLEAR_BUCKET,NULL,HFILL}
+ },
+ { &hf_display_arrow,
+ {"Arrow Display Direction","unistim.arrow.direction",FT_UINT8,
+ BASE_HEX,VALS(arrow_dirs),0x00,NULL,HFILL}
+ },
+ { &hf_audio_transducer_pair,
+ {"Audio Transducer Pair","unistim.transducer.pairs",FT_UINT8,
+ BASE_HEX,VALS(transducer_pairs),AUDIO_TRANSDUCER_PAIR_ID,NULL,HFILL}
+ },
+ { &hf_audio_rx_enable,
+ {"RX Enable","unistim.receive.enable",FT_BOOLEAN,
+ 8,NULL,AUDIO_RX_ENABLE,NULL,HFILL}
+ },
+ { &hf_audio_tx_enable,
+ {"TX Enable","unistim.transmit.enable",FT_BOOLEAN,
+ 8,NULL,AUDIO_TX_ENABLE,NULL,HFILL}
+ },
+ { &hf_audio_sidetone_disable,
+ {"Disable Sidetone","unistim.audio.sidetone.disable",FT_BOOLEAN,
+ 8,NULL,AUDIO_SIDETONE_DISABLE,NULL,HFILL}
+ },
+ { &hf_audio_destruct_additive,
+ {"Distructive/Additive","unistim.distructive.active",FT_BOOLEAN,
+ 8,TFS(&destruct_additive),AUDIO_DESTRUCT_ADD,NULL,HFILL}
+ },
+ { &hf_audio_dont_force_active,
+ {"Don't Force Active","unistim.dont.force.active",FT_BOOLEAN,
+ 8,TFS(&dont_force_active),AUDIO_DONT_FORCE_ACTIVE,NULL,HFILL}
+ },
+ { &hf_display_line_width,
+ {"Phone Line Width","unistim.line.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_LINE_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_lines,
+ {"Number Of Lines","unistim.number.lines",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_LINES,NULL,HFILL}
+ },
+ { &hf_display_softkey_width,
+ {"Phone Softkey Width","unistim.softkey.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_SKEY_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_softkeys,
+ {"Phone Softkeys","unistim.phone.softkeys",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_SKEYS,NULL,HFILL}
+ },
+ { &hf_display_icon,
+ {"Phone Icon Type","unistim.phone.icon.type",FT_UINT8,
+ BASE_HEX,VALS(icon_types),DISPLAY_ICON,NULL,HFILL}
+ },
+ { &hf_display_softlabel_key_width,
+ {"Soft-Label Key width","unistim.softlabel.key.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_SOFTLABEL_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_context_width,
+ {"Phone Context Width","unistim.context.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_CONTEXT_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_numeric_width,
+ {"Phone Numeric Width","unistim.numeric.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_NUMERIC_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_time_width,
+ {"Phone Time Width","unistim.time.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_TIME_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_date_width,
+ {"Phone Date Width","unistim.date.width",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_DATE_WIDTH,NULL,HFILL}
+ },
+ { &hf_display_char_dload,
+ {"Number of Downloadable Chars","unistim.number.dload.chars",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_CHAR_DLOAD,NULL,HFILL}
+ },
+ { &hf_display_freeform_icon_dload,
+ {"Number of Freeform Icon Downloads","unistim.number.dload.icons",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_FFORM_ICON_DLOAD,NULL,HFILL}
+ },
+ { &hf_display_icon_type,
+ {"Icon Types","unistim.icon.types",FT_UINT8,
+ BASE_HEX,NULL,DISPLAY_ICON_TYPE,NULL,HFILL}
+ },
+ { &hf_display_charsets,
+ {"Character Sets","unistim.phone.charsets",FT_UINT8,
+ BASE_HEX,NULL,DISPLAY_CHARSET,NULL,HFILL}
+ },
+ { &hf_display_contrast,
+ {"Phone Contrast Level","unistim.phone.contrast.level",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_cursor_numeric,
+ {"Numeric Index Field","unistim.field.numeric",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CURSOR_NUMERIC,NULL,HFILL}
+ },
+ { &hf_display_cursor_context,
+ {"Context Field","unistim.field.context",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CURSOR_CONTEXT,NULL,HFILL}
+ },
+ { &hf_display_cursor_line,
+ {"Text Line","unistim.field.text.line",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CURSOR_LINE,NULL,HFILL}
+ },
+ { &hf_display_cursor_softkey,
+ {"Softkey Position","unistim.position.skey",FT_BOOLEAN,
+ 8,NULL,DISPLAY_CURSOR_SKEY,NULL,HFILL}
+ },
+ { &hf_display_cursor_softkey_id,
+ {"Soft Key Id","unistim.cursor.skey.id",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_CURSOR_SKEY_ID,NULL,HFILL}
+ },
+ { &hf_display_cursor_char_pos,
+ {"Character Postition","unistim.phone.char.pos",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_CURSOR_CHAR_POS,NULL,HFILL}
+ },
+ { &hf_display_cursor_line_number,
+ {"Display Line Number","unistim.display.line.number",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_CURSOR_LINE_NUM,NULL,HFILL}
+ },
+ { &hf_display_hlight_start,
+ {"Display Highlight Start Position","unistim.hilite.start.pos",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_hlight_end,
+ {"Display Highlight End Position","unistim.hilite.end.pos",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_date_format,
+ {"Date Format","unistim.display.date.format",FT_UINT8,
+ BASE_HEX,VALS(date_formats),DISPLAY_DATE_FORMAT,NULL,HFILL}
+ },
+ { &hf_display_time_format,
+ {"Time Format","unistim.display.time.format",FT_UINT8,
+ BASE_HEX,VALS(time_formats),DISPLAY_TIME_FORMAT,NULL,HFILL}
+ },
+ { &hf_display_use_time_format,
+ {"Use Time Format","unistim.display.use.time.format",FT_BOOLEAN,
+ 8,NULL,DISPLAY_USE_TIME_FORMAT,NULL,HFILL}
+ },
+ { &hf_display_use_date_format,
+ {"Use Date Format","unistim.display.use.date.format",FT_BOOLEAN,
+ 8,NULL,DISPLAY_USE_DATE_FORMAT,NULL,HFILL}
+ },
+ { &hf_display_context_format,
+ {"Context Info Bar Format","unistim.display.context.format",FT_UINT8,
+ BASE_HEX,VALS(display_formats),DISPLAY_CTX_FORMAT,NULL,HFILL}
+ },
+ { &hf_display_context_field,
+ {"Context Info Bar Field","unistim.display.context.field",FT_UINT8,
+ BASE_HEX,VALS(display_format_fields),DISPLAY_CTX_FIELD,NULL,HFILL}
+ },
+ { &hf_display_char_address,
+ {"Display Character Address","unistim.display.char.address",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_layer_number,
+ {"Softkey Layer Number","unistim.softkey.layer.num",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_display_layer_skey_id,
+ {"Softkey ID","unistim.layer.softkey.id",FT_UINT8,
+ BASE_DEC,NULL,DISPLAY_LAYER_SKEY_ID,NULL,HFILL}
+ },
+ { &hf_display_layer_all_skeys,
+ {"All Softkeys","unistim.layer.all.skeys",FT_BOOLEAN,
+ 8,NULL,DISPLAY_LAYER_ALL_SKEYS,NULL,HFILL}
+ },
+ { &hf_display_once_or_cyclic,
+ {"Layer Softkey Once/Cyclic","unistim.layer.once.cyclic",FT_BOOLEAN,
+ 8,TFS(&once_or_cyclic),DISPLAY_ONE_OR_CYCLIC,NULL,HFILL}
+ },
+ { &hf_display_layer_duration,
+ {"Display Duration (20ms steps)","unistim.layer.display.duration",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_key_programmable_keys,
+ {"Number of Programable Keys","unistim.num.prog.keys",FT_UINT8,
+ BASE_DEC,NULL,KEY_NUM_PROG_KEYS,NULL,HFILL}
+ },
+ { &hf_keys_soft_keys,
+ {"Number of Soft Keys","unistim.num.soft.keys",FT_UINT8,
+ BASE_DEC,NULL,KEY_NUM_SOFT_KEYS,NULL,HFILL}
+ },
+ { &hf_keys_hd_key,
+ {"Headset Key Exists","unistim.exist.hd.key",FT_BOOLEAN,
+ 8,NULL,KEY_HD_KEY_EXISTS,NULL,HFILL}
+ },
+ { &hf_keys_mute_key,
+ {"Mute Key Exists","unistim.exist.mute.key",FT_BOOLEAN,
+ 8,NULL,KEY_MUTE_KEY_EXISTS,NULL,HFILL}
+ },
+ { &hf_keys_quit_key,
+ {"Quit Key Exists","unistim.exist.quit.key",FT_BOOLEAN,
+ 8,NULL,KEY_QUIT_KEY_EXISTS,NULL,HFILL}
+ },
+ { &hf_keys_copy_key,
+ {"Copy Key Exists","unistim.exist.copy.key",FT_BOOLEAN,
+ 8,NULL,KEY_COPY_KEY_EXISTS,NULL,HFILL}
+ },
+ { &hf_keys_mwi_key,
+ {"Message Waiting Indicator Exists","unistim.exist.mwi.key",FT_BOOLEAN,
+ 8,NULL,KEY_MWI_EXISTS,NULL,HFILL}
+ },
+ { &hf_keys_num_nav_keys,
+ {"Number of Navigation Keys","unistim.num.nav.keys",FT_UINT8,
+ BASE_DEC,VALS(number_nav_keys),KEY_NUM_NAV_KEYS,NULL,HFILL}
+ },
+ { &hf_keys_num_conspic_keys,
+ {"Number Of Conspicuous Keys","unistim.num.conspic.keys",FT_UINT8,
+ BASE_DEC,NULL,KEY_NUM_CONSPIC_KEYS,NULL,HFILL}
+ },
+ { &hf_keys_send_key_rel,
+ {"Send Key Release","unistim.key.send.release",FT_BOOLEAN,
+ 8,TFS(&key_release),KEY_SEND_KEY_RELEASE,NULL,HFILL}
+ },
+ { &hf_keys_enable_vol,
+ {"Enable Volume Control","unistim.key.enable.vol",FT_BOOLEAN,
+ 8,TFS(&enable_vol),KEY_ENABLE_VOL_KEY,NULL,HFILL}
+ },
+ { &hf_keys_conspic_prog_key,
+ {"Conspicuous and Programmable Keys Same","unistim.conspic.prog.keys",FT_BOOLEAN,
+ 8,TFS(&conspic_prog),KEY_CONSPIC_PROG_KEY0,NULL,HFILL}
+ },
+ { &hf_keys_acd_super_control,
+ {"ACD Supervisor Control","unistim.acd.super.control",FT_BOOLEAN,
+ 8,TFS(&acd_supervisor),KEY_ACD_SUP_CONTROL,NULL,HFILL}
+ },
+ { &hf_keys_local_dial_feedback,
+ {"Local Keypad Feedback","unistim.key.feedback",FT_UINT8,
+ BASE_HEX,VALS(local_dialpad_feedback),KEY_LOCAL_DIAL_PAD_FEED,NULL,HFILL}
+ },
+ { &hf_audio_source_descr,
+ {"Source Desription Item","unistim.source.desc.item",FT_UINT8,
+ BASE_HEX,VALS(source_descriptions),AUDIO_SOURCE_DESCRIPTION,NULL,HFILL}
+ },
+ { &hf_audio_sdes_rtcp_bucket,
+ {"RTCP Bucket Id","unistim.sdes.rtcp.bucket",FT_UINT8,
+ BASE_HEX,NULL,AUDIO_SDES_RTCP_BUCKET,NULL,HFILL}
+ },
+ { &hf_audio_desired_jitter,
+ {"Desired Jitter","unistim.audio.desired.jitter",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_high_water_mark,
+ {"Threshold of audio frames where jitter buffer removes frames","unistim.high.water.mark",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_early_packet_resync_thresh,
+ {"Threshold in x/8000 sec where packets are too early","unistim.early.packet.thresh",FT_UINT32,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_late_packet_resync_thresh,
+ {"Threshold in x/8000 sec where packets are too late","unistim.late.packet.thresh",FT_UINT32,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_resolve_phone_port,
+ {"Resolve Phone Port","unistim.resolve.phone.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_far_end_echo_port,
+ {"Resolve Far End Port","unistim.resolve.far.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_far_end_ip_address,
+ {"Resolve Far End IP","unistim.resolve.far.ip",FT_IPv4,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_nat_port,
+ {"NAT Port","unistim.audio.nat.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_nat_ip_address,
+ {"NAT IP Address","unistim.audio.nat.ip",FT_IPv4,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_direction_code,
+ {"Stream Direction Code","unistim.audio.direction.codes",FT_UINT8,
+ BASE_HEX,VALS(direction_codes),AUDIO_DIRECTION_CODE,NULL,HFILL}
+ },
+ { &hf_audio_hf_support,
+ {"Handsfree supported","unistim.handsfree.support",FT_BOOLEAN,
+ 8,NULL,AUDIO_HF_SUPPORT,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_max,
+ {"Max Volume","unistim.max.vol",FT_BOOLEAN,
+ 8,TFS(&opt_rpt_enable_max_tone_vol),AUDIO_ENABLED_MAX_TONE,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_adj_vol,
+ {"Volume Adjustments","unistim.audio.volume.adj",FT_BOOLEAN,
+ 8,TFS(&opt_rpt_adjust_volume),AUDIO_ENABLED_ADJ_VOL,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_auto_adj_vol,
+ {"Auto Adjust RX Volume","unistim.auto.adj.rx.vol",FT_BOOLEAN,
+ 8,TFS(&opt_rpt_automatic_adjustable_rx_volume_report),
+ AUDIO_AUTO_ADJ_RX_REP,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_hs_on_air,
+ {"HS On Air","unistim.audio.hs.on.air",FT_BOOLEAN,
+ 8,TFS(&opt_rpths_on_air_feature),AUDIO_HS_ON_AIR_FEATURE,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_hd_on_air,
+ {"HD On Air","unistim.audio.hd.on.air",FT_BOOLEAN,
+ 8,TFS(&opt_rpt_hd_on_air_feature),AUDIO_HD_ON_AIR_FEATURE,NULL,HFILL}
+ },
+ { &hf_audio_opt_rpt_noise_squelch,
+ {"Automatic Squelch","unistim.auto.noise.squelch",FT_BOOLEAN,
+ 8,TFS(&opt_rpt_noise_sqlch_disable),AUDIO_NOISE_SQUELCH_DIS,NULL,HFILL}
+ },
+ { &hf_audio_rx_vol_apb_rpt,
+ {"APB Volume Report","unistim.apb.volume.rpt",FT_UINT8,
+ BASE_HEX,VALS(volume_rpt_apbs),AUDIO_APB_VOL_RPT,NULL,HFILL}
+ },
+ { &hf_audio_rx_vol_vol_up,
+ {"Volume Up","unistim.audio.volume.up",FT_BOOLEAN,
+ 8,NULL,AUDIO_VOL_UP_RPT,NULL,HFILL}
+ },
+ { &hf_audio_rx_vol_vol_floor,
+ {"RX Volume at Floor","unistim.audio.rx.vol.floor",FT_BOOLEAN,
+ 8,NULL,AUDIO_VOL_FLR_RPT,NULL,HFILL}
+ },
+ { &hf_audio_rx_vol_vol_ceiling,
+ {"RX Volume at Ceiling","unistim.audio.rx.vol.ceiling",FT_BOOLEAN,
+ 8,NULL,AUDIO_VOL_CEIL_RPT,NULL,HFILL}
+ },
+ { &hf_audio_current_adj_vol_id,
+ {"Current APB Volume Report","unistim.current.volume.rpt",FT_UINT8,
+ BASE_HEX,VALS(volume_rpt_apbs),AUDIO_APB_VOL_RPT,NULL,HFILL}
+ },
+ { &hf_audio_current_rx_level,
+ {"Current RX Volume Level","unistim.current.rx.vol.level",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_current_rx_range,
+ {"Current RX Volume Range","unistim.current.rx.vol.range",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_cadence_select,
+ {"Alerting Cadence Select","unistim.alert.cad.sel",FT_UINT8,
+ BASE_HEX,NULL,AUDIO_ALERT_CADENCE_SEL,NULL,HFILL}
+ },
+ { &hf_audio_warbler_select,
+ {"Alerting Warbler Select","unistim.alert.warb.select",FT_UINT8,
+ BASE_HEX,NULL,AUDIO_ALERT_WARBLER_SEL,NULL,HFILL}
+ },
+ { &hf_audio_open_stream_rpt,
+ {"Open Stream Report","unistim.open.audio.stream.rpt",FT_UINT8,
+ BASE_HEX,VALS(stream_result),0x00,NULL,HFILL}
+ },
+ { &hf_audio_sdes_rpt_source_desc,
+ {"Report Source Description","unistim.rpt.src.desc",FT_UINT8,
+ BASE_HEX,VALS(source_descipts),AUDIO_SDES_INFO_RPT_DESC,NULL,HFILL}
+ },
+ { &hf_audio_sdes_rpt_buk_id,
+ {"Report RTCP Bucket ID","unistim.rpt.rtcp.buk.id",FT_UINT8,
+ BASE_HEX,NULL,AUDIO_SDES_INFO_RPT_BUK,NULL,HFILL}
+ },
+ { &hf_audio_phone_port,
+ {"Phone Listen Port","unistim.phone.listen.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_phone_ip,
+ {"Phone Listen Address","unistim.phone.listen.address",FT_IPv4,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_phone_add_len,
+ {"Phone Address Length","unistim.phone.address.len",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_nat_listen_port,
+ {"NAT Listen Port","unistim.nat.listen.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_nat_ip,
+ {"NAT Listen Address","unistim.nat.listen.address",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_nat_add_len,
+ {"NAT Address Length","unistim.nat.address.len",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_audio_stream_direction_code,
+ {"Audio Stream Direction","unistim.audio.stream.direction",FT_UINT8,
+ BASE_HEX,VALS(stream_direction_codes),AUDIO_STREAM_DIRECTION,NULL,HFILL}
+ },
+ { &hf_audio_stream_state,
+ {"Audio Stream State","unistim.audio.stream.state",FT_BOOLEAN,
+ 8,TFS(&stream_states),AUDIO_STREAM_STATE,NULL,HFILL}
+ },
+ { &hf_audio_transducer_list_length,
+ {"Transducer List Length","unistim.trans.list.len",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_file_xfer_mode,
+ {"File Transfer Mode","unistim.net.file.xfer.mode",FT_UINT8,
+ BASE_HEX,VALS(file_xfer_modes),NETWORK_FILE_XFER_MODE,NULL,HFILL}
+ },
+ { &hf_net_force_download ,
+ {"Force Download","unistim.net.force.download",FT_BOOLEAN,
+ 8,NULL,NETWORK_FORCE_DLOAD,NULL,HFILL}
+ },
+ { &hf_net_use_file_server_port,
+ {"Use Custom Server Port","unistim.net.use.server.port",FT_BOOLEAN,
+ 8,NULL,NETWORK_USE_FSERV_PORT,NULL,HFILL}
+ },
+ { &hf_net_use_local_port,
+ {"Use Custom Local Port","unistim.net.use.local.port",FT_BOOLEAN,
+ 8,NULL,NETWORK_USE_LOCAL_PORT,NULL,HFILL}
+ },
+ { &hf_net_file_server_port,
+ {"File Server Port","unistim.net.file.server.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_local_port,
+ {"Local XFer Port","unistim.net.local.xfer.port",FT_UINT16,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_net_file_server_address,
+ {"File Server IP Address","unistim.net.file.server.address",FT_IPv4,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_admin_command,
+ {"Admin Command","unistim.key.icon.admin.cmd",FT_UINT8,
+ BASE_HEX,VALS(admin_commands),KEY_ADMIN_CMD,NULL,HFILL}
+ },
+ { &hf_keys_logical_icon_id,
+ {"Logical Icon ID","unistim.keys.logical.icon.id",FT_UINT16,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_repeat_timer_one,
+ {"Key Repeat Timer 1 Value","unistim.keys.repeat.time.one",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_repeat_timer_two,
+ {"Key Repeat Timer 2 Value","unistim.keys.repeat.time.two",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_led_id,
+ {"Led ID","unistim.keys.led.id",FT_UINT8,
+ BASE_HEX,VALS(keys_led_ids),0x00,NULL,HFILL}
+ },
+ { &hf_keys_phone_icon_id,
+ {"Phone Icon ID","unistim.keys.phone.icon.id",FT_UINT8,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_cadence_on_time,
+ {"Indicator Cadence On Time","unistim.keys.cadence.on.time",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_cadence_off_time,
+ {"Indicator Cadence Off Time","unistim.keys.cadence.off.time",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_keys_user_activity_timeout,
+ {"User Activity Timeout Value","unistim.keys.user.timeout.value",FT_UINT8,
+ BASE_DEC,NULL,0x00,NULL,HFILL}
+ },
+/****LAST****/
+ { &hf_generic_string,
+ {"DATA","unistim.generic.data",FT_STRING,
+ BASE_NONE,NULL,0x00,NULL,HFILL}
+ },
+ { &hf_generic_data,
+ {"DATA","unistim.generic.data",FT_BYTES,
+ BASE_HEX,NULL,0x00,NULL,HFILL}
+ }
+};
+
+#endif
diff --git a/plugins/unistim/key.h b/plugins/unistim/key.h
new file mode 100644
index 0000000000..87b700a201
--- /dev/null
+++ b/plugins/unistim/key.h
@@ -0,0 +1,166 @@
+/* key.h
+ * header field declarations, value_string def and true_false_string
+ * definitions for key manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_KEY_H
+#define UNISTIM_KEY_H
+
+
+static int hf_key_icon_id=-1;
+static int hf_key_led_cadence=-1;
+static int hf_key_led_id=-1;
+static int hf_key_programmable_keys=-1;
+static int hf_keys_soft_keys=-1;
+static int hf_keys_hd_key=-1;
+static int hf_keys_mute_key=-1;
+static int hf_keys_quit_key=-1;
+static int hf_keys_copy_key=-1;
+static int hf_keys_mwi_key=-1;
+static int hf_keys_num_nav_keys=-1;
+static int hf_keys_num_conspic_keys=-1;
+static int hf_keys_send_key_rel=-1;
+static int hf_keys_enable_vol=-1;
+static int hf_keys_conspic_prog_key=-1;
+static int hf_keys_acd_super_control=-1;
+static int hf_keys_local_dial_feedback=-1;
+static int hf_keys_admin_command=-1;
+static int hf_keys_logical_icon_id=-1;
+static int hf_keys_repeat_timer_one=-1;
+static int hf_keys_repeat_timer_two=-1;
+static int hf_keys_led_id=-1;
+static int hf_keys_phone_icon_id=-1;
+static int hf_keys_cadence_on_time=-1;
+static int hf_keys_cadence_off_time=-1;
+static int hf_keys_user_activity_timeout=-1;
+
+static const value_string keys_led_ids[]={
+ {0x00,"Message Waiting LED"},
+ {0x01,"Handsfree or Supervisor Access* LED"},
+ {0x02,"Headset LED"},
+ {0x03,"Mute LED"},
+ {0x07,"Query all LEDs"},
+ {0,NULL}
+};
+
+
+static const value_string admin_commands[]={
+ {0x00,"Global NIL mapping"},
+ {0x01,"One-to-one mapping"},
+ {0x02,"Single mapping"},
+ {0x03,"RESERVED"},
+ {0,NULL}
+};
+
+static const value_string key_switch_msgs[]={
+ {0x00,"LED Update"},
+ {0x01,"Query Hookswitch"},
+ {0x02,"User Activity Timer Stop"},
+ {0x03,"User Activity Timer Start"},
+ {0x04,"Downloadable Free Form Icon Access (Hardcoded)"},
+ {0x05,"Downloadable Free Form Icon Access (Downloadable)"},
+ {0x06,"Query Key/Indicator Manager"},
+ {0x07,"Key/Indicator Manager Options"},
+ {0x08,"Logical Icon Mapping"},
+ {0x09,"Key Repeat Timer Download"},
+ {0x0a,"Query LED State"},
+ {0x0b,"Query Phone Icon State"},
+ {0x0c,"Indicator Cadence Download"},
+ {0x0d,"User Activity Timer Download"},
+ {0x0e,"Free Form Icon Download"},
+ {0x0f,"Phone Icon Update"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string key_phone_msgs[]={
+ {0x00,"Key Event"},
+ {0x01,"LED Status Report"},
+ {0x03,"On Hook"},
+ {0x04,"Off Hook"},
+ {0x05,"User Activity Timer Expired"},
+ {0x06,"Hookswitch State (on hook)"},
+ {0x07,"Hookswitch State (off hook)"},
+ {0x08,"Key/Indicator Manager Attributes Info"},
+ {0x09,"Key/Indicator Manager Options Report"},
+ {0x0a,"Phone Icon Status Report"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+
+
+static const true_false_string key_release={
+ "The Key code will be sent when a valid key release occurs",
+ "No command will be sent when a key is released"
+};
+static const true_false_string enable_vol={
+ "Volume key depression will be sent",
+ "Volume Key depression will not be sent"
+};
+static const true_false_string conspic_prog={
+ "Forces the keycode associated with conspicuous key0 to be the same as progkey0",
+ "Conspicuous value key 0 and programmable key 0 have different keycodes"
+};
+static const true_false_string acd_supervisor={
+ "ACD supervisor path and indicator controlled by the Switch",
+ "ACD supervisor path and indicator controlled by the Phone"
+};
+
+static const value_string local_dialpad_feedback[]={
+ {0x00,"No tone feedback provided when a dial pad key is depressed"},
+ {0x01,"Short 'click' provided when a dial pad key is depressed"},
+ {0x02,"Corresponding DTMF tone provided when a dial pad key is depressed"},
+ {0x03,"Reserved"},
+ {0,NULL}
+};
+
+static const value_string number_nav_keys[]={
+ {0x00,"no navigation keys"},
+ {0x01,"two navigation keys"},
+ {0x02,"four navigation keys"},
+ {0x03,"not available"},
+ {0,NULL}
+};
+
+static const value_string led_ids[]={
+ {0x00,"Message Waiting LED"},
+ {0x01,"Handsfree or Supervisor Access* LED"},
+ {0x02,"Headset LED"},
+ {0x03,"Mute LED"},
+ {0,NULL}
+};
+
+static const value_string led_cadences[]={
+ {0x00,"Off"},
+ {0x01,"On"},
+ {0x02,"Flash"},
+ {0x03,"Flicker"},
+ {0x04,""},
+ {0x05,""},
+ {0x06,"Blink"},
+ {0x07,"Downloadable cadence"},
+ {0,NULL}
+};
+
+
+#endif
diff --git a/plugins/unistim/moduleinfo.h b/plugins/unistim/moduleinfo.h
new file mode 100644
index 0000000000..b19e6758b1
--- /dev/null
+++ b/plugins/unistim/moduleinfo.h
@@ -0,0 +1,16 @@
+/* Included *after* config.h, in order to re-define these macros */
+
+#ifdef PACKAGE
+#undef PACKAGE
+#endif
+
+/* Name of package */
+#define PACKAGE "unistim"
+
+
+#ifdef VERSION
+#undef VERSION
+#endif
+
+/* Version number of package */
+#define VERSION "0.0.2"
diff --git a/plugins/unistim/moduleinfo.nmake b/plugins/unistim/moduleinfo.nmake
new file mode 100644
index 0000000000..cc06fe3a37
--- /dev/null
+++ b/plugins/unistim/moduleinfo.nmake
@@ -0,0 +1,28 @@
+#
+# $Id$
+#
+
+# The name
+PACKAGE=unistim
+
+# The version
+MODULE_VERSION_MAJOR=0
+MODULE_VERSION_MINOR=0
+MODULE_VERSION_MICRO=2
+MODULE_VERSION_EXTRA=0
+
+#
+# The RC_VERSION should be comma-separated, not dot-separated,
+# as per Graham Bloice's message in
+#
+# http://www.ethereal.com/lists/ethereal-dev/200303/msg00283.html
+#
+# "The RC_VERSION variable in config.nmake should be comma separated.
+# This allows the resources to be built correctly and the version
+# number to be correctly displayed in the explorer properties dialog
+# for the executables, and XP's tooltip, rather than 0.0.0.0."
+#
+
+MODULE_VERSION=$(MODULE_VERSION_MAJOR).$(MODULE_VERSION_MINOR).$(MODULE_VERSION_MICRO).$(MODULE_VERSION_EXTRA)
+RC_MODULE_VERSION=$(MODULE_VERSION_MAJOR),$(MODULE_VERSION_MINOR),$(MODULE_VERSION_MICRO),$(MODULE_VERSION_EXTRA)
+
diff --git a/plugins/unistim/network.h b/plugins/unistim/network.h
new file mode 100644
index 0000000000..b44bf45138
--- /dev/null
+++ b/plugins/unistim/network.h
@@ -0,0 +1,233 @@
+/* network.h
+ * header field declarations, value_string def and true_false_string
+ * definitions for network manager messages
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef UNISTIM_NETWORK_H
+#define UNISTIM_NETWORK_H
+
+
+static int hf_net_diag_flag=-1;
+static int hf_net_managers_flag=-1;
+static int hf_net_attributes_flag=-1;
+static int hf_net_serv_info_flag=-1;
+static int hf_net_options_flag=-1;
+static int hf_net_sanity_flag=-1;
+static int hf_net_enable_diag=-1;
+static int hf_net_enable_rudp=-1;
+static int hf_net_server_id=-1;
+static int hf_net_server_port=-1;
+static int hf_net_server_action=-1;
+static int hf_net_server_retry_count=-1;
+static int hf_net_server_failover_id=-1;
+static int hf_net_server_ip_address=-1;
+static int hf_net_server_time_out=-1;
+static int hf_net_server_config_element=-1;
+static int hf_net_server_recovery_time_low=-1;
+static int hf_net_server_recovery_time_high=-1;
+static int hf_net_phone_rx_ovr_flag=-1;
+static int hf_net_phone_tx_ovr_flag=-1;
+static int hf_net_phone_rx_empty_flag=-1;
+static int hf_net_phone_invalid_msg_flag=-1;
+static int hf_net_phone_eeprom_insane_flag=-1;
+static int hf_net_phone_eeprom_unsafe_flag=-1;
+static int hf_net_phone_diag=-1;
+static int hf_net_phone_rudp=-1;
+
+static int hf_net_phone_primary_server_id=-1;
+static int hf_net_phone_server_port=-1;
+static int hf_net_phone_server_action=-1;
+static int hf_net_phone_server_retry_count=-1;
+static int hf_net_phone_server_failover_id=-1;
+static int hf_net_phone_server_ip=-1;
+static int hf_net_file_xfer_mode =-1;
+static int hf_net_force_download =-1;
+static int hf_net_use_file_server_port =-1;
+static int hf_net_use_local_port=-1;
+static int hf_net_file_server_port=-1;
+static int hf_net_local_port=-1;
+static int hf_net_file_server_address=-1;
+
+static const value_string file_xfer_modes[]={
+ {0x00,"TFTP"},
+ {0x01,"TFTP with active UNIStim channel"},
+ {0x02,"UFTP"},
+ {0x03,"UFTP with active UNIStim channel"},
+ {0x04,"Future Use"},
+ {0,NULL}
+};
+
+static const value_string action_bytes[]={
+ {0x00,"Reserved"},
+ {0x01,"Establish Unistim connection with Server"},
+ {0x02,"Not Assigned"},
+ {0,NULL}
+};
+
+static int hf_key_code=-1;
+static int hf_key_command=-1;
+
+static const value_string key_cmds[]={
+ {0x00,"Key Released"},
+ {0x01,"Key Depressed"},
+ {0x02,"Key Repeated"},
+ {0,NULL}
+};
+
+static const value_string key_names[]={
+
+ {0x00,"Dial Pad 0"},
+ {0x01,"Dial Pad 1"},
+ {0x02,"Dial Pad 2"},
+ {0x03,"Dial Pad 3"},
+ {0x04,"Dial Pad 4"},
+ {0x05,"Dial Pad 5"},
+ {0x06,"Dial Pad 6"},
+ {0x07,"Dial Pad 7"},
+ {0x08,"Dial Pad 8"},
+ {0x09,"Dial Pad 9"},
+ {0x0a,"Dial Pad *"},
+ {0x0b,"Dial Pad #"},
+ {0x0c,"Navigation Up"},
+ {0x0d,"Navigation Down"},
+ {0x0e,"Navigation Right"},
+ {0x0f,"Navigation Left"},
+ {0x10,"Quit"},
+ {0x11,"Copy"},
+ {0x12,"Volume Up"},
+ {0x13,"Volume Down"},
+ {0x14,"Soft Key 0"},
+ {0x15,"Soft Key 1"},
+ {0x16,"Soft Key 2"},
+ {0x17,"Soft Key 3"},
+ {0x1a,"Supervisor Access Key"},
+ {0x1b,"Hold"},
+ {0x1c,"Release"},
+ {0x1d,"Mute"},
+ {0x1e,"Headset"},
+ {0x1f,"Handsfree"},
+ {0x20,"Prog Key 0"},
+ {0x21,"Prog Key 1"},
+ {0x22,"Prog Key 2"},
+ {0x23,"Prog Key 3"},
+ {0x24,"Prog Key 4"},
+ {0x25,"Prog Key 5"},
+ {0x26,"Prog Key 6"},
+ {0x27,"Prog Key 7"},
+ {0x28,"Prog Key 8"},
+ {0x29,"Prog Key 9"},
+ {0x2a,"Prog Key 10"},
+ {0x2b,"Prog Key 11"},
+ {0x2c,"Prog Key 12"},
+ {0x2d,"Prog Key 13"},
+ {0x2e,"Prog Key 14"},
+ {0x2f,"Prog Key 15"},
+ {0x30,"Prog Key 16"},
+ {0x31,"Prog Key 17"},
+ {0x32,"Prog Key 18"},
+ {0x33,"Prog Key 19"},
+ {0x34,"Prog Key 20"},
+ {0x35,"Prog Key 21"},
+ {0x36,"Prog Key 22"},
+ {0x37,"Prog Key 23"},
+ {0x38,"Prog Key 24"},
+ {0x3b,"Conspicuous Key 0"},
+ {0x3c,"Conspicuous Key 1"},
+ {0x3d,"Conspicuous Key 2"},
+ {0x3e,"Conspicuous Key 3"},
+ {0x3f,"Conspicuous Key 4"},
+ {0,NULL}
+};
+static const value_string network_switch_msgs[]={
+ {0x02,"Soft Reset"},
+ {0x03,"Hard Reset"},
+ {0x04,"Query Network Manager"},
+ {0x05,"Network Manager Options"},
+ {0x06,"QoS Configuration"},
+ {0x09,"Set RTCP Source Description Item"},
+ {0x0b,"Download Server Information"},
+ {0x0c,"Server Switch"},
+ {0x0d,"Query Network Configuration Element"},
+ {0x0e,"Download Software Upgrade"},
+ {0x0f,"Set RTCP Report Interval"},
+ {0x10,"Set Primary Server"},
+ {0x12,"Reset Watchdog"},
+ {0x13,"Set Recovery Procedure Time Interval"},
+ {0x14,"Transport Reliability Layer Parameters Download"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string network_phone_msgs[]={
+ {0x00,"Soft Reset Ack"},
+ {0x01,"Sanity OK"},
+ {0x02,"Network Manager Attributes Info"},
+ {0x03,"Network Manager Diagnostic Info"},
+ {0x04,"Manager IDs"},
+ {0x05,"Network Manager Options Report"},
+ {0x08,"Resume Connection with Server"},
+ {0x09,"Suspend Connection with Server"},
+ {0x0b,"Network Configuration Element Report"},
+ {0x0c,"Server Information Report"},
+ {0xff,"Reserved"},
+ {0,NULL}
+};
+static const value_string network_server_id[]={
+ {0x00,"First Server"},
+ {0x01,"Second Server"},
+ {0x02,"Third Server"},
+ {0x03,"Fourth Server"},
+ {0x04,"Fifth Server"},
+ {0x05,"Sixth Server"},
+ {0x06,"Seventh Server"},
+ {0x07,"Eighth Server"},
+ {0x08,"Ninth Server"},
+ {0x09,"Tenth Server"},
+ {0,NULL}
+};
+static const value_string server_action[]={
+ {0x00,"Reserved"},
+ {0x01,"Establish UNISTIM Connection with Server"},
+ {0,NULL}
+};
+static const value_string network_elements[]={
+ {0x00,"IT IP Address"},
+ {0x01,"IT Netmask"},
+ {0x02,"Default Gateway IP Address"},
+ {0x03,"First Server IP Address"},
+ {0x04,"First Server Port Number"},
+ {0x05,"Second Server IP Address"},
+ {0x06,"Second Server Port Number"},
+ {0x07,"First Server Action"},
+ {0x08,"First Server Retry Count"},
+ {0x09,"Boot Modea"},
+ {0x0b,"Second Server Action"},
+ {0x0c,"Second Server Retry Count"},
+ {0x0e,"8-byte User PIN"},
+ {0,NULL}
+};
+
+
+
+#endif
+
diff --git a/plugins/unistim/packet-unistim.c b/plugins/unistim/packet-unistim.c
new file mode 100644
index 0000000000..31d921f26a
--- /dev/null
+++ b/plugins/unistim/packet-unistim.c
@@ -0,0 +1,2353 @@
+/* packet-unistim.c
+ * Routines for unistim packet dissection
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/emem.h>
+#include <string.h>
+#include "packet-unistim.h"
+#include "header_field.h"
+
+
+static int global_unistim_port = 5000;
+
+void
+proto_register_unistim(void){
+
+/* Setup protocol subtree array */
+
+ static gint *ett[] = {
+ &ett_unistim
+ };
+
+ if(proto_unistim==-1){
+ proto_unistim=proto_register_protocol(
+ "UNISTIM Protocol",
+ "UNISTIM",
+ "unistim");
+ }
+
+ proto_register_subtree_array(ett,array_length(ett));
+ proto_register_field_array(proto_unistim,hf,array_length(hf));
+}
+
+void
+proto_reg_handoff_unistim(void) {
+ static gboolean initialized=FALSE;
+ if(initialized!=TRUE){
+ unistim_handle=create_dissector_handle(dissect_unistim,proto_unistim);
+ dissector_add("udp.port",global_unistim_port,unistim_handle);
+ initialized=TRUE;
+ }
+}
+
+
+static void
+dissect_unistim(tvbuff_t *tvb,packet_info *pinfo,proto_tree *tree){
+ gint offset=0;
+ proto_item *ti= NULL;
+ proto_item *ti1= NULL;
+ proto_tree *overall_unistim_tree = NULL;
+ proto_tree *rudpm_tree=NULL;
+ if(check_col(pinfo->cinfo,COL_PROTOCOL))
+ col_set_str(pinfo->cinfo,COL_PROTOCOL,"UNISTIM");
+ /* Clear out stuff in the info column */
+ if (check_col(pinfo->cinfo,COL_INFO)) {
+ col_clear(pinfo->cinfo,COL_INFO);
+ }
+ ti = proto_tree_add_item(tree,proto_unistim,tvb,offset,-1,FALSE);
+ overall_unistim_tree = proto_item_add_subtree(ti,ett_unistim);
+ ti1=proto_tree_add_text(overall_unistim_tree,tvb,offset,5,"Reliable UDP");
+ rudpm_tree=proto_item_add_subtree(ti1,ett_unistim);
+ proto_tree_add_item(rudpm_tree,hf_unistim_seq_nu,tvb,offset,4,FALSE);
+ offset+=4;
+
+ proto_tree_add_item(rudpm_tree,hf_unistim_packet_type,tvb,offset,1,FALSE);
+ switch(tvb_get_guint8(tvb,offset)) {
+ case 0x00:
+ /*NAK*/
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_fstr(pinfo->cinfo, COL_INFO, "NAK for seq - 0x%X",
+ tvb_get_ntohl(tvb, offset-4));
+ break;
+ case 0x01:
+ /*ACK*/
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_fstr(pinfo->cinfo, COL_INFO, "ACK for seq - 0x%X",
+ tvb_get_ntohl(tvb, offset-4));
+ break;
+ case 0x02:
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Payload seq - 0x%X",
+ tvb_get_ntohl(tvb, offset-4));
+ if(tree){ /*we are being asked for details*/
+ offset+=1;
+ dissect_payload(overall_unistim_tree,tvb,offset);
+ }
+ break;
+ default:
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown seq - 0x%X",
+ tvb_get_ntohl(tvb, offset-4));
+ break;
+ }
+}
+
+static void
+dissect_payload(proto_tree *overall_unistim_tree,tvbuff_t *tvb, gint offset){
+ proto_item *ti;
+ proto_tree *unistim_tree;
+ guint payload_proto=tvb_get_guint8(tvb,offset);
+ ti=proto_tree_add_item(overall_unistim_tree,hf_unistim_payload,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ unistim_tree=proto_item_add_subtree(ti,ett_unistim);
+ switch(payload_proto){
+ case 0x00:
+ /*NULL PROTO - NOTHING LEFT TO DO*/
+ return;
+ case 0x01:
+ /*UNISTIM only so no term id but further payload work*/
+ break;
+ case 0x02:
+ /*UNISTIM with term id*/
+ proto_tree_add_item(unistim_tree,hf_terminal_id,tvb,offset,4,FALSE);
+ offset+=4;
+ break;
+ case 0xff:
+ /*TODO flesh this out probably only for init*/
+ break;
+ }
+
+ dissect_message(unistim_tree,tvb,offset);
+}
+
+static void
+dissect_message(proto_tree *unistim_tree,tvbuff_t *tvb,gint offset){
+ guint address;
+ guint next_byte;
+ guint msg_len;
+ proto_item *ti;
+ proto_tree *msg_tree;
+
+ ti = proto_tree_add_text(unistim_tree,tvb,offset,-1,"Unistim CMD");
+ msg_tree = proto_item_add_subtree(ti,ett_unistim);
+ address=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_unistim_cmd_add,tvb,offset,1,FALSE);
+ offset+=1;
+ msg_len=tvb_get_guint8(tvb,offset);
+ proto_item_set_len(ti, msg_len);
+ proto_tree_add_item(msg_tree,hf_unistim_len,tvb,offset,1,FALSE);
+ offset+=1;
+ /*from switch*/
+ switch(address){
+ case 0x00:
+ /*Nothing*/
+ break;
+ case 0x11:
+ /*Broadcast Manager Switch*/
+ dissect_broadcast_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x16:
+ /*Audio Manager Switch*/
+ dissect_audio_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x17:
+ /*Display Manager Switch*/
+ dissect_display_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x19:
+ /*Key Indicator Manager Switch*/
+ dissect_key_indicator_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x1a:
+ /*Basic Manager Switch*/
+ dissect_basic_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x1e:
+ /*Network Manager Switch*/
+ dissect_network_switch(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x91:
+ /*Broadcast Manager phone*/
+ dissect_broadcast_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x96:
+ /*Audio Manager phone*/
+ dissect_audio_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x97:
+ /*Display Manager phone*/
+ dissect_display_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x99:
+ /*Key/Indicator Manager phone*/
+ dissect_key_indicator_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x9a:
+ /*Basic Manager phone*/
+ dissect_basic_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ case 0x9e:
+ /*Network Manager Switch*/
+ dissect_network_phone(msg_tree,unistim_tree,tvb,offset,msg_len-2);
+ break;
+ default:
+ /*See some undocumented messages. Don't want to miss the ones we understand*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len-2,FALSE);
+ offset+=(msg_len-2);
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+ }
+}
+
+
+ /*DONE*/
+static void
+dissect_basic_phone(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset, guint msg_len){
+ guint basic_cmd;
+ guint next_byte;
+ proto_item *ti;
+
+ basic_cmd=tvb_get_guint8(tvb,offset);
+ ti=proto_tree_add_item(msg_tree,hf_basic_phone_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(basic_cmd){
+
+ case 0x00:
+ /*Basic Manager Attributes Info*/
+ proto_tree_add_item(msg_tree,hf_basic_phone_eeprom_stat_cksum,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_basic_phone_eeprom_dynam,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_basic_phone_eeprom_net_config_cksum,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x01:
+ /*Basic Manager Options Report*/
+ proto_tree_add_item(msg_tree,hf_basic_switch_options_secure,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x02:
+ /*Firmware Version*/
+ proto_tree_add_item(msg_tree,hf_basic_phone_fw_ver,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x03:
+ /*IT Type*/
+ proto_tree_add_item(msg_tree,hf_basic_it_type,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x07:
+ /*Hardware ID*/
+ proto_tree_add_item(msg_tree,hf_basic_phone_hw_id,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x08:
+ /*Product Engineering Code*/
+ proto_tree_add_item(msg_tree,hf_basic_prod_eng_code,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x09:
+ /*Grey Market Info*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0a:
+ /*Encapsulate Command*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x11:
+ /*Phone Ethernet address*/
+ proto_tree_add_item(msg_tree,hf_basic_ether_address,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0b:
+ /*not in pdf but get them*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+ /*DONE*/
+static void
+dissect_basic_switch(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len){
+ guint basic_cmd;
+ guint next_byte;
+ basic_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_basic_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(basic_cmd){
+ case 0x01:
+ /*Query Basic Manager*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_attr,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_opts,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_fw,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_hw_id,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_it_type,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_prod_eng_code,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_basic_switch_query_gray_mkt_info,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x02:
+ /*Basic Manager Options*/
+ proto_tree_add_item(msg_tree,hf_basic_switch_options_secure,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x06:
+ /*EEprom Write*/
+ proto_tree_add_item(msg_tree,hf_basic_switch_element_id,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_basic_switch_eeprom_data,
+ tvb,offset,msg_len,FALSE);
+ offset+=1;
+ break;
+ case 0x07:
+ /*Assign Terminal ID*/
+ proto_tree_add_item(msg_tree,hf_basic_switch_terminal_id,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x08:
+ /*Encapsulate Command*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0f:
+ /*showing up in captures but not in pdf*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+
+ /*DONE*/
+static void
+dissect_broadcast_switch(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset, guint msg_len){
+ guint bcast_cmd;
+ guint next_byte;
+ guint year,month,day,hour,minute,second;
+ proto_item *date_label;
+ proto_item *time_label;
+ proto_tree *date_tree;
+ proto_tree *time_tree;
+ bcast_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_broadcast_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;
+ switch(bcast_cmd){
+ case 0x00:
+ /*Accessory Sync Update - len=3 */
+ break;
+ case 0x01:
+ /*Logical Icon Update*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_state,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_cadence,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x02:
+ /*Time and Date Download*/
+ year=tvb_get_guint8(tvb,offset);
+ month=tvb_get_guint8(tvb,offset+1);
+ day=tvb_get_guint8(tvb,offset+2);
+ hour=tvb_get_guint8(tvb,offset+3);
+ minute=tvb_get_guint8(tvb,offset+4);
+ second=tvb_get_guint8(tvb,offset+5);
+ date_label=proto_tree_add_text(msg_tree,tvb,offset,3,
+ "Date %i/%i/%i",month,day,year%100);
+ date_tree=proto_item_add_subtree(date_label,ett_unistim);
+ proto_tree_add_item(date_tree,hf_broadcast_year,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(date_tree,hf_broadcast_month,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(date_tree,hf_broadcast_day,tvb,offset,1,FALSE);
+ offset+=1;
+
+ time_label=proto_tree_add_text(msg_tree,tvb,offset,3,
+ "Time %i:%i:%i",hour,minute,second);
+ time_tree=proto_item_add_subtree(time_label,ett_unistim);
+ proto_tree_add_item(time_tree,hf_broadcast_hour,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(time_tree,hf_broadcast_minute,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(time_tree,hf_broadcast_second,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x03:
+ /*Set Default Character Table Config *//* UGLY may work may not*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+ /*DONE Haven't seen any phone broadcasts, wouldn't expect to*/
+static void
+dissect_broadcast_phone(proto_tree *msg_tree, proto_tree *unistim_tree _U_,
+ tvbuff_t *tvb, gint offset,guint msg_len){
+
+ proto_tree_add_item(msg_tree,hf_generic_data, tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+}
+
+ /*DONE*/
+static void
+dissect_display_switch(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb, gint offset,guint msg_len){
+ guint clear_mask;
+ guint highlight_cmd;
+ guint time_date_mask;
+ guint display_cmd;
+ guint next_byte;
+ guint address_byte;
+ guint movement_byte;
+ proto_tree *address_tree;
+ proto_item *tmp_ti;
+ display_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_display_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+
+ switch(display_cmd){
+ case 0x01:
+ /*Restore Default Character Table Configuration length = 3*/
+ break;
+ case 0x04:
+ /*Arrow*/
+ proto_tree_add_item(msg_tree,hf_display_arrow,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x05:
+ /*Query Status Bar Icon*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x06:
+ /*Highlight Off length = 3*/
+ break;
+ case 0x07:
+ /*Highlight On length = 3*/
+ break;
+ case 0x09:
+ /*Restore Time and Date length = 3*/
+ break;
+ case 0x0a:
+ /*Clear Time and Date length = 3*/
+ break;
+ case 0x0b:
+ /*Call Duration Timer*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0c:
+ /*Query Display Manager*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0d:
+ /*Download Call Duration Timer Delay*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0e:
+ /*Disable Display Field*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0f:
+ /*Clear Field*/
+ clear_mask=tvb_get_guint8(tvb,offset);
+ /*need to know which paths to take*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_numeric,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_date,
+ tvb,offset,1,FALSE);
+
+ proto_tree_add_item(msg_tree,hf_display_clear_time,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_softkey,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_softkey_label,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if((clear_mask&DISPLAY_CLEAR_LINE)==DISPLAY_CLEAR_LINE){
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_1,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_2,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_3,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_4,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_5,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_6,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_7,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_line_8,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ if((clear_mask&DISPLAY_CLEAR_STATUS_BAR_ICON)==
+ DISPLAY_CLEAR_STATUS_BAR_ICON){
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_1,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_2,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_3,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_4,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_5,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_6,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_7,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_status_bar_icon_8,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ if((clear_mask&DISPLAY_CLEAR_SOFTKEY)==DISPLAY_CLEAR_SOFTKEY){
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_1,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_2,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_3,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_4,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_5,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_6,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_7,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_soft_key_8,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ if((clear_mask&DISPLAY_CLEAR_SOFTKEY_LABEL)==DISPLAY_CLEAR_SOFTKEY_LABEL){
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_sk_label_key_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_clear_all_slks,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x10:
+ /*Cursor Control*/
+ movement_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_move_cmd,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_blink,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if(msg_len==0){
+ /*turn cursor off*/
+ break;
+ }
+ if((movement_byte&0x01)==0x01){
+ address_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_numeric,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_soft_key,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)
+ proto_tree_add_item(msg_tree,
+ hf_display_write_address_softkey_id,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if(msg_len==0){
+ /*turn cursor off*/
+ break;
+ }
+ }
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_char_pos,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_address_line_number,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x12:
+ /*Display Scroll with Data (before)*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x13:
+ /*Display Scroll with Data (after)*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x14:
+ /*Status Bar Icon Update*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field, tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_icon_id,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_basic_bit_field, tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_state,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_cadence,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x15:
+ /*Month Labels Download*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x16:
+ /*Call Duration Timer Label Download*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x17:
+ /*Time and Date Format*/
+ time_date_mask=tvb_get_guint8(tvb,offset);
+ if((time_date_mask&DISPLAY_USE_TIME_FORMAT)==DISPLAY_USE_TIME_FORMAT){
+ proto_tree_add_item(msg_tree,hf_display_time_format,tvb,offset,1,FALSE);
+ }
+ if((time_date_mask&DISPLAY_USE_DATE_FORMAT)==DISPLAY_USE_DATE_FORMAT){
+ proto_tree_add_item(msg_tree,hf_display_date_format,tvb,offset,1,FALSE);
+ }
+ proto_tree_add_item(msg_tree,hf_display_use_time_format,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_use_date_format,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x18:
+ /*address|no control|no tag|no*/
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x19:
+ /*address|yes control|no tag|no*/
+ tmp_ti=proto_tree_add_text(msg_tree,tvb,offset,0,"Address");
+
+ address_tree=proto_item_add_subtree(tmp_ti,ett_unistim);
+ address_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(address_tree,hf_basic_bit_field,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_numeric,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_key,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_label,
+ tvb,offset,1,FALSE);
+
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_softkey_id,
+ tvb,offset,1,FALSE);
+ }
+ offset+=1;msg_len-=1;
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG){
+ proto_tree_add_item(address_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_char_pos,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)!=
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG){
+ offset+=1;msg_len-=1;
+ }
+ }
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)==
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_line_number,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ if(msg_len>0)
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x1a:
+ /*address|no control|yes tag|no*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_cursor_move,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_highlight,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ proto_tree_add_item(msg_tree,hf_generic_string,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x1b:
+ /*address|yes control|yes tag|no*/
+ tmp_ti=proto_tree_add_text(msg_tree,tvb,offset,0,"Address Data");
+ address_tree=proto_item_add_subtree(tmp_ti,ett_unistim);
+ address_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(address_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_numeric,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_soft_key,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_soft_label,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG){
+ proto_tree_add_item(address_tree,hf_display_write_address_softkey_id,
+ tvb,offset,1,FALSE);
+ offset+=1; msg_len-=1;
+ }
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_char_pos,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)!=
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG)
+ offset+=1;msg_len-=1;
+ }
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)==
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_line_number,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_cursor_move,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_highlight,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x1c:
+ /*address|no control|no tag|yes*/
+ proto_tree_add_item(msg_tree,hf_display_write_tag,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x1d:
+ /*address|yes control|no tag|yes*/
+ tmp_ti=proto_tree_add_text(msg_tree,tvb,offset,0,"Address Data");
+ address_tree=proto_item_add_subtree(tmp_ti,ett_unistim);
+ address_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(address_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_numeric,tvb,
+ offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_key,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_label,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_softkey_id,
+ tvb,offset,1,FALSE);
+ offset+=1; msg_len-=1;
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_char_pos,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)!=
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG)
+ offset+=1;msg_len-=1;
+ }
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)==
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG){
+ proto_tree_add_item(address_tree,hf_display_write_address_line_number,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x1e:
+ /*address|no control|yes tag|yes*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_cursor_move,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_highlight,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ proto_tree_add_item(msg_tree,hf_display_write_tag,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x1f:
+ /*address|yes control|yes tag|yes*/
+ tmp_ti=proto_tree_add_text(msg_tree,tvb,offset,0,"Address");
+ address_tree=proto_item_add_subtree(tmp_ti,ett_unistim);
+ address_byte=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(address_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_numeric,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_context,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_line,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_key,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(address_tree,hf_display_write_address_soft_label,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_KEY_FLAG)
+ proto_tree_add_item(address_tree,hf_display_write_address_softkey_id,
+ tvb,offset,1,FALSE);
+ offset+=1; msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_string,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)==
+ DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG){
+ proto_tree_add_item(address_tree,hf_display_write_address_char_pos,
+ tvb,offset,1,FALSE);
+ if((address_byte&DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)!=
+ DISPLAY_WRITE_ADDRESS_SOFT_LABEL_FLAG)
+ offset+=1;msg_len-=1;
+ }
+ if((address_byte&DISPLAY_WRITE_ADDRESS_LINE_FLAG)==
+ DISPLAY_WRITE_ADDRESS_LINE_FLAG){
+ proto_tree_add_item(address_tree,
+ hf_display_write_address_line_number,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_cursor_move,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_clear_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_left,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_shift_right,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_write_highlight,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_write_tag,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x20:
+ /*Context Info Bar Format*/
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_display_context_format,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_context_field,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x21:
+ /*Set Default Character Table Configuration VERY UGLY*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x22:
+ /*Special Character Download*/
+ proto_tree_add_item(msg_tree,hf_display_char_address,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x23:
+ /*Highlighted Field Definition*/
+ highlight_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_display_cursor_numeric,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_context ,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;proto_tree_add_item(msg_tree,hf_display_hlight_start,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_hlight_end,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if(msg_len==0)
+ break;
+ if((highlight_cmd&DISPLAY_CURSOR_LINE)==DISPLAY_CURSOR_LINE){
+ proto_tree_add_item(msg_tree,hf_display_cursor_char_pos,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x24:
+ /*Contrast*/
+ proto_tree_add_item(msg_tree,hf_display_contrast,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x25:
+ /*Caller Log Download*/
+ proto_tree_add_item(msg_tree,hf_broadcast_hour,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_broadcast_minute,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x30:
+ /*Layered Softkey Text Download*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_layer_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x31:
+ /*Layered Softkey Clear*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_layer_all_skeys,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_layer_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x32:
+ /*Set Visible Softkey Layer*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_layer_all_skeys,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_layer_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x33:
+ /*Layered Softkey Cadence Download*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_once_or_cyclic,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_display_layer_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_layer_duration,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x34:
+ /*Layered Softkey Cadencing On*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x35:
+ /*Layered Softkey Cadencing Off*/
+ proto_tree_add_item(msg_tree,hf_display_layer_skey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+ /*DONE*/
+static void
+dissect_display_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len){
+ guint display_cmd;
+ guint highlight_cmd;
+ guint next_byte;
+ display_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_display_phone_cmd,tvb,offset,1,FALSE);
+ offset+=1;
+ switch(display_cmd){
+ case 0x00:
+ /*Display Manager Attributes Info*/
+ proto_tree_add_item(msg_tree,hf_display_line_width,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_lines,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_softkey_width,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_softkeys,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_icon,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_softlabel_key_width,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_context_width,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_numeric_width,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_time_width,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_date_width,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_char_dload,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_freeform_icon_dload,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_icon_type,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_charsets,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+
+ break;
+ case 0x01:
+ /*Contrast Level Report*/
+ proto_tree_add_item(msg_tree,hf_display_contrast,tvb,offset,1,FALSE);
+
+ break;
+ case 0x02:
+ /*Cursor Location Report*/
+ proto_tree_add_item(msg_tree,hf_display_cursor_numeric,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_context ,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_cursor_char_pos,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x03:
+ /*Highlight Status On*/
+ highlight_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_display_cursor_numeric,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_context ,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_softkey_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;proto_tree_add_item(msg_tree,hf_display_hlight_start,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_display_hlight_end,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if((highlight_cmd&DISPLAY_CURSOR_LINE)==DISPLAY_CURSOR_LINE){
+ proto_tree_add_item(msg_tree,hf_display_cursor_char_pos,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_cursor_line_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x04:
+ /*Current Character Table Configuration Status VERY UGLY*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x05:
+ /*Default Character Table Configuration Status VERY UGLY*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x06:
+ /*Timer And Date Format Report*/
+ proto_tree_add_item(msg_tree,hf_display_time_format,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_display_date_format,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x07:
+ /*Status Bar Icon State Report*/
+ proto_tree_add_item(msg_tree,hf_icon_id,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_state,tvb,offset,msg_len,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_cadence,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0a:
+ /*Highlight Status Off length = 3*/
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+
+static void
+dissect_key_indicator_switch(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb, gint offset,guint msg_len){
+ guint key_cmd;
+ guint next_byte;
+ key_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_key_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(key_cmd){
+ case 0x00:
+ /*LED Update*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_key_led_cadence,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_key_led_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x01:
+ /*Query Hookswitch length = 3 */
+ break;
+ case 0x02:
+ /*User Activity Timer Stop length = 3*/
+ break;
+ case 0x03:
+ /*User Activity Timer Start length = 3*/
+ break;
+ case 0x04:
+ /*Downloadable Free Form Icon Access (Hardcoded) length of 3*/
+ break;
+ case 0x05:
+ /*Downloadable Free Form Icon Access (Downloadable) length of 3*/
+ break;
+ case 0x06:
+ /*Query Key/Indicator Manager*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x07:
+ /*Key/Indicator Manager Options*/
+ proto_tree_add_item(msg_tree,hf_keys_send_key_rel,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_enable_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_conspic_prog_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_acd_super_control,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_local_dial_feedback,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x08:
+ /*Logical Icon Mapping*/
+ proto_tree_add_item(msg_tree,hf_key_icon_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_admin_command,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_keys_logical_icon_id,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ break;
+ case 0x09:
+ /*Key Repeat Timer Download*/
+ proto_tree_add_item(msg_tree,hf_keys_repeat_timer_one,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_keys_repeat_timer_two,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0a:
+ /*Query LED State*/
+ proto_tree_add_item(msg_tree,hf_keys_led_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0b:
+ /*Query Phone Icon State*/
+ proto_tree_add_item(msg_tree,hf_keys_phone_icon_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0c:
+ /*Indicator Cadence Download*/
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_keys_cadence_on_time,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_keys_cadence_off_time,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x0d:
+ /*User Activity Timer Download*/
+ proto_tree_add_item(msg_tree,hf_keys_user_activity_timeout,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0e:
+ /*Free Form Icon Download*/
+ proto_tree_add_item(msg_tree,hf_key_icon_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0f:
+ /*Phone Icon Update*/
+ proto_tree_add_item(msg_tree,hf_key_icon_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_state,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_broadcast_icon_cadence,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0xff:
+ /*Reserved*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+/*DONE*/
+static void
+dissect_key_indicator_phone(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset, guint msg_len){
+ guint key_cmd;
+ guint next_byte;
+ key_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_key_phone_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(key_cmd){
+
+ case 0x00:
+ /*Key Event*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_key_code,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_key_command,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x01:
+ /*LED Status Report*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x03:
+ /*On Hook length = 3*/
+ break;
+ case 0x04:
+ /*Off Hook length = 3*/
+ break;
+ case 0x05:
+ /*User Activity Timer Expired length = 3*/
+ break;
+ case 0x06:
+ /*Hookswitch State (on hook) length = 3*/
+ break;
+ case 0x07:
+ /*Hookswitch State (off hook) length = 3*/
+ break;
+ case 0x08:
+ /*Key/Indicator Manager Attributes Info*/
+ proto_tree_add_item(msg_tree,hf_key_programmable_keys,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_soft_keys,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_keys_hd_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_mute_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_quit_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_copy_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_mwi_key,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_keys_num_nav_keys,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_num_conspic_keys,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+
+ break;
+ case 0x09:
+ /*Key/Indicator Manager Options Report*/
+ proto_tree_add_item(msg_tree,hf_keys_send_key_rel,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_enable_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_conspic_prog_key,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_acd_super_control,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_keys_local_dial_feedback,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0a:
+ /*Phone Icon Status Report*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+
+/*Done*/
+static void
+dissect_network_switch(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset, guint msg_len){
+ guint network_cmd;
+ guint next_byte;
+ network_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_network_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(network_cmd){
+ case 0x02:
+ /*Soft Reset done*/
+ break;
+ case 0x03:
+ /*Hard Reset done*/
+ break;
+ case 0x04:
+ /*Query Network Manager*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_diag_flag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_managers_flag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_attributes_flag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_serv_info_flag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_options_flag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_sanity_flag,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x05:
+ /*Network Manager Options*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_enable_diag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_enable_rudp,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x06:
+ /*QoS Configuration*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x09:
+ /*Set RTCP Source Description Item*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0b:
+ /*Download Server Information*/
+ proto_tree_add_item(msg_tree,hf_net_server_id,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_net_server_port,tvb,offset,2,FALSE);
+ offset+=2;
+ proto_tree_add_item(msg_tree,hf_net_server_action,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_net_server_retry_count,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_net_server_failover_id,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_net_server_ip_address,tvb,offset,4,FALSE);
+ offset+=4;
+ break;
+ case 0x0c:
+ /*Server Switch*/
+ proto_tree_add_item(msg_tree,hf_net_server_id,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x0d:
+ /*Query Network Configuration Element*/
+ proto_tree_add_item(msg_tree,hf_net_server_config_element,
+ tvb,offset-1,1,FALSE);
+ offset+=1;
+ break;
+ case 0x0e:
+ /*Download Software Upgrade*/
+ proto_tree_add_item(msg_tree,hf_net_file_xfer_mode,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_force_download,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_use_file_server_port,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_use_local_port,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_null_term_item(msg_tree,tvb,offset,msg_len,"Full Pathname :");
+ set_ascii_null_term_item(msg_tree,tvb,offset,msg_len,"File Identifier :");
+ proto_tree_add_item(msg_tree,hf_net_file_server_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_net_local_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_net_file_server_address,tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x0f:
+ /*Set RTCP Report Interval*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x10:
+ /*Set Primary Server*/
+ proto_tree_add_item(msg_tree,hf_net_server_id,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x12:
+ /*Reset Watchdog*/
+ proto_tree_add_item(msg_tree,hf_net_server_time_out,
+ tvb,offset,2,FALSE);
+ offset+=2;
+ break;
+ case 0x13:
+ /*Set Recovery Procedure Time Interval*/
+ proto_tree_add_item(msg_tree,hf_net_server_recovery_time_low,
+ tvb,offset,2,FALSE);
+ offset+=2;
+ proto_tree_add_item(msg_tree,hf_net_server_recovery_time_high,
+ tvb,offset,2,FALSE);
+ offset+=2;
+ break;
+ case 0x14:
+ /*Transport Reliability Layer Parameters Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0xff:
+ /*Reserved*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+/*DONE*/
+static void
+dissect_network_phone(proto_tree *msg_tree, proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset, guint msg_len){
+ guint network_cmd;
+ guint next_byte;
+ proto_tree *server_tree;
+ proto_item *server;
+ guint i;
+ guint16 port_num;
+ network_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_network_phone_cmd,tvb,offset,1,FALSE);
+ offset+=1;
+ switch(network_cmd){
+
+ case 0x00:
+ /*Soft Reset Ack done length = 3*/
+ break;
+ case 0x01:
+ /*Sanity OK done length = 3*/
+ break;
+ case 0x02:
+ /*Network Manager Attributes Info*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x03:
+ /*Network Manager Diagnostic Info*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_rx_ovr_flag,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_tx_ovr_flag,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_rx_empty_flag,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_invalid_msg_flag,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_eeprom_insane_flag,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_eeprom_unsafe_flag,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x04:
+ /*Manager IDs*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x05:
+ /*Network Manager Options Report*/
+ proto_tree_add_boolean(msg_tree,hf_net_phone_diag,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_net_phone_rudp,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x08:
+ /*Resume Connection with Server done*/
+ break;
+ case 0x09:
+ /*Suspend Connection with Server done*/
+ break;
+ case 0x0b:
+ /*Network Configuration Element Report*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0c:
+ /*Server Information Report*/
+ proto_tree_add_item(msg_tree,hf_net_phone_primary_server_id,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ for (i=1; msg_len>8; i++){
+ /*if less than 9 not full report so punt*/
+ port_num=tvb_get_ntohs(tvb,offset);
+ if(port_num<1064)
+ break;
+
+ server=proto_tree_add_text(msg_tree,tvb,offset,9,
+ "Server (S%d) Server ID: %X",i,i-1);
+ server_tree=proto_item_add_subtree(server,ett_unistim);
+ proto_tree_add_item(server_tree,
+ hf_net_phone_server_port,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(server_tree,
+ hf_net_phone_server_action,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(server_tree,
+ hf_net_phone_server_retry_count,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(server_tree,
+ hf_net_phone_server_failover_id,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(server_tree,hf_net_phone_server_ip,
+ tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ }
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+/*DONE*/
+static void
+dissect_audio_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len){
+ proto_tree *param_tree;
+ proto_item *param;
+ guint audio_cmd;
+ guint apb_op_code;
+ guint apb_data_len;
+ guint next_byte;
+ guint vocoder_param;
+ audio_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_switch_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(audio_cmd){
+ case 0x00:
+ /*Query Audio Manager*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_attr,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opts,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_alert,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_adj_rx_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_def_rx_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_handset,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_headset,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_default_rx_vol_id,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x01:
+ /*Query Supervisor Headset Status*//*done*/
+ break;
+ case 0x02:
+ /*Audio Manager Options*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_max_vol,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_adj_vol,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_aa_rx_vol_rpt,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_hs_on_air,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_hd_on_air,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_opt_noise_squelch,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x04:
+ /*Mute/Unmute*/
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_mute,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_tx_rx,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_mgr_stream_id,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x10:
+ /*Transducer Based Tone On*/
+ proto_tree_add_item(msg_tree,
+ hf_audio_mgr_transducer_based_tone_id,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_attenuated,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x11:
+ /*Transducer Based Tone Off*/
+ proto_tree_add_item(msg_tree,hf_audio_mgr_transducer_based_tone_id,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x12:
+ /*Alerting Tone Configuration*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_warbler_select,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_transducer_routing,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_tone_vol_range,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_cadence_select,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x13:
+ /*Special Tone Configuration*/
+ proto_tree_add_item(msg_tree,hf_audio_mgr_transducer_routing,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_mgr_tone_vol_range,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_special_tone,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x14:
+ /*Paging Tone Configuration*/
+ proto_tree_add_item(msg_tree,hf_audio_mgr_transducer_routing,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_mgr_tone_vol_range,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_mgr_cadence_select,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x15:
+ /*Alerting Tone Cadence Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ /*TODO UGLY*/
+ case 0x17:
+ /*Paging Tone Cadence Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ /*TODO UGLY*/
+ case 0x18:
+ /*Transducer Based Tone Volume Level*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,
+ hf_audio_mgr_transducer_based_tone_id,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_tone_level,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x1a:
+ /*Visual Transducer Based Tone Enable*/
+ proto_tree_add_item(msg_tree,hf_audio_visual_tones,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x1b:
+ /*Stream Based Tone On*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_tone_id,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_tone_rx_tx,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_tone_mute,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_stream_id,tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_volume,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x1c:
+ /*Stream Based Tone Off*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_tone_id,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_stream_based_tone_rx_tx,
+ tvb,offset,1,FALSE);
+ offset+=1;
+ proto_tree_add_item(msg_tree,hf_audio_stream_id,tvb,offset,1,FALSE);
+ offset+=1;
+ break;
+ case 0x1d:
+ /*Stream Based Tone Frequency Component List Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x1e:
+ /*Stream Based Tone Cadence Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x20:
+ /*Select Adjustable Rx Volume*/
+ proto_tree_add_item(msg_tree,hf_audio_default_rx_vol_id,
+ tvb,offset,1,FALSE);
+ break;
+ case 0x21:
+ /*Set APB's Rx Volume Level*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x22:
+ /*Change Adjustable Rx Volume (quieter) DONE*/
+ proto_tree_add_item(msg_tree,hf_generic_data,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x23:
+ /*Change Adjustable Rx Volume (louder) DONE*/
+ proto_tree_add_item(msg_tree,hf_generic_data,
+ tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x24:
+ /*Adjust Default Rx Volume(quieter)*/
+ proto_tree_add_item(msg_tree,hf_audio_default_rx_vol_id,
+ tvb,offset,1,FALSE);
+ break;
+ case 0x25:
+ /*Adjust Default Rx Volume(louder)*/
+ proto_tree_add_item(msg_tree,hf_audio_default_rx_vol_id,
+ tvb,offset,1,FALSE);
+ break;
+ case 0x28:
+ /*APB Download*/
+ proto_tree_add_item(msg_tree,hf_audio_apb_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ apb_op_code=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_apb_op_code,tvb,
+ offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if(apb_op_code>0x39){
+ /*should have a len + data*/
+ apb_data_len=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_apb_param_len,tvb,
+ offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_apb_data,tvb,
+ offset,apb_data_len,FALSE);
+ offset+=apb_data_len;msg_len-=apb_data_len;
+ }
+ }
+ break;
+ case 0x30:
+ /*Open Audio Stream*/
+ proto_tree_add_item(msg_tree,hf_audio_rx_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_tx_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_rx_vocoder_type,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_tx_vocoder_type,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_frames_per_packet,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_tos,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_precedence,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_frf_11,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_rtcp_bucket_id,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_generic_data,
+ tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ proto_tree_add_item(msg_tree,hf_audio_lcl_rtp_port,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_lcl_rtcp_port,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+
+ proto_tree_add_item(msg_tree,hf_audio_far_rtp_port,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_rtcp_port,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_ip_add,
+ tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x31:
+ /*Close Audio Stream*/
+ proto_tree_add_item(msg_tree,hf_audio_rx_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_tx_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x32:
+ /*Connect Transducer*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field, tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_transducer_pair,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_enable,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_tx_enable,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_basic_bit_field, tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_apb_number,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_sidetone_disable,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_destruct_additive,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_dont_force_active,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_audio_mgr_stream_id,tvb,offset,1,TRUE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x34:
+ /*Filter Block Download*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x37:
+ /*Query RTCP Statistics*/
+ proto_tree_add_item(msg_tree,hf_audio_rtcp_bucket_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_clear_bucket,tvb,offset,1,FALSE);
+
+ offset+=1;msg_len-=1;
+ break;
+ case 0x38:
+ /*Configure Vocoder Parameters*/
+ proto_tree_add_item(msg_tree,hf_audio_mgr_stream_id,tvb,offset,1,TRUE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_vocoder_id,tvb,offset,1,FALSE),
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ param=proto_tree_add_text(msg_tree,tvb,offset,0,"Param");
+ param_tree=proto_item_add_subtree(param,ett_unistim);
+ vocoder_param=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(param_tree,hf_basic_bit_field,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(param_tree,hf_audio_vocoder_param,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(param_tree,hf_audio_vocoder_entity,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if((vocoder_param&0x0a)==0x0a){
+ proto_tree_add_item(param_tree,hf_audio_vocoder_annexa,
+ tvb,offset,1,FALSE);
+ proto_tree_add_item(param_tree,hf_audio_vocoder_annexb,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ else if((vocoder_param&0x0b)==0x0b){
+ proto_tree_add_item(param_tree,hf_audio_sample_rate,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ else if((vocoder_param&0x0c)==0x0c){
+ proto_tree_add_item(param_tree,hf_audio_rtp_type,
+ tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ else if((vocoder_param&0x20)==0x20){
+ proto_tree_add_item(param_tree,hf_audio_bytes_per_frame,
+ tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ }
+ }
+ break;
+ case 0x39:
+ /*Query RTCP Bucket's SDES Information*/
+ proto_tree_add_item(msg_tree,hf_audio_source_descr,tvb,offset,msg_len,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_sdes_rtcp_bucket,tvb,offset,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x3a:
+ /*Jitter Buffer Parameters Configuration*/
+ proto_tree_add_item(msg_tree,hf_audio_rx_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_desired_jitter,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_high_water_mark,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_early_packet_resync_thresh,tvb,
+ offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ proto_tree_add_item(msg_tree,hf_audio_late_packet_resync_thresh,tvb,
+ offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x3b:
+ /*Resolve Port Mapping*/
+ proto_tree_add_item(msg_tree,hf_audio_resolve_phone_port,tvb,offset,1,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_end_echo_port,tvb,offset,1,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_end_ip_address,tvb,offset,1,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x3c:
+ /*Port Mpping Discovery Ack*/
+ proto_tree_add_item(msg_tree,hf_audio_nat_port,tvb,offset,1,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_nat_ip_address,tvb,offset,1,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x3d:
+ /*Query Audio Stream Status*/
+ proto_tree_add_item(msg_tree,hf_audio_direction_code,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_mgr_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0xff:
+ /*Reserved*/
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+/*DONE*/
+static void
+dissect_audio_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len){
+ guint audio_cmd;
+ guint apb_op_code;
+ guint apb_data_len;
+ guint next_byte;
+ guint stream_dir;
+ guint stream_state;
+ audio_cmd=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_phone_cmd,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ switch(audio_cmd){
+ case 0x00:
+ /*Handset Connected length =3*/
+ break;
+ case 0x01:
+ /*Handset Disconnected length =3*/
+ break;
+ case 0x02:
+ /*Headset Connected length =3*/
+ break;
+ case 0x03:
+ /*Headset Disconnected length =3*/
+ break;
+ case 0x04:
+ /*Supervisor Headset Connected length =3*/
+ break;
+ case 0x05:
+ /*Supervisor Headset Disconnected length =3*/
+ break;
+ case 0x07:
+ /*Audio Manager Attributes Info*/
+ proto_tree_add_item(msg_tree,hf_audio_hf_support,tvb,1,msg_len,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_rx_vocoder_type,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ break;
+ case 0x08:
+ /*Audio Manager Options Report*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_max,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_adj_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_auto_adj_vol,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_hs_on_air,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_hd_on_air,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_opt_rpt_noise_squelch,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x09:
+ /*Adjustable Rx Volume Report*/
+ proto_tree_add_item(msg_tree,hf_basic_bit_field,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_apb_rpt,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_up,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_floor,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_ceiling,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0a:
+ /*Adjustable Rx Volume Information*/
+ proto_tree_add_item(msg_tree,hf_audio_current_adj_vol_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_apb_rpt,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_up,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_floor,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_ceiling,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_current_rx_level,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_current_rx_range,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0b:
+ /*APB's Default Rx Volume Value*/
+ proto_tree_add_item(msg_tree,hf_audio_current_adj_vol_id,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_apb_rpt,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_up,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_floor,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_rx_vol_vol_ceiling,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_current_rx_level,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_current_rx_range,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0c:
+ /*Alerting Tone Select*/
+ proto_tree_add_item(msg_tree,hf_audio_cadence_select,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_warbler_select,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x0e:
+ /*RTCP Statistics Report UGLY*/
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ break;
+ case 0x0f:
+ /*Open Audio Stream Report*/
+ proto_tree_add_item(msg_tree,hf_audio_open_stream_rpt,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x10:
+ /*RTCP Bucket SDES Information Report*/
+ proto_tree_add_item(msg_tree,hf_audio_sdes_rpt_source_desc,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_sdes_rpt_buk_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ set_ascii_item(msg_tree,tvb,offset,msg_len);
+ offset+=msg_len;
+ break;
+ case 0x11:
+ /*Port Mapping Discovery*/
+ proto_tree_add_item(msg_tree,hf_audio_phone_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_phone_ip,tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ break;
+ case 0x12:
+ /*Resolve Port Mapping*/
+ proto_tree_add_item(msg_tree,hf_audio_nat_listen_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_nat_ip,tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ proto_tree_add_item(msg_tree,hf_audio_nat_add_len,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_phone_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_phone_ip,tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ proto_tree_add_item(msg_tree,hf_audio_phone_add_len,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ break;
+ case 0x13:
+ /*Audio Stream Status Report*/
+ stream_dir=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_stream_direction_code,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_mgr_stream_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ stream_state=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_stream_state,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if((AUDIO_STREAM_STATE&stream_state)!=AUDIO_STREAM_STATE)
+ break;
+ if((AUDIO_STREAM_DIRECTION_RX&stream_dir)==AUDIO_STREAM_DIRECTION_RX)
+ proto_tree_add_item(msg_tree,hf_rx_vocoder_type,tvb,offset,1,FALSE);
+ else if((AUDIO_STREAM_DIRECTION_TX&stream_dir)==AUDIO_STREAM_DIRECTION_TX)
+ proto_tree_add_item(msg_tree,hf_tx_vocoder_type,tvb,offset,1,FALSE);
+ else
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_frames_per_packet,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_tos,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_precedence,tvb,offset,1,FALSE);
+ proto_tree_add_item(msg_tree,hf_audio_frf_11,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_rtcp_bucket_id,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_lcl_rtp_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_lcl_rtcp_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_rtp_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_rtcp_port,tvb,offset,2,FALSE);
+ offset+=2;msg_len-=2;
+ proto_tree_add_item(msg_tree,hf_audio_far_ip_add,tvb,offset,4,FALSE);
+ offset+=4;msg_len-=4;
+ proto_tree_add_item(msg_tree,hf_audio_transducer_list_length,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ proto_tree_add_item(msg_tree,hf_audio_transducer_pair,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ }
+ case 0x14:
+ /*Query APB Response*/
+ proto_tree_add_item(msg_tree,hf_audio_apb_number,tvb,offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ while(msg_len>0){
+ apb_op_code=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_apb_op_code,tvb,
+ offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ if(apb_op_code>0x39){
+ /*should have a len + data*/
+ apb_data_len=tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(msg_tree,hf_audio_apb_param_len,tvb,
+ offset,1,FALSE);
+ offset+=1;msg_len-=1;
+ proto_tree_add_item(msg_tree,hf_audio_apb_data,tvb,
+ offset,apb_data_len,FALSE);
+ offset+=apb_data_len;msg_len-=apb_data_len;
+ }
+ }
+ break;
+ case 0xff:
+ /*Reserved*/
+ break;
+ default:
+ proto_tree_add_item(msg_tree,hf_generic_data,tvb,offset,msg_len,FALSE);
+ offset+=msg_len;
+ }
+
+ if (tvb_length_remaining(tvb,offset) > 0){
+ next_byte=tvb_get_guint8(tvb,offset);
+ if(next_byte>0)
+ dissect_message(unistim_tree,tvb,offset);
+ }
+}
+
+static void
+set_ascii_item(proto_tree *msg_tree,tvbuff_t *tvb, gint offset,guint msg_len){
+ char *buffer=NULL;
+ guint16 buffer_index=0;
+ guint16 msg_index=0;
+ guint8 character;
+ char *label="DATA: ";
+ #define MAX_BUFFER 1024
+ buffer=ep_alloc(MAX_BUFFER);
+
+ g_snprintf(buffer,MAX_BUFFER,label);
+ buffer_index=strlen(label);
+
+ while((buffer_index<MAX_BUFFER-2)&&(msg_index<msg_len)){
+ character=tvb_get_guint8(tvb,offset+msg_index);
+ msg_index++;
+ if((character>0x1f)&&(character<0x7f)){
+ /*g_vsnprintf called in proto_tree_add_text blows up if you end up with %s as text so escape %*/
+ if(character=='%'){
+ buffer[buffer_index]='%';
+ buffer_index++;
+ }
+ buffer[buffer_index]=character;
+ buffer_index++;
+ }
+ else{
+ buffer[buffer_index]='.';
+ buffer_index++;
+ }
+ }
+ buffer[buffer_index]='\0';
+
+ proto_tree_add_text(msg_tree,tvb,offset,msg_len,buffer);
+}
+
+static void
+set_ascii_null_term_item(proto_tree *msg_tree,tvbuff_t *tvb, gint offset,guint msg_len,char *label){
+ char *buffer=NULL;
+ guint16 buffer_index=0;
+ guint16 msg_index=0;
+ guint8 character;
+ #define MAX_BUFFER 1024
+ buffer=ep_alloc(MAX_BUFFER);
+
+ g_snprintf(buffer,MAX_BUFFER,label);
+ buffer_index=strlen(label);
+
+ while((buffer_index<MAX_BUFFER-2)&&(msg_index<msg_len)){
+ character=tvb_get_guint8(tvb,offset+msg_index);
+ msg_index++;
+ if((character>0x1f)&&(character<0x7f)){
+ /*g_vsnprintf called in proto_tree_add_text blows up if you end up with %s as text so escape %*/
+ if(character=='%'){
+ buffer[buffer_index]='%';
+ buffer_index++;
+ }
+ buffer[buffer_index]=character;
+ buffer_index++;
+ }
+ else if(character==0x00)
+ break;
+ else{
+ buffer[buffer_index]='.';
+ buffer_index++;
+ }
+ }
+ buffer[buffer_index]='\0';
+
+ proto_tree_add_text(msg_tree,tvb,offset,msg_len,buffer);
+}
+
diff --git a/plugins/unistim/packet-unistim.h b/plugins/unistim/packet-unistim.h
new file mode 100644
index 0000000000..7922b82d52
--- /dev/null
+++ b/plugins/unistim/packet-unistim.h
@@ -0,0 +1,144 @@
+/* packet-unistim.h
+ * header field declarations, value_string definitions, true_false_string
+ * definitions and function prototypes for main dissectors
+ * Copyright 2007 Don Newton <dnewton@cypresscom.net>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * 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.
+ */
+
+#ifndef PACKET_UNISTIM_H
+#define PACKET_UNISTIM_H
+
+#include "defines.h"
+#include "audio.h"
+#include "basic.h"
+#include "display.h"
+#include "network.h"
+#include "key.h"
+#include "broadcast.h"
+
+
+static void dissect_payload(proto_tree *unistim_tree,tvbuff_t *tvb,gint offset);
+static void dissect_unistim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+static dissector_handle_t unistim_handle;
+
+static void dissect_broadcast_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_audio_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_display_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_key_indicator_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_basic_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_network_switch(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_broadcast_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_audio_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_display_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_key_indicator_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_basic_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_network_phone(proto_tree *msg_tree,proto_tree *unistim_tree,
+ tvbuff_t *tvb,gint offset,guint msg_len);
+static void dissect_message(proto_tree *unistim_tree, tvbuff_t *tvb,gint offset);
+static void set_ascii_item(proto_tree *unistim_tree, tvbuff_t *tvb,
+ gint offset,guint msg_len);
+static void set_ascii_null_term_item(proto_tree *msg_tree,tvbuff_t *tvb,
+ gint offset,guint msg_len, char *label);
+
+
+static int proto_unistim = -1;
+static int hf_unistim_seq_nu = -1;
+static int hf_unistim_packet_type = -1;
+static int hf_unistim_payload = -1;
+static int hf_unistim_cmd_add = -1;
+static int hf_unistim_len =-1;
+static int hf_terminal_id=-1;
+static int hf_basic_bit_field=-1;
+static const true_false_string basic_bit_yn={
+ "For Following Byte",
+ "For Following Byte"
+};
+
+static int hf_basic_switch_cmd=-1;
+static int hf_basic_phone_cmd=-1;
+static int hf_broadcast_switch_cmd=-1;
+static int hf_broadcast_phone_cmd=-1;
+static int hf_audio_switch_cmd=-1;
+static int hf_audio_phone_cmd=-1;
+static int hf_display_switch_cmd=-1;
+static int hf_display_phone_cmd=-1;
+static int hf_key_switch_cmd=-1;
+static int hf_key_phone_cmd=-1;
+static int hf_network_switch_cmd=-1;
+static int hf_network_phone_cmd=-1;
+
+
+static int hf_generic_data=-1;
+static int hf_generic_string=-1;
+
+static gint ett_unistim = -1;
+
+static const value_string packet_names[]={
+ {0,"NAK"},
+ {1,"ACK"},
+ {2,"Payload"},
+ {0,NULL}
+};
+
+static const value_string payload_names[]={
+ {0x00,"NULL Protocol"},
+ {0x01,"Aggregate Unistim"},
+ {0x02,"Aggregate Unistim with Terminal ID"},
+ {0xff,"Free Form Protocol"},
+ {0,NULL}
+};
+
+static const range_string sequence_numbers[]={
+ {0x00,0xFFFFFFFE,"Normal Sequence Number"},
+ {0xFFFFFFFF,0xFFFFFFFF, "RESET Sequence Number"},
+ {0,0,NULL}
+};
+
+static const value_string command_address[]={
+ {0x11,"Broadcast Manager Switch"},
+ {0x16,"Audio Manager Switch"},
+ {0x17,"Display Manager Switch"},
+ {0x19,"Key/Indicator Manager Switch"},
+ {0x1a,"Basic Manager Switch"},
+ {0x1e,"Network Manager Switch"},
+ {0x91,"Broadcast Manager Phone"},
+ {0x96,"Audio Manager Phone"},
+ {0x97,"Display Manager Phone"},
+ {0x99,"Key/Indicator Manager Phone"},
+ {0x9a,"Basic Manager Phone"},
+ {0x9e,"Network Manager Phone"},
+ {0,NULL}
+};
+
+#endif
+
diff --git a/plugins/unistim/plugin.rc.in b/plugins/unistim/plugin.rc.in
new file mode 100644
index 0000000000..72b4de0775
--- /dev/null
+++ b/plugins/unistim/plugin.rc.in
@@ -0,0 +1,34 @@
+#include "winver.h"
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @RC_MODULE_VERSION@
+ PRODUCTVERSION @RC_VERSION@,0
+ FILEFLAGSMASK 0x0L
+#ifdef _DEBUG
+ FILEFLAGS VS_FF_PRERELEASE+VS_FF_DEBUG
+#else
+ FILEFLAGS VS_FF_PRERELEASE
+#endif
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE VFT_DLL
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "The Wireshark developer community, http://www.wireshark.org/\0"
+ VALUE "FileDescription", "@PACKAGE@ dissector\0"
+ VALUE "FileVersion", "@MODULE_VERSION@\0"
+ VALUE "InternalName", "@PACKAGE@ @MODULE_VERSION@\0"
+ VALUE "LegalCopyright", "Copyright © 1998 Gerald Combs <gerald@wireshark.org>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0"
+ VALUE "OriginalFilename", "@PLUGIN_NAME@.dll\0"
+ VALUE "ProductName", "Wireshark\0"
+ VALUE "ProductVersion", "@VERSION@\0"
+ VALUE "Comments", "Build with @MSVC_VARIANT@\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END