parent
06f302400e
commit
c912b0f1d3
@ -0,0 +1 @@
|
||||
Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
@ -0,0 +1 @@
|
||||
2012-05-17 - Initial Release
|
@ -0,0 +1,167 @@
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
The file `configure.in' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.in' if you want to change
|
||||
it or regenerate `configure' using a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes a while. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
4. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not supports the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a time
|
||||
in the source code directory. After you have installed the package for
|
||||
one architecture, use `make distclean' before reconfiguring for another
|
||||
architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made.
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
||||
|
@ -0,0 +1,22 @@
|
||||
SUBDIRS = $(TOPSUBDIRS)
|
||||
|
||||
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
|
||||
|
||||
$(top_srcdir)/subdirs:
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||
|
||||
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
|
||||
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
|
||||
|
||||
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
|
||||
|
||||
package-messages:
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common package-messages
|
||||
$(MAKE) -C po merge
|
||||
|
||||
EXTRA_DIST = admin COPYING configure.in.in
|
||||
|
||||
dist-hook:
|
||||
cd $(top_distdir) && perl admin/am_edit -padmin
|
||||
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
|
@ -0,0 +1,10 @@
|
||||
all:
|
||||
@echo "This Makefile is only for the CVS repository"
|
||||
@echo "This will be deleted before making the distribution"
|
||||
@echo ""
|
||||
$(MAKE) -f admin/Makefile.common cvs
|
||||
|
||||
dist:
|
||||
$(MAKE) -f admin/Makefile.common dist
|
||||
|
||||
.SILENT:
|
@ -0,0 +1 @@
|
||||
Subproject commit bae6da3fa84fa5d9cce73cf89968d61f1766e91d
|
@ -0,0 +1 @@
|
||||
Subproject commit d29f6d6b10fe1748c2a5fb1f9f2cdcecc473d354
|
@ -0,0 +1,262 @@
|
||||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
||||
/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
|
||||
#undef HAVE_CARBON_CARBON_H
|
||||
|
||||
/* Define if you have the CoreAudio API */
|
||||
#undef HAVE_COREAUDIO
|
||||
|
||||
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||
#undef HAVE_CRT_EXTERNS_H
|
||||
|
||||
/* Defines if your system has the crypt function */
|
||||
#undef HAVE_CRYPT
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have libjpeg */
|
||||
#undef HAVE_LIBJPEG
|
||||
|
||||
/* Define if you have libpng */
|
||||
#undef HAVE_LIBPNG
|
||||
|
||||
/* Define if you have a working libpthread (will enable threaded code) */
|
||||
#undef HAVE_LIBPTHREAD
|
||||
|
||||
/* Define if you have libz */
|
||||
#undef HAVE_LIBZ
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define if your system needs _NSGetEnviron to set up the environment */
|
||||
#undef HAVE_NSGETENVIRON
|
||||
|
||||
/* Define if you have res_init */
|
||||
#undef HAVE_RES_INIT
|
||||
|
||||
/* Define if you have the res_init prototype */
|
||||
#undef HAVE_RES_INIT_PROTO
|
||||
|
||||
/* Define if you have a STL implementation by SGI */
|
||||
#undef HAVE_SGI_STL
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have strlcat */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define if you have the strlcat prototype */
|
||||
#undef HAVE_STRLCAT_PROTO
|
||||
|
||||
/* Define if you have strlcpy */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you have the strlcpy prototype */
|
||||
#undef HAVE_STRLCPY_PROTO
|
||||
|
||||
/* Define to 1 if you have the <sys/bitypes.h> header file. */
|
||||
#undef HAVE_SYS_BITYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Suffix for lib directories */
|
||||
#undef KDELIBSUFF
|
||||
|
||||
/* Define a safe value for MAXPATHLEN */
|
||||
#undef KDEMAXPATHLEN
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* The size of `char *', as computed by sizeof. */
|
||||
#undef SIZEOF_CHAR_P
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
|
||||
/* The size of `unsigned long', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_LONG
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Defined if compiling without arts */
|
||||
#undef WITHOUT_ARTS
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
#if defined AC_APPLE_UNIVERSAL_BUILD
|
||||
# if defined __BIG_ENDIAN__
|
||||
# define WORDS_BIGENDIAN 1
|
||||
# endif
|
||||
#else
|
||||
# ifndef WORDS_BIGENDIAN
|
||||
# undef WORDS_BIGENDIAN
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
|
||||
* headers and I'm too lazy to write a configure test as long as only
|
||||
* unixware is related
|
||||
*/
|
||||
#ifdef _UNIXWARE
|
||||
#define HAVE_BOOLEAN
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
|
||||
* that defines bzero.
|
||||
*/
|
||||
|
||||
#if defined(_AIX)
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
|
||||
# include <sys/time.h>
|
||||
# include <crt_externs.h>
|
||||
# define environ (*_NSGetEnviron())
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_RES_INIT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
int res_init(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCAT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcat(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCPY_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcpy(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* On HP-UX, the declaration of vsnprintf() is needed every time !
|
||||
*/
|
||||
|
||||
#if !defined(HAVE_VSNPRINTF) || defined(hpux)
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int snprintf(char *str, size_t n, char const *fmt, ...);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(__SVR4) && !defined(__svr4__)
|
||||
#define __svr4__ 1
|
||||
#endif
|
||||
|
||||
|
||||
/* type to use in place of socklen_t if not defined */
|
||||
#undef kde_socklen_t
|
||||
|
||||
/* type to use in place of socklen_t if not defined (deprecated, use
|
||||
kde_socklen_t) */
|
||||
#undef ksize_t
|
@ -0,0 +1,2 @@
|
||||
./admin/configure.in.min
|
||||
configure.in.in
|
@ -0,0 +1,6 @@
|
||||
#MIN_CONFIG(3.2.0)
|
||||
|
||||
AM_INIT_AUTOMAKE(autostart, 0.1)
|
||||
AC_C_BIGENDIAN
|
||||
AC_CHECK_KDEMAXPATHLEN
|
||||
|
@ -0,0 +1,5 @@
|
||||
ulab-serialserver (0.5-0ubuntu0) karmic; urgency=low
|
||||
|
||||
* Karmic rebuild
|
||||
|
||||
-- Timothy Pearson <kb9vqf@pearsoncomputing.net> Thu, 02 July 2009 16:08:00 -0600
|
@ -0,0 +1 @@
|
||||
5
|
@ -0,0 +1,12 @@
|
||||
Source: ulab-serialserver
|
||||
Section: tde
|
||||
Priority: optional
|
||||
Maintainer: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
Build-Depends: debhelper (>= 5), cdbs, tdelibs14-trinity-dev, libldap2-dev, libtdekrb-trinity-dev, libtqtrla-dev, automake, autoconf, libtool, libltdl-dev
|
||||
Standards-Version: 3.8.4
|
||||
|
||||
Package: ulab-serialserver
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libtqt3-mt-mysql
|
||||
Description: uLab Serial Server
|
||||
uLab Serial Server
|
@ -0,0 +1,31 @@
|
||||
This package was debianized by Timothy Pearson <kb9vqf@pearsoncomputing.net> on
|
||||
Thu, 17 May 2012 19:52:51 +0100.
|
||||
|
||||
It was downloaded from http://www.trinitydesktop.org
|
||||
|
||||
Upstream Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
|
||||
copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||
|
||||
License:
|
||||
|
||||
This package 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 package 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 package; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL'.
|
||||
|
||||
The Debian packaging is (C) 2012, Timothy Pearson <kb9vqf@pearsoncomputing.net> and
|
||||
is licensed under the GPL, see above.
|
||||
|
@ -0,0 +1,24 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
include /usr/share/cdbs/1/rules/simple-patchsys.mk
|
||||
include /usr/share/cdbs/1/class/autotools.mk
|
||||
include /usr/share/cdbs/1/rules/debhelper.mk
|
||||
|
||||
DEB_CONFIGURE_INCLUDEDIR := /opt/trinity/include/tde
|
||||
DEB_CONFIGURE_MANDIR := /opt/trinity/share/man
|
||||
DEB_CONFIGURE_PREFIX := /opt/trinity
|
||||
DEB_CONFIGURE_INFODIR := /opt/trinity/share/info
|
||||
|
||||
cdbs_configure_flags := --with-qt-dir=/usr/share/qt3 --disable-rpath --with-xinerama $(cdbs_kde_enable_final) $(cdbs_kde_enable_debug)
|
||||
|
||||
post-patches:: debian/stamp-bootstrap
|
||||
|
||||
debian/stamp-bootstrap:
|
||||
! [ -f /usr/share/libtool/ltmain.sh ] || \
|
||||
cp -f /usr/share/libtool/ltmain.sh admin/ltmain.sh
|
||||
! [ -f /usr/share/libtool/config/ltmain.sh ] || \
|
||||
cp -f /usr/share/libtool/config/ltmain.sh admin/ltmain.sh
|
||||
cp -f /usr/share/aclocal/libtool.m4 admin/libtool.m4.in
|
||||
|
||||
make -f admin/Makefile.common cvs
|
||||
touch debian/stamp-bootstrap
|
@ -0,0 +1,108 @@
|
||||
#!/bin/sh
|
||||
### BEGIN INIT INFO
|
||||
# Provides: ulab-fpgaserver
|
||||
# Required-Start: $local_fs $remote_fs
|
||||
# Required-Stop: $local_fs $remote_fs
|
||||
# Should-Start: console-screen kbd acpid hal krb5-kdc nis
|
||||
# Should-Stop: console-screen kbd
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: uLab FPGA Server
|
||||
# Description: uLab FPGA Server
|
||||
### END INIT INFO
|
||||
# /etc/init.d/ulab-fpgaserver: start or stop the uLab FPGA Server
|
||||
#
|
||||
# description: uLab FPGA Server
|
||||
#
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
set -e
|
||||
|
||||
PATH=/opt/trinity/bin:/usr/bin:/sbin:/usr/sbin:/bin
|
||||
DAEMON=/opt/trinity/bin/ulab_fpgaserver
|
||||
PIDFILE=/var/run/ulab_fpgaserver.pid
|
||||
UPGRADEFILE=/var/run/ulab_fpgaserver.upgrade
|
||||
|
||||
DESC="uLab FPGA Server"
|
||||
|
||||
# If we upgraded the daemon, we can't use the --exec argument to
|
||||
# start-stop-daemon since the inode will have changed. The risk here is that
|
||||
# in a situation where the daemon died, its pidfile was not cleaned up, and
|
||||
# some other process is now running under that pid, start-stop-daemon will send
|
||||
# signals to an innocent process. However, this seems like a corner case.
|
||||
# C'est la vie!
|
||||
if [ -e $UPGRADEFILE ]; then
|
||||
SSD_ARGS="--pidfile $PIDFILE --startas $DAEMON"
|
||||
else
|
||||
SSD_ARGS="--pidfile $PIDFILE --exec $DAEMON"
|
||||
fi
|
||||
|
||||
stillrunning () {
|
||||
if expr "$(cat /proc/$DAEMONPID/cmdline 2> /dev/null)" : "$DAEMON" > /dev/null 2>&1; then
|
||||
true
|
||||
else
|
||||
# if the daemon does not remove its own pidfile, we will
|
||||
rm -f $PIDFILE $UPGRADEFILE
|
||||
false
|
||||
fi;
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
log_action_begin_msg "Starting $DESC"
|
||||
if start-stop-daemon --background --start --make-pidfile --quiet $SSD_ARGS -- $ARG; then
|
||||
log_action_end_msg 0
|
||||
else
|
||||
log_warning_msg "already running"
|
||||
log_action_end_msg 0
|
||||
fi
|
||||
;;
|
||||
|
||||
restart)
|
||||
/etc/init.d/ulab-fpgaserver stop
|
||||
if [ -f $PIDFILE ]; then
|
||||
if stillrunning; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
/etc/init.d/ulab-fpgaserver start
|
||||
;;
|
||||
|
||||
reload)
|
||||
log_action_begin_msg "Reloading $DESC"
|
||||
if start-stop-daemon --stop --signal 1 --quiet $SSD_ARGS; then
|
||||
log_action_end_msg 0
|
||||
else
|
||||
log_failure_msg "not running"
|
||||
log_action_end_msg 1
|
||||
fi
|
||||
;;
|
||||
|
||||
force-reload)
|
||||
/etc/init.d/ulab-fpgaserver reload
|
||||
;;
|
||||
|
||||
stop)
|
||||
log_action_begin_msg "Stopping $DESC"
|
||||
if [ ! -f $PIDFILE ]; then
|
||||
log_failure_msg "Not running ($PIDFILE not found)"
|
||||
log_action_end_msg 0
|
||||
exit 0
|
||||
else
|
||||
if start-stop-daemon --stop --quiet $SSD_ARGS; then
|
||||
log_action_end_msg 0
|
||||
else
|
||||
log_failure_msg "not running"
|
||||
log_action_end_msg 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: /etc/init.d/ulab-fpgaserver {start|stop|restart|reload|force-reload}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -0,0 +1,6 @@
|
||||
# the SUBDIRS is filled automatically by am_edit. If files are
|
||||
# in this directory they are installed into the english dir
|
||||
|
||||
KDE_LANG = en
|
||||
KDE_DOCS = autostart
|
||||
SUBDIRS = $(AUTODIRS)
|
@ -0,0 +1,2 @@
|
||||
KDE_DOCS = ldap
|
||||
KDE_LANG = en
|
@ -0,0 +1,2 @@
|
||||
POFILES = AUTO
|
||||
# noinst_HEADERS = ldap.pot
|
@ -0,0 +1,11 @@
|
||||
INCLUDES= $(all_includes) $(KDE_INCLUDES)/tde -I/usr/include/sasl
|
||||
KDE_CXXFLAGS = $(USE_EXCEPTIONS)
|
||||
|
||||
bin_PROGRAMS = ulab_serialserver
|
||||
|
||||
ulab_serialserver_SOURCES = main.cpp serial_server.cpp
|
||||
|
||||
ulab_serialserver_METASOURCES = AUTO
|
||||
ulab_serialserver_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx $(LIB_TDEIO) -ltdetexteditor -ltdekrbsocket -ltqtrla
|
||||
|
||||
KDE_OPTIONS = nofinal
|
@ -0,0 +1,64 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2014 by Timothy Pearson *
|
||||
* kb9vqf@pearsoncomputing.net *
|
||||
* *
|
||||
* 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. *
|
||||
***************************************************************************/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <pwd.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <tqdatetime.h>
|
||||
#include <tqfile.h>
|
||||
#include <tqdir.h>
|
||||
|
||||
#include <tdeapplication.h>
|
||||
#include <tdestartupinfo.h>
|
||||
#include <tdecmdlineargs.h>
|
||||
#include <tdeaboutdata.h>
|
||||
#include <ksimpleconfig.h>
|
||||
|
||||
#include "serial_server.h"
|
||||
|
||||
static const char description[] = I18N_NOOP("uLab Serial Server");
|
||||
|
||||
static const char version[] = "v0.0.1";
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
TDEAboutData aboutData( "ulab_serial_server", I18N_NOOP("uLab Serial Server"),
|
||||
version, description, TDEAboutData::License_GPL,
|
||||
"(c) 2014, Timothy Pearson");
|
||||
aboutData.addAuthor("Timothy Pearson",0, "kb9vqf@pearsoncomputing.net");
|
||||
TDECmdLineArgs::init( argc, argv, &aboutData );
|
||||
TDEApplication::disableAutoDcopRegistration();
|
||||
|
||||
TDEApplication app(false, false);
|
||||
|
||||
TDEStartupInfo::appStarted();
|
||||
|
||||
KSimpleConfig config(TQDir::currentDirPath() + "/ulab_serialserver.conf", false);
|
||||
config.setGroup("Server");
|
||||
SerialServer serialsvr(0, config.readNumEntry("port", 4018), &config);
|
||||
return app.exec();
|
||||
|
||||
}
|
@ -0,0 +1,353 @@
|
||||
/*
|
||||
* Remote Laboratory Serial Server
|
||||
*
|
||||
* 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 3 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.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* (c) 2014 Timothy Pearson
|
||||
* Raptor Engineering
|
||||
* http://www.raptorengineeringinc.com
|
||||
*/
|
||||
|
||||
#include <stdio.h> /* perror() */
|
||||
#include <stdlib.h> /* atoi() */
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <unistd.h> /* read() */
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <tqtimer.h>
|
||||
|
||||
#include <tdelocale.h>
|
||||
|
||||
#include "serial_server.h"
|
||||
|
||||
#define FLUSH_IN 0
|
||||
#define FLUSH_OUT 1
|
||||
#define FLUSH_BOTH 2
|
||||
|
||||
#define ABORT_SOCKET(s) s->close(); \
|
||||
s->disconnect(); \
|
||||
delete s; \
|
||||
s = NULL;
|
||||
|
||||
/* exception handling */
|
||||
struct exit_exception {
|
||||
int c;
|
||||
exit_exception(int c):c(c) { }
|
||||
};
|
||||
|
||||
/*
|
||||
The SerialSocket class provides a socket that is connected with a client.
|
||||
For every client that connects to the server, the server creates a new
|
||||
instance of this class.
|
||||
*/
|
||||
SerialSocket::SerialSocket(int sock, TQObject *parent, const char *name) :
|
||||
TDEKerberosServerSocket(parent, name), m_criticalSection(0), m_pollInterval(10), enableDebug(false), m_loopTimer(NULL), m_config(static_cast<SerialServer*>(parent)->m_config) {
|
||||
|
||||
// Read settings
|
||||
m_config->setGroup("Tuning");
|
||||
m_pollInterval = m_config->readNumEntry("pollInterval", m_pollInterval);
|
||||
enableDebug = m_config->readBoolEntry("enableDebug", enableDebug);
|
||||
|
||||
// Initialize timers
|
||||
m_kerberosInitTimer = new TQTimer();
|
||||
connect(m_kerberosInitTimer, SIGNAL(timeout()), this, SLOT(finishKerberosHandshake()));
|
||||
|
||||
setServiceName("ulab");
|
||||
|
||||
line = 0;
|
||||
connect(this, SIGNAL(connectionClosed()), SLOT(connectionClosedHandler()));
|
||||
connect(this, SIGNAL(connectionClosed()), parent, SLOT(remoteConnectionClosed()));
|
||||
setSocket(sock);
|
||||
}
|
||||
|
||||
SerialSocket::~SerialSocket() {
|
||||
if (m_kerberosInitTimer) {
|
||||
m_kerberosInitTimer->stop();
|
||||
delete m_kerberosInitTimer;
|
||||
m_kerberosInitTimer = NULL;
|
||||
}
|
||||
if (m_loopTimer) {
|
||||
m_loopTimer->stop();
|
||||
delete m_loopTimer;
|
||||
m_loopTimer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void SerialSocket::close() {
|
||||
if (state() == TQSocket::Connected) {
|
||||
TDEKerberosServerSocket::close();
|
||||
connectionClosedHandler();
|
||||
TQTimer::singleShot(0, parent(), SLOT(remoteConnectionClosed()));
|
||||
}
|
||||
}
|
||||
|
||||
void SerialSocket::connectionClosedHandler() {
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Connection from %s closed\n\r", m_remoteHost.ascii()); fflush(stdout);
|
||||
}
|
||||
|
||||
if (m_criticalSection > 0) {
|
||||
throw exit_exception(-1);
|
||||
}
|
||||
}
|
||||
|
||||
void SerialSocket::initiateKerberosHandshake() {
|
||||
setUsingKerberos(true);
|
||||
m_kerberosInitTimer->start(100, TRUE);
|
||||
}
|
||||
|
||||
void SerialSocket::finishKerberosHandshake() {
|
||||
if (kerberosStatus() == TDEKerberosServerSocket::KerberosInitializing) {
|
||||
m_kerberosInitTimer->start(100, TRUE);
|
||||
return;
|
||||
}
|
||||
if (kerberosStatus() == TDEKerberosServerSocket::KerberosInUse) {
|
||||
m_config->setGroup("Security");
|
||||
TQString masterUser = m_config->readEntry("masteruser");
|
||||
TQString masterRealm = m_config->readEntry("masterrealm");
|
||||
if (masterRealm == "") {
|
||||
masterRealm = "(NULL)";
|
||||
}
|
||||
if ((m_authenticatedUserName != masterUser) || (m_authenticatedRealmName != masterRealm)) {
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Connection from %s closed due to authentication failure (attempted connection as user %s@%s)\n\r", m_remoteHost.ascii(), m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout);
|
||||
}
|
||||
close();
|
||||
return;
|
||||
}
|
||||
if (setupSerial() != 0) {
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Connection from %s closed due to serial port initialization failure\n\r", m_remoteHost.ascii()); fflush(stdout);
|
||||
}
|
||||
close();
|
||||
return;
|
||||
}
|
||||
|
||||
TQDataStream ds(this);
|
||||
ds.setPrintableData(true);
|
||||
ds << TQString("OK");
|
||||
writeEndOfFrame();
|
||||
|
||||
// Inform user of baudrate
|
||||
TQString infoString;
|
||||
infoString = TQString("Serial connection established with a baudrate of %1\rReady for data").arg(m_baudRate);
|
||||
TQByteArray data;
|
||||
data.duplicate(infoString.ascii(), strlen(infoString.ascii()));
|
||||
ds << TQString("DATA");
|
||||
ds << data;
|
||||
writeEndOfFrame();
|
||||
|
||||
enterCommandLoop();
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Connection from %s closed due to Kerberos failure\n\r", m_remoteHost.ascii()); fflush(stdout);
|
||||
}
|
||||
close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int SerialSocket::setupSerial() {
|
||||
struct termios oldtio, newtio;
|
||||
|
||||
m_config->setGroup("Serial");
|
||||
TQString serialDevice = m_config->readEntry("serialdevice", "/dev/ttyS0");
|
||||
m_baudRate = m_config->readEntry("baudrate", "9600");
|
||||
|
||||
m_fd_tty = ::open(serialDevice.ascii(), O_RDWR | O_NOCTTY | O_NONBLOCK | O_APPEND);
|
||||
if (m_fd_tty < 0) {
|
||||
printf("[FAIL] Unable to open serial device %s\n\r", serialDevice.ascii()); fflush(stdout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
tcgetattr(m_fd_tty, &oldtio); // Save current port settings
|
||||
|
||||
long serialBaud;
|
||||
if (m_baudRate == "1200") {
|
||||
serialBaud = B1200;
|
||||
}
|
||||
else if (m_baudRate == "9600") {
|
||||
serialBaud = B9600;
|
||||
}
|
||||
else if (m_baudRate == "19200") {
|
||||
serialBaud = B19200;
|
||||
}
|
||||
else if (m_baudRate == "115200") {
|
||||
serialBaud = B115200;
|
||||
}
|
||||
else {
|
||||
printf("[WARNING] Invalid baudrate %s specified, selecting 9600 instead\n\r", m_baudRate.ascii()); fflush(stdout);
|
||||
serialBaud = B9600;
|
||||
}
|
||||
|
||||
bzero(&newtio, sizeof(newtio));
|
||||
newtio.c_cflag = serialBaud | CS8 | CLOCAL | CREAD;
|
||||
newtio.c_iflag = IGNPAR;
|
||||
newtio.c_oflag = 0;
|
||||
|
||||
// Set input mode (non-canonical, no echo,...)
|
||||
newtio.c_lflag = 0;
|
||||
|
||||
newtio.c_cc[VTIME] = 0; // Inter-character timer unused
|
||||
newtio.c_cc[VMIN] = 0; // Blocking read unused
|
||||
|
||||
tcflush(m_fd_tty, TCIFLUSH);
|
||||
tcsetattr(m_fd_tty, TCSANOW, &newtio);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SerialSocket::commandLoop() {
|
||||
int cc;
|
||||
int ret;
|
||||
char buffer[1024];
|
||||
bool transferred_data;
|
||||
TQString instrumentCommand;
|
||||
|
||||
m_criticalSection++;
|
||||
try {
|
||||
transferred_data = false;
|
||||
if (state() == TQSocket::Connected) {
|
||||
if (canReadFrame()) {
|
||||
TQDataStream ds(this);
|
||||
ds.setPrintableData(true);
|
||||
ds >> instrumentCommand;
|
||||
|
||||
if (instrumentCommand != "") {
|
||||
if ((instrumentCommand == "SEND")) { // Send data to serial port
|
||||
TQByteArray data;
|
||||
ds >> data;
|
||||
ret = write(m_fd_tty, data.data(), data.size());
|
||||
while ((ret < 0) && (errno == EAGAIN)) {
|
||||
usleep(1000);
|
||||
ret = write(m_fd_tty, data.data(), data.size());
|
||||
}
|
||||
ioctl(m_fd_tty, TCFLSH, FLUSH_OUT);
|
||||
if (ret >= 0) {
|
||||
ds << TQString("ACK");
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Wrote %d bytes to the serial port\n\r", ret); fflush(stdout);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ds << TQString("NCK");
|
||||
}
|
||||
writeEndOfFrame();
|
||||
}
|
||||
else if ((instrumentCommand == "PING")) {
|
||||
ds << TQString("PONG");
|
||||
writeEndOfFrame();
|
||||
}
|
||||
else {
|
||||
printf("[WARNING] Received unknown command %s from host %s\n\r", instrumentCommand.ascii(), m_remoteHost.ascii()); fflush(stdout);
|
||||
ds << TQString("NCK");
|
||||
writeEndOfFrame();
|
||||
}
|
||||
}
|
||||
|
||||
transferred_data = true;
|
||||
}
|
||||
cc = read(m_fd_tty, buffer, 1024);
|
||||
if (cc > 0) {
|
||||
TQDataStream ds(this);
|
||||
ds.setPrintableData(true);
|
||||
ds >> instrumentCommand;
|
||||
|
||||
TQByteArray data;
|
||||
data.duplicate(buffer, cc);
|
||||
ds << TQString("DATA");
|
||||
ds << data;
|
||||
writeEndOfFrame();
|
||||
|
||||
transferred_data = true;
|
||||
if (enableDebug) {
|
||||
printf("[DEBUG] Got %d bytes from the serial port\n\r", cc); fflush(stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
m_criticalSection--;
|
||||
if (transferred_data) {
|
||||
if (m_loopTimer) m_loopTimer->start(0, TRUE);
|
||||
}
|
||||
else {
|
||||
if (m_loopTimer) m_loopTimer->start(m_pollInterval, TRUE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
catch (...) {
|
||||
m_criticalSection--;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int SerialSocket::enterCommandLoop() {
|
||||
if (!m_loopTimer) {
|
||||
m_loopTimer = new TQTimer();
|
||||
connect(m_loopTimer, SIGNAL(timeout()), this, SLOT(commandLoop()));
|
||||
}
|
||||
if (m_loopTimer) m_loopTimer->start(0, TRUE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
The SerialServer class handles new connections to the server. For every
|
||||
client that connects, it creates a new SerialSocket -- that instance is now
|
||||
responsible for the communication with that client.
|
||||
*/
|
||||
SerialServer::SerialServer(TQObject* parent, int port, KSimpleConfig* config) :
|
||||
TQServerSocket( port, 1, parent ), m_config(config), m_numberOfConnections(0) {
|
||||
|
||||
if ( !ok() ) {
|
||||
printf("[ERROR] Failed to bind to port %d\n\r", port);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("[INFO] Server started on port %d\n\r", port); fflush(stdout);
|
||||
}
|
||||
|
||||
SerialServer::~SerialServer() {
|
||||
//
|
||||
}
|
||||
|
||||
void SerialServer::newConnection(int socket) {
|
||||
SerialSocket *s = new SerialSocket(socket, this);
|
||||
s->m_remoteHost = s->peerAddress().toString();
|
||||
printf("[DEBUG] New connection from %s\n\r", s->m_remoteHost.ascii()); fflush(stdout);
|
||||
if (m_numberOfConnections > 0) {
|
||||
printf("[DEBUG] Connection from %s closed due to multiple access attempt\n\r", s->m_remoteHost.ascii()); fflush(stdout);
|
||||
ABORT_SOCKET(s)
|
||||
return;
|
||||
}
|
||||
connect(s, SIGNAL(connectionClosed()), s, SLOT(deleteLater()));
|
||||
s->initiateKerberosHandshake();
|
||||
emit newConnect(s);
|
||||
}
|
||||
|
||||
void SerialServer::remoteConnectionClosed() {
|
||||
m_numberOfConnections--;
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Remote Laboratory Serial Server
|
||||
*
|
||||
* 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 3 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.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* (c) 2012-2013 Timothy Pearson
|
||||
* Raptor Engineering
|
||||
* http://www.raptorengineeringinc.com
|
||||
*/
|
||||
|
||||
#include <tqsocket.h>
|
||||
#include <tqserversocket.h>
|
||||
#include <tqapplication.h>
|
||||
#include <tqvbox.h>
|
||||
#include <tqtextview.h>
|
||||
#include <tqlabel.h>
|
||||
#include <tqpushbutton.h>
|
||||
#include <tqtextstream.h>
|
||||
|
||||
#include <ksimpleconfig.h>
|
||||
|
||||
#include <tdekrbserversocket.h>
|
||||
|
||||
#include <tqtrla.h>
|
||||
|
||||
#define MAGIC_NUMBER 1
|
||||
#define PROTOCOL_VERSION 1
|
||||
|
||||
class SerialSocket : public TDEKerberosServerSocket
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SerialSocket(int sock, TQObject *parent=0, const char *name=0);
|
||||
~SerialSocket();
|
||||
|
||||
public:
|
||||
void close();
|
||||
void initiateKerberosHandshake();
|
||||
int enterCommandLoop();
|
||||
|
||||
private slots:
|
||||
void finishKerberosHandshake();
|
||||
void connectionClosedHandler();
|
||||
int setupSerial();
|
||||
void commandLoop();
|
||||
|
||||
private:
|
||||
int line;
|
||||
int m_criticalSection;
|
||||
int m_pollInterval;
|
||||
bool enableDebug;
|
||||
TQString m_remoteHost;
|
||||
TQString m_baudRate;
|
||||
int m_fd_tty;
|
||||
|
||||
TQTimer* m_kerberosInitTimer;
|
||||
TQTimer* m_loopTimer;
|
||||
|
||||
KSimpleConfig* m_config;
|
||||
|
||||
friend class SerialServer;
|
||||
};
|
||||
|
||||
class SerialServer : public TQServerSocket
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SerialServer(TQObject* parent=0, int port=0, KSimpleConfig* config=0);
|
||||
~SerialServer();
|
||||
|
||||
void newConnection(int socket);
|
||||
|
||||
private slots:
|
||||
void remoteConnectionClosed();
|
||||
|
||||
signals:
|
||||
void newConnect(SerialSocket*);
|
||||
|
||||
private:
|
||||
KSimpleConfig* m_config;
|
||||
int m_numberOfConnections;
|
||||
|
||||
friend class SerialSocket;
|
||||
|
||||
};
|
@ -0,0 +1,3 @@
|
||||
doc
|
||||
po
|
||||
src
|
Loading…
Reference in new issue