This removes the DETECTED_ARCH cmake variable and device arch detection module as this is irrelevant for UPM. Also removing toolchain files since they are not really needed by this project.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
You can use it by setting IFACE_HDR with the names of the required interfaces or set module_iface in the sensor's CMakeLists.txt file.
Example files: src/abp/CMakeLists.txt src/lm35/CMakeLists.txt
Signed-off-by: Serban Waltter <serban.waltter@rinftech.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Newer compilers when used with security hardening options such as
-Werror=maybe-uninitialized so iniitial the variables to 0.
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
mraa_led_init API expects led number. So, replace it with
mraa_led_init_raw for initializing an LED based on label.
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Fedora now ships upm 1.7.0 for Fedora 28 and later so include these
details to enable easier consumption by Fedora mraa/upm.
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
In v8 API 6.5 the long deprecated IdleNotification has been removed so we
need to use IdleNotificationDeadline as nodejs 10.x uses newer v8.
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
The memory mapped GPIO function calls have been deprecated and in turn removed from the UPM libraries. MRAA now provides the best/fastest GPIO access possible based on the selected platform/pin automatically.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Fixes below issues:
tm1637.cxx:69:29: error: "%2d%02d" directive output may be truncated writing between 5 and 15 bytes into a destination of size 5 [-Werror=format-truncation=]
snprintf(myTime, 5, "%2d%02d", (hour + timezone + 24) % 24, min);
jhd1313m1.c:65:49: error: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 8 [-Werror=format-truncation=]
snprintf(str, sizeof(str), "Hello World %d", ndx);
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This removes unnecessary uint8 types from C driver structs that prevented some sensors from being initialized when connected to a MRAA subplatform.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
- Base C implementation, with all features and measurement modes (interrupts uses ISR)
- C++ wrapper around C implementation
Signed-off-by: Assam Boudjelthia <assam.boudjelthia@fi.rohmeurope.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Default to MONOTONIC clock for timer methods to avoid falling victim to
clock corrections. Changed signatures from accepting pointers since
this is not needed an complicates calls and Java/JS/Python bindings.
* Switched from nanosleep to clock_nanosleep to allow developers to
provide a clock for LINUX
* Default upm_clock_init to CLOCK_MONOTONIC
* Updated logic to calculating delay and elapsed to be more readable
* Added ns flavors for completeness
* Refactored all upm_* delay/timer methods
* Added #else for preprocessor cases w/o an #else
* Added test for AQI
* Added test fixture with logic to identify a minimum delay time
which is used as a metric for testing all delay methods
* Much more lenient unit testing of delays to minimize false CI
failures
Signed-off-by: Noel Eck <noel.eck@intel.com>
gcc8 detects that strncpy is overwiritng the null terminating character
the source strings are already initialized to 0 so memcpy would do the same
job
Fixes
rn2903.c:153:5: error: 'strncpy' output may be truncated copying 16 bytes from a string of length 511 [-Werror=stringop-truncation]
strncpy(dev->hardware_eui, dev->resp_data, RN2903_MAX_HEX_EUI64);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include sys/types.h for uint definition
uint is defined in sys/types.h, therefore this
header needs to be included, it gets exposed with
musl where this header is not getting included indirectly
as it is happening when building on glibc
Fixes build errors on musl e.g.
upm/src/kx122/kx122.hpp:456:31: error: 'uint' has not been declared
| void setBufferThreshold(uint samples);
| ^~~~
Signed-off-by: Khem Raj <raj.khem@gmail.com>
* Java/Python/Javascript examples
* change usleep to upm_delay_us in C++ example
* Add Java example to CMakeLists
Signed-off-by: Assam Boudjelthia <assam.boudjelthia@fi.rohmeurope.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Since UPM Travis-CI runs ctests (one of which loads python examples),
the added lines would fail if the RSC_DATA_RATE and RSC_MODE have not
been included in the python rsc module.)
Signed-off-by: Noel Eck <noel.eck@intel.com>
A few small changes to the nrf8001 which exposes a bit more via SWIG.
Also removed a method which had no implementation.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Some of the UPM libraries have a common C header with types used in both
the C and C++ source. This commit adds these common header files to the
SWIG modules.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added code to parse GPTXT nmea sentences. Added methods to calculate
sentences/second and raw bytes/second.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Small fixes for new nmea_gps code. Fixed an iterator which could get
dereferenced incorrectly, and changed an auto to an explicit type.
Signed-off-by: Noel Eck <noel.eck@intel.com>
NMEA GPS class now uses threads to handle parsing NMEA sentences.
Currently only handles GGA, GSV, and GLL types. Added queues for
holding parsed data.
* Parsing thread
* Parse GPS Fix from GGA and GLL
* Parse satellite info from GSV
* Provide a queue for GPS fix data as well as raw sentences
(for debugging)
* Target structures and NMEAGPS class have a __str__() method
which summarizes the objects into a std::string. These are
tied to the __str__ method in python
* Added google unit test for the above functionality
Signed-off-by: Noel Eck <noel.eck@intel.com>
Allow targets to specify a CMake build type but do not set a default
(removed 'Release'). The CXX flags for Release slow the builds down
significantly on Travis-CI (which can hit the time limit for jobs).
Signed-off-by: Noel Eck <noel.eck@intel.com>
Removed the 'return false;' lines after throws since these are not
needed and are generally flagged by static analysis tools. Also removed
a EOL spaces and added initializers for member variables at declaration
(since more than one constructor exists).
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit adds an additional constructor to the MHZ16 which takes a
path (string reference) to a UART device on the filesystem.
Example: MHZ16("/dev/ttyS0");
* Added constructor for device path w/default
* Removed unused global consts from header
Signed-off-by: g-vidal <gerard.vidal@ens-lyon.fr>
Signed-off-by: Noel Eck <noel.eck@intel.com>
While a 'make install' under a target library directory (build/src/lcd)
will build all dependencies required to make the target, it will NOT
install those dependencies. This can cause confusion for developers.
Adding a note to the build docs to clarify this case.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit removes the double-backslash when installing the examples.
Before:
.../upm//examples/...
Before:
.../upm/examples/...
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated the API documentation with changes to the kx122. Removed a few
extra EOL spaces.
Signed-off-by: Antoine W. Campagna <AntoineW@Campagna.org>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Renamed find module from FindCordova to FindUpmCordovaGenerator to be
more descriptive with the intent of the find module. Updated the find
module to use find_package_handle_standard_args so a version can be
specified and handle REQUIRED keyword.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The UPM Cordova binding generator creates Cordova plugs for each Java
package when BUILDCORDOVA=ON and BUILDSWIGJAVA=ON. This requires an NPM
install of the UPM Cordova plugin generator. Cordova bindings are built
under <build-dir>/cordova.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The hardcoded frequency of 10kHz was much slower than the capacity of the device
Signed-off-by: Antoine W. Campagna <AntoineW@Campagna.org>
Signed-off-by: Noel Eck <noel.eck@intel.com>
It appears that an additional tsl2561 Java example existed.
Removed the *newer* Tsl2561_Example.java in favor of the original
example. Updated all corresponding collateral which references the
Tsl2561_Example.java file (CMake and library descriptor file).
Signed-off-by: Noel Eck <noel.eck@intel.com>
Be a bit more lenient with the acceptable range for the microsecond
flavor of upm_delay (+/- 150us instead of +/- 100us).
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added an additional job to the CI matrix which does a minimal UPM
build (only C, C++, and unit tests) which can run and pass/fail quickly.
Signed-off-by: Noel Eck <noel.eck@intel.com>
MRAA deprecated mraa_gpio_use_mmaped which gets flagged as a warning
in UPM and then fails since -Werror is set.
For now, don't flag deprecations as warnings.
Signed-off-by: Noel Eck <noel.eck@intel.com>
According to SonarCloud's email notification,
they're dropping sonarqube.com in favor of sonarcloud.io.
Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added Google Test for unit testing. Currently NOT required by UPM
CMake.
* Added a test fixture for the utilities library.
* Fixed bug in delay methods provided by utilities library.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Unified all Java examples to *match* <LIBRARY>[_otherstuf]_Example.java.
Note, a handful of the examples have a pseudo-random string for the
first component (see FlexSensor_Example.java, ideally this would be
Flex_Example.java).
This commit allows for quick development on a single sensor library
since a -DMODULE_LIST=mysensorlib now works with Java examples
(previously Java examples would fail generation when using
MODULE_LIST).
* Renamed examples
* Updated class names
* Updated library descriptor .json files
* Updated sample mapping file
TODO: Make this work like the C/C++ examples - grab the target library
name from the filename and grab all dependencies from that target
library. Fix the handful of example names which don't conform.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Implemented a swig interface file for the kx122 and added corresponding
swig language examples. Also added an STL vector flavor for getting
acceleration values from the kx122.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit changes how the UPM doc targets build. The doc targets no
longer rebuild each time.
* doc (doxygen) target depends only on C/C++ source
* jsdoc (yuidoc) depends on doc and a stamp file
* pydoc (sphinx) depends on the output index.xml from doc
* pyupm_doxy2swig depends on python2 python extensions
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit moves common SWIG syntax to a ${libname}.i for sensor
libraries. Much of the swig content was originally duplicated for
each wrapper language which has lead to inconsistencies between wrappers
over time. This commit moves all swig syntax to a common file. Language
specific swig syntax can be added with #ifdef SWIG<LANGUAGE>.
The src/CMakeLists.txt will look first for a language-specific .i file,
then fall back to ${libname}.i. In this way, it's possible to override
the common ${libname}.i file. If a fallback .i file does NOT exist,
UPM CMake will generate a simple interface file for all languages.
Example:
If no src/abp/pyupm_abp.i and no src/abp/abp.i then
generate ${CMAKE_CURRENT_BINARY_DIR}/abp.i
When src/CMakeLists.txt uses a common ${libname}.i, it adds a -module
<language>upm_${libname} to the swig command line.
In the example below, a -module argument is provided for both Java and
Javascript, while the python module takes all syntax from pyupm_abp.i.
SWIG FILE Language CMake added SWIG args
--------------- ---------- ---------------------
src/abp/abp.i java -module javaupm_abp
src/abp/abp.i javascript -module jsupm_abp
src/abp/pyupm_abp.i python
This commit removes ~4500 redundant lines for the UPM repository and
helps promote uniformity for the SWIG'ed languages.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Touched on all library brief descriptions for better integration with ISS and fixed a few typos and connection tags in the process.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This ensures the generated xml paragraphs for the connection field won't have nested children and hence should be readable by the ISS parser properly
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The pydoc target copies python binaries and modules to pyupm. Since the
find command didn't make a distinction between python2/3 modules, a mix
of each could end up in pyupm. If sphinx runs under a mismatching
interpreter (mismatching against the python binaries) the build would
fail with load errors
* Only copy python2 modules (and binaries) to pyupm directory
* Explicitly run the sphinx tools w/python2
* Removed doc dependency to each library target (not needed).
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added explicit error for sign compares to CMake. Updated a handful of C
source which compared unsigned vs signed.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Currently ~2/5 UPM travis-ci jobs are failing with an SSL error from curl
when grabbing the 1.9.0 version of docker-compose. This commit is a
brute-force attempt to make this go away.
Signed-off-by: Noel Eck <noel.eck@intel.com>
FindNpm REQUIRE functionality was not provided by FindNpm.cmake.
UpdatedUpdated FindNpm to extract version, global node_modules
directory, and to fail if REQUIRE was set and npm was not found.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updates to the FindNodejs.cmake module to find newer installs of nodejs
across other distros. For example openSUSE: /usr/include/node6/node.h
* Added PATH_SUFFIX to find_path for node.h.
* Standardized usage of message() (added STATUS)
* Call find_package_handle_standard_args with version
* Reformatted to look uniform.
Signed-off-by: Noel Eck <noel.eck@intel.com>
As we've established in PR #623 (adding lis3dh support), this coefficient
is not needed and actually is cancelled out in calculations, so remove it.
Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com>
These four libaries were previously blacklisted for building Java
packages. Updating to include loadLibrary macro.
Signed-off-by: Noel Eck <noel.eck@intel.com>
All other upm library directories match their corresponding library
name, the i2clcd was an outlier which caused problems for CMake and
testing.
* Replaced usage of i2clcd with lcd
* Renamed source files and examples
* Updated examples to use correct class
* Updated documentation where necessary (left changelog sections)
Signed-off-by: Noel Eck <noel.eck@intel.com>
There is a single monolithic .i file which provides documentation for
the python methods. The per-sensor flow is not used. Removing for now,
may investigate implementing a per-sensor doc.i file again in the future.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Removed all references to #ifdef SWIGJAVA and JAVACALLBACK from the
library source. All java-specific source code has been moved to the
corresponding library's .i file for java.
* Update library source
* Update examples where necessary
* The function pointer methodology has been remove from libraries
which provided callbacks as both a class and a function pointer
implementation. Examples were updated to use the class version
of callbacks.
* Updated documentation for SWIGJAVA
Signed-off-by: Noel Eck <noel.eck@intel.com>
Previously the JAVA packages re-compile UPM library source files. This
was a work-around for compiling JAVA-specific functionality from the UPM
source into the SWIG'ed JAVA pacakges.
This commit removes the source from the JAVA SWIG compile and provides
an example on how to add the JAVA-specific code with a swig extend call.
* Added _upm.i file for %import (not %include)
* Added macros to _upm.i; 1 which performs the loadLibrary, and one
which adds the java installISR runnable.
* Updated the src/CMakeLists.txt file to NOT build library src into
pacakges.
* Updated the a110x library with examples on how to use the macros.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated the ZFM20 class to use UART functionality provided through the
mraa::Uart class instead of using the UART directly.
* Switch to mraa::Uart
* Added raw uart string constructor, closes#621
* Updated examples
* Added a common.i to minimize interface duplication
* Removed pointers from C++ functions where references are
preferable
* Removed dependency on termios
* Added typedefs to handle pass-by-reference
* Removed flushes
* Removed code after throws
Signed-off-by: Noel Eck <noel.eck@intel.com>
Tell the linker to error on unresolved symbols. This enables future
Java work (removing library source from Java packages) by flagging
missing reference.s
TODO: Move this up one level to all libraries. The reason this was not
done in the same commit is that the NodeJs libraries contain unresolved
references which must come from node but remain unresolved in the NodeJs
packages.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Switched these macros to functions so changes at the
upm_swig_<extension> level don't propogate further than necessary.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Removed include for pthreads from libraries where it appears NOT to be
used. Added ${CMAKE_THREAD_LIBS_INIT} to CMakeLists.txt for libraries
which appear to require threading.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Adding STMicro LIS3DH sensor support. This module is based on
the one for lis2ds12 (thanks, jontrulson!), but as sensors are
noticeably different, the contents underwent major rework.
Examples and basic API are left the same.
Tested on Intel Edison with Arduino board using both I2C and SPI.
Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com>
Previous commit failed because the C examples doesn't exist. The
version BEFORE that passes even though the C example filename pointed to
a test for a different sensor library.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Fix for case where dataAvailable always returns true. Previously, if
this ever happened (eg mock platform), string resp is resized until the
system is out of memory.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Removed the per-target install component in favor of a limited set of
insinstall components.
Available install components are: "upm" "upm-dev" "upm-java"
"upm-nodejs" "upm-python2" "upm-python3"
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit fixes issue 614. Updated the example to use pyupm_led as
the module name (and skip the local module rename).
Signed-off-by: Noel Eck <noel.eck@intel.com>
Replace TemplateItem with SensorTemplate in the sensortemplate.json and
json ctest. Change to contributions.md which removes all objects
with a key starting with "//" from the generated sensor .json file.
This allows the json ctest to pass OOTB for new sensor libraries
generated from the make_new_sensor function.
Signed-off-by: Noel Eck <noel.eck@intel.com>
CurieIMU example includes curieimu.hpp, which uses pthread symbols but
does not include pthreads.h, and thus fails building. The library
builds successfully because the source file includes the pthread
header before including curieimu.hpp.
* Moved pthread.h include from src to header.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Add documentation on how to build android packages
* Check env vars before running build-android.sh
* Add doc strings to build-android.sh
Signed-off-by: Nicolas Oliver <dario.n.oliver@intel.com>
Cleanup of UPM C++ examples. Switched from heap allocation to
stack allocation when possible. This simplifies the samples since it
removes the need for explicit memory management. A script was used to
identify and replace pointer use. To simplify the replace script, I
re-formatted the C++ examples using the UPM .clang-format file.
Unfortuantely this changes the look of the UPM C++ examples to a large
degree. However, examples will now have a standard look/feel and
uniform formatting.
* Ran clang-format w/provided UPM .clang-format file
* Removed new's/delete's whenever possible (left those in interface
examples)
* Added IIO sensor library implementation of callback void* arg
* Converted all sleeps to upm defined delays (added header when
necessary)
* Scrubbed CXX example includes
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit adds node based tests provided by Nico to the ctest
framework already established in UPM.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The mraa_i2c_read_bytes_call didn't work with firmata based
platforms and was changed to mraa_i2c_read_bytes_data call which
worked.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This patch reworks error handling in the C driver to more reliably detect
errors, and for C++, throw exceptions when they are detected.
The C++ API is unchanged aside from the fact that more methods will
throw an exception on errors now.
This addresses the error handling deficiencies reported in Issue #593.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
* Use docker images from docker hub instead of building them on Travis
* Fix doxygen warnings for Markdown Files
* Modify Travis build matrix to include stages and additional jobs
* Add doxygen2jsdoc submodule
* Add doxyport submodule
* Remove duplicated code in doxy/node directory
* Generate documentation for each language in Travis
Signed-off-by: Nicolas Oliver <dario.n.oliver@intel.com>
remove utf8 characters from:
* examples/c++/mcp9808.cxx
* examples/c++/tmp006.cxx
* src/bmp280/bmp280.c
* src/max30100/max30100.c
add -j8 options to make command in scripts/sonar-scan.sh
Signed-off-by: Nicolas Oliver <dario.n.oliver@intel.com>
Make a build heriarchy to reduce images size.
Add Android Things builds to build matrix.
Drop gcc-4 builds, use gcc-5 and gcc-6 instead.
Add SonarQube static analysis scans.
Signed-off-by: Nicolas Oliver <dario.n.oliver@intel.com>
Make sure I2c bus is initialized with provided bus number.
Removed unnecessary mraa::Result variable in favor of immediate checks.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Since UPM uses doxy2swig, there is no need for the swig interface
file autodoc for python.
Also, turned on the doxy2swig --quiet switch which cleans up the build
log a tiny bit.
This removes a redundant chunk of documentation from python modules
(per each function).
Old:
def pH(self, samples=15):
+-> """
| pH(DFRPH self, unsigned int samples=15) -> float
|
| Parameters
| ----------
swig| samples: unsigned int
|
| pH(DFRPH self) -> float
|
| Parameters
| ----------
+-> self: upm::DFRPH *
+-> float pH(unsigned int
| samples=15)
|
| Take a number of samples and return the detected pH value. The default
| number of samples is 15.
|
doxy2swig| Parameters:
| -----------
|
| samples: The number of samples to average over, default 15
|
| The pH value detected
| """
+-> return _pyupm_dfrph.DFRPH_pH(self, samples)
New:
def pH(self, samples=15):
+-> """
| float pH(unsigned int
| samples=15)
|
| Take a number of samples and return the detected pH value. The default
| number of samples is 15.
|
doxy2swig| Parameters:
| -----------
|
| samples: The number of samples to average over, default 15
|
| The pH value detected
+-> """
Signed-off-by: Noel Eck <noel.eck@intel.com>
Many of the UPM libraries allocate space on the heap but do not
explicitly handle copying and assignment. This commit uses C++11 delete
to forbit both the copy and assignment operator for these classes.
The C++ examples which used assignment operators to initialize class
instances were also updated since it did not appear necessary in those
cases to use the assignment operator.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Removed redundant usage of MODULE_LIST and SUBDIRS variables.
Treat utilities and interfaces directories the same (add both if not
added when using MODULE_LIST).
Signed-off-by: Noel Eck <noel.eck@intel.com>
The custom command used to create a per-library jar can hit a race
condition where upm_interfaces.jar is in the process of building when
the javac command runs for a target. This is because the javac command
was provided a full path to the upm_interfaces.jar file for ALL java
targets (even targets which do NOT use the interfaces).
Example:
javac -cp path/to/upm_interfaces.jar
If upm_interfaces.jar does not exist, javac is fine.
if upm_interfaces.jar exists and is a valid file, javac is fine.
If upm_interfaces.jar exists and is empty, javac throws an error.
For the targets which do not have a dependency on the interfaces,
it's possible one will run javac when the upm_interfaces.jar file is
building in parallel and will fail since the file is
open/incomplete/empty.
The fix is to only provide the full path to the upm_interfaces.jar file
for targets which depend on the interfaces. These will pass since they
depend on the java interfaces target.
Signed-off-by: Noel Eck <noel.eck@intel.com>
~20 UPM modules have multiple I2C calls in them. As per MRAA API
the I2C address is set in the MRAA I2C context and used from there
for all I2C transactions. Setting the I2C address alone does not
actually result in an I2C transaction. This makes multiple set
address calls pointless. This commit removes these superflous set
address calls from the UPM modules. Setting the address once per
context per device should be enough, unless there are multiple
addresses or multiple devices with different addresses.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The IMS library will now change its I2C address after resetting the HW to a new
address. It will attempt to close the mraa context and re-init each
time.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Both the .pc and .pom file creation flows rely on the per-target property
BINARY_DIR. This target property was added in CMake 3.4 so .pc and .pom
file generation was broken for CMake versions < 3.4. This commit
creates a new per-target property (TARGET_BINARY_DIR) which is set to
${CMAKE_CURRENT_BINARY_DIR} so that it's usable on CMake versions before
3.4.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Small change - updated from PATHS to HINTS. Search HINTS paths first to
provide location for mraa libraries.
Signed-off-by: Noel Eck <noel.eck@intel.com>
and example
LIDAR-Lite v3, a compact, high-performance optical distance measurement
sensor from Garmin™. It is the ideal solution for drone, robot or unmanned
vehicle applications.
The library provided is libupm-lidarlitev3.so
The example provided is lidarlitev3.cxx where it will print the distance
of object/obstacle from the sensor.
The image of the sensor is at docs/images/lidarlitev3.jpg
Signed-off-by: Saloni Jain <saloni.jain@tcs.com>
Signed-off-by: Niti Rohilla <niti.rohilla@tcs.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
Standardized the usage path for carrays_uint32_t.i in bacnetmstp and
e50hx libraries. Fixes some small mix-ups with java documentation when
looking for carrays_uint32_t.i.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Setting the arch to native for arm.* should not generally be necessary.
If this is absolutely required, it can be passed manually. Setting
-march=native seems to fail on some versions of gnu gcc for arm.
Removed the force to -march=native in favor of letting cmake set the
arch.
If at some point, this would be required, a better way would be to add
the compile flag after testing if it is supported.
Example:
upm_add_compile_flags(CXX "-march=native")
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit provides a basic driver for the Vishay VEML6070 UV
Sensor. Some functionality might be missing. Binding examples have
not been tested as of now.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The 00B7 unicode character in 4 of the Java examples can cause warnings
(and possible errors) when compiling. Removed to minimize this risk.
Signed-off-by: Noel Eck <noel.eck@intel.com>
When generating pom files from CXX targets for JAVA, check against the
JAVA blacklist file. Remove any targets in the blacklist prior to
generating the pom file.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Since src/utilities now builds a C/C++ library, other targets which were
using symbols from utilities now need to include the correct target
dependency. This is mainly for upm_delay* functions. Added utilities-c
target to all sensor library CMakeLists.txt which require it.
Moved macro for __FILENAME__ from upm_utilities.h to upm_fti.h since
ONLY the FTI headers used this.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Updated pom file generation: Generate pom files after all sensor
library targets have been created - allows for dependencies
* Changes for compiling on Android
* Check for mraa build options: Look at symbols in mraa library to
determine UPM build options (example: mraa_iio_init, mraa_firmata_init)
* Add per target summary for C/C++/java/nodejs/python
* Added hierarchy to fti include directory...
old: #include "upm_voltage.h"
new: #include "fti/upm_voltage.h"
* Removed unimplemented methods from mpu9150 library and java example
* Add utilities-c target for all c examples. Most of the C examples
rely on the upm_delay methods. Add a dependency on the utilities-c
target for all c examples.
* Updated the examples/CMakeLists.txt to add dependencies passed via
TARGETS to the target name parsed from the example name. Also updated
the interface example names to start with 'interfaces'.
* Updated src/examples/CMakeLists.txt to ALWAYS remove examples from the
example_src_list (moved this from end of function to beginning).
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Renamed version.c to version.hpp
* Updated CMakelist file
* Updated upm.i file to support version
* Updated/modified src Cmakelists to support base upm and wrapper dependency
Signed-off-by: sisinty sasmita patra <sisinty.s.patra@intel.com>
Previously, gyroscope were lumped in with compasses (magnetometers).
This isn't really proper as a gyroscope measures rotation rates in a
given axis, and has nothing to do with a magnetometer's use case.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
There are a variety of LSM303 devices out there with various
incompatibilities and differing capabilities. The current lsm303
driver in UPM only supports the LSM303DLH variant, so it has been
renamed to lsm303dlh to avoid confusion and to make it clear which
variant is actually supported.
All examples and source files have been renamed, including header
files. In addition, the class name, LSM303, has been renamed to
LSM303DLH. No other functionality or behavior has been changed.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Fixed bug in sensortemplate script. Handled assinment operator with
export since exec'ed processes need these variables.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Dependencies added via 'TARGETS' in add_example are 'in addition to' the
dependency provided by the example filename.
* Small change to examples/CMakeLists.txt to handle additional
dependencies
* Prefix 'interfaces-' onto the interfaces examples
Signed-off-by: Noel Eck <noel.eck@intel.com>
Ensure all src C++ headers which have corresponding C++ examples have
doxygen tags which point to those examples. Some were missing, some
were invalid, some needed to be updated to match the new example names.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Added //! [Interesting] tag to all examples which were missing this
* Removed windows CR/LF
* Removed pointers from examples since these are not needed. Removed
try/catch which seems to be there only to handle failing pointers and
return value from main.
* Reformatted examples when the formatting was wonky/inconstant.
Signed-off-by: Noel Eck <noel.eck@intel.com>
C/C++ CMakeLists.txt lines are no longer needed - removed.
Converted bash script to a function to add some error checking.
Removed redundant author/copyright entry.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated the examples to comprehend transitive dependencies. This means
that each example target will no longer have a giant list of -I includes
(the examples at the end of the list had includes for all previous
examples, upwards of 200 -I's on the command line).
* Created a CMakeLists.txt in the upm/examples directory, moved
common functionality to this level.
* C/C++ examples now look to the filename for their dependency
target name, ie; gas-mq2.cxx adds a dependency to the 'gas' target
* Updated a handful of C/C++ example names to reflect this
* Example CMake flow - glob the list of files, add targets for any
special case examples, then att targets for all the rest
Signed-off-by: Noel Eck <noel.eck@intel.com>
This driver has been rewritten from scratch.
See docs/apichanges.md for a list of API compatibility changes
compared to the original driver.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Previously, the upm include dir was only added for C targets. This
breaks when you have a C++ only target that depends on a C++/C driver.
Suddenly, you can't find header files like upm.h, upm_platform.h, etc.
This patch has the UPM include dirs always added for all targets.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Not necessary in C++. This was getting flagged as a memory
leak in the examples. Not a big deal, but can be done differently.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated cmake to use strip the full path to the base UPM directory
from generated documentation. This removes the build server full-
path from UPM documentation.
Old html:
upm: /iotdk/jenkins/workspace/upm-doc-stable/src/moisture/moisture.h File Reference
New html:
upm: src/moisture/moisture.h File Reference
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated descriptions on four headers. One header needed a description.
Replaced 'driver' with 'library' on the other three.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This also provides some more functionality. get_raw() has been
deprecated in favor of using getNormalized().
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Like Propanu commented, I changed the dependency of mraa library in each
CMakeLists.txt file of the sensors:
hdc1000 , mag3110 , mma8x5x , tcs37727 , tmp006
Signed-off-by: Norbert Wesp nwesp@phytec.de
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The HDC1000 is a digital humidity sensor with integrated temperature sensor.
Signed-off-by: Norbert Wesp <nwesp@phytec.de>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit adds support for following sensors:
MMA8652 , MMA8653, MMA8451 , MMA8452 , MMA8453
These sensors are three-axis accelerometer.
Signed-off-by: Norbert Wesp <nwesp@phytec.de>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
TCS37727 is a Color Light-To-Digital Converter.
I also added the manufacturer 'ams' of TCS37727.
Signed-off-by: Norbert Wesp <nwesp@phytec.de>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
MMC35240 is 3-axis magnetic sensor from MEMSIC.
This sensor can measure magnetic fields within the full scale range of
+-24 Gauss (G).
The library provided is libupm-mmc35240.so
The example provided is mmc35240-example-cxx where it will print x,y,z axis
when trigger buffer data is ready. It's also print azimuth value.
This sensor requires calibration. Please shake the sensor in figure 8 pattern,
mmc35240-example will print the calibrated level.
As the sensor data is noisy, we have implemented denoise algorithm within the
sensor library.
The azimuth formula is provided by Han, He <he.han@intel.com>.
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The sainsmartks driver has been reimplemented in it's own, new C/C++
library: lcdks (LCD Keypad Shield).
In addition, support for an optional backlight GPIO was added.
This was tested with the SainsmartKS and DFRobot LCD Keypad Shields.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
The lcm1602 and jhd1313m1 drivers had been rewritten in C with a C++
wrapper some time ago, however the original lcm and jhd drivers were
still present in the lcd library. In addition, to avoid header file
conflicts, the new, separated lcm and jhd header files were renamed
with a .hxx prefix.
This patch:
- renames the new lcm1602/ and jhd1313m1/ header files to have the
usual .hpp prefix.
- removes the lcm1602, jhd1313m1, and sainsmartks drivers from the
lcd/ (i2clcd) library.
- fixes the examples to use the "new" libraries (lcm1602 and
jhd1313m1)
- changes the argument type for the createChar() (C++) to use a byte
vector (std::vector<uint8_t>) rather than a typedef'd char array.
The lcm1602_create_char() function (C) uses a standard char *. The
use of std::vector is well supported by SWIG.
- SWIG interface files changed to use upm_vectortypes.i, and removes
the carrays helpers, which should no longer be needed for these
drivers.
- removes the inclusion of the driver C .h header files into the SWIG
interface files - this should not be needed for these drivers.
- the sainsmartks driver will be placed into it's own new lcdks (LCD
Keypad Shield) library. This library should support the
SainsmartKS, DFRobot LCD Keypad Shield, and similar products from
other manufacturers in a future commit.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit enables the ABP Honeywell sensor. Java examples is
yet to be tested and has not been provided with the current commit
and will be provided in a future commit.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
Due to the change of using upm_delay_ms() instead of usleep(), but
failing to adjust the delay time accordingly, ds18b20_update() was
waiting for 750000ms (12 minutes) before reading the result of a
measurement, instead of the more appropriate 750ms.
This should fix Issue #530.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Some private methods (relating to calibration/compensation) are no
longer exposed. In addition, the driver auto-detects the chip (BMP280
or BME280) and acts accordingly, rather than requiring the
specification of a chip id in the ctor.
The getHumidity() method no longer accepts an arguement representing
pressure at sea level. A new method is provided to specify this.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Updated t6713 to use class instances vs class pointers. Creating these
on the stack clears up some memory leaks where items created in the
heap are not deleted for a handful of the throw conditions. Removed
all news/deletes.
Also reformatted to remove tabs and some spaces.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The API has been changed in some cases - see the apichanges.md
document.
In addition, this driver uses a new upm_vectortypes.i SWIG interface
file to provide a mechanism for methods that return a vector of floats
and ints instead of a pointer to an array.
This works much nicer than C array pointers, and results in Python/JS/Java
code that looks much more "natural" to the language in use.
The Python, JS, and Java examples have been changed to use these
methods. Support for the "old" C-style pointer methods are still
provided for backward compatibility with existing code.
As an example - to retrieve the x, y, and z data for Euler Angles from
the bno055, the original python code would look something like:
...
x = sensorObj.new_floatp()
y = sensorObj.new_floatp()
z = sensorObj.new_floatp()
...
sensor.getEulerAngles(x, y, z)
...
print("Euler: Heading:", sensorObj.floatp_value(x), end=' ')
print(" Roll:", sensorObj.floatp_value(y), end=' ')
...
Now the equivalent code is simply:
floatData = sensor.getEulerAngles()
print("Euler: Heading:", floatData[0], ...
print(" Roll:", floatData[1], end=' ')
...
Additionally, interrupt handling for Java is now implemented
completely in the C++ header file now rather than the .cxx file, so no
special SWIG processing is required anymore. See Issue #518 .
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This interface file can be used to support some standard vector types
in our SWIG interface code. The current vector types supported are:
%template(intVector) vector<int>;
%template(int16Vector) vector<int16_t>;
%template(floatVector) vector<float>;
%template(doubleVector) vector<double>;
%template(byteVector) vector<uint8_t>;
Using these makes it much easier and more "natural" for use with the
SWIG languages rather than the currently used mechanism of array
pointers and certain other pointer-based methods.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
A few small fixes for the rf22 to satisfy klocwork.
* Converted malloc's to new's to be more C++'ish and since
malloc return were not checked.
* Initialize data, buf, and _lastInterruptFlags
* Up'ed RF22_MAX_MESSAGE_LEN to 64.
Reason:
void RF22::sendNextFragment()
{
if (_txBufSentIndex < _bufLen)
{
// Some left to send?
uint8_t len = _bufLen - _txBufSentIndex;
// But dont send too much
if (len > (RF22_FIFO_SIZE - RF22_TXFFAEM_THRESHOLD - 1))
len = (RF22_FIFO_SIZE - RF22_TXFFAEM_THRESHOLD - 1);
spiBurstWrite(RF22_REG_7F_FIFO_ACCESS, _buf + _txBufSentIndex, len);
_txBufSentIndex += len;
}
}
RF22_FIFO_SIZE = 64
RF22_TXFFAEM_THRESHOLD = 4
RF22_MAX_MESSAGE_LEN = 50
_buf[RF22_MAX_MESSAGE_LEN]
Length of _buf *was* 50, so if the 'But dont send too much' above
was to happen, the length is set to 63, which overruns
_buf[RF22_MAX_MESSAGE_LEN]
Signed-off-by: Noel Eck <noel.eck@intel.com>
Moved the SWIG version check from each sensor library .i file to
the base SWIG .i file (per interface). This cleans up the number
of #if SWIG_VERSION's across the code base, and will make cleanup
of these easier at a later date.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Documentation script was failing when parsing swig file. Added
a space in the ads1x15 java swig file to make the doc parser happy.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The purpose of the templatesensor is to get contributors up and running
faster when adding a new sensor.
* Created library named 'sensortemplate'
* Added C++ source
* Added swig interface files for java, javascript, and python
* Added sensortemplate image file
* Added examples for c++, java, javascript, and python
* Updated contributions.md with steps to create a new sensor from
the sensortemplate library.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit translates C++ interfaces to Java interfaces, previously C++ Interfaces implemented java classes.
* Added java swig interface files for all C++ interfaces to simplify swig
javaupm_iADC.i
javaupm_iCO2Sensor.i
javaupm_iHumiditySensor.i
javaupm_iLightController.i
javaupm_iLightSensor.i
javaupm_iModuleStatus.i
javaupm_interfaces.i
javaupm_iPressureSensor.i
javaupm_iTemperatureSensor.i
<example Usage>
%include"../interfaces/javaupm_iADC.i"
* Modified swig interface files for few sensors that implements interfaces
ads1x15
bmp280
bmpx8x
ds1808lc
hlg150h
lp8860
max44009
ms5611
si1132
si7005
t6713
* Removed few methods that were mentioned Protected and made them public, so that menthods can be overridden
* Made IModuleStatus virtual to avoid ambiguity in multiple inheritance
For example
class A {};
class B : public A {};
class C : public A {};
class D : public B, public C {};
This can be solved as
class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};
* Modified java interface files to support multiple swig versions
* Modified javaupm interface file to support standard auto load library code
* Fixed autoloadlibrary tests for interfaces
* Created one interface example separately <BME280_InterfaceExample.java>,
<example Usage>
BME280_InterfaceExample.java
since we cann't define swig versions inside java example file.
So, instaed added swig versions in Cmake.
<example Usage>
if (SWIG_VERSION VERSION_GREATER 3.0.8)
add_example_with_path(BME280_InterfaceExample bmp280 bmp280)
endif()
Signed-off-by: sisinty sasmita patra <sisinty.s.patra@intel.com>
This should be reverted when these 2 classes are removed from the i2clcd library. Will also require updating all the examples to load the new modules instead.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Replaced all occurances. While there are a few references
to magnometer out there, magnetometer is used much more broadly.
Signed-off-by: Noel Eck <noel.eck@intel.com>
In an effort to clean-up and standardize UPM library
documentation, this commit updates (and in most cases,
unifies) the CMake description string AND CXX header
@comname string.
Strings were taken from datasheets when possible, spelling
mistakes were addressed, copy/paste errors where fixed,
Title Case was used, etc.
* Tested/updated/added @web tags
* Added/updated invalid sensor images
* Added/updated @man tags, added missing manufacturers
Signed-off-by: Noel Eck <noel.eck@intel.com>
SWIGJAVA is defined for the swig interface file processing but is not
defined for the sensor library source build. There are multiple sensors
that appear to rely solely on SWIGJAVA - these are not building
correctly. Adding SWIGJAVA define for the java module src build.
Signed-off-by: Noel Eck <noel.eck@intel.com>
A handful of modules do not require mraa. Captured this in
src/CMakeLists.txt - only add mraa dependency for targets which
use:
upm_module_init(mraa ... )
or
upm_mixed_module_init(... REQUIRES mraa)
All sensors which use UPM interfaces (src/interfaces) now
explicitly add the interfaces target:
upm_module_init(interfaces ... )
or
upm_mixed_module_init(... REQUIRES interfaces)
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit attempts to use a more cmake-friendly approach when
handling inter-target dependencies. A combination of macros and
include_directories usage provided overzealous compile -I/blah
entries which equates to large catch-all build commands. For
example, the last CXX target contains include directories for nearly
all preceeding targets (~190). Library dependencies were also often
wrong or missing.
* Removed nearly all used of include_directories (swig cmake
commands still appear to need these for generating the swig
command line)
* Updated usage of target_link_libraries in upm_module_init,
also changed to using target_include_directories per target.
This greatly simplifies upm/mixed_module_init usage for libraries
which depend on other libraries (in this project).
example (src/tb7300/CMakeLists.txt)
old:
# upm-libbacnetmstp will bring in libbacnet, I hope
set (reqlibname "upm-bacnetmstp")
include_directories(${BACNET_INCLUDE_DIRS})
include_directories("../bacnetmstp")
upm_module_init()
upm_target_link_libraries(${libname} bacnetmstp)
new:
upm_module_init(bacnetmstp)
The reason here, is that tb7300 depends on bacnetmstp, which
depends on BACNET includes/libs, so tb7300 gets the headers and
libraries transitively via its dependency on bacnetmstp.
* Updated pkg-config .pc file generation flow to reflect changes
with dependencies.
* Create a real target for the interfaces (CXX abstract sensor
classes). Renamed the directory from 'upm/src/upm' to
'upm/src/interfaces' Also changed the install location of the
interface headers to include/upm/interfaces. Updated interface
header usage to reflect this.
* Updated a few sensor libs to use fwd declarations for mraa.
Ideally the UPM libs would do more of this which eases the
burden on anyone building on top of the sensor libraries since
they would not need to know about mraa headers.
* Fixed examples which use symbols not defined in local includes
Signed-off-by: Noel Eck <noel.eck@intel.com>
This is a housekeeping commit to move the upm_module_init
macro to a function. The scope resolution of the function
call adds a bit more protection for the variables used inside
this macro/function.
Signed-off-by: Noel Eck <noel.eck@intel.com>
In certain systems, where -std=c11 is used, certain posix extensions
are disabled unless specifically enabled. On these systems, this
could cause usleep() and/or nanosleep() to fail with an implicit
declaration warning. This patch ensures that at least POSIX 200809 is
used, if otherwise undefined.
This should fix Issue #513.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
usleep() has been deprecated, and can cause compile problems on never
glibc versions (debian jesse). We now use nanosleep() on linux
systems to implement delays.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
These changes add the ability to intialize a speaker instance to use a
PWM pin instead of a standard GPIO pin in order to emit sounds.
The current GPIO functionality is fairly constrained by the
implementation -- it only permits playing cerain hardcoded "notes".
The PWM support allows one to emit specific frequencies (currently
between 50-32Khz) using a PWM pin. Of course, you may still be
constrained by the limits of your PWM hardware in the end.
There are a few new functions provided to support this PWM mode. To
use the PWM mode of speaker, use the speaker_init_pwm() initialization
routine instead of speaker_init() (for C). For C++ and the SWIG
languages, pass "true" as the second argument to the constructor to
enable PWM mode. The default is "false", to match current default
behavior (GPIO).
Functions that are not related to a given mode (GPIO vs. PWM) will do
nothing if not usable in that mode.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
uartat is the underlying UART driver, specifically for use with
AT-style command driven devices like modems.
The le910 support is provided in the form of examples that make use
of the uartat driver to interact with the device.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Previously, the C++ and C versions of this driver were separate. Now
the C++ implementation wraps the C implementation.
In addition, the C++ init() function has been deprecated. It
currently does nothing, and examples have been modified to remove it's
calls. This function will be removed in a separate release.
The examples have been further modified to update all detected devices
and print their respective temperatures, instead of only reporting the
on the first device detected.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Handle failure in ISR routine - attempt to read status and
FIFO registers and continue sampleing (vs exiting and turning
off continuous sampling).
Signed-off-by: Noel Eck <noel.eck@intel.com>
- Fixed the Zephyr kernel version checks to check for 0.1.6 rather
than 1.6.0.
- fixed the k_timer implementation to actually work. None of these
were being called correctly.
- due to the fact that the k_timer API only has a 1ms resolution,
re-implement upm_delay_us() (on 0.1.6 version of zephyr) as a busy
loop using a upm_clock_t.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Moved require for Java/JNI/mraajava to top-level CMakeLists.txt
which will fail early if these are NOT found (vs failing in
the src-level CMakeLists.txt
Signed-off-by: Noel Eck <noel.eck@intel.com>
The java examples will now build if BUILDSWIGJAVA=on and
BUILDEXAMPLES=on. This is similar to the C/C++ examples.
* Replaced BUILDJAVAEXAMPLES w/BUILDEXAMPLES
* Updated docs
* Updated travis-ci
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Removed -dirty
* Also removed redundant set(PACK_PACKAGE_VERSION ...
since the first gets overwritten by the second
Signed-off-by: Noel Eck <noel.eck@intel.com>
If directories are specified with -DMODULE_LIST=blah, it's
possible to skip adding the utilities directory which is needed
by *most* sensor library targets in UPM. Added a check for this
when using -DMODULE_LIST.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Fixed a problem where the C/CXX compile flags were getting
overwritten. Fixed warnings in a few sensor drivers.
This commit fixes#485
Signed-off-by: Noel Eck <noel.eck@intel.com>
* CMake option to enable -Werror as default
* Change to make sure all cxx examples have correct target name
* Added PUBLIC CXX compiler flags to ads1x15 and ozw targets to
work around compiler warnings
* Renamed cmake variable for compiler warnings
Signed-off-by: Noel Eck <noel.eck@intel.com>
Additional unused variables.
This commit addresses all warnings emitted from -Wunused-variable
in the C++ src.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The new clock functions provide a mechanism for measuring durations in
the ms (millisecond) or us (microsecond) range, in a platform
independant manner.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Make these just a bit more interesting - continuously change color
and keep updating the lcd. Also, echo the write via printf.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The UPM ctests require python which will fail cmake configure if not
available. Defaulting to OFF for now.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added C/CXX warning messages similar to MRAA (w/ -Werror).
* Added syslog warning for missing switch cases
* Cleaned up uint vs int usage
* Fixed redifinition errors for C structs
* Added virtual destructors for base classes
* Removed redundant CMAKE_CXX_FLAGS from COMPILE_FLAGS for all three
wrapper languages. The CMAKE_CXX_FLAGS were showing up twice in
the compile commands for the wrappers.
* Added CMake WERROR option to enable/disable warnings as errors for
all targets.
* Disable a handful of compiler warnings for the wrapper cxx files,
this minimizes the number of warnings from auto-generated code).
Signed-off-by: Noel Eck <noel.eck@intel.com>
There is a bug in the UseSWIG.cmake file for cmake < 3.0.0
where it does not use the SWIG outdir correctly.
This fix instead sets the CMAKE_CURRENT_BINARY_DIR which is used
by UseSWIG.cmake to place the wrapper file (and other collateral).
Before (w/cmake < 3):
build/src/dfrph/pyupm_dfrphPYTHON_wrap.cxx
After:
build/src/dfrph/python2.7/pyupm_dfrphPYTHON_wrap.cxx
Signed-off-by: Noel Eck <noel.eck@intel.com>
In certain cases (debian/ubuntu multi-arch machines) the jar files
were bing installed in <prefix>/lib/lib/java/.
Regardless of platform or architecture, these files need to be in
<prefix>/lib/java/ .
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit touches a subset of UPM sensors which contain C source.
Cleaned up the CMakeLists.txt DESCRIPTION field to better represent
the library.
Signed-off-by: Noel Eck <noel.eck@intel.com>
There is a case where git_describe was returning 'HEAD-HASH-NOTFOUND'
which missed the STREQUAL check and VERSION was set incorrectly.
Changed the STREQUAL to a MATCH on -NOTFOUND. In this way, any of the
-NOTFOUND returns change the version to dirty.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated the changelog.md to reflect the recent python modules changes.
Added a vnext which can be replaced with the next UPM release version
number.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Grouped UPM python modules into upm directory, for example:
/usr/local/lib/python2.7/dist-packages/upm
* Updated UPM example import statements
* Removed unused RPATH statements from UPM src CMakeLists.txt,
currently build collateral contains an explicit RPATH which
is stripped from the install collateral.
* Converted python examples to work on both python2 AND python3
* Added ctest for loading examples w/python3
* Removed returns from swig macros
* UPM python module use will change...
Before:
import pyupm_dfrph
After:
from upm import pyupm_dfrph
or
import upm.pyupm_dfrph
etc...
* This commit fixes#468
Signed-off-by: Noel Eck <noel.eck@intel.com>
The DetectPython cmake script now outputs a default python executable.
Updated other cmake scripts to use this concept. Used default where
python2/3 will work, use explicit PYTHON2/3_EXECUTABLE where an
explicit version is needed. Also, fail if python is required and NO
version of python was found.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Moved body of each python example to main. This allows for basic
load module testing for CI
* General cleanup of python modules (crlf/tabs/prints/etc)
* Chmod'ed to 755 to allow running examples without specifying the
python interpreter
* Added ctest for loading python2/3 modules
* Added jniclasscode pragma for java swig interface files.
* Updated check_examplenames.py module to check all languages vs. a
cxx example name
* Added tests for checking python module and test loading
* Added 'make test' to travis-ci run (run ctests)
* Print a more meaningful message when not building cxx docs into
python modules
* Updated check_clean.py to only check java wrapper files
* ENABLED ctests for UPM
* Deleted using_carrays.py python example - this is covered by other
examples
Signed-off-by: Noel Eck <noel.eck@intel.com>
Updated UPM cmake to build both python2/3 modules if the necessary
python libs are available.
* Removed BUILDPYTHON3 cmake option in favor of building both
versions
* Added cmake module to find both python2 and python3
* Added macro which can be called from per-sensor cmake files
to add dependency libraries via target_link_libraries as well
as swig_link_libraries (for java, nodejs, and python)
* Python2 is required for python documentation builds
* Cleanup of python usage throughout UPM cmakelists.
* Make find_package for Node required. Removed check for NODE_FOUND
(which should have been NODEJS_FOUND) in favor of REQUIRED.
* The cxx and .py wrapper files get generated in python2/3 (instead
of the same directory). It appears these files are identical,
however since the targets can be built in parallel it's safer to split
them out.
* Updated all cmake dependencies related to building documentation.
* Removed unused classname from cmake files
Signed-off-by: Noel Eck <noel.eck@intel.com>
In certain cases with the Arduino 101/Zephyr, using the upm_delay*()
functions can cause hangs and/or exceptions. Adding a single tick to
the generated offset resolves these issues.
The documentation warns that this is a good idea to ensure that a
timer does not expire early. Adding this made the random hangs and
CPU exceptions go away.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This adds SPI support to the BMI160, as well as a C driver and a C
example. In addition, some changes were made to more properly detect
and handle errors.
Functions supplied by the bosch_bmi160 driver source code is also
exported and made available to callers who want more than what the
basic driver support. Bus access methods (I2C and SPI) are also now
exposed to both C and C++.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
* Moved CMAKE_MODULE_PATH append hier in top-level CMakeLists file
so that it's before all calls to find_package.
* Added pkg_check_modules for BACNET, MODBUS, JPEG, and OPENZWAVE
to top-level CMakeLists file.
* Removed pkg_check_modules from individual sensor libraries.
* Simplified SWIG find_package call - require 3.0.5 for all SWIG
wrappers.
* Moved options to beginning of top-level CMakeLists.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit cleans up multiple items with the UPM C example source.
* Switch from usleep and sleep to upm_delay* methods
* Include a mraa_init and check return value prior to using sensor
* All example mains now return
* Added include for mraa.h and upm_utilites.h to all examples
* Reformatted/removed tabs
* Updated author line for the examples I wrote
Signed-off-by: Noel Eck <noel.eck@intel.com>
This driver was developed with a DFRobot SHT10 Temperature and Humidity
sensor. This driver should work on all SHT1X devices.
It requires a 10K pull-up resistor connected to the data pin.
The sensor can be run at differing voltages from 2.5v to 5v.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This change makes sure all necessary grove images exist where
applicable. Also removed executable attribute from jpgs.
led sensor points to led.jpg.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Renamed all files from grovewater to water
* Replaced all instances of grovewater with water
* Updated all CMake files
Signed-off-by: Sisinty Sasmita Patra <sisinty.s.patra@intel.com>
* Renamed all files from groverrotary to rotary
* Replaced all instances of groverrotary with rotary
* Updated all CMake files
Signed-off-by: Sisinty Sasmita Patra <sisinty.s.patra@intel.com>
This module implements support for the DFRobot EC (Electrical
Conductivity) meter. It relies on the use of the DS18B20 UPM C module
for temperature gathering.
It has a pretty complicated calibration procedure which is somewhat
documented on the DFRobot wiki. Functions have been added to support
changing the various coefficients as desired.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit adds a C implementation for the DS18B20. The C++
implementation was untouched (ie: it does not wrap the C
implementation). This can be done in the future if desired.
In addition, add an ascii-schematic to both the .h and .hpp files to
better illustrate how to wire up the DS 1-wire interface for the UART.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Previously, C examples were being linked with the C++ libs. This
worked, since currently (until ds18b20) all C++ libraries with C
components simply wrapped the C componenets.
Now we make sure that only the C libs are ever linked with the C
examples.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
With the switch to using a function rather than a macro, $libname is
no longer available to module CMakeLists.txt files. These are useful
for adding dependencies (for example a module depending on another
module).
Now ${libnamec} (for C library) and ${libnamecxx} (for C++ library)
targets are made available to the module CMakeLists.txt files for
their use.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This module was initially known as GroveCollision. It has been
now changed to Collision. C source and examples added.
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
* Changed module from upm_grove to upm_relay/rotary.
* Updated java examples cmake from upm_grove to upm_relay/rotary.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Removed relay and rotary from grove library
* Removed relay and rotary from grove SWIG interfaces
* Fixed warning for o2 printf %
* Fixed return value warning for _get_normalized method used by
my analog sensors.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added C source for rotary angle sensor
* Renamed all files from groverrotary to rotary
* Replaced all instances of groverrotary with rotary
* Added C source for rotary angle sensor
* Updated all CMake files
Signed-off-by: Sisinty Sasmita Patra <sisinty.s.patra@intel.com>
Since these were split out from the grove lib, they need to load their
own library, ie Light now comes from upm_light.so.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Since these were split out from the grove lib, they need to load their
own library, ie Light now comes from upm_light.so.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added the C source for the flex sensor with necessary changes to cmake,
examples, and docs.
* Renamed all files with groveslide to slide
* Replaced all instances of groveslide with slide
* Added C source for slide sensor
* Updated all cmake files
* Added C example for slide sensor
* Split out slide sensor from grove library
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added the C source for the light sensor with necessary changes to cmake,
examples, docs.
* Renamed all files with grovelight to light
* Replaced all instances of grovelight with light
* Added C source for light sensor
* Updated all cmake files
* Added C example for light sensor
* Split out light sensor from grove library
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added the C source for the gsr sensor with necessary changes to cmake,
examples, docs.
* Renamed all files with grovegsr to gsr
* Replaced all instances of grovegsr with gsr
* Added C source for gsr sensor
* Updated all cmake files
* Added C example for gsr sensor
* Fixed C++ threshold method from throwing on a successfull aio read
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added the C source for the emg sensor with necessary changes to cmake,
examples, docs.
* Renamed all files with groveemg to emg
* Replaced all instances of groveemg with emg
* Added C source for emg sensor
* Updated all cmake files
* Added C example for emg sensor
Signed-off-by: Noel Eck <noel.eck@intel.com>
Added the C source for the O2 sensor with necessary changes to cmake,
examples, docs.
* Renamed all files with groveo2 to o2
* Replaced all instances of groveo2 with o2
* Added C source for o2 sensor
* Updated all cmake files
* Added C example for o2 sensor
Signed-off-by: Noel Eck <noel.eck@intel.com>
Implement a single source file for the following:
* mq2: H2/LPG/CH4/CO/alcohol/smoke/propane/etc
* mq3: Alcohol/benzine/CH4/hexane/LPG/CO
* mq4: CNG (mostly methane)
* mq5: H2/LPG/CH4/CO/alcohol
* mq6: LPG (mostly propane/butane)
* mq7: CO
* mq8: H
* mq9: CO/CH4/LPG
The documentation for these sensors notes that they do not read an exact
gas concentration. Some of the sensors have examples for how to
calibrate with a 'clean air environment' for outputing ppm, but this is
not the case for all mqx sensors. Because of this, the output can be
read as a normalized output (0.0->1.0), raw volts (normalized * aRef),
or a scaled/offset voltage.
Signed-off-by: Noel Eck <noel.eck@intel.com>
* Removed unessesary spaces.
* Changed INFO to STATUS since INFO is not a cmake message
keyword.
* Changed a few messages from status/info to warning.
* Fixed trailing carriage return on yuidoc execute_process.
* Removed my debug messages for CXX vs C.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Multiple changes related to building the vdiv c source w/c example.
* Renamed GroveVdiv to vdiv (all cases) throughout source, examples,
directory names, and documentation.
* Added C source.
* Tested C sensor code on edison
* Updated CMakeLists.txt for examples-c to build from
<sensorname>-c. This was a small change to get c examples to build
for sensors in which the C++ does NOT wrap the C.
* Added C example for vdiv.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This module implements support for the DFRobot Analog ORP
(Oxidation/Reduction Potential) Meter.
It requires 5.0 volts, but the more accurate the voltage specified (to
the constructor), the more accurate the meter (paraphrased from the
wiki).
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This module implements support for the DFRobot Laser PM2.5 Sensor. It
connects to a UART at 9600 baud. This is the only baud rate
supported. It optionally supports Reset and Set/Sleep gpios as well.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
These changes allow NMEA data to be read via I2C on UBLOX compliant
devices that support this capability, such as the LEA-6H based GPS
shield from DFRobot.
It adds a new init() function to the C code, and a new constructor to
the C++ code. It also adds 5 new examples for C, C++, Javascript,
Python, and Java.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This driver will serve as a generic module for grabbing NMEA data from
various GPS devices via a serial interface. ublox6 will also be
removed in favor of using this driver going forward.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This driver was developed with the DFRobot Light Sensor based on the
BH1750. It has a sensitivity of .5 to 65535 Lux. It supports
voltages from 3-5vdc and is connected via I2C.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This driver implements support for the DFRobot MMA7361 analog
accelerometer. It supports 3 axes with a selectable 1.5G and 6G
sensitivity. It is not really meant for navigation, but rather for
uses such as orientation and freefall detection.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Make sure that for all C libs, upmc-utilities is linked in. Also, do
not do this for the utilities library itself.
In addition, do not add the utilities library as a requirement for the
libupmc-utilities pkgconfig file.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This module provides support for the VK2828U7 (ublox based) GPS module
from DFRobot. It is connected via a UART, and emits NMEA data.
Ideally this data could be fed to an external library like TinyGPS to
parse the NMEA data and provide an easier method of extracting GPS
information.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Test commit for building C UPM modules.
* Added C include directory
* Added C utilities directory
* Rename C++ upm.h -> upm.hpp to make room for C upm.h
* Added upm_mixed_module_init function to src/CMakeLists.txt. This
function takes filesnames similar to upm_module_init and does a
bit of processing before calling upm_module_init.
* Added c example directory. Changed c++ example names.
* Added dfrph implemention for testing (C++ wraps C). Added mraa
to .pc requires for dfrph. Tested against stand-alone project.
Added dfrph c example.
* Update implemention of pkg-config file generation.
* Added two cmake cache variables: BUILDCPP and BUILDFTI
* Removed src from swig_add_module calls, added libname to
swig_link_libraries calls. Shrinks swig'ed binaries by ~13%.
* Added install target in upm/CMakeLists.txt to install C header,
directory. Is this where we want this?
* C FTI header directory is include/fti
Signed-off-by: Noel Eck <noel.eck@intel.com>
Fixed 16-bit read code to use the correct mraa function to align with
the datasheet. Added code for dew point calculation and single function
to retreive temp, humidity, and dewpoint. Other clean up as well.
Signed-off-by: Bill Penner <william.penner@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Exposed call to MRAA SPI frequency for those super long strips where the clock signal will degrade and introduce glitches. Slowing down will fix it without the need for extra filtering or redrivers. Batch mode also helps since only one write per frame will be required.
Added functions that control brightness only for fade effects without the need to keep an extra copy of the pixel color map.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
There are some issues using this device on the 101 with Firmata:
1. You cannot use any other ADC resolution than 1024. By default the
driver would try to set 12b resolution for improved accuracy. Doing
this on the 101 yielded nonsensical readings causing the driver to
fail. Using 10b resolution will yield less accuracy, but at least the
driver will function.
2. After the first ADC read, and for some time period after, the MRAA
aio_read() calls will always return 0. This would cause an exception
to be thrown by the driver since this is an invalid reading. Now, we
do an analog read on each channel and sleep for .5 seconds in the ctor
to get around this problem. It is a hack and should be properly fixed
somewhere else (firmata? MRAA?).
Some code was reworked/renamed to make it more clear what is actually
going on. In addition a setDebug() method was added to enable some
debugging output.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
The existing driver only supported IIO. This change adds support for
controlling the device via an I2C connection. In addition, there is a
new C++ example for it (l3gd20-i2c.cxx).
Note: Only basic functionality is supported, though a full register
map and access functions are available to fill in any desired
functionality.
Note, that some methods are only usable with specific connection
types. See the documentation.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Changes in library:
- enableProximity() function is to enable or disable proximity sensor
- enableIlluminance() function is to enable or disable illuminance sensor
- run clang-format
Changes in example:
- proximity and illuminance kernel IIO-based driver init state is power off,
require enable before read out sensor data. Sleep time is needed after
enable, the sleep time may vary on different platform.
- run clang-format
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This will ensure that all src modules are scanned first before
examples (c++/java).
In certain cases when doing parallel builds with many cores (8), the
examples for MODBUS, BACNET, and OPENZWAVE would not be built, since
their dependant libraries had not yet been located (in the src/
dir(s) via pkg_check_modules()), by the time the examples were being
compiled.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit reworks ozw somewhat and adds some device specific drivers
with examples. All of these drivers are kept in the UPM ozw library.
The OZW class has been reworked to make it a proper singleton, since
the OpenZWave::Manager() it depends on is already a singleton. This
avoids issues such as opening and initializing OpenZWave multiple
times.
A new, relatively thin base class, ozwInterface is also now present.
This class wraps some basic functionality, and handles initialization
of the OZW base class. It is intended to be inherited by device
driver classes. It operates on a node id for a device. Each OZW
device is referenced by a node id, which does not change unless the
device is removed (and possibly re-added) to a Z-Wave network.
Finally, a series of device specific drivers have been implemented.
These provide basic functionality to monitor and in some cases control
the operation of a Z-Wave device. They are the following:
ozwdump - This is a fake 'device' driver that initializes an OZW
network and dumps information on all of the nodes (devices) present.
Along with each node, available information on each valueid associated
with that node is also printed. This fake device and it's examples
replace the original ozw example.
aeotecss6 - Aeotec Smart Switch 6. This device allows control of the
switch, as well as reporting of information the switch makes
available, such as current consumption, volts, watts, and accumulated
energy use (kWh).
aeotecsdg2 - Aeotec Smart Dimmer Gen 2. This device is similar to the
Smart Switch 6, but also provides dimming functionality. It also
provides information on energy use.
aeotecdw2e - Aeotec Door/Window Sensor 2nd Edition. This device is a
magnetic switch with an embedded tamper switch used to detect the
opening/closing of windows and doors. This is a battery powered
device.
aeotecdsb09104 - Aeotec Home Energy Monitor. This device is intended
to be installed at the MAINS or Breaker box. It reports current and
cumulative energy consumption.
tzemt400 - Trane TZEMT400 Thermostat. This device is a thermostat
with Z-Wave functionality. The variant tested was the
TZEMT400BB32MAA. The driver reports various information on the status
of the thermostat, as well as the current measured temperature.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
UPM requires swig 3.0.5 which *was* offered in fenics-exp, but is
no longer available there. Switched to fenics-dev.
Signed-off-by: Noel Eck <noel.eck@intel.com>
There were api changes for iio kernel support on mraa which cascade to
UPM - setting the minimum version of mraa required.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Moved src include AFTER setter for PYTHONBUILD_VERSION. In this way,
the src CMakeLists has a valid PYTHONBUILD_VERSION str.
Call find_package on PythonInterp prior to finding the libs (recommended).
Signed-off-by: Noel Eck <noel.eck@intel.com>
HD44780 fails to initialize unsuccessfully without the workaround.
Adding workaround based on HD77480 datasheet for initialization
and software reset.
Signed-off-by: Akira Tsukamoto <akira.tsukamoto@linaro.org>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This module implements support for the Honeywell TB7300 Communicating
Fan Coil Thermostat. It may also support the TB7200, though only the
TB7300 was available for development of this driver.
The TB7200 Series PI thermostats are designed for zoning applications,
and the TB7300 Series PI thermostats are designed for fan coil
control. Both Series are communicating thermostats with models
available in BACnet® MS/TP protocol and can be easily integrated into
a WEBs-AX building automation system based on the NiagaraAX® platform.
TB7200 and TB7300 Series thermostats are compatible with the Honeywell
Occupancy Sensor Cover. Thermostats equipped with an occupancy sensor
cover provide advanced active occupancy logic, which will
automatically switch occupancy levels from Occupied to Stand-By and
Unoccupied as required by local activity being present or not. This
advanced occupancy functionality provides advantageous energy savings
during occupied hours without sacrificing occupant comfort. All
thermostats can be ordered with or without a factory installed PIR
cover.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This module implements support for the Amphenol Telaire Ventostat
T8100 Ventilation Controller with BACnet interface. It may also
support the T8200 and T8300 models, but they have not been tested.
The Telaire Ventostat T8100 reports Temperature, Humidity and CO2
concentrations. It supports an optional relay with a settable trigger
point. The unit this driver was tested under did not support the
optional relay. The temperature range supported is 0-50C, humidity is
0-100% non-condensing, and CO2 range is appoximately 0-2000 PPM for
the T8100. Other sensors in this family support wider ranges.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit removes functionality that is now present in the
bacnetutil class. This simplifies the driver considerably. The
examples were modified to reflect the renaming of some utility
functions in bacnetutil.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
There is some functionality that will always be needed for BACnet
drivers. Here we create a new bacnetutil class, built as part of the
bacnetmstp library that can handle much of the data handling and setup
a BACnet driver will need.
The idea is that any BACnet functionality needed, that is not
device-specific, should be added to this class for all drivers to use.
The intent is that all BACnet drivers will inherit from this class.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This reworks the data handling portion of bacnetmstp. Instead of just
handling a single data element returned from a device, we can handle
more, as in the case of BACnet arrays.
Added the ability to create BACnet enum data elements. This is needed
in order to set binary value objects.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
This module (bmx055) implements support for the following core Bosch
chipsets:
bma250e - accelerometer, 3 variants (chip id's 0x03, 0xf9, and 0xfa)
bmm150 - magnetometer
bmg160 - gyroscope
The other 3 devices are combinations of the above:
bmx055 - accel/gyro/mag
bmc160 - accel/mag
bmi055 - accel/gyro
...for 6 devices total.
For the combination devices, all of the sub-devices appear as
individual independent devices on the I2C/SPI bus.
The combination drivers provide basic configuration and data output.
For more detailed control as well as interrupt support, you should use
the core device drivers (accel/gyro/mag) directly.
These devices support both I2C and SPI communications. They must be
powered at 3.3vdc.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Switch the calls from pkg_search_module to pkg_check_modules
for ozw, bacnet, and modbus. Check prints out the version when
found.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Merged conflict in grove.cxx GroveTemp::value where new
scale factor was added. Changed to apply scale factor
post error-check.
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
aio: mraa_aio_read (v1.0.0) can now return -1, treat that in sensors using it
Adds alot of exceptions if the aio read goes wrong
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
L3GD20 is tri-axis gyroscope from STMicroelectronics.
This sensor can measure angular velocity in degree per second.
The library provided is libupm-l3gd20.so.0.4.0.
The example provided is l3gd20-example where it will print x,y,z axis when
trigger buffer data is ready.
This sensor requires calibration to be done for 2 seconds. Please place the
sensor on level surface.
As the sensor data is noisy, we have implemented denoise algorithm within the
sensor library.
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Code cleanup and proper close iio device in destructor.
KXCJK-1013 is tri-axis accelerometer from Kionix.
This sensor can measure acceleration in metre per second squared or in
G-forces.
The library provided is libupm-kxcjk1013.so.0.4.0.
The example provided is kxcjk1013-example where it will print x,y,z axis when
trigger buffer data is ready.
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
This driver implements support for the Bosch BNO055 Absolute
Orientation 9DOF Fusion Hub. It was implemented on the Adafruit
variant at https://www.adafruit.com/products/2472.
The BNO055 is a System in Package (SiP), integrating a triaxial 14-bit
accelerometer, a triaxial 16-bit gyroscope with a range of ±2000
degrees per second, a triaxial geomagnetic sensor and a 32-bit cortex
M0+ microcontroller running Bosch Sensortec sensor fusion software, in
a single package.
This sensor handles the hard problem of combining various sensor
information into a reliable measurement of sensor orientation (refered
to as 'sensor fusion'). The onboard MCU runs this software and can
provide fusion output in the form of Euler Angles, Quaternions, Linear
Acceleration, and Gravity Vectors in 3 axes.
The focus on this driver has been on supporting the fusion components.
Less support is available for use of this device as a generic
accelerometer, gyroscope and magnetometer, however enough
infrastructure is available to add any missing functionality.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Previously in MRAA, the libmraa library was statically linked into the
libmraajava library. This was changed recently in MRAA, causing most
java examples to fail due to missing mraa symbols. This patch
specifically adds libmraa to the link in addition to libmraajava.
In addition, use *_LIBRARIES in the java specific swig_link_libraries
call rather than *_LDFLAGS.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
This library adds support for both the BMP280 and BME280 sesnors from
Bosch. The BME is virtually identical to the BMP280 aside from some
slight register changes and adding support for a humidity sensor.
The BMP280 is an absolute barometric pressure sensor especially
designed for mobile applications. The sensor module is housed in an
extremely compact 8-pin metal-lid LGA package with a footprint of only
2.0 × 2.5 mm2 and 0.95 mm package height. Its small dimensions and its
low power consumption of 2.7 μA @1Hz allow the implementation in
battery driven devices such as mobile phones, GPS modules or watches.
The BME280 is as combined digital humidity, pressure and temperature
sensor based on proven sensing principles. The sensor module is housed
in an extremely compact metal-lid LGA package with a footprint of only
2.5 × 2.5 mm2 with a height of 0.93 mm. Its small dimensions and its
low power consumption allow the implementation in battery driven
devices such as handsets, GPS modules or watches. The BME280 is
register and performance compatible to the Bosch Sensortec BMP280
digital pressure sensor
These drivers support both I2C and SPI operation.
When using SPI on an Edison with the arduino breakout board, you
must specify a CS of -1 to the constructor, and connect the chip's
CS pin to arduino pin 10.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
This driver, based on bosch code is being removed in favor of a new
driver to be added soon that is more fully functional and includes SPI
support.
The new driver will be included along with a BMP280 implementation in
a new bmp280 library.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit removes the old bmp180 driver that was erroneously
re-added when the interface examples and headers were introduced.
It then switches the users of bmp180 to the existing bmpx8x driver,
which already supports the bmp180.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Proper close iio device in destructor.
APDS-9930 is light and proximity sensor from Avago Technologies.
This sensor can measure ambient light in lux and proximity distance in 100mm.
The library provided is libupm-apds9930.so.0.4.0.
The example provided is apds9930-example where this app will print the value of
ambient light and proximity in every 1 second.
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
Code cleanup and proper close iio device in destructor.
KXCJK-1013 is tri-axis accelerometer from Kionix.
This sensor can measure acceleration in metre per second squared or in
G-forces.
The library provided is libupm-kxcjk1013.so.0.4.0.
The example provided is kxcjk1013-example where it will print x,y,z axis when
trigger buffer data is ready.
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
The env CC=clang builds were previously getting overridden for each build since
the language: cpp defaults gcc/g++ (travis-ci was not building UPM w/clang).
This commit explicitly adds the clang compiler to the build matrix.
* Specify gcc/clang in the compiler directive
* Add a node.js 0.10 entry
* Add a few debug messages
* General cleanup of .travis.yml
* Add the upm make install step for completeness
Signed-off-by: Noel Eck <noel.eck@intel.com>
This driver supports, and was tested with, a DS18B20 1-wire
Temperature Sensor using external power.
This device requires the use of a UART to provide access to a Dallas
1-wire bus, via a new facility supported by MRAA (once the relevant PR
is accepted), using the UartOW access class. It is important to
realize that the UART is only being used to access and control a
Dallas 1-wire compliant bus, it is not actually a UART device.
Multiple DS18B20 devices can be connected to this bus. This module
will identify all such devices connected, and allow you to access them
using an index starting at 0.
Parasitic power is not currently supported due to the very tight 10us
limit on switching a GPIO properly to supply power during certain
operations. For this reason, you should use external power for your
sensors.
Setting the alarm values (Tl, Th) is also not supported, since this is
only useful when doing a 1-wire device search looking for devices in
an alarm state, a capability not yet supported in MRAA. In reality,
this is trivial to handle yourself in your application.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Noel Eck <noel.eck@intel.com>
This adds initial support for the DS2413 Dual Channel Addressable
Switch. This is a Dallas Semiconductor 1-wire compliant device
providing access to 2 open-drain GPIOs.
https://learn.adafruit.com/adafruit-1-wire-gpio-breakout-ds2413/overview
This driver requires One-Wire over UART support in MRAA (PR #415)
which is not yet merged.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
To make room for UPM C and C++ sensor code to coexist, all UPM
C++ headers have been renamed from h -> hpp. This commit contains
updates to documentation, includes, cmake collateral, examples, and
swig interface files.
* Renamed all cxx/cpp header files which contain the string
'copyright intel' from .h -> .hpp (if not already hpp).
* Replaced all references to .h with .hpp in documentation,
source files, cmake collateral, example code, and swig interface
files.
* Replaced cmake variable module_h with module_hpp.
* Intentionally left upm.h since this file currently does not
contain code (documentation only).
Signed-off-by: Noel Eck <noel.eck@intel.com>
The boschdriver.h file contains tags which are picked up by
doxygen and cause incorrect results. For example, the
\mainpage and \license cause the Bosch header collateral to
be placed on the index.html page of the UPM docs.
Added an entry to EXCLUDE_PATTERNS which handles this.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This UPM module captures a still frame from a Linux V4L device, such
as a USB webcam, and and then allows you to save it as a JPEG image
into a file.
The camera and driver in use must support streaming, mmap-able buffers
and must provide data in YUYV format. This should encompass most
video cameras out there. It has been tested with a few off the shelf
USB cameras without any problems.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver requires the UPM BACNETMSTP driver (PR #385) to be merged
first.
This module implements support for the Veris E50H2 and E50H5
BACnet Energy Meters.
From the datasheet: The E50H5 BACnet MS/TP DIN Rail Meter with
Data Logging combines exceptional performance and easy
installation to deliver a cost-effective solution for power
monitoring applications. Native serial communication via BACnet
MS/TP provides complete accessibility of all measurements to your
Building Automation System. The data logging capability protects
data in the event of a power failure. The E50H5 can be easily
installed on standard DIN rail, surface mounted or contained in
an optional NEMA 4 enclosure, as needed. The front-panel LCD
display makes device installation and setup easy and provides
local access to the full set of detailed measurements.
This module was developed using the upm::BACNETMSTP module, based
on libbacnet-stack 0.8.3. Both libbacnet 0.8.3 and the
upm::BACNETMSTP libraries must be present in order to build this
module. This driver was developed on the E50H5. The Trend Log
functionality is not currently supported.
The Binary Input Objects are also not supported as these are only
used for the Alarm bits which are already available from Analog
Input Object 52 as an alarm bitfield incorporating all of the
supported alarm indicators.
It was connected using an RS232->RS485 interface. You cannot use
the built in MCU TTL UART pins for accessing this device -- you
must use a full Serial RS232->RS485 or USB-RS485 interface
connected via USB.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver is implemented as a singleton due to it's reliance on the
bacnet-stack implementation. This implementation does not currently
support multiple BACnet networks at the same time, though in the
future it might, depending on the future of bacnet-stack development.
The version of bacnet-stack used in developing this driver was 0.8.3.
This driver is not intended to be used directly by end users, rather
it is intended for UPM drivers supporting specific BACnet devices,
such as the Veris E50H5 Energy Meter.
Unfortunately, this means that a process can only support a single
RS-485 BACnet network, though you can support multiple devices on that
network.
No examples are provided. Please look at the E50HX driver for an
example of how to use this class in a BACnet MS/TP device driver if
you want to write one.
When initialized, the bacnet-stack library will attach to your RS-485
based BACnet network, and start a Master Finite State Machine (FSM) in
a separate thread. This thread will handle the details of token
passing and locating other Masters in the network (Poll For Master).
This driver will appear as a BACnet Master device on the BACnet
network, which supports only the required Device Object and any
required services (readProp) and Device Object properties.
When initializing the driver, it is important to select a Device
Object Instance ID that is unique on your BACnet network. This is the
unique identifier that will be used to identify your Master to the
rest of the BACnet network.
In addition, it may take some time after initialization before you
will be able to communicate on the network, as the first thing that
has to happen is that all Masters on the network need to be identified
(handled by the Master FSM) and a token needs to be received before
your Master can begin transmitting (making requests). This may take a
couple of minutes on a large network.
You can speed this process up by specifying a maxMaster (to
initMaster()) that is smaller than the default (127) -- but only if
you are CERTAIN that there are no masters with a MAC address higher
than the value you choose. If you fail to follow this rule, you may
introduce hard to identify token passing problems on the network for
yourself and other BACnet Masters.
Currently, this driver only supports the readProperty and
writeProperty requests to other BACnet devices. In addition, array
property reading and writing is not currently supported.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Fixed a few small typos for handling node as well as a
small conditional for building PYTHON.
* Fixed some NODE_EXECUTABLE->NODEJS_EXECUTABLE instances
which must have been missed from a previous commit.
* Added a qualifier for python documentation so both
BUILDSWIGPYTHON AND BUILDSWIG must be set to add
dependencies for pydoc.
Signed-off-by: Noel Eck <noel.eck@intel.com>
Changed ${LIB_INSTALL_DIR} with lib, because the variable expands to
/usr/lib, making the install path /usr/usr/lib/node_modules, which
is incorrect. Now the install path is /usr/lib/node_modules.
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Small change to get rid of a warning in newer cmake versions.
Versions of cmake (>= 3.0) throw a warning on the add_dependecy
method for non-existant dependencies (add_dependency call before
target_link_libraries call).
Removed the call to add_dependency since target_link_libraries should
provide the same functionality for ozw and modbus dependencies.
Signed-off-by: Noel Eck <noel.eck@intel.com>
This avoids using include files from a pre-existing UPM installation
as they can break the build if API changes are made.
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Use the same methodology as in mraa, by default build for python2, if requested
use python3 for everything
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
Internal sensor onboard the Curie/Arduino101 can be accessed via Firmata using
this plugin. You will need mraa compiled with -DFIRMATA=ON for this to work and
be using Firmata with the CurieIMU firmata extension for ExtensibleFirmata
Signed-off-by: Ron Evans <ron@hybridgroup.com>
Signed-off-by: Justin Zemlyansky <jlstigman@live.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This patch checks for, and enables C++11 support for building UPM.
This should work for all cmake versions currently supported by UPM
(2.8.11+), and any compiler (clang/gcc) that was released in this
decade.
Support can be specifically disabled by passing '-DENABLECXX11=OFF' to
cmake, though modules requiring this support will not build.
C++11 support is enabled by default.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the Veris H8035 and H8036 Energy
Meters.
The H8036 is similar to the H8035, but provides much more data.
The Enercept H8035/H8036 is an innovative three-phase networked
(Modbus RTU) power transducer that combines electronics and high
accuracy industrial grade CTs in a single package. The need for
external electrical enclosures is eliminated, greatly reducing
installation time and cost. Color-coordination between voltage leads
and CTs makes phase matching easy. Additionally, these transducers
automatically detect and compensate for phase reversal, eliminating
the concern of CT load orientation. Up to 63 Transducers can be
daisy-chained on a single RS-485 network.
This module was developed using libmodbus 3.1.2, and the H8035. The
H8036 has not been tested. libmodbus 3.1.2 must be present for this
module to build.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The Bosch BMI160 is a 3-axis Accelerometer and Gyroscope.
Additionally it supports an external Magnetometer, accessed through
the BMI160's register interface. This driver was developed with a
BMI160 "Shuttle" board, which included a BMM150 Magnetometer.
The device is driven by either 1.8v or 3.3vdc. This driver
incorporates the Bosch BMI160 driver code at
https://github.com/BoschSensortec/BMI160_driver .
While not all of the functionality of this device is supported
initially, the inclusion of the Bosch driver in the source code
makes it possible to support whatever features are required that
the driver bosch driver itself can support.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The Veris TEX00 temperature sensor family is made up of a series of
RTD thermistors in wall mount packaging.
This driver was developed using the TED00, which utilizes a 10K Ohm
Type 2 thermistor. However, this driver can support the other 12
variants of the TE series as well by providing the correct sensor type
to the class constructor. These other sensor types have not been
tested. Only the TED00 hardware was tested with this driver.
This sensor must be connected as part of a voltage divider, with the
balancing resistor ideally matched to the sensor's 25C detection
range. For the TED00 (10kt2), a 10K Ohm (1% tolerance) resistor was
used in a circuit like the following:
GND o----|TED00(10k2)|----o----|balanceResistor(10K)|----o VCC (+5vdc)
|
|
|----o A0 (analog input to MCU)
A 3.3vdc voltage can be used as well if desired.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The driver adds support for the Veris TEAMS Temperature Transmitter.
It provides it's output via a 4-20ma current loop. The supported
temperature range is 10C to 35C.
This sensor was developed with a Cooking Hacks (Libelium)
4-channel 4-20ma Arduino interface shield. For this interface,
the receiver resistance (rResistor) was specified as 165.0
ohms.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The driver was developed using the Veris CWLSHTA CO2 Gas sensor. The
'T' variant supports a temperature sensor, and the 'H' variant
supports a humidity sensor.
All 3 signals are provided by the device as analog 0-5Vdc, 0-10Vdc, or
4-20ma loop current outputs. For devices supporting temperature, the
valid temperature range is 10C to 50C. The humidity ranges from 0% to
100% (non-condensing). The CO2 sensor ranges from 0 to 2000 ppm.
This driver was developed using the 5Vdc outputs and the 4-20ma
outputs. For voltage outputs, your MCU must be configured for 5V
operation. In addition, you must configure the sensor (via it's
configuration switches) to output 0-5VDC only. Using any other analog
reference voltage will require the appropriate external circuitry
(such as a voltage divider) in order to interface safely with your
MCU.
In addition, the sensor can be configured for 4-20ma usage, by
specifying the correct receiver resistance (in ohms) in the
constructor. This sensor was tested with a Cooking Hacks (Libelium)
4-channel 4-20ma Arduino interface shield. For this interface, the
receiver resistance was specified as 165.0 ohms.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
FindNode.cmake reports failure it cannot detect all required include files.
Module is now called with REQUIRED flag to prevent generation of makefiles
that will not build.
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
An ADS1015 implementation existed in the inferface fork before the ADS1x15
moulde was added to upstream repo. This retrofits the IADC interface onto
an implementation derived from ads1x15
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This is required so that interface include files are taken from
local src folder before looking in /usr/include/upm where an older version
may exist.
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
DS1808 is a general purpose potentiometer but this implementation
is limited to controlling brightness of custom LED lighting hardware.
Ideally there should be a DS1808 module used by a seperate
lighting module.
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This driver has been rewritten to support some new functionality, be
more generic and fix up some old bugs. Multiple MY9221's can now be
chained together and are supported by the MY9221 base class.
In addition, the Grove LED Bar and Grove Circular LED drivers have
been incoporated into the my9221 library, using the new MY9221 class
as their base class. Examples have been fixed to work with the new
library, and renamed where needed.
The current grovecircularled driver has been removed as it is now a
part of the my9221 library.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
ISR support for Java bindings needs iio.c Runnable implementation in MRAA. Might be possible to leverage working implementation for GPIO.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver provides support for the ILI9341 LCD driver via SPI (e.g.
Adafruit 2.8" TFT LCD).
It was implemented and tested on the Edison.
Signed-off-by: Shawn Hymel
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The Grove RTC (DS1307) does not work on the Intel Edison Arduino
board but will work with the mini-breakout. Updated the list of
known limitations in docs. Updated the ADXL345 to show 16g, and
fixed one line which went over 80 chars.
Signed-off-by: Noel Eck <noel.eck@intel.com>
The driver implements support for the Omega RH-USB Humidity Probe with
Temperature sensor. It connects via an integrated USB cable, and
appears as a serial port.
It does not currently work with Edison (as of this date) due to
missing ftdi_sio and usbserial kernel support.
It was implemented and tested on the Galileo 2.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the Veris HWXPHTX Hardware Protocol
Humidity and Temperature Sensor family. It uses MODBUS over an RS485
interface.
This module was developed using libmodbus 3.1.2, and the Veris HWXPHTX.
This sensor supports humidity, and optionally, temperature, slider
switch, and override switch reporting. The HWXPHTX used to develop
this driver did not include the optional slider or override switches,
however support for them is provided.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver was developed using the Veris HD2NVSTA1 humidity
transmitter. The 'T' variant supports a temperature transmitter as
well. Both signals are provided by the device as analog 0-5Vdc or
0-10Vdc outputs.
The A1 variant supports a temperature range of -40C-50C, while the A2
variant supports a range of 0C-50C. Humidity ranges for all devices
in this device family range from 0% to 100% (non-condensing).
Temperature measurement can be disabled by passing -1 as the
temperature analog pin to the constructor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the Comet System T3311 Temperature
and Humidity transmitter. It uses MODBUS over an RS232 serial port.
You must have libmodbus v3.1.2 (or greater) installed to compile and
use this driver.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Initial commit of ADS1x15 adc converter. Support for both ADS1015 12 bit
and ADS1115 16 bit adc.
--signoff
Signed-off-by: Marc Graham <marc@m2ag.net>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This is a USB device from Numato Labs that is accessed via a UART. It
provides 16 GPIO's, 7 of which can be configured as analog inputs.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Fun to work on, I have maybe 3 different implementations for this one now.
Submitted version uses GPIOs only, no more PWM thus enhancing compatibility.
Fast writes and busy-wait delays ensure accuracy to a few μs when generating
the step pulses.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
If MODULE_LIST is set, cmake will only create examples that can be built
with avaialble modules. There has been significant change to cmake file.
Comments show you how to add new examples.
Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The existing hardcoded logic enables i2c bypass mode for AK8975.
This can cause the accelerometer to disappear on I2C bus. We add
a new member as a switch that can be used to disable bypass.
Change-Id: I2c61f4910d46ffb5940bb3c14b58bc65984fd12e
Signed-off-by: Jianxun Zhang <jianxun.zhang@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module was developed using the OpenZWave library (v1.3):
http://www.openzwave.com/
It was developed using a collection of devices (switches and a
multi-sensor) connected via an Aeon Z-Stick Gen5 USB dongle.
It can be used to query (and, where appropriate, set) Values on Nodes
connected to the ZWave network.
Checks are made in src/ozw/CMakeLists.txt to ensure that the
libopenzwave library is installed (via pkg-config). If not present,
then neither the module, nor the example will be built.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This will allow users to call ackEdgeDetected() on the object passed into the function pointer, instead of requiring them to have a global reference to the object.
Signed-off-by: JJ Robertson <jjrob13@gmail.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver was developed using an SX1276 based shield on the Galileo
G2. It requires 3.3v of operation. It does not work with Edison, due
to SPI issues.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Python and Java bindings will build with SWIG 2.x but Node requires at least SWIG 3.0.5. Subject to change when SWIG 3 becomes standard in all major distros.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Add support for MCP9808 precision temp sensor. Implements all features
except for TCrit and TUpper and TLower locking. Functionality includes
alert, interrupt, resolution and hysteresis control.
Signed-off-by: Marc Graham <marc@m2ag.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Removed some unneeded calls in update function. Changed call in
micsv89.js sample file to use update instead of start.
Tested with UPM. 4.0. The micsv89 is sensitive to other devices pulling
the I2c bus up, so it is not likely to work on the Arduino breakout.
I2c 1 on mini breakout works fine.
—Signed-off-by Marc Graham <marc@m2ag.net>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The driver implements support for the DFRobot pH sensors. It was
tested with both the standard and Pro versions, calibrated with
standard buffer solutions at pH 4.01 and pH 7.0.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This driver was developed based on the DFRobot Triple Axis
accelerometer BMA220 (Tiny):
http://www.dfrobot.com/index.php?route=product/product&product_id=1085
This device can only run at 3.3v DC. Do not connect to 5v.
Added a private function definition for the installISR function. Done because C++
wasn't able to find the function definition for the java bindings.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This driver was tested with the DFRobot URM37 Ultrasonic Ranger, V4.
Both UART and analog access modes are supported.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
This is a basic serial module that allows access to various XBee
devices via a UART port. It was tested with the XBee S6B WiFi Module
and the XBee S1 802.14.4 module.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
The current grovemd driver supported 'mode2' stepping, where the
driver simply passed various stepper commands to the board for it to
carry out on it's own.
This doesn't work very well (or at all if you have old/buggy firmware)
so add a new 'mode1' stepper capability. This mode lets the driver
manually control the stepping operation without requiring special
firmware.
This is now the default and recommended mode to use for stepper motors
on this device. It is also more flexible in terms of the maximum
number of steps you can do (mode2 was limited to 254 steps max).
This was tested using a bipolar NEMA-17 stepper motor with an
external 12v power supply.
Note: 'Mode1' and 'Mode2' are the Seeed Studio terms for these different
stepping modes.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This isn't really a C++ library, though it is compiled as one. We
throw exceptions in the hal_init function on startup if there are
issues initializing SPI or the various GPIO's, but that's it.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
In addition, throw out_of_range() exceptions in
object/ambientTemperature() methods when they occur instead of just
returning 0, which is a valid temperature return value.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This is a rewrite of the existing SM130 driver which was incomplete
and non-functional.
It was implemented using a Sparkfun SM130 module:
https://www.sparkfun.com/products/10126
... using a Sparkfun RFID Evaluation Shield:
https://www.sparkfun.com/products/10406
It operates in UART mode only. A port to support I2C communications
(requires a encrypted firmware reflash from SonMicro) should be
fairly trivial, if you have one of those.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: sisinty sasmita patra <sisinty.s.patra@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver was implemented using a Grove IMU 9DOF V2.0 (mpu9250).
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: sisinty sasmita patra <sisinty.s.patra@intel.com>
Using an external code parsing library we discovered that there are
non-printable characters in some source files which break the parser.
This commit removes these characters and rewrites a type definition
which was also breaking the parser.
Signed-off-by: Mircea Bardac <mircea.bardac@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
When setting the On or Off times, the FullOn or FullOff control bits
would be improperly masked and therefore not preserved.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Sisinty Sasmita Patra<sisinty.s.patra@intel.com>
Eric Hubert reported a bug in that no matter what setting he used to
control the speed of a DC motor, it was always running at full speed.
There was a bug in the setMotorSpeed() method that did not clear the
'FullOn' bit in the register used for PWM, causing full power to be
applied all the time no matter the PWM duty cycle setting.
This patch corrects that issue.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
signed-off-by: Sisinty Sasmita Patra<sisinty.s.patra@intel.com>
We add a new src/upm_exception.i interface file for SWIG to catch
common exceptions and propagate them through SWIG.
src/upm.i is modified to include this interface file, so all UPM
drivers have it.
In theory, this should be language agnostic - if the target language
supports exceptions, then it should just work.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver supports the Sparkfun 64x48 pixel OLED Edison block:
https://www.sparkfun.com/products/13035
It is based on an ssd1306, but with some modifications (custom COM pin
mapping and a custom column offset). It uses SPI to communicate, and
since it is an Edison Block, you don't really have any options for
different bus and pin assignments.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Overload is unnecessary and SWIG can't handle overloads with the same number of arguments
thus it would break the js and py bindings
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Tweak the fudge factor so it is more accurate for 50Hz and 60Hz periods. (Tested on Logic 4 and it is spot on now)
Get rid of compiler warnings when -Wall is set
Allow for float angle to be passed into the servo() method for more accurate positioning
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
We add a new bool isExpander to the the I2C constructor. This allows
us (in the case we are not dealing with an expander) to just
initialize the i2c context only and bail in the constructor. The
default is true to preserve backward compatibility.
Additionally, add two new virtual protected methods, data() and
command() for sending data or commands to the controller. The default
implementation in lcm1602 will work for 4bit GPIO and expander use.
In the case of jhd1313m1, they will need to be redefined in that class
as the sematics for sending data and commands are different.
All of the underlying functionality will use command() or data() as
appropriate.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the LSM9DS0 accelerometer,
magnetometer, and gyroscope.
It was developed on the Sparkfun 9DOF sensor block for Intel Edison.
https://www.sparkfun.com/products/13033
Commonly used capabilities are supported, and methods/register
definitions exist to easily implement any desired functionality that
is missing. Interrupt support has also been added.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver has been rewritten from scratch. It is implemented as 3
seperate drivers now (but all included as part of the mpu9150 UPM
library):
AK8975 (Magnetometer)
MPU60X0 (Accelerometer, Gyroscope, and Temperature sensor)
MPU9150 (composed of AK8975 and MPU60X0)
Each driver can be used independently and includes examples in
C++/JS/Python.
Commonly used capabilities are supported, and methods/register
definitions exist to easily implement any desired functionality that
is missing. Interrupt support has also been added.
Scaling support has also been properly implemented for both the
Accelerometer and Gyroscope.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver was developed with a Sainsmart LCD Keypad Shield.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
In addition, move the command/data sending methods into the protected
block so that derived classes can use them if need be.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit removes the I2C context from the LCD base class and moves
it into each of the drivers.
In addition, the createChar() virtual function was removed from the
base class, as it directly used the now non-existant i2c context, and
it would not work on anything other than hd44780 based controllers and
displays anyway. Also, it is likely the capability itself, as well as
the data required to implement it, is going to be different from
device to device.
createChar() has been added to the Lcm1602 driver which can support it.
While doing this work, the LCD base class m_name is now set appropriately
in the driver constructors.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
We keep the same upm module library name (i2clcd), and the header
documentation still specifies @library i2clcd.
These will need to be changed when the actual library is renamed.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the hp20x family of high accuracy
barometers. It was developed on the Grove Barometer (High Accuracy)
based on the HP206C.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This code is based off ofthe my9221 driver. This modification was
done by Jun Kato, but abandoned.
This driver will not work correctly on Galileo.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Add functionality to read and set the low-power mode settings
Add functions to read and set the averaging factor per key
Add functions to read and set the adjecent key suppression (AKS) groups
Add a function to read the ID register
Add a sanity check to the constructor
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module was developed and tested on the Grove NFC Tag. It is an
8KB EEPROM accessable (with various protection capabilites) via I2C
and NFC capable devices.
The code was based on the Seeed Studio example code with some help
from the datasheet.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module was developed on the Grove Serial Camera. It connects to
the UART and runs at 115200 baud. It was developed based on the Seeed
Studio Arduino sketch, as there appears to be no protocol
documentation available.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This means that you no longer need to install UPM in oder to be able to use
`make pydoc`. The target pydoc now depends on target doc which with SWIG will
cause python modules to be built, making parralel builds work as expected. We
wipe the python-staging directory on each make pydoc as it's a custom_target
and will rerun at every time anyways, copy is cheap and in case a module gets
deleted it avoids the doc still getting built
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
There were a few issues with this driver, corrected in this update.
1) i2c transactions were not working - I replaced the i2c
implementation with the MRAA i2c class implementation.
2) status check was inverted - fixed.
3) fixed up #defines in header file to avoid naming collisions (ADDR,
etc).
4) Added capability to supply bus and i2c address to ctor, setting
defaults of 0, and TH02_ADDR respectively.
NOTE: For proper operation on Edison using the arduino breakout
board, the voltage needs to be set to 3.3V rather than 5v. On G2, 5v
works fine.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver implements support for the Sparkfun Single Lead Heart Rate
Monitor, based on the AD8232 chip.
It simply outputs ADC data that needs to be sent somewhere for
plotting. The Sparkfun page has some suggestions.
Alternatively, if you have an oscilliscope that supports a 'Roll'
mode, you can get an EKG-like display by measuring the OUT pin.
https://www.sparkfun.com/products/12650
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The driver implements support for the Grove 3-Axis Digital
Accelerometer(±400g), using the h3lis331dl chip.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the Grove BLE (Bluetooth Low
Energy) device. It is implemented as a UART device accepting an "AT"
command set.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The module supports the LV-MaxSonar EZ1, EZ2, EZ3 and EZ4 ultrasonic
range finders. It was developed and tested on the EZ3 variant.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This was tested with the Grove FM Receiver. Unfortunately, there is
no documentation on how to control the device using the D1 and D2 pins
that Seeed provides. There is a switch on the device that can control
all of the elements, power, volume, and seek +/-.
The supplied example can turn the device on, and do a seek, but not
much else.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This keeps the constants in the correct scope and avoid potential
naming conflicts with other files.
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Rewrite the i2c module to be based around the MRAA C++ API,
since this makes resource management easier inside of the UPM
C++ classes.
i2clcd.{h,cxx}: remove the close() function. This now automatically gets
called when the object goes out of scope, inside the destructor.
examples/i2clcd: fix C++/Python/Javascript examples that explicitly called the close function.
The I2c context now gets called by the destructor of the sensor class. This
happens when the object goes out of scope or when it gets deleted, if the
object was created using the new keyword, as is the case here.
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Remove calls to I2C helper functions (i2Cmd, i2cData, i2cReg) and call
the raw MRAA function directly instead and remove the helper functions from the
I2CLcd class
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The new values for the durations match the recommended values from the
datasheet more closely
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Added new, private, header file which contains macros used to check the
return value of mraa function calls
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Reformatted to prepare for improving the error handling. This reformatting
was done using clang-format.
Signed-off-by: Wouter van Verre <wouter.van.verre@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Missing if statement for building without SWIG (but not explicitely disabling
SWIGNODE & SWIGPYTHON)
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This fixes an issue with the wrong libmraa version being reported by cmake on
configuration after a mraa update, even though the build will use the newer
binary.
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This driver implements support for the Grove Recorder. It records up
to about 10 seconds of audio, and can play it back on command.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This driver implements support for the Grove Water Flow sensor. It
uses an integrated hall effect sensor, connected to a GPIO configured
as an interrupt, to compute water flow in LPM (Liters Per Minute).
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This driver was tested on a Grove Geared Stepper with Driver, the
uln2003a paired with a 28BYJ-48 unipolar stepper motor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This driver implements support for the ZFM20 fingerprint module. It
was tested on a Grove Fingerprint Sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
Additionally, add some error checking in the constructor, and determine
the ADC resolution and use that in the voltage calculation rather than
a hardcoded 1024.0.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
Instead of trying to call out the build environment for a .so to link
against, use the one UPM will build as a dependency.
Also add guards around the SWIG commands for both Node and Python
targets
Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The library implements support for the Adafruit MotorShield 1438:
http://www.adafruit.com/products/1438
This shield supports 4 DC motors or 2 Stepper motors.
It makes use of the pca9685 UPM library, and therefore requires that
PR #123 and PR #134 are merged first:
PR 123: pkgconfig.in: allow a module to specify dependencies on
another module
PR 134: pca9685: Initial implementation
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
The library implements support for the Adafruit MotorShield 1438:
http://www.adafruit.com/products/1438
This shield supports 4 DC motors or 2 Stepper motors.
It makes use of the pca9685 UPM library, and therefore requires that
PR #123 and PR #134 are merged first:
PR 123: pkgconfig.in: allow a module to specify dependencies on
another module
PR 134: pca9685: Initial implementation
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This library implements generic support for the pca9685 16 channel 12
bit PWM LED controller. This controller is used on some Adafruit
motor shields.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements support for the Grove I2C Motor Driver.
The device *requires* a 100Khz I2C bus speed. It will not work on
anything faster.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This was tested on the RobotBase Dual H-Bridge motor control board.
There are two examples:
l298-example: This example demonstrates using the class to contol one
of the H-Brdges to control a DC motor.
l298-stepper-example: This example demonstrates using the class to
control a 4-wire dual-phase stepper motor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This module was tested with the Grove Differential Amplifier, with a
weight sensor attached.
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This module implements support for the Grove GSR (Galvanic Skin
Response) sensor.
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
Currently files and folders are all lower case. Doxygen also
has a tag set to disallow files and folders with upper case
names. Added an item on the naming.md page which states
only lower case names should be used for files and folders.
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This implements support for the Grove O2 (oxygen) sensor.
Keeping with the current convention, as well as the current
config Doxygen uses disallowing uppercase names, this sensor
has been renamed from groveO2 to groveo2 for both files and
folders.
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This patch adds the
Requires: @reqlibname@
and
Requires.private: @reqplibname@
clauses to the src/pkgconfig.in file.
This allows a UPM module to declare a dependency on another module
with a line of the form:
set (reqlibname "upm-somelib")
and/or
set (reqplibname "upm-somelib")
to the CMakeLists.txt file.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
LCDs based on the HD44780 allow for setting 8 custom characters.
This patch adds a method that exposes this capability.
Signed-off-by: Clark Scheff <clark@scheffsblend.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module was tested on the Grove non-contact IR Temperature
Sensor. The tables included are only valid for a distance of 9cm.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
The module implements the RPR220 IR Reflective Sensor. It was tested
with the Grove IR Reflective Sensor.
It includes 2 examples: rpr220.cxx, demonstrating the simple use case
of querying the current status.
rpr220-intr.cxx demonstrates the use of this class to register an
Interrupt Service Routine (ISR) to count transitions, which might be
more appropriate for some use cases, such as measuring RPM's.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
If you build in the source tree, you'll fill the sources with objects and create a mess.
Please prefer to build outside sources tree into a temporary place,
prefer :
cmake build
to :
cmake .
But If you trust your build tools and cleanup is done on each build
you can use current dir without any risk.
Bug: https://github.com/intel-iot-devkit/upm/pull/75
Change-Id: Ieb914ca359047df8b5dba1c2174e6c61e4526677
Signed-off-by: Philippe Coval <philippe.coval@open.eurogiciel.org>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This module implements supoort for the Grove Rotary Encoder, though it
should function with any Rotary Encoder utilizing two GPIOs.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
The module adds examples that utilize the existing GroveLed driver for
the Grove Multi Color Flash LED.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
Whilst most versions of clang autodetect whether the code is C or C++ it seems
more recent versions do not do this correctly. Fix the doc to make sure this
works all the time
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
The module implements support for the mq303a alcohol sensor. It was
tested on the Grove Alcohol Sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
The module implements support for the WT5001 serial mp3 player. It was
tested on the Grove Serial MP3 Player.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This module implements support for the yg1006 flame sensor. It was
tested with the Grove Flame Sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
jrvandr: removed unnecessary mraa_init() and mraa_deinit()
The module implements support for the ublox-6 GPS sensor. It was
tested on a Grove GPS device.
This module simply allows data to be retrieved from the device in the
form of NMEA sentences, and provides a method to write commands to the
device for configuration purposes.
It does not attempt to parse NMEA data -- that is a project in itself.
There are libraries available on the Internet, such as tinyGPS++ that
can handle that for you.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
jrvandr: removing unnecessary mraa_init()
This module implements support for the Grove UV sensor (guvas12d).
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
jrvandr: removing unecessary mraa_init()
This module implements support for the Grove Water sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
This module implements support for the Grove Voltage Divider.
jrvandr: Removed unecessary mraa_init() from grovevdiv.cxx
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: John Van Drasek <john.r.van.drasek@intel.com>
[renamed from] groveelectricity: Initial implementation
This module adds support for the Grove Electricity sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
This module implements support for the Grove Ear-clip heart rate
sensor.
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
Added support for the TTP223 touch detector-based sensors
(like the Grove touch sensor) with corresponding examples
in C++, JavaScript, and Python.
Signed-off-by: Sarah Knepper <sarah.knepper@intel.com>
Install library using cmake defined library directories. Install python
packages using cmake defined library directories
Signed-off-by: Helio Chisisni de Castro <helio@kde.org>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
To follow with our simple API requirements, change the return value of getLux()
call to an int. This lets SWIG do a better job with generating an API
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
* getRawAccelData() & other accel functions now return int16_t
* scale is now a supported constructor parameter
* heading returns 0-360 values
Signed-off-by: Mccool, Michael <michael.mccool@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
FAIL_MESSAGE"Unable to find the npm package for generating UPM Cordova bindings. The generator can be installed via: 'npm install -g upm-cordova-binding'")
* [Recommendations for the native API](#recommendations-for-the-native-api)
* [Pointers](#pointers)
* [Throwing Exceptions in Java](#throwing-exceptions-in-java)
* [Caveats & Challenges](#caveats--challenges)
* [Wrapping C arrays with Java arrays](#wrapping-c-arrays-with-java-arrays)
* [Wrapping unbound C arrays with Java arrays if array is output](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-output)
* [Wrapping unbound C arrays with Java arrays if array is input](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-input)
* [Implementing callbacks in Java](#implementing-callbacks-in-java)
## Overview
The "Creating Java Bindings Guide" serves as a basic tutorial for using the SWIG software development tool to create 'glue code' required for Java to call into C/C++ code. It contains: guides for dealing with type conversions, exception handling, callbacks; recommendations on how to write/modify the native API to avoid issues on the Java side, and also workarounds for those issues that can't be avoided.
This guide was created with the [upm](https://github.com/intel-iot-devkit/upm/) and [mraa](https://github.com/intel-iot-devkit/mraa) libraries in mind, and uses examples taken from these sources, but its usage can be extended to any project of creating Java bindings for C/C++ libraries.
## Tools of trade
[SWIG General Documentation](http://www.swig.org/Doc3.0/SWIGDocumentation.html)
As much as possible, avoid passing values/returning values through pointers given as as arguments to methods. As the Java language does not have pointers, SWIG provides a [workaround](http://www.swig.org/Doc3.0/Java.html#Java_tips_techniques) in the typemaps.i library.
#### Alternatives:
1. Functions that read data from a driver, return it through a pointer given as argument, and return a bool value, should be __replaced by__ functions that return the value directly and throw a std::runtime_error if a read error occurs. E.g.:
```c++
/*
* Function reads from sensor, places read value in variable bar and
* returns true if succesful. Function returns false if read failed.
*/
bool func(int *bar);
```
__Replaced by:__
```c++
/*
* Function reads from sensor and returns read value.
* Or throws std::runtime_error if a read error occurs
*/
int func();
```
2. Functions that return multiple values through pointers, that make sense to be grouped together into an array<sup>1</sup> (e.g. speed values, acceleration values), should be __replaced by__ functions that return a pointer to an array in which the elements are the returned values. Afterwards, [wrap the C array with a Java array](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-output). E.g.:
```c++
/*
* Function returns the acceleration on the three
* axis in the given variables.
*/
void getAccel(int *accelX, int *accelY, int *accelZ);
```
__Replaced by:__
```c++
/*
* Function returns the acceleration on the three
* axis as elements of a 3-element array.
*/
int *getAccel();
```
3. Functions that return N values through pointers, that do not make sense to grouped together (e.g. a general purpose function that returns both the light intensity and air pollution), should be __replaced by__ N functions (one for each value) that read only one specific value. E.g.:
```c++
/*
* Function returns the light intensity and air pollution
*/
void getData(int *light, int *air);
```
__Replaced by:__
```c++
int getLight();
int getAir();
```
4. Functions that return N values through pointers; values that do not make sense to be grouped together, but are time dependent, and make sense to be read at the same time. For example, a sensor that reads air humidity and temperature. A user may want to know the temperature value _temp_ read at the exact moment the humidity value _humid_ was read. These should be __replaced by__ N+1 functions: a _getData()_ function that reads all values at the same time and stores them in global variables; and N getter functions, one for each value. E.g.
```c++
/*
* Function returns the light intensity and air pollution
*/
void getData(int *temp, int *humid);
```
__Replaced by:__
```c++
void getData();
int getTemp();
int getHumid();
```
<sup>1</sup>this depends on the interpretation of the returned data. For example, arguments that return the temperature and light intensity, don't make sense to be grouped into an array of size 2. But acceleration on the three axis can be grouped together in an array of size 3. where accelX is accel[0], accelY is accel[1], accelZ is accel[2].
__Notice:__
Sometimes, you may be required to write JNI code. Be aware of the difference between the C JNI calling syntax and the C++ JNI calling syntax.The C++ calling syntax will not compile as C and also vice versa. It is however possible to write JNI calls which will compile under both C and C++ and is covered in the [Typemaps for both C and C++ compilation](http://www.swig.org/Doc3.0/Java.html#Java_typemaps_for_c_and_cpp) section of the SWIG Documentation.
### Throwing Exceptions in Java
#### Language independent:
The %exception directive allows you to define a general purpose exception handler. For example, you can specify the following:
```c++
%exception [method_name] {
try {
$action
}
catch (std::invalid_argument& e) {
... handle error ...
}
}
```
If [method_name] is not specified then the directive is applied to all methods in its scope.
The usual thing you'd want to do is catch the C++ exception and throw an equivalent exception in your language.
The exception.i library file provides support for creating language independent exceptions in your interfaces. To use it, simply put an "%include exception.i" in your interface file. This provides a function SWIG_exception() that can be used to raise common language exceptions in a portable manner. For example :
```c++
// Language independent exception handler
%include exception.i
%exception {
try {
$action
} catch(OutOfMemory) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
In the upm library, the upm_exception.i interface file provides the functionality to catch common exceptions and propagate them through SWIG. It uses the exception.i library file and is language independent.
The upm_exception.i interface file is included in the upm.i file, therefor SWIG wraps all generated methods' body in a try-catch statement for the following exceptions:
Where FindClass and ThrowNew are [JNI functions](http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html).
Java defines two tipes of exceptions: checked exception and unchecked exceptions (errors and runtime exceptions). Checked exceptions are subject to the [Catch or Specify Requirement](https://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html).
The C++ compiler does not force the code to catch any exception.
The %exception directive does not specify if a method throws a checked exception (does not add classes to the throws clause). For this, the %javaexception(classes) directive is used; where classes is a string containing one or more comma separated Java classes.
In the upm library, the java_exceptions.i library file provides the functionality to catch exceptions and propagate them through SWIG as Java checked exceptions. The file provides SWIG wrappers, in the form of macros, that can be applied to methods.E.g. use the __READDATA_EXCEPTION(function)__ macro for functions that read data from a sensor and throw a std::runtime_error in case of a read failure. This will result in:
```java
void function throws IOException ();
```
## Caveats & Challenges
### Wrapping C arrays with Java arrays
SWIG can wrap arrays in a more natural Java manner than the default by using the arrays_java.i library file. Just include this file into your SWIG interface file.
### Wrapping unbound C arrays with Java arrays if array is output
Functions that return arrays, return a pointer to that array. E.g.:
```c++
/*
* Function returns the acceleration on the three
* axis as elements of a 3-element array.
*/
int *getAccel();
```
__SWIG:__
```c++
%typemap(jni) int* "jintArray"
%typemap(jstype) int* "int[]"
%typemap(jtype) int* "int[]"
%typemap(javaout) int* {
return $jnicall;
}
%typemap(out) int *getAccel {
$result = JCALL1(NewIntArray, jenv, 3);
JCALL4(SetIntArrayRegion, jenv, $result, 0, 3, (const signed int*)$1);
}
```
### Wrapping unbound C arrays with Java arrays if array is input
In C, arrays are tipically passed as pointers, with an integer value representig the length of the array. In Java, the length of an array is always known, so the length argument is redundant. This example shows how to wrap the C array and also get rid the length argument. E.g.:
```c++
void func(uint8_t *buffer, int length);
```
__SWIG:__
```c++
%typemap(jtype) (uint8_t *buffer, int length) "byte[]"
%typemap(jstype) (uint8_t *buffer, int length) "byte[]"
%typemap(jni) (uint8_t *buffer, int length) "jbyteArray"
%typemap(javain) (uint8_t *buffer, int length) "$javainput"
%typemap(in,numinputs=1) (uint8_t *buffer, int length) {
!!!! There is a difference between TYPE *name and TYPE * name in typemaps!!!!!
### Implementing callbacks in Java
Callbacks in the UPM Java library (as well as the MRAA Java library) make use of the _void mraa\_java\_isr\_callback(void\* data\)_ method from MRAA.
__Callbacks in the UPM Java library are implemented as follows (we use the a110x Hall Effect sensors as example):__
We extend the sensor class with another method, _installISR\(jobject runnable\)_, which is a wrapper over the original _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ method. This will install the _mraa\_java\_isr\_callback\(\)_ method as the interrupt service routine \(ISR\) to be called, with _jobject runnable_ as argument.
Java callbacks are added at the SWIG interface level. For ease-of-use, a collection of macros are available in src/_upm.i.
To use callback in java, we create a ISR class, which implements the Java Runnable interface, and we override the _run\(\)_ method with the code to be executed when the interrupt is received. An example for the a110x Hall sensor that increments a counter each time an interrupt is received:
```java
public class A110X_intrSample {
public static int counter=0;
public static void main(String[] args) throws InterruptedException {
"Name":"Digital Humidity, Pressure, and Temperature Sensor",
"Description":"The BME280 is as combined digital humidity, pressure and temperature sensor based on proven sensing principles. The sensor module is housed in an extremely compact metal-lid LGA package with a footprint of only 2.5 * 2.5 mm2 with a height of 0.93 mm. Its small dimensions and its low power consumption allow the implementation in battery driven devices such as handsets, GPS modules or watches. The BME280 is register and performance compatible to the Bosch Sensortec BMP280 digital pressure sensor",
| It can be put into the configuration mode by grounding the CONFIG pin on the transceiver. | - You can put it into the configuration mode by grounding the CONFIG pin on the transceiver.<br>- To put it into the configuration mode, ground the CONFIG pin on the transceiver.<br>- Put it into the configuration mode by grounding the CONFIG pin on the transceiver. |
### <a name="capitalization"></a>Capitalization
- Capitalize the first word in the description of an entity.
| Returns the name of the sensor. | Returns the name of the sensor |
| Sets the frequency modulation<br>Valid values are between 10 and 160 (in kHz) | Sets the frequency modulation. Valid values are between 10 and 160 (in kHz). |
| @param millis Maximum time in milliseconds to wait for the input<br>-1 means waiting forever (default) | @param millis Maximum time in milliseconds to wait for the input. -1 means waiting forever (default). |
<fontcolor="purple">**Exception:**</font> if the description contains more than one sentence, put periods after each sentence.
## <a name="word-usage"></a>Specific word usage
### <a name="abbr-acr"></a>Abbreviations and acronyms
- Spell out the first occurrence or the first prominent use of an abbreviation or acronym, followed by a shortened form.
Adjectives of the form **number + noun / participle** should be hyphenated. It does not matter if a number is represented by one or more digits or spelled out.
| The wiki page for this device includes a link to an Android\* application that can be used to read the device via NFC. | The wiki page for this device includes a link to an Android\* app that can be used to read the device via NFC. |
### <a name="func-meth"></a>Function vs method
If a function is associated with a class, use **method** instead.
| class WheelEncoder {<br>...<br>/**<br>* Starts the counter. This function also clears<br>* the current count and resets the clock.<br>*/<br>void startCounter(); | class WheelEncoder {<br>...<br>/**<br>* Starts the counter. This method also clears<br>* the current count and resets the clock.<br>*/<br>void startCounter(); |
| It is a 64x48 pixel OLED display that connects directly to an edison via its 80-pin connector. | It is a 64x48 pixel OLED display that connects directly to an Intel(R) Edison board via its 80-pin connector. |
**Note:** if an Intel product has a legally approved short name, you may use it in subsequent instances, after spelling it out the first time.
Add an asterisk (\*) after a name to indicate a third-party trademark or registered intellectual property. If you are not sure whether an asterisk is necessary after a particular name, the rule of thumb is to put one, to be on the safe side.
| It is a 64x48 pixel OLED display that connects directly to an Intel(R) Edison via its 80-pin connector. | It is a 64x48 pixel OLED display that connects directly to an Intel(R) Edison board via its 80-pin connector. |
| To create a new device, use the**create-thing**command. | To create a new device, use the\`create-thing\` (rendered as `create-thing`)command. |
| Go to **C:\Users\me\Documents\GitHub\intel-iot-examples-mqtt\support\aws**. | Go to \`C:\Users\me\Documents\GitHub\intel-iot-examples-mqtt\support\aws\` (rendered as `C:\Users\me\Documents\GitHub\intel-iot-examples-mqtt\support\aws`). |
### <a name="da-links"></a>Links
Do not use embedded links to third-party websites.
| Create an account on[Microsoft Azure](https://azure.microsoft.com/en-us), if you do not yet have one. | Create an account on [https://azure.microsoft.com/en-us](https://azure.microsoft.com/en-us), if you do not yet have one. |
### <a name="da-lists"></a>Numbered list vs bullet points
- For a logical sequence of steps, use a numbered list.
| When running your C++ code on the Edison, you need to set the MQTT parameters in Eclipse. Go to "Run configurations", and change the "Commands to execute before application" to the following:<br>…<br>Click on the "Apply" button to save these settings.<br>Click on the "Run" button to run the code on the Edison. | When running your C++ code on the Intel® Edison board, you need to set the MQTT\* client parameters in Eclipse\*. To do that:<br>1. Go to **Run configurations** and, in the **Commands to execute before application** field, type the following:<br>…<br>2. Click the **Apply** button to save these settings.<br>3. Click the **Run** button to run the code on your board. |
- For a list of equally important options, use a bulleted list.
| From this exercise, developers will learn how to:<br>1. Connect the Intel® Edison board...<br>2. Run these code samples in the Intel® System Studio IoT Edition...<br>3. Set up a web application server... | From this exercise, developers will learn how to:<br>- Connect the Intel® Edison board…<br>- Run these code samples in the Intel® System Studio IoT Edition…<br>- Set up a web application server… |
## <a name="da-word-usage"></a>Specific word usage
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.