From: Mika Laitio Date: Fri, 22 Oct 2010 23:22:14 +0000 (+0300) Subject: initial version X-Git-Url: http://pilppa.org/gitweb/?p=lib1wire.git;a=commitdiff_plain;h=f61cc31d6bd16c50ca5900eebc5760bcb61a8bcc initial version --- f61cc31d6bd16c50ca5900eebc5760bcb61a8bcc diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..28280ce --- /dev/null +++ b/.cproject @@ -0,0 +1,471 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..54c1281 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +m4 +autom4te.cache diff --git a/.project b/.project new file mode 100644 index 0000000..5ab5516 --- /dev/null +++ b/.project @@ -0,0 +1,83 @@ + + + lib1wire + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/lib1wire/Debug} + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..0af34e6 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Mika Laitio diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..b2f02dd --- /dev/null +++ b/COPYING @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..7d1c323 --- /dev/null +++ b/INSTALL @@ -0,0 +1,365 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + 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, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + 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 you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' 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. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +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 can use 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 `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer 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. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + 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'. + + 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. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + 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 machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +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. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..89e7b35 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,5 @@ +lib1wire is library for communication between processes in one or many different devices +Copyright (C) 2010 Mika Laitio +You can redistribute it and/or modify it under either the terms of the LGPL version 3 +(see COPYING.txt file), or by obtaining the license from the author. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..79fdcf5 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,27 @@ +SUBDIRS = src \ + src_test +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = lib1wire.pc +EXTRA_DIST = lib1wire.pc.in +DISTCLEANFILES = \ + aclocal.m4 \ + config.h \ + config.h.in \ + config.log \ + config.status \ + config.cache \ + config.guess \ + config.sub \ + configure \ + depcomp \ + install-sh \ + libtool \ + ltmain.sh \ + Makefile.in \ + Makefile \ + missing \ + stamp-h \ + stamp-h1 \ + compile \ + autom4te.cache \ + $(pkgconfig_DATA) \ No newline at end of file diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..a1538e9 --- /dev/null +++ b/README @@ -0,0 +1,19 @@ +License +------- +GNU LESSER GENERAL PUBLIC LICENSE (lgpl) version 3, for details see the COPYING file + +Requirements +------------ +- linux kernel 1-wire kernel drivers (ds2490, w1_therm) +- 1-wire devices detected by the linux (so that device info can be found from /sys/bus/w1/devices) + +Build, install and clean +------------------------ +- build with command: ./autobuild.sh (generates required autoconf files) +- install with command: make install +- clean source code from generated build files: make distclean + +howto run test application +-------------------------- +1) run test client + src_test/test_w1 diff --git a/autobuild.sh b/autobuild.sh new file mode 100755 index 0000000..bb273c0 --- /dev/null +++ b/autobuild.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig +if ! [ -e Makefile ] ; +then + echo "No Makefile available, generating it." + libtoolize --automake --force --copy + autoreconf --force --install + ./configure --prefix=/usr/local +else + echo "Makefile found, no need to generate it." +fi +make diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..3309045 --- /dev/null +++ b/configure.ac @@ -0,0 +1,33 @@ +AC_INIT(src/W1Scanner.cc) +AM_CONFIG_HEADER(config.h) +AC_CONFIG_MACRO_DIR([m4]) + +PACKAGE=lib1wire +VERSION=1.0.0 + +CFLAGS="$CFLAGS -g -Wall -Werror" +LDFLAGS="$LDFLAGS" +AC_SUBST(CFLAGS) +AC_SUBST(LDFLAGS) +AC_MSG_NOTICE([objective c Makefile]) + +AM_INIT_AUTOMAKE($PACKAGE, $VERSION) + +AC_PROG_CXX +AC_STDC_HEADERS +AC_PROG_LIBTOOL +AC_PROG_INSTALL +AM_PROG_CC_C_O + +PKG_PROG_PKG_CONFIG() + +PKG_CHECK_MODULES(SRC, omniDynamic4 libplp) +AC_SUBST(SRC_CFLAGS) +AC_SUBST(SRC_LIBS) + +AC_OUTPUT([ +lib1wire.pc +Makefile +src/Makefile +src_test/Makefile +]) diff --git a/lib1wire.pc.in b/lib1wire.pc.in new file mode 100644 index 0000000..4814438 --- /dev/null +++ b/lib1wire.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: lib1wire +Description: pilppa communication bus library +Version: @VERSION@ +Requires: +Cflags: -I${includedir} -I${includedir}/lib1wire +Libs: -L${libdir} diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..f34f446 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,16 @@ +lib_LTLIBRARIES = lib1wire.la +lib1wire_la_SOURCES = \ + W1Device.cc W1Device.hh \ + W1Scanner.cc W1Scanner.hh \ + W1TemperatureSensor.cc W1TemperatureSensor.hh +lib1wire_la_LDFLAGS = $(SRC_LIBS) $(all_libraries) -version-info 1:0:0 -no-undefined +AM_CPPFLAGS = $(SRC_CFLAGS) -Iidl + +DISTCLEANFILES = Makefile.in + +lib1wireincludedir=$(includedir)/w1 +lib1wireinclude_HEADERS = \ + W1Device.hh \ + W1Scanner.hh \ + W1TemperatureSensor.hh + diff --git a/src/W1Device.cc b/src/W1Device.cc new file mode 100644 index 0000000..48f366d --- /dev/null +++ b/src/W1Device.cc @@ -0,0 +1,66 @@ +/* + * W1Device.cc + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ +#include +#include + +#include "W1Device.hh" + +using namespace w1; +using namespace std; + +W1Device::W1Device(dirent *direntry, int family_code_param, string id_param) { + string rootdir; + string device_dir; + string temp_str; + + rootdir = W1_SCAN_ROOTDIR; + temp_str = W1_SLAVE_FILE; + dir_path = rootdir + "/" + direntry->d_name; + slave_file = dir_path + "/" + temp_str; + family_code = family_code_param; + id = id_param; + name = id_param; +} + +W1Device::~W1Device() { +} + +int W1Device::get_family_code() { + return family_code; +} + +string W1Device::get_id() { + return id; +} + +string W1Device::get_name() { + return name; +} + +void W1Device::set_name(string name_param) { + name = name_param; +} + +string W1Device::get_time() { + time_t wtime; + struct tm *ltime; + char buffer[80]; + string ret_val; + + time(&wtime); + ltime = localtime(&wtime); + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", ltime); + ret_val = buffer; + return ret_val; +} + +void W1Device::printout() { + string text; + + text = get_time() + ": device type = , id = " + id + ", value = " + get_value(); + cout << text << endl; +} diff --git a/src/W1Device.hh b/src/W1Device.hh new file mode 100644 index 0000000..190e36e --- /dev/null +++ b/src/W1Device.hh @@ -0,0 +1,47 @@ +/* + * W1Device.hh + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ + +#ifndef W1DEVICE_HH_ +#define W1DEVICE_HH_ + +#include +#include +#include + +#ifndef W1_SCAN_ROOTDIR +#define W1_SCAN_ROOTDIR "/sys/bus/w1/devices" +#endif + +#ifndef W1_SLAVE_FILE +#define W1_SLAVE_FILE "w1_slave"; +#endif + +namespace w1 { + class W1Device { + public: + W1Device(dirent *direntry, int family_code_param, std::string id_param); + virtual ~W1Device(); + int get_family_code(); + std::string get_id(); + std::string get_name(); + virtual void printout(); + void set_name(std::string name_param); + virtual std::string get_value() = 0; + virtual std::string get_unit() = 0; + std::string get_time(); + protected: + virtual bool is_supported_family_code(int family_code) = 0; + int family_code; + std::string id; + std::string name; + std::string dir_path; + std::string slave_file; + private: + }; +} + +#endif /* W1DEVICE_HH_ */ diff --git a/src/W1Scanner.cc b/src/W1Scanner.cc new file mode 100644 index 0000000..08f96cc --- /dev/null +++ b/src/W1Scanner.cc @@ -0,0 +1,106 @@ +/* + * W1Scanner.cc + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ + +#include +#include + +#include +#include +#include + +#include +#include "W1Scanner.hh" +#include "W1TemperatureSensor.hh" + +using namespace w1; +using namespace std; + +W1Scanner::W1Scanner() { + log_debug("created"); +} + +W1Scanner::~W1Scanner() { + log_debug("destroyed"); +} + +bool W1Scanner::is_subdirectory(dirent *direntry) { + bool ret_val = true; + if (strcmp(direntry->d_name, ".") == 0 || + (strcmp(direntry->d_name, "..") == 0)) { + ret_val = false; + } + return ret_val; +} + +template +bool string_to_number(T& result, + const std::string& string_param, + std::ios_base& (*format)(std::ios_base&)) +{ + std::istringstream iss(string_param); + return !(iss >> format >> result).fail(); +} + +W1Device *W1Scanner::create_device(dirent *direntry) { + string folder_name; + string temp_str; + string device_name; + int pos; + int family_code; + bool sucFlg; + W1Device *ret_val; + + ret_val = NULL; + folder_name = direntry->d_name; + pos = folder_name.find("-"); + if (pos > 0) { + temp_str = folder_name.substr(0, pos); + // number in string is in hex format, convert to int + sucFlg = string_to_number(family_code, temp_str, hex); + if (sucFlg == true) { + cout << "family_code: " << family_code << endl; + device_name = folder_name.substr(pos + 1, folder_name.length() - pos); + switch(family_code) { + case 0x10: + case 0x28: + cout << "temperature sensor: " << family_code << endl; + ret_val = new W1TemperatureSensor(direntry, family_code, device_name); + break; + } + } + } + return ret_val; + +} + +list W1Scanner::get_device_list() { + DIR *dir; + int err_flg; + struct dirent *direntry; + W1Device *device; + list ret_val; + + dir = opendir(W1_SCAN_ROOTDIR); + if (dir != NULL) { + direntry = readdir(dir); + while(direntry != NULL) { + if (is_subdirectory(direntry) == true) { + log_debug("dir_name: %s\n", direntry->d_name); + device = create_device(direntry); + if (device != NULL) { + ret_val.push_back(device); + } + } + direntry = readdir(dir); + } + err_flg = closedir(dir); + if (err_flg < 0) { + log_error("failed to close 1-wire device directory scanned: %s\n", W1_SCAN_ROOTDIR); + } + } + return ret_val; +} diff --git a/src/W1Scanner.hh b/src/W1Scanner.hh new file mode 100644 index 0000000..2369948 --- /dev/null +++ b/src/W1Scanner.hh @@ -0,0 +1,34 @@ +/* + * W1Scanner.hh + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ + +#ifndef W1SCANNER_HH_ +#define W1SCANNER_HH_ + +#include +#include +#include + +#include "W1Device.hh" + +#ifndef W1_SCAN_ROOTDIR + #define W1_SCAN_ROOTDIR "/sys/bus/w1/devices" +#endif + +namespace w1 { + class W1Scanner { + public: + W1Scanner(); + virtual ~W1Scanner(); + std::list get_device_list(); + private: + //int parse_family_code(std::string folder_name); + W1Device *create_device(dirent *direntry); + bool is_subdirectory(dirent *direntry); + }; +} + +#endif /* W1SCANNER_HH_ */ diff --git a/src/W1TemperatureSensor.cc b/src/W1TemperatureSensor.cc new file mode 100644 index 0000000..a2b5337 --- /dev/null +++ b/src/W1TemperatureSensor.cc @@ -0,0 +1,85 @@ +/* + * W1TemperatureSensor.cc + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ +#include +#include +#include + +#include "W1TemperatureSensor.hh" + +using namespace std; +using namespace w1; + +W1TemperatureSensor::W1TemperatureSensor(dirent *direntry, int family_code_param, string id_param): W1Device(direntry, family_code_param, id_param) { + ifstream ifs(slave_file.c_str()); + if (ifs.is_open() == false) { + string text; + + text = get_time() + ": device type = temperature sensor, id = " + id + ", could not read file: " + slave_file; + cout << text << endl; + cout << "verify that you have w1_therm kernel module loaded" << endl; + } + else { + ifs.close(); + } +} + +W1TemperatureSensor::~W1TemperatureSensor() { +} + +bool W1TemperatureSensor::is_supported_family_code(int family_code) { + bool ret_val; + + ret_val = false; + switch(family_code) { + case 0x10: + case 0x28: + ret_val = true; + break; + } + return ret_val; +} + +string W1TemperatureSensor::get_value() { + vector text_file; + string temp; + string ret_val; + string last_line; + int pos; + int length; + + ret_val = ""; + ifstream ifs(slave_file.c_str()); + if (ifs.is_open() == true) { + while(getline(ifs, temp)) { + if (temp.length() > 0) { + last_line = temp; + //cout << ret_val << endl; + } + } + ifs.close(); + length = last_line.length(); + if (length > 0) { + pos = last_line.find("t="); + if ((pos >= 0) && + (pos + 2 < length)) { + ret_val = last_line.substr(pos + 2); + } + } + } + return ret_val; +} + +string W1TemperatureSensor::get_unit() { + return "C"; +} + +void W1TemperatureSensor::printout() { + string text; + + text = get_time() + ": device type = temperature sensor, id = " + id + ", value = " + get_value(); + cout << text << endl; +} diff --git a/src/W1TemperatureSensor.hh b/src/W1TemperatureSensor.hh new file mode 100644 index 0000000..f08ef4b --- /dev/null +++ b/src/W1TemperatureSensor.hh @@ -0,0 +1,26 @@ +/* + * W1TemperatureSensor.hh + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ + +#ifndef W1TEMPERATURESENSOR_HH_ +#define W1TEMPERATURESENSOR_HH_ + +#include "W1Device.hh" + +namespace w1 { + class W1TemperatureSensor : public W1Device { + public: + W1TemperatureSensor(dirent *direntry, int family_code_param, std::string id_param); + virtual ~W1TemperatureSensor(); + std::string get_value(); + std::string get_unit(); + void printout(); + protected: + bool is_supported_family_code(int family_code); + }; +} + +#endif /* W1TEMPERATURESENSOR_HH_ */ diff --git a/src_test/Makefile.am b/src_test/Makefile.am new file mode 100644 index 0000000..f7bc836 --- /dev/null +++ b/src_test/Makefile.am @@ -0,0 +1,8 @@ +noinst_PROGRAMS = test_w1 + +test_w1_SOURCES = test_w1.cc +test_w1_LDADD = $(SRC_LIBS) ../src/.libs/lib1wire.a + +AM_CPPFLAGS = $(SRC_CFLAGS) -I../src + +DISTCLEANFILES = Makefile.in \ No newline at end of file diff --git a/src_test/test_w1.cc b/src_test/test_w1.cc new file mode 100644 index 0000000..e8f6e2f --- /dev/null +++ b/src_test/test_w1.cc @@ -0,0 +1,40 @@ +/* + * test_w1.cc + * + * Created on: Oct 20, 2010 + * Author: lamikr + */ +#include +#include +#include + +#include + +#include "W1Scanner.hh" + +using namespace w1; +using namespace std; + +int main(int argc, char** argv) +{ + W1Scanner *scanner; + list device_list; + + scanner = new W1Scanner(); + device_list = scanner->get_device_list(); + while(1) { + for(list::iterator list_iter = device_list.begin(); list_iter != device_list.end(); list_iter++) + { + W1Device *device = (W1Device *)*list_iter; +/* + string name = device->get_name(); + string value = device->get_value(); + string unit = device->get_unit(); + cout << name << ": " << value << " " << unit << endl; +*/ + device->printout(); + } + sleep(60); + } + return 0; +}