Compare commits
489 Commits
Author | SHA1 | Date | |
---|---|---|---|
39c55b23d9 | |||
09b0f0adaa | |||
00b0092fc1 | |||
ec85072011 | |||
60221dbcd6 | |||
a35e58c54c | |||
1b8cb1361c | |||
aeb948282a | |||
1b649021f1 | |||
10d784ea7e | |||
a48f457057 | |||
d8fc664178 | |||
83b0512ffb | |||
3e7fca21ee | |||
8c7d6483d3 | |||
22636fb47a | |||
fb5c809ff8 | |||
0d20cdb25a | |||
f2b10afa35 | |||
56e1d2214f | |||
e80e1bda2c | |||
98f9dc54ff | |||
611f72c491 | |||
6f68e07aa5 | |||
be34f53a51 | |||
7a133cf891 | |||
49611e5ac0 | |||
e5385eb510 | |||
de1a46aa59 | |||
7e402ede34 | |||
4381f8bd2e | |||
757104e013 | |||
6c08313cb7 | |||
6d4714df3c | |||
75e42c6731 | |||
5a5637a431 | |||
e062b9b85c | |||
b778476597 | |||
9fb4be1b44 | |||
42ff8b3a6e | |||
a8d96bd2d9 | |||
f3a2e0d77c | |||
a348f23a3b | |||
efe80a4450 | |||
411656d965 | |||
c007385847 | |||
8490a63309 | |||
2331548f25 | |||
777f081f84 | |||
56666872d9 | |||
c16f80f226 | |||
ee8433d92a | |||
dd3e88fa59 | |||
224fe03d98 | |||
9e7eae070a | |||
9bc3d2ded0 | |||
f268437cd5 | |||
aff6e9c77f | |||
d642d63d21 | |||
17fd502cb5 | |||
b08da722f7 | |||
4220dd25b4 | |||
bbdbe56355 | |||
e7a5118f86 | |||
fe8906fb51 | |||
f35f6cc064 | |||
389bd32f81 | |||
f2b8921f1e | |||
6f080db5cb | |||
4aeccf7714 | |||
33734dc2e2 | |||
1f1a1bce8e | |||
bd7930f249 | |||
d183c9574d | |||
63066bcc0b | |||
15d91d4797 | |||
031ed7bf95 | |||
1aa445b74e | |||
e6ad752a2c | |||
144937995c | |||
0b49cbab9b | |||
f1f9d9ec2e | |||
74d625c797 | |||
2695ef3361 | |||
a9548f3ff4 | |||
3ed0e14487 | |||
1a80400fa9 | |||
9845b24dea | |||
af7f544387 | |||
ac5c20afad | |||
9f3557aa20 | |||
d112266170 | |||
94fdd86896 | |||
c0c99fd87a | |||
684919f069 | |||
37add7eb33 | |||
e17dc9a22e | |||
84c3445412 | |||
6b2850557e | |||
f94ee6a388 | |||
cbb289438e | |||
71b0791239 | |||
757a2ce342 | |||
3fab5625c7 | |||
5324808e82 | |||
7d64e5458f | |||
ab15d1e98f | |||
d9b761469d | |||
2098449c56 | |||
63c75be370 | |||
03b4d24e64 | |||
9d1afd35f8 | |||
022b546003 | |||
1d085362d9 | |||
3504dc7246 | |||
5b7522bec4 | |||
828a9ce7d8 | |||
8cec2ad473 | |||
c3e3a6bb17 | |||
11b5d3bc58 | |||
3522e4ee8f | |||
0f548d367b | |||
1786017006 | |||
2d68d707f6 | |||
d7f4b76ed0 | |||
4a1b4f1dd4 | |||
ec75790516 | |||
fad4f72357 | |||
b3db180ffb | |||
a4f41c7cb5 | |||
40f9135412 | |||
46996e5251 | |||
2cd043c2a1 | |||
e1c66c351a | |||
a5fd4a2c10 | |||
fc7bfc113a | |||
bf82beaf9c | |||
5e37830bb7 | |||
4ff722ed2e | |||
52b0ef4b28 | |||
930ff6734d | |||
40be9b68a5 | |||
4259aeab7b | |||
d0cb2a032c | |||
4dc679af70 | |||
091bd9b381 | |||
d04f93ffca | |||
66aaa97955 | |||
387b2b86b0 | |||
e003a11723 | |||
d0504bb65b | |||
669fd317b6 | |||
af7d1d2611 | |||
1cbb486330 | |||
9516e0720c | |||
8273556539 | |||
5bc9353bb4 | |||
c8e80bf6a3 | |||
74691914fb | |||
9bf184129e | |||
1667569560 | |||
01119436a9 | |||
344a52ae97 | |||
1accafa145 | |||
e54f5e21c3 | |||
01700b0d49 | |||
a96a2ff44c | |||
cc7930caf3 | |||
ac21c9336b | |||
fd509c7d79 | |||
287250b32d | |||
758b49f51d | |||
2a1af1399a | |||
4de9734f0a | |||
9bfda4219d | |||
dddba3e8a4 | |||
500e14663b | |||
fcb36276b7 | |||
7f7fdb8441 | |||
f8a105adbf | |||
ba43986f82 | |||
6e2355ce9a | |||
4a90e2c4be | |||
1adea8ecf1 | |||
011013e800 | |||
b4d4a215a2 | |||
2eb6ebd3bd | |||
dc97adf578 | |||
181b5f17ea | |||
90bf469245 | |||
85b5c8a64e | |||
422592f993 | |||
fa1c1f3aa4 | |||
b11ad2d170 | |||
d62d9f22cd | |||
dec976e971 | |||
fcf2278553 | |||
b3300d5724 | |||
003ca2169f | |||
0586775ffc | |||
053cf15495 | |||
3d8b732158 | |||
db3b0c39bf | |||
d2c4747251 | |||
8b5cdae4ca | |||
2384fbb218 | |||
212c67fdd0 | |||
ca15860cc3 | |||
cce8ab43e6 | |||
255d6cbe86 | |||
db721845db | |||
53bc249b75 | |||
639f99691b | |||
6e095826d3 | |||
0d2541270e | |||
e34863f223 | |||
27f34face1 | |||
563c72be2c | |||
9bd5e78472 | |||
81c5962220 | |||
bf856c5fca | |||
1040b4e51f | |||
1713d44a4b | |||
5ff625eaf4 | |||
9d63545d44 | |||
06b9e7b6f2 | |||
45773fac80 | |||
ee4efb3d6a | |||
abced2fdbb | |||
537f7e111d | |||
8b49943025 | |||
a6f517d2c1 | |||
d26bde1825 | |||
ef30ab6fb2 | |||
9206480b9c | |||
d81639d715 | |||
08451d98cd | |||
ad81ea55e1 | |||
bd8e22f125 | |||
04dc6df429 | |||
453a6eae0e | |||
d325ae1fda | |||
98ea1c615a | |||
511d796fc2 | |||
58888fc49b | |||
19bf570561 | |||
922c8f628c | |||
3b6812ff36 | |||
e3dde0e390 | |||
68f54d1c59 | |||
5f4e8b18e5 | |||
5d356917cc | |||
1ceb784252 | |||
e9679e0982 | |||
c6386269ef | |||
f03f967a38 | |||
5fda514544 | |||
9fe9d4aec2 | |||
cd7815aa07 | |||
1563c71c5f | |||
3b7eb9afc2 | |||
d7bc084565 | |||
3d702a6e64 | |||
cd30c7d71f | |||
ed71aa029d | |||
7ffe895374 | |||
a427d6ebe5 | |||
83e62aabba | |||
d94a6d00fb | |||
14a3924fb2 | |||
7935ef1622 | |||
a0af1c01bd | |||
7ce8dc3434 | |||
33c123420a | |||
21eb2de086 | |||
5e72c4febd | |||
428bac360b | |||
a0518976c6 | |||
bdacb6c640 | |||
ce6a095079 | |||
701a25261f | |||
6719168a20 | |||
2002904faa | |||
7d0dccf9ed | |||
bfe548ac45 | |||
3c36aa1624 | |||
64777bd0ef | |||
1fefdcbdf1 | |||
8765416016 | |||
26317cbd2a | |||
f358b2e16d | |||
619da95553 | |||
3585761ecf | |||
ca04996524 | |||
6b19482ceb | |||
d3bfebeca0 | |||
60a3f6cd7e | |||
5e9d9f4e66 | |||
a56485f288 | |||
d0b5a98952 | |||
36cbca05bb | |||
f6ab1fb451 | |||
9c4a4d0ff0 | |||
5cc8c90251 | |||
a24f8209bc | |||
e8823dd74e | |||
b8ee0cf22d | |||
14fc909400 | |||
0db47c7528 | |||
aeb120c284 | |||
ab20e34c59 | |||
d0d89b579d | |||
6db7dfd3d9 | |||
36237ae596 | |||
9e20268bb8 | |||
77abd94682 | |||
7323b58b61 | |||
cb6427b22e | |||
fe133d7454 | |||
52274d8b10 | |||
0af62a6992 | |||
6a6eaa1b71 | |||
3fc672a19f | |||
69bd77dd30 | |||
9421cdaf30 | |||
fb779ecd6a | |||
3cd61b56f8 | |||
56ddb441d4 | |||
8d38bd0bcc | |||
1f1c303937 | |||
f567f282ae | |||
5ab01e5a65 | |||
b56095a3ff | |||
b20a5f1d68 | |||
c3297bcc55 | |||
4513a8ad09 | |||
ae60a92963 | |||
eba82a1c73 | |||
b7dda9021f | |||
d7b8fac41b | |||
1079baf2fd | |||
b925f13bac | |||
78d940aaf5 | |||
3d837284fd | |||
b8af35a797 | |||
1eb9e7b9dc | |||
1617b03d3d | |||
da49741527 | |||
f86e812f13 | |||
f84973b0e4 | |||
b0ac4b5da2 | |||
0566b4f995 | |||
a1db1b423b | |||
f29141087e | |||
fbbc0de6fb | |||
427dd6e851 | |||
4f5b4d5886 | |||
8345687ab9 | |||
bea94a70b2 | |||
a4db81c15f | |||
c7aa1b1f8a | |||
8e54381216 | |||
9081c35f53 | |||
88c11fb1cf | |||
9e3c72a547 | |||
2f2b502813 | |||
6b4a3e1fd0 | |||
c50dd16d82 | |||
7866e54e8d | |||
b00e81dfce | |||
cc6ba3be6d | |||
a564258fb0 | |||
03cb2ec362 | |||
f4e5a5109f | |||
dc49f36e83 | |||
5516faca38 | |||
74cbc25f21 | |||
1ea36c6f89 | |||
38351cbe6e | |||
d4d29307a2 | |||
b4e4e9ae89 | |||
a2855c5e72 | |||
667a8fdb49 | |||
04e91db166 | |||
6c8f82901c | |||
5f27c5515f | |||
48e6d4bcfa | |||
4e70ed4973 | |||
3159005aa3 | |||
5a62602a11 | |||
0bc1930cf5 | |||
ef74a7b137 | |||
f991bcf915 | |||
6cbddff31a | |||
ff42bd390f | |||
b4d2a2e1f2 | |||
b44995da74 | |||
3af7cccb93 | |||
021c003ca8 | |||
2e5fbd0d54 | |||
2cab79b4c2 | |||
ab730038fd | |||
b8835958e2 | |||
ea1df1b178 | |||
85c602d524 | |||
8147a89cb7 | |||
20d5c50725 | |||
138c5af5f8 | |||
6793c892ed | |||
76f7abb112 | |||
1e5b755b99 | |||
a79d8abfcd | |||
4b8b75b19b | |||
2bae3931b9 | |||
5fd2d9c439 | |||
c45e493b1b | |||
4985cf4b00 | |||
7afd1f3fc1 | |||
83cb6dc2fd | |||
dc7e33558e | |||
0406258466 | |||
2ceb6a9d8d | |||
fbf68d1dd8 | |||
a5a66e9e17 | |||
07f6ffb0a4 | |||
ebdb4f10d1 | |||
3d74ea9820 | |||
f6c56be5e4 | |||
cfe63bf7b6 | |||
1f82757c64 | |||
be2e8d7c76 | |||
3aad8e367f | |||
45b83502a1 | |||
9cfd1a9679 | |||
fb6627083b | |||
42c59e98ab | |||
ea669ddfc6 | |||
4f30959a43 | |||
2455938691 | |||
5e3263e2e2 | |||
58846ba68a | |||
a21db7ca78 | |||
40fb6f5d75 | |||
2595c0b623 | |||
c7185739dc | |||
945a6d4828 | |||
19bcbc7c42 | |||
323905a215 | |||
3e59323abb | |||
59c6b28cdd | |||
b17a3b34b7 | |||
8b9267c253 | |||
78a159594b | |||
8eed56fda0 | |||
647d9b44a9 | |||
749952f7e3 | |||
d3e0ae5771 | |||
a81b1836a3 | |||
c7389d0cb6 | |||
fb86dc5cec | |||
98f400e326 | |||
b0625e11f1 | |||
60cfe88e37 | |||
ad1cc81c0d | |||
4a6492af0a | |||
488ea234d5 | |||
fba8139416 | |||
45738d0b93 | |||
52810cef77 | |||
f02fa1fdf1 | |||
f8766cccdc | |||
4bea93163d | |||
8b0d1b2b3d | |||
7e2ae96c1f | |||
181823cb20 | |||
11f9154ce0 | |||
018e09e5b2 | |||
984391eb64 | |||
9bf954071b | |||
448ee39c7f | |||
8dac9f7356 | |||
fcca8ada45 | |||
2e0efd6690 | |||
c878283c44 | |||
b81be93411 | |||
3ad25f65c8 | |||
97e7f74a8f | |||
66d688bc90 | |||
84f795e453 |
38
.travis.yml
Normal file
@ -0,0 +1,38 @@
|
||||
language: cpp
|
||||
env:
|
||||
- CC=gcc CXX=gcc
|
||||
- CC=clang CXX=clang++
|
||||
- NODE4=true
|
||||
- NODE5=true
|
||||
- NODE012=true
|
||||
install:
|
||||
- sudo add-apt-repository --yes ppa:fenics-packages/fenics-exp/swig
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -y -qq swig3.0 git
|
||||
- sudo ln -s /usr/bin/swig3.0 /usr/bin/swig
|
||||
- sudo update-java-alternatives -s java-8-oracle
|
||||
before_script:
|
||||
- export NODE_ROOT_DIR="/home/travis/.nvm/v0.10.36"
|
||||
- if [ "$CC" = "gcc" ]; then export BUILDJAVA=ON; else export BUILDJAVA=OFF; fi
|
||||
- export JAVA_HOME=/usr/lib/jvm/java-8-oracle
|
||||
- if [ "${NODE4}" ]; then nvm install 4.1; export CC=gcc-4.8; export CXX=g++-4.8; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
|
||||
- if [ "${NODE5}" ]; then nvm install 5; export CC=gcc-4.8; export CXX=g++-4.8; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
|
||||
- if [ "${NODE012}" ]; then nvm install 0.12; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
|
||||
script:
|
||||
- git clone https://github.com/intel-iot-devkit/mraa.git
|
||||
- cd mraa && mkdir build && cd build && cmake -DBUILDSWIGJAVA=$BUILDJAVA -DBUILDSWIGNODE=OFF -DBUILDSWIGPYTHON=OFF -DFIRMATA=ON -DENABLEEXAMPLES=OFF -DCMAKE_INSTALL_PREFIX:PATH=. .. && make && make install
|
||||
- export PKG_CONFIG_PATH=$PWD/lib/pkgconfig:$PWD/lib/x86_64-linux-gnu/pkgconfig
|
||||
- export CPLUS_INCLUDE_PATH=$PWD/include
|
||||
- export LIBRARY_PATH=$PWD/lib:$PWD/lib/x86_64-linux-gnu
|
||||
- cd ../.. && mkdir build && cd build && cmake -DNODE_ROOT_DIR:PATH="${NODE_ROOT_DIR}" -DBUILDSWIGJAVA=$BUILDJAVA -DBUILDEXAMPLES=ON -DBUILDJAVAEXAMPLES=$BUILDJAVA .. && make
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- llvm-toolchain-precise-3.6
|
||||
- ubuntu-toolchain-r-test
|
||||
- george-edison55-precise-backports
|
||||
packages:
|
||||
- clang-3.6
|
||||
- g++-4.8
|
||||
- cmake
|
||||
- cmake-data
|
130
CMakeLists.txt
@ -5,22 +5,17 @@ if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
||||
message("WARNING: building into sources dir can be risky, prefer other directory")
|
||||
endif ()
|
||||
|
||||
find_package (SWIG)
|
||||
if (SWIG_FOUND)
|
||||
include (${SWIG_USE_FILE})
|
||||
endif ()
|
||||
|
||||
find_package (Threads REQUIRED)
|
||||
find_package (PkgConfig REQUIRED)
|
||||
|
||||
# force a libmraa search and minimum required version every time a config is generated
|
||||
# Force a libmraa search and minimum required version every time a config is generated
|
||||
unset(MRAA_FOUND CACHE)
|
||||
pkg_check_modules (MRAA REQUIRED mraa>=0.6.2)
|
||||
message (INFO " found libmraa version: ${MRAA_VERSION}")
|
||||
pkg_check_modules (MRAA REQUIRED mraa>=0.9.1)
|
||||
message (INFO " found mraa version: ${MRAA_VERSION}")
|
||||
|
||||
# Appends the cmake/modules path to MAKE_MODULE_PATH variable.
|
||||
set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
|
||||
set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries")
|
||||
set (LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation path for libraries")
|
||||
|
||||
# Set CMAKE_LIB_INSTALL_DIR if not defined
|
||||
include(GNUInstallDirs)
|
||||
@ -28,14 +23,14 @@ include(GNUInstallDirs)
|
||||
# Make a version file containing the current version from git.
|
||||
include (GetGitRevisionDescription)
|
||||
git_describe (VERSION "--tags")
|
||||
if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND")
|
||||
if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND")
|
||||
message (WARNING " - Install git to compile a production UPM!")
|
||||
set (VERSION "v0.3.2-dirty")
|
||||
set (VERSION "v0.6.0-dirty")
|
||||
endif ()
|
||||
|
||||
message (INFO " - UPM Version ${VERSION}")
|
||||
|
||||
#parse the version information into pieces.
|
||||
# Parse the version information into pieces.
|
||||
string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
|
||||
string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
|
||||
string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
|
||||
@ -56,36 +51,78 @@ set (CMAKE_SWIG_FLAGS "")
|
||||
option (BUILDDOC "Build all doc." OFF)
|
||||
option (BUILDSWIG "Build swig modules." ON)
|
||||
option (BUILDSWIGPYTHON "Build swig python modules." ON)
|
||||
option (BUILDPYTHON3 "Use python3 for building/installing/testing" OFF)
|
||||
option (BUILDSWIGNODE "Build swig node modules." ON)
|
||||
option (BUILDEXAMPLES "Build C++ example binaries" OFF)
|
||||
option (BUILDJAVAEXAMPLES "Build java example jars" OFF)
|
||||
option (BUILDSWIGJAVA "Build swig java modules" OFF)
|
||||
option (IPK "Generate IPK using CPack" OFF)
|
||||
option (RPM "Generate RPM using CPack" OFF)
|
||||
option (BUILDTESTS "Generate check-ups for upm" ON)
|
||||
option (ENABLECXX11 "Enable C++11 standards support" ON)
|
||||
|
||||
# detect arch
|
||||
# Find swig
|
||||
if (BUILDSWIG)
|
||||
if (BUILDSWIGNODE)
|
||||
find_package (SWIG 3.0.5 REQUIRED)
|
||||
else ()
|
||||
find_package (SWIG REQUIRED)
|
||||
endif ()
|
||||
if (SWIG_FOUND)
|
||||
include (${SWIG_USE_FILE})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Detect arch
|
||||
include (TargetArch)
|
||||
target_architecture (DETECTED_ARCH)
|
||||
message( INFO " - Target arch is ${DETECTED_ARCH}")
|
||||
|
||||
# enable c++11 standards support
|
||||
if (ENABLECXX11)
|
||||
include(CheckCXXCompilerFlag)
|
||||
if (CMAKE_VERSION VERSION_LESS "3.1")
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
|
||||
if (COMPILER_SUPPORTS_CXX11)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
elseif (COMPILER_SUPPORTS_CXX0X)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||
else()
|
||||
message(WARNING "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please update your C++ compiler.")
|
||||
endif()
|
||||
else()
|
||||
# 3.1+ uses this generic method to enable c++11
|
||||
set (CMAKE_CXX_STANDARD 11)
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Some modules require C++11 support, and may not build without it.")
|
||||
endif()
|
||||
|
||||
if (BUILDDOC)
|
||||
# add a target to generate API documentation with Doxygen
|
||||
# Add a target to generate API documentation with Doxygen
|
||||
find_package (Doxygen)
|
||||
if (DOXYGEN_FOUND)
|
||||
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
||||
if (BUILDSWIGJAVA)
|
||||
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/Doxyfile.java.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile-java @ONLY)
|
||||
endif()
|
||||
file(GLOB PNG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/docs docs/icons/*.png)
|
||||
foreach(PNG_FILE ${PNG_FILES})
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/${PNG_FILE} ${CMAKE_CURRENT_BINARY_DIR}/html/docs/${PNG_FILE} COPYONLY)
|
||||
endforeach()
|
||||
add_custom_target (doc
|
||||
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||
COMMAND tar -czf html/xml.tar.gz -C xml .
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
||||
)
|
||||
endif (DOXYGEN_FOUND)
|
||||
# check if Sphinx is installed and add target to generate API documentation
|
||||
# Check if Sphinx is installed and add target to generate API documentation
|
||||
find_package (Sphinx)
|
||||
if(SPHINX_FOUND AND BUILDSWIG AND BUILDSWIGPYTHON)
|
||||
# python required for Sphinx build
|
||||
find_package (PythonLibs)
|
||||
# Python required for Sphinx build
|
||||
find_package (PythonLibs ${PYTHONBUILD_VERSION} REQUIRED)
|
||||
string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
|
||||
list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR)
|
||||
list (GET PYTHON_VERSION_LIST 1 PYTHON_VERSION_MINOR)
|
||||
@ -97,7 +134,7 @@ if (BUILDDOC)
|
||||
COMMAND find ${CMAKE_BINARY_DIR}/src -name "_pyupm_*.so" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
|
||||
COMMAND find ${CMAKE_BINARY_DIR}/src -name "pyupm_*.py" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
|
||||
COMMAND ${SPHINX_API_EXECUTABLE} -f -o pydoc ${CMAKE_BINARY_DIR}/pyupm
|
||||
# todo: use a separate cmake FILE module for string replacement instead
|
||||
# TODO: use a separate cmake FILE module for string replacement instead
|
||||
COMMAND ${SPHINX_EXECUTABLE} -b html pydoc html/python
|
||||
COMMAND sed -i.bak s|\">pyupm_|\">|g html/python/index.html html/python/modules.html
|
||||
COMMAND sed -i.bak s|[[:space:]][mM]odule</a>|</a>|g html/python/index.html html/python/modules.html
|
||||
@ -106,10 +143,10 @@ if (BUILDDOC)
|
||||
COMMENT "Generating API documentation with Sphinx" VERBATIM
|
||||
)
|
||||
endif ()
|
||||
# check if Yuidoc is installed and add target for API documentation
|
||||
# Check if Yuidoc is installed and add target for API documentation
|
||||
find_package(Yuidoc)
|
||||
if(YUIDOC_FOUND AND BUILDSWIGNODE)
|
||||
# node required for Yuidoc documentation
|
||||
# Node required for Yuidoc documentation
|
||||
find_package(Node)
|
||||
file(GLOB_RECURSE JSDOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/doxy/node doxy/node/*)
|
||||
foreach(JSDOC_FILE ${JSDOC_FILES})
|
||||
@ -127,9 +164,23 @@ if (BUILDDOC)
|
||||
endif()
|
||||
|
||||
if (IPK)
|
||||
message (INFO " - IPK packaging enabled for ${DETECTED_ARCH}")
|
||||
set(CPACK_GENERATOR "DEB" "TGZ")
|
||||
set(OPKG_ARCH ${DETECTED_ARCH})
|
||||
|
||||
# Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
|
||||
if (DEFINED ENV{OECORE_TARGET_SYSROOT})
|
||||
GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
|
||||
string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
|
||||
else ()
|
||||
# Debian uses amd64 to denote x86_64
|
||||
if (DETECTED_ARCH STREQUAL "x86_64")
|
||||
set (TARGET_ARCH "amd64")
|
||||
else ()
|
||||
set (TARGET_ARCH ${DETECTED_ARCH})
|
||||
endif ()
|
||||
endif ()
|
||||
message (INFO " - Package arch is ${TARGET_ARCH}")
|
||||
|
||||
set(CPACK_GENERATOR "DEB")
|
||||
set(OPKG_ARCH ${TARGET_ARCH})
|
||||
set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
|
||||
set(upm_PACKAGE_ON_TAG ".")
|
||||
@ -140,9 +191,9 @@ if (IPK)
|
||||
"${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}${upm_PACKAGE_ON_TAG}${VERSION_COMMIT}")
|
||||
set(CPACK_PACKAGE_NAME "upm")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DETECTED_ARCH})
|
||||
set(CPACK_SYSTEM_NAME ${DETECTED_ARCH})
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libmraa0 (>= ${MRAA_VERSION})")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
|
||||
set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "mraa (>= ${MRAA_VERSION})")
|
||||
set(CPACK_DEBIAN_PACKAGE_PROVIDES "upm-dev, upm-dbg, upm-doc")
|
||||
set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
|
||||
set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
|
||||
@ -154,13 +205,12 @@ if (RPM)
|
||||
message (INFO " - RPM packaging enabled for ${DETECTED_ARCH}")
|
||||
set(CPACK_PACKAGE_VERSION ${VERSION})
|
||||
set(CPACK_GENERATOR "RPM")
|
||||
set(CPACK_PACKAGE_NAME "libupm${upm_VERSION_MAJOR}")
|
||||
set(CPACK_PACKAGE_RELEASE 1)
|
||||
set(CPACK_PACKAGE_NAME "upm")
|
||||
set(CPACK_PACKAGE_VERSION
|
||||
"${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}-${upm_PACKAGE_ON_TAG}${VERSION_COMMIT}")
|
||||
"${upm_VERSION_MAJOR}.${upm_VERSION_MINOR}.${upm_VERSION_PATCH}.${upm_PACKAGE_ON_TAG}${VERSION_COMMIT}")
|
||||
set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
|
||||
set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
|
||||
set(CPACK_RPM_PACKAGE_REQUIRES "libmraa0 >= ${MRAA_VERSION}")
|
||||
set(CPACK_RPM_PACKAGE_REQUIRES "mraa >= ${MRAA_VERSION}")
|
||||
set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
|
||||
EXECUTE_PROCESS(COMMAND rpm --showrc
|
||||
COMMAND grep -E "dist[[:space:]]*\\."
|
||||
@ -168,7 +218,7 @@ if (RPM)
|
||||
COMMAND tr \\n \\t
|
||||
COMMAND sed -e s/\\t//
|
||||
OUTPUT_VARIABLE DIST_TAG)
|
||||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${DIST_TAG}.${DETECTED_ARCH}")
|
||||
include(CPack)
|
||||
endif()
|
||||
|
||||
@ -177,3 +227,21 @@ add_subdirectory (src)
|
||||
if(BUILDEXAMPLES)
|
||||
add_subdirectory (examples/c++)
|
||||
endif()
|
||||
|
||||
if(BUILDJAVAEXAMPLES)
|
||||
add_subdirectory (examples/java)
|
||||
endif()
|
||||
|
||||
if (BUILDSWIGPYTHON OR BUILDTESTS)
|
||||
if (BUILDPYTHON3)
|
||||
set (PYTHONBUILD_VERSION 3)
|
||||
else ()
|
||||
set (PYTHONBUILD_VERSION 2.7)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (BUILDTESTS)
|
||||
find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
|
||||
enable_testing ()
|
||||
add_subdirectory (tests)
|
||||
endif()
|
||||
|
93
README.md
@ -1,8 +1,8 @@
|
||||
UPM - Sensor/Actuator repository for libmraa
|
||||
UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
|
||||
==============
|
||||
|
||||
UPM is a high level repository for sensors that use libmraa. Each sensor links
|
||||
to libmraa and are not meant to be interlinked although some groups of sensors
|
||||
UPM is a high level repository for sensors that use MRAA. Each sensor links
|
||||
to MRAA and are not meant to be interlinked although some groups of sensors
|
||||
may be. Each sensor contains a header which allows to interface with it.
|
||||
Typically a sensor is represented as a class and instantiated.
|
||||
|
||||
@ -12,14 +12,57 @@ to provide identification/pin location on the board.
|
||||
Typically an update() function will be called in order to get new data from the
|
||||
sensor in order to reduce load when doing multiple reads to sensor data.
|
||||
|
||||
Although implementation and API design is up to the developer, C++ interfaces have
|
||||
been defined for the following sensor/actuator types and developers are encouraged to
|
||||
implement them. Interface header files are in the src/upm folder.
|
||||
|
||||
* Light controller
|
||||
* Light sensor
|
||||
* Temperature sensor
|
||||
* Humidity sensor
|
||||
* Pressure sensor
|
||||
* Analog to digital converter
|
||||
|
||||
Feedback on interface design and additions for new types are welcome
|
||||
|
||||
### Example
|
||||
|
||||
A sensor/actuator is expected to work as such (here is the servo ES08A API):
|
||||
@snippet es08a.cxx Interesting
|
||||
A sensor/actuator is expected to work as such (here is the MMA7660 accelerometer API):
|
||||
```C++
|
||||
// Instantiate an MMA7660 on I2C bus 0
|
||||
upm::MMA7660 *accel = new upm::MMA7660(MMA7660_I2C_BUS,
|
||||
MMA7660_DEFAULT_I2C_ADDR);
|
||||
|
||||
However implementation and API design is completely up to the developer, some
|
||||
enumerable sensors for example may provide much clever instantiation. Displays
|
||||
may also create more complex structures in order to interface with them.
|
||||
// place device in standby mode so we can write registers
|
||||
accel->setModeStandby();
|
||||
|
||||
// enable 64 samples per second
|
||||
accel->setSampleRate(upm::MMA7660::AUTOSLEEP_64);
|
||||
|
||||
// place device into active mode
|
||||
accel->setModeActive();
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
int x, y, z;
|
||||
|
||||
accel->getRawValues(&x, &y, &z);
|
||||
cout << "Raw values: x = " << x
|
||||
<< " y = " << y
|
||||
<< " z = " << z
|
||||
<< endl;
|
||||
|
||||
float ax, ay, az;
|
||||
|
||||
accel->getAcceleration(&ax, &ay, &az);
|
||||
cout << "Acceleration: x = " << ax
|
||||
<< "g y = " << ay
|
||||
<< "g z = " << az
|
||||
<< "g" << endl;
|
||||
|
||||
usleep(500000);
|
||||
}
|
||||
```
|
||||
|
||||
Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples).
|
||||
|
||||
@ -34,27 +77,30 @@ You can also refer to the [Intel® IoT Developer Zone](https://software.intel.co
|
||||
|
||||
### IDE Integration
|
||||
|
||||
If you would like to create Eclipse IDE projects using the UPM C++ samples,
|
||||
please follow the instructions posted [here](https://software.intel.com/en-us/node/551014).
|
||||
This will show you how to import the code and configure your project.
|
||||
If you would like to create projects and run the UPM samples using an Intel recommended IDE,
|
||||
please refer to the Intel Developer Zone IDE page.
|
||||
|
||||
<a href="https://software.intel.com/iot/software/ide"><img src="docs/icons/allides.png"/></a>
|
||||
|
||||
### Building UPM
|
||||
|
||||
See @ref building [here](docs/building.md).
|
||||
See building documentation [here](docs/building.md).
|
||||
|
||||
### Making your own UPM module
|
||||
|
||||
@ref porting [link](docs/porting.md) has more information on making new UPM modules.
|
||||
Porting [link](docs/porting.md) has more information on making new UPM modules.
|
||||
|
||||
There is also an example available for @ref max31855 [sensor](docs/max31855.md).
|
||||
There is also an example available gfor max31855 [sensor](docs/max31855.md).
|
||||
|
||||
Guide on creating Java [bindings](docs/creating_java_bindings.md).
|
||||
|
||||
### Naming conventions and rules for new UPM contributions
|
||||
|
||||
Before you begin development, take a look at our @ref naming [conventions](docs/naming.md).
|
||||
Before you begin development, take a look at our naming [conventions](docs/naming.md).
|
||||
|
||||
Also, please read the guidelines for @ref contributions [to UPM](docs/contributions.md).
|
||||
Also, please read the guidelines for contributions [to UPM](docs/contributions.md).
|
||||
|
||||
Don't forget to check the @ref documentation [section](docs/documentation.md).
|
||||
Don't forget to check the documentation [section](docs/documentation.md).
|
||||
|
||||
Make sure you add yourself as an author on every new code file submitted.
|
||||
If you are providing a fix with significant changes, feel free to add yourself
|
||||
@ -63,14 +109,13 @@ as a contributor. Signing-off your commits is mandatory.
|
||||
API Documentation
|
||||
==============
|
||||
|
||||
@htmlonly
|
||||
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="docs/icons/c++.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm"><img src="docs/icons/c++.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a>
|
||||
|
||||
@endhtmlonly
|
||||
### Changelog
|
||||
Version changelog [here](docs/changelog.md).
|
||||
|
||||
Version @ref changelog [here](docs/changelog.md).
|
||||
|
||||
List of @ref knownlimitations [here](docs/knownlimitations.md).
|
||||
### Known Limitations
|
||||
List of known limitations [here](docs/knownlimitations.md).
|
||||
|
25
cmake/Toolchains/oe-sdk_cross.cmake
Normal file
@ -0,0 +1,25 @@
|
||||
# this toolchain file comes from gnuradio project
|
||||
|
||||
set( CMAKE_SYSTEM_NAME Linux )
|
||||
#set( CMAKE_C_COMPILER $ENV{CC} )
|
||||
#set( CMAKE_CXX_COMPILER $ENV{CXX} )
|
||||
string(REGEX MATCH "sysroots/([a-zA-Z0-9]+)" CMAKE_SYSTEM_PROCESSOR $ENV{SDKTARGETSYSROOT})
|
||||
string(REGEX REPLACE "sysroots/" "" CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
|
||||
set( CMAKE_CXX_FLAGS $ENV{CXXFLAGS} CACHE STRING "" FORCE )
|
||||
set( CMAKE_C_FLAGS $ENV{CFLAGS} CACHE STRING "" FORCE ) #same flags for C sources
|
||||
set( CMAKE_LDFLAGS_FLAGS ${CMAKE_CXX_FLAGS} CACHE STRING "" FORCE ) #same flags for C sources
|
||||
set( CMAKE_LIBRARY_PATH ${OECORE_TARGET_SYSROOT}/usr/lib )
|
||||
set( CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} $ENV{OECORE_NATIVE_SYSROOT} )
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
|
||||
set( CMAKE_INSTALL_PREFIX $ENV{OECORE_TARGET_SYSROOT}/usr CACHE STRING "" FORCE)
|
||||
set( ORC_INCLUDE_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/include/orc-0.4 )
|
||||
set( ORC_LIBRARY_DIRS $ENV{OECORE_TARGET_SYSROOT}/usr/lib )
|
||||
|
||||
# for java
|
||||
set( JAVA_AWT_INCLUDE_PATH $ENV{JAVA_HOME}/include CACHE PATH "" FORCE)
|
||||
set( JAVA_AWT_LIBRARY $ENV{JAVA_HOME}/jre/lib/amd64/libjawt.so CACHE FILEPATH "" FORCE)
|
||||
set( JAVA_INCLUDE_PATH $ENV{JAVA_HOME}/include CACHE PATH "" FORCE)
|
||||
set( JAVA_INCLUDE_PATH2 $ENV{JAVA_HOME}/include/linux CACHE PATH "" FORCE)
|
||||
set( JAVA_JVM_LIBRARY $ENV{JAVA_HOME}/jre/lib/amd64/libjvm.so CACHE FILEPATH "" FORCE)
|
@ -1,4 +1,12 @@
|
||||
find_program (NODE_EXECUTABLE NAMES node
|
||||
# Macro to add directory to NODEJS_INCLUDE_DIRS if it exists and is not /usr/include
|
||||
macro(add_include_dir dir)
|
||||
if (IS_DIRECTORY ${dir} AND NOT ${dir} STREQUAL "/usr/include")
|
||||
set(NODEJS_INCLUDE_DIRS ${NODEJS_INCLUDE_DIRS} ${dir})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
find_program (NODEJS_EXECUTABLE NAMES node nodejs
|
||||
HINTS
|
||||
$ENV{NODE_DIR}
|
||||
PATH_SUFFIXES bin
|
||||
@ -7,26 +15,50 @@ find_program (NODE_EXECUTABLE NAMES node
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
find_path (NODE_ROOT_DIR "node/node.h" "src/node.h"
|
||||
PATHS /usr/include/nodejs /usr/local/include/nodejs)
|
||||
# If compat-libuv package exists, it must be at start of include path
|
||||
find_path (UV_ROOT_DIR "uv.h" PATHS /usr/include/compat-libuv010 NO_DEFAULT_PATH)
|
||||
if (UV_ROOT_DIR)
|
||||
# set (NODEJS_INCLUDE_DIRS ${UV_ROOT_DIR})
|
||||
add_include_dir(${UV_ROOT_DIR})
|
||||
endif()
|
||||
|
||||
set (NODE_INCLUDE_DIRS
|
||||
${NODE_ROOT_DIR}/src
|
||||
${NODE_ROOT_DIR}/node
|
||||
${NODE_ROOT_DIR}/deps/v8/include
|
||||
${NODE_ROOT_DIR}/deps/uv/include
|
||||
# Now look for node. Flag an error if not found
|
||||
find_path (NODE_ROOT_DIR "include/node/node.h" "include/src/node.h"
|
||||
PATHS /usr/include/nodejs /usr/local/include/nodejs /usr/local/include)
|
||||
if (NODE_ROOT_DIR)
|
||||
add_include_dir(${NODE_ROOT_DIR}/include/src)
|
||||
add_include_dir(${NODE_ROOT_DIR}/include/node)
|
||||
add_include_dir(${NODE_ROOT_DIR}/include/deps/v8/include)
|
||||
add_include_dir(${NODE_ROOT_DIR}/include/deps/uv/include)
|
||||
else()
|
||||
unset(NODEJS_INCLUDE_DIRS)
|
||||
message(ERROR " - node.h not found")
|
||||
endif()
|
||||
|
||||
# Check that v8.h is in NODEJS_INCLUDE_DIRS
|
||||
find_path (V8_ROOT_DIR "v8.h" PATHS ${NODEJS_INCLUDE_DIRS})
|
||||
if (NOT V8_ROOT_DIR)
|
||||
unset(NODEJS_INCLUDE_DIRS)
|
||||
message(ERROR " - v8.h not found")
|
||||
endif()
|
||||
|
||||
# Check that uv.h is in NODEJS_INCLUDE_DIRS
|
||||
find_path (UV_ROOT_DIR "uv.h" PATHS ${NODEJS_INCLUDE_DIRS})
|
||||
if (NOT UV_ROOT_DIR)
|
||||
unset(NODEJS_INCLUDE_DIRS)
|
||||
message(ERROR " - uv.h not found")
|
||||
endif()
|
||||
|
||||
find_package_handle_standard_args (Nodejs DEFAULT_MSG
|
||||
NODEJS_EXECUTABLE
|
||||
NODEJS_INCLUDE_DIRS
|
||||
)
|
||||
|
||||
find_package_handle_standard_args (Node DEFAULT_MSG
|
||||
NODE_EXECUTABLE
|
||||
NODE_INCLUDE_DIRS
|
||||
)
|
||||
|
||||
if (NODE_EXECUTABLE)
|
||||
execute_process(COMMAND ${NODE_EXECUTABLE} --version
|
||||
if (NODEJS_EXECUTABLE)
|
||||
execute_process(COMMAND ${NODEJS_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE _VERSION
|
||||
RESULT_VARIABLE _NODE_VERSION_RESULT)
|
||||
execute_process(COMMAND ${NODE_EXECUTABLE} -e "console.log(process.versions.v8)"
|
||||
execute_process(COMMAND ${NODEJS_EXECUTABLE} -e "console.log(process.versions.v8)"
|
||||
OUTPUT_VARIABLE _V8_VERSION
|
||||
RESULT_VARIABLE _V8_RESULT)
|
||||
if (NOT _NODE_VERSION_RESULT AND NOT _V8_RESULT)
|
||||
@ -55,7 +87,11 @@ if (NODE_EXECUTABLE)
|
||||
set (V8_VERSION_STRING "3.28.72")
|
||||
message ("defaulted to node 0.10.30")
|
||||
endif ()
|
||||
message ("INFO - Node version is " ${NODE_VERSION_STRING} "INFO - Node using v8 " ${V8_VERSION_STRING})
|
||||
string (REGEX REPLACE "\n" "" NODE_VERSION_STRING ${NODE_VERSION_STRING})
|
||||
string (REGEX REPLACE "\n" "" V8_VERSION_STRING ${V8_VERSION_STRING})
|
||||
message ("INFO - Node version is " ${NODE_VERSION_STRING})
|
||||
message ("INFO - Node using v8 " ${V8_VERSION_STRING})
|
||||
mark_as_advanced (NODEJS_EXECUTABLE)
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (NODE_EXECUTABLE)
|
||||
|
@ -5,12 +5,10 @@ UPM uses cmake in order to make compilation relatively painless. Cmake runs
|
||||
build out of tree so the recommended way is to clone from git and make a build/
|
||||
directory.
|
||||
|
||||
This project depends on libmraa, so that needs to be installed first. Use the
|
||||
following environment variables to configure the paths:
|
||||
This project depends on libmraa, so that needs to be installed first. Append
|
||||
the install location of mraa pkgconfig to the following environment variable:
|
||||
|
||||
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.../mraa/build/lib/pkgconfig
|
||||
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:.../mraa/build/include
|
||||
LIBRARY_PATH=$LIBRARY_PATH:.../mraa/build/lib
|
||||
|
||||
UPM will attempt to build all directories inside src/ and they must contain
|
||||
individual CMakeLists.txt files.
|
||||
|
@ -4,6 +4,73 @@ Changelog {#changelog}
|
||||
Here's a list summarizing some of the key undergoing changes to our library
|
||||
from earlier versions:
|
||||
|
||||
### v0.6.0
|
||||
|
||||
* Introduced C++ Interfaces for several sensor categories that will help
|
||||
consolidate the sensor APIs with uniform function names upon implementation
|
||||
* Greatly improved Node.js detection and handling during build and install,
|
||||
and should be now compatible with all major versions
|
||||
* Added a driver for the Curie IMU (accelerometer + gyroscope) that works with
|
||||
the new Firmata support implemented by MRAA
|
||||
* Continued to provide several JAVA fixes and examples
|
||||
* Many new industrial and maker sensors: cwlsxxa, teams, tex00, h803x, apa102,
|
||||
smartdrive, bmi160, bme280, ds1808lc, hlg150, lp8860, max44009, si1132, t6713,
|
||||
si7005, ssd1351
|
||||
|
||||
### v0.5.1
|
||||
|
||||
* Updated the API and added new functionality for the MY9221 class and derived
|
||||
sensors: grovecircularled and groveledbar, along with new code samples that
|
||||
show these changes
|
||||
* Provided a fix for one JAVA example that uses interrupts and updated library
|
||||
install paths
|
||||
* Several documentation improvements and pictures were added for new sensors
|
||||
* A few other sensors received minor patches
|
||||
|
||||
### v0.5.0
|
||||
|
||||
* First implementations for industrial grade Modbus sensors, along with first
|
||||
sensor examples that use the new iio system driver in MRAA
|
||||
* Significant improvements to the stepmotor driver that will now allow precise
|
||||
control using any GPIO pin and extended the API with new functionality
|
||||
* Further improved JAVA bindings and sensor ISRs have been modified to
|
||||
implement Runnable objects
|
||||
* Improved Python typemaps and error checking, documentation now includes
|
||||
detailed function descriptions
|
||||
* Simplified the build process by eliminating the need to define redundant
|
||||
MRAA related environment variables
|
||||
* New sensors: nlgpio16, ads1x15, t3311, hdxxvxta, hwxpxx, rhusb, ili9341,
|
||||
apds9930, kxcjk1013
|
||||
|
||||
### v0.4.1
|
||||
|
||||
* Over 150 supported sensor drivers including some industrial grade devices
|
||||
* Improved the JAVA bindings, added a large number of examples for sensors,
|
||||
enabled JAVA builds in Travis CI, and introduced automatic loading for the
|
||||
JAVA shared libraries
|
||||
* Continued to improve existing sensor drivers and to enhance them with the
|
||||
new C++ coding style and exception types
|
||||
* Several cmake improvements to allow building on various Linux distributions
|
||||
and with a newer version of Node.JS
|
||||
* Simplified adding and building of C++ sensor examples via cmake
|
||||
* New sensors: micsv89, xbee, urm37, adxrs610, bma220, dfrph, mcp9808, sx1276,
|
||||
groveultrasonic, ozw
|
||||
|
||||
### v0.4.0
|
||||
|
||||
* Fully functional and documented JAVA language bindings for sensors with
|
||||
several examples also available
|
||||
* Added standardized exception handling support across all language bindings
|
||||
and updated sensors to use this feature
|
||||
* Sensor drivers are now available and can be installed individually using NPM
|
||||
for Node.js users
|
||||
* Continuous Integration with Travis CI ensures new contributions are built
|
||||
automatically once they are received
|
||||
* API rewrite and improvements for hcsr04, sm130, eboled, loudness
|
||||
* Documentation improvements and code style changes from C to C++
|
||||
* New sensors: hyld9767, mg811, wheelencoder, grovegprs, mpu9250, ssd1306,
|
||||
es9257, lm35, mq4, mq6, mq7, mq8
|
||||
|
||||
### v0.3.2
|
||||
|
||||
* Introduced RPM package generation feature from cmake via cpack
|
||||
@ -11,7 +78,7 @@ from earlier versions:
|
||||
includes last remaining images and grouping sensors by kits
|
||||
* Added support for Sparkfun Sensor Blocks (OLED & IMU)
|
||||
* Fully reworked API for at42qt1070, mpu9150 and lcd classes, while
|
||||
maintaining backwards compatibility for existing lcd displays.
|
||||
maintaining backwards compatibility for existing lcd displays
|
||||
* Extended doxygen tags for better integration with automated documentation
|
||||
generators
|
||||
* New sensors: rgbringcoder, hp20x, pn532, sainsmartks, lsm9ds0, eboled
|
||||
|
353
docs/creating_java_bindings.md
Normal file
@ -0,0 +1,353 @@
|
||||
Creating Java Bindings Guide
|
||||
==============
|
||||
* [Overview](#overview)
|
||||
* [Tools of trade](#tools-of-trade)
|
||||
* [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)
|
||||
|
||||
[SWIG Java-specific Documentation](http://www.swig.org/Doc3.0/Java.html)
|
||||
|
||||
|
||||
##Recommendations for the native API
|
||||
|
||||
###Pointers
|
||||
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");
|
||||
} catch(...) {
|
||||
SWIG_exception(SWIG_RuntimeError,"Unknown exception");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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:
|
||||
|
||||
* std::invalid_argument
|
||||
* std::domain_error
|
||||
* std::overflow_error
|
||||
* std::out_of_range
|
||||
* std::length_error
|
||||
* std::logic_error
|
||||
* std::bad_alloc
|
||||
* std::runtime_error
|
||||
* std::exception
|
||||
|
||||
|
||||
####Java specific:
|
||||
To throw a specific Java exception:
|
||||
|
||||
```c++
|
||||
%exception {
|
||||
try {
|
||||
$action
|
||||
} catch (std::out_of_range &e) {
|
||||
jclass clazz = jenv->FindClass("java/lang/Exception");
|
||||
jenv->ThrowNew(clazz, "Range error");
|
||||
return $null;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
```c++
|
||||
%javaexception("java.lang.Exception") {
|
||||
try {
|
||||
$action
|
||||
} catch (std::out_of_range &e) {
|
||||
jclass clazz = jenv->FindClass("java/lang/Exception");
|
||||
jenv->ThrowNew(clazz, "Range error");
|
||||
return $null;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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) {
|
||||
$1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
|
||||
$2 = JCALL1(GetArrayLength, jenv, $input);
|
||||
}
|
||||
```
|
||||
|
||||
!!!! 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.
|
||||
|
||||
SWIGJAVA is a symbol that is always defined by SWIG when using Java. We enclose the _installISR\(jobject runnable\)_ method in a _\#if defined(SWIGJAVA)_ check, to ensure the code only exists when creating a wrapper for Java.
|
||||
|
||||
```c++
|
||||
#if defined(SWIGJAVA)
|
||||
void A110X::installISR(jobject runnable)
|
||||
{
|
||||
installISR(mraa_java_isr_callback, runnable);
|
||||
}
|
||||
#endif
|
||||
```
|
||||
|
||||
We hide the underlying method, _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ , and expose only the _installISR\(jobject runnable\)_ to SWIG, through the use of the SWIGJAVA symbol. When SWIGJAVA is defined, we change the access modifier of the underlying method to private.
|
||||
|
||||
```c++
|
||||
public:
|
||||
#if defined(SWIGJAVA)
|
||||
void installISR(jobject runnable);
|
||||
#else
|
||||
void installISR(void (*isr)(void *), void *arg);
|
||||
#endif
|
||||
private:
|
||||
#if defined(SWIGJAVA)
|
||||
void installISR(void (*isr)(void *), void *arg);
|
||||
#endif
|
||||
```
|
||||
|
||||
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 {
|
||||
upm_a110x.A110X hall = new upm_a110x.A110X(2);
|
||||
|
||||
A110XISR callback = new A110XISR();
|
||||
hall.installISR(callback);
|
||||
|
||||
while(true){
|
||||
System.out.println("Counter: " + counter);
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class A110XISR implements Runnable {
|
||||
public A110XISR(){
|
||||
super();
|
||||
}
|
||||
public void run(){
|
||||
A110X_intrSample.counter++;
|
||||
}
|
||||
}
|
||||
```
|
||||
####Issues with java callbacks and workarounds
|
||||
|
||||
__SWIGJAVA not defined at compile time__
|
||||
|
||||
Consider the following files:
|
||||
* example.h - Header file for our source file
|
||||
* example.cxx - Source file containing the class Example, for which we build java bindings
|
||||
* example.i - The SWIG interface, that includes the example.h header file
|
||||
|
||||
The build process of a java module using SWIG is split into two steps:
|
||||
|
||||
1. Generating the intermediate files, from the SWIG interface file. This will produce the java class file (Example.java), the JNI file (exampleJNI.java) and wrapper file (example_wrap.cxx). The source file (example.cxx) is not needed in the first step.
|
||||
|
||||
```
|
||||
swig -c++ -java example.i
|
||||
```
|
||||
|
||||
2. Generating the shared library from the C++ sources and wrapper file
|
||||
```
|
||||
g++ -fPIC -c example.cxx example_wrap.cxx -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0/include/linux
|
||||
g++ -shared example_wrap.o sensor.o -o libexample.so
|
||||
```
|
||||
|
||||
|
||||
SWIGJAVA is always defined when SWIG parses the interface file, meaning it will be defined when it parses the header file (example.h) that is included in the interface file (example.i).
|
||||
SWIG also adds the "#define SWIGJAVA" directive in the wrapper file (example_wrap.cxx).
|
||||
However, in generating the shared library the SWIGJAVA symbol is only defined in the example_wrap.cxx file, because of the added "#define SWIGJAVA" directive. But we have also used the "#if defined(SWIGJAVA)" check in the source file (example.cxx), and thus need to define SWIGJAVA for it too. If we define the SWIGJAVA symbol as a compile flag, when compiling the source code to object code, the SWIGJAVA compile flag and #define SWIGJAVA" directive will clash and give a double definition warning (only a warning).
|
||||
|
||||
In this example it is simple to compile the two source codes separately, one with the compile flag, the other without, and then create the shared library (libexample.so).
|
||||
But in a big automatic build like the java upm libraries, this may prove too hard or too complicated to do. A workaround to this would be to define a custom symbol (e.q. JAVACALLBACK in the upm library) and also test for it. In short, replace:
|
||||
```c++
|
||||
#if defined(SWIGJAVA)
|
||||
```
|
||||
by
|
||||
```c++
|
||||
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
|
||||
```
|
||||
|
@ -50,10 +50,12 @@ Here's an example (disregard the "@verbatim" tags in your actual code):
|
||||
library's "@defgroup", otherwise this is a new library name, generally the
|
||||
same as chip id. *Mandatory*
|
||||
- `<chip-id>` Usually the chip number used by the sensor. When this is not
|
||||
available or relevant, use a unique descriptor that makes sense. *Mandatory*
|
||||
- `<component-name>` A short name for your sensor, can include manufacturer
|
||||
name. *Mandatory*
|
||||
- `<alt-name>` Alternative names that your sensor driver might have. *Optional*
|
||||
available or relevant, use a unique descriptor that makes sense. Must match
|
||||
class name. *Mandatory*
|
||||
- `<component-name>` A short name for your sensor, try to avoid including the
|
||||
manufacturer's name here. *Mandatory*
|
||||
- `<alt-name>` Alternative names that your sensor driver might have. This may
|
||||
include manufacturer's name. *Optional*
|
||||
- `<alt-id>` Alternative chip-ids that your sensor driver supports. *Optional*
|
||||
- `<component-category>` Mention one or more categories the sensor fits in. Can
|
||||
be 'other'. *Mandatory*
|
||||
|
BIN
docs/icons/allides.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
docs/icons/eclipse.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
docs/icons/java.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
docs/icons/wyliodrin.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
docs/icons/xdk.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
docs/images/ads1015.jpg
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
docs/images/ads1115.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
docs/images/adxrs610.jpg
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
docs/images/apa102.jpg
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
docs/images/bma220.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
docs/images/dfrph.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
docs/images/eboled.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
docs/images/groveultrasonic.jpg
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
docs/images/ili9341.jpg
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
docs/images/keypadlcd.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
docs/images/lm35.jpg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
docs/images/lsm9ds0.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
docs/images/mcp9808.jpg
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
docs/images/mg811.jpg
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
docs/images/micsv89.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
docs/images/mpu60x0.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
docs/images/mpu9250.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
docs/images/pn532.jpg
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
docs/images/ssd1306.jpeg
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
docs/images/ssd1351.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 198 KiB |
BIN
docs/images/urm37.jpg
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
docs/images/wheelencoder.jpg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
docs/images/xbee.jpg
Normal file
After Width: | Height: | Size: 176 KiB |
@ -7,16 +7,21 @@ such sensors and known workarounds if they exist.
|
||||
|
||||
#### Grove Sensors
|
||||
|
||||
* **Grove I2C Touch Sensor** v1.3 is incompatible with the Intel Edison using
|
||||
the Arduino board, but will work with the Mini-breakout if supplied with at
|
||||
least 4V. Revision v1.2 works well on all Intel boards.
|
||||
* **Grove LCD RGB Backlit** (JHD1313M1) requires 5V and should be used with an
|
||||
external power supply connected to the board to function properly. Although
|
||||
some high powered USB ports might be enough, in most cases you will encounter
|
||||
dropped characters, washed out text and/or failed I2C writes while using USB
|
||||
power alone.
|
||||
* **Grove I2C Touch Sensor** (MPR121) v1.3 is incompatible with the Intel
|
||||
Edison using the Arduino board, but will work with the Mini-breakout if
|
||||
supplied with at least 4V. Revision v1.2 works well on all Intel boards.
|
||||
* **Grove Nunchuck** only works with the Intel Galileo boards and is unusable
|
||||
on the Intel Edison boards.
|
||||
* **Grove 3-Axis Digital Gyroscope** (ITG-3200) is not compatible with the
|
||||
Intel Edison Arduino board but will work with the Mini-breakout.
|
||||
* **Grove 3-Axis Digital Accelerometer** (ADXL345) only works with the Intel
|
||||
Edison Arduino board when powered from the 3.3V line.
|
||||
* **Grove 3-Axis Digital Compass (HMC5883L) reports inaccurate values at 5V
|
||||
* **Grove 3-Axis Digital Accelerometer +/-16g** (ADXL345) only works with the
|
||||
Intel Edison Arduino board when powered from the 3.3V line.
|
||||
* **Grove 3-Axis Digital Compass** (HMC5883L) reports inaccurate values at 5V
|
||||
on the Intel Edison Arduino board and newer revisions might not work at all.
|
||||
Use 3.3V or the Mini-breakout.
|
||||
* **Grove 96x96 OLED Display** will not work on the Intel Edison with Arduino
|
||||
@ -32,9 +37,18 @@ such sensors and known workarounds if they exist.
|
||||
Edison with the Arduino board.
|
||||
* **Grove I2C Motor Driver** is not compatible with the Intel Galileo due to
|
||||
the inability to change the I2C bus speed to 100 KHz.
|
||||
* **Grove Digital Light Sensor** (TSL2561) may have an unstable connection on
|
||||
the Intel Edison using the Arduino breakout that results in missed I2C reads.
|
||||
This is usually applicable when the I2C lines are pulled-up to 5V. Works as
|
||||
expected with the Mini-breakout.
|
||||
* **Grove CO2 Sensor** will return zeroed data and is unusable on the Intel
|
||||
Galileo.
|
||||
* **Grove BLE** (HM-11) does not return data on the Intel Galileo board.
|
||||
* **Grove BLE** (HM-11) does not return data on the Intel Galileo board due to
|
||||
known UART limitation.
|
||||
* **Grove Hall Sensor** (A11X) if the base shield is set to 3V on Intel Edison,
|
||||
it will trigger continous callbacks when the sensor is not reading anything.
|
||||
* **Grove RTC** (DS1307) is not compatible with the Intel Edison Arduino board
|
||||
but will work with the Mini-breakout.
|
||||
|
||||
#### Adafruit Sensors
|
||||
|
||||
@ -43,15 +57,27 @@ such sensors and known workarounds if they exist.
|
||||
|
||||
#### Other Sensors
|
||||
|
||||
* **SM130** driver might not be fully functional.
|
||||
* **NRF24L01** might not handle data packets as expected.
|
||||
* **NRF8001** based devices do not initialize properly with provided examples.
|
||||
* **NRF24L01** corrupted data packets are sent to the device due to the Intel
|
||||
Edison SPI bus limitation. Sensor works as expected with the Intel Galileo
|
||||
boards.
|
||||
* **NRF8001** based devices do not initialize properly with provided examples
|
||||
on Intel Edison boards also due to SPI bus limitation and data corruption.
|
||||
Works on Intel Galileo.
|
||||
|
||||
#### General
|
||||
|
||||
Some I2C sensors add too much capacitance to the SDA line of the Intel Edison
|
||||
Some *I2C* sensors add too much capacitance to the SDA line of the Intel Edison
|
||||
Arduino breakout board, thus the signal sticks to a logic 1. When this happens,
|
||||
other sensors connected to the I2C bus are unusable. While there is no generic
|
||||
solution for this limitation, in most cases the sensor works on the Intel
|
||||
Edison Mini-breakout. When this board is not an option, the sensor can be
|
||||
sometimes replaced with the same model from a different vendor.
|
||||
|
||||
The Intel Edison *SPI* bus can corrupt data being sent across when certain
|
||||
sensors are connected to it. Based on the sensor, this can affect functionality
|
||||
slightly or make the sensor entirely unusable. Unlike the I2C bus limitation,
|
||||
different boards are not likely to resolve this. A kernel update on the other
|
||||
hand might help alleviate this.
|
||||
|
||||
On the Intel Galileo boards, the *UART* bus might drop data if several bytes
|
||||
are read at once.
|
||||
|
@ -26,8 +26,5 @@ sensor can inherit your class if they only have minor changes.
|
||||
### Doubt
|
||||
|
||||
If ever, give either of us a ping via email:
|
||||
mihai.tudor.panu@intel.com
|
||||
john.r.van.drasek@intel.com
|
||||
brendan.le.foll@intel.com
|
||||
mihai.tudor.panu@intel.com or brendan.le.foll@intel.com
|
||||
and we'll try suggest decent names for your module.
|
||||
|
||||
|
@ -767,7 +767,7 @@ WARN_LOGFILE =
|
||||
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/upm.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/src \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/docs \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/README.md
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/doxy/README.cpp.md
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
@ -859,7 +859,7 @@ EXCLUDE_SYMLINKS = NO
|
||||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories for example use the pattern */test/*
|
||||
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_PATTERNS = bosch_*
|
||||
|
||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
|
||||
# (namespaces, classes, functions, etc.) that should be excluded from the
|
||||
@ -946,7 +946,7 @@ FILTER_SOURCE_PATTERNS =
|
||||
# (index.html). This can be useful if you have a project on for instance GitHub
|
||||
# and want to reuse the introduction page also for the doxygen output.
|
||||
|
||||
USE_MDFILE_AS_MAINPAGE = @CMAKE_CURRENT_SOURCE_DIR@/README.md
|
||||
USE_MDFILE_AS_MAINPAGE = @CMAKE_CURRENT_SOURCE_DIR@/doxy/README.cpp.md
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
|
2332
doxy/Doxyfile.java.in
Normal file
82
doxy/README.cpp.md
Normal file
@ -0,0 +1,82 @@
|
||||
UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
|
||||
==============
|
||||
|
||||
UPM is a high level repository for sensors that use MRAA. Each sensor links
|
||||
to MRAA and are not meant to be interlinked although some groups of sensors
|
||||
may be. Each sensor contains a header which allows to interface with it.
|
||||
Typically a sensor is represented as a class and instantiated.
|
||||
|
||||
The constructor is expected to initialise the sensor and parameters may be used
|
||||
to provide identification/pin location on the board.
|
||||
|
||||
Typically an update() function will be called in order to get new data from the
|
||||
sensor in order to reduce load when doing multiple reads to sensor data.
|
||||
|
||||
### Example
|
||||
|
||||
A sensor/actuator is expected to work as such (here is the servo ES08A API):
|
||||
@snippet es08a.cxx Interesting
|
||||
|
||||
However implementation and API design is completely up to the developer, some
|
||||
enumerable sensors for example may provide much clever instantiation. Displays
|
||||
may also create more complex structures in order to interface with them.
|
||||
|
||||
Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples/c%2B%2B).
|
||||
|
||||
Multi-sensor samples for the starter and specialized kits can be found in the
|
||||
[iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository.
|
||||
|
||||
### Supported Sensors
|
||||
|
||||
Supported [sensor list](http://iotdk.intel.com/docs/master/upm/modules.html) from API documentation.
|
||||
|
||||
You can also refer to the [Intel IoT Developer Zone](https://software.intel.com/iot/sensors).
|
||||
|
||||
### IDE Compatibility
|
||||
|
||||
If you would like to create Eclipse IDE projects using the UPM C++ samples,
|
||||
please follow the instructions provided on the Intel Developer Zone IDE page.
|
||||
|
||||
@htmlonly
|
||||
<a href="https://software.intel.com/iot/software/ide"><img src="docs/icons/eclipse.png"/></a>
|
||||
@endhtmlonly
|
||||
|
||||
### Building UPM
|
||||
|
||||
See @ref building here.
|
||||
|
||||
### Making your own UPM module
|
||||
|
||||
@ref porting link has more information on making new UPM modules.
|
||||
|
||||
There is also an example available for @ref max31855 sensor.
|
||||
|
||||
### Naming conventions and rules for new UPM contributions
|
||||
|
||||
Before you begin development, take a look at our @ref naming conventions.
|
||||
|
||||
Also, please read the guidelines for @ref contributions to UPM.
|
||||
|
||||
Don't forget to check the @ref documentation section.
|
||||
|
||||
Make sure you add yourself as an author on every new code file submitted.
|
||||
If you are providing a fix with significant changes, feel free to add yourself
|
||||
as a contributor. Signing-off your commits is mandatory.
|
||||
|
||||
API Documentation
|
||||
==============
|
||||
|
||||
@htmlonly
|
||||
|
||||
<a href="http://iotdk.intel.com/docs/master/upm"><img src="docs/icons/c++.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a>
|
||||
|
||||
@endhtmlonly
|
||||
|
||||
### Changelog
|
||||
Version @ref changelog here.
|
||||
|
||||
### Known Limitations
|
||||
List of @ref knownlimitations here.
|
81
doxy/README.java.md
Normal file
@ -0,0 +1,81 @@
|
||||
UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
|
||||
|
||||
UPM is a high level repository for sensors that use MRAA. Each sensor links
|
||||
to MRAA and are not meant to be interlinked although some groups of sensors
|
||||
may be. Each sensor contains a header which allows to interface with it.
|
||||
Typically a sensor is represented as a class and instantiated.
|
||||
|
||||
The constructor is expected to initialise the sensor and parameters may be used
|
||||
to provide identification/pin location on the board.
|
||||
|
||||
Typically an update() function will be called in order to get new data from the
|
||||
sensor in order to reduce load when doing multiple reads to sensor data.
|
||||
|
||||
### Example
|
||||
|
||||
A sensor/actuator is expected to work as such (here is the servo ES08A API):
|
||||
@snippet ES08ASample.java Interesting
|
||||
|
||||
However implementation and API design is completely up to the developer, some
|
||||
enumerable sensors for example may provide much clever instantiation. Displays
|
||||
may also create more complex structures in order to interface with them.
|
||||
|
||||
Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples/java).
|
||||
|
||||
Multi-sensor samples for the starter and specialized kits can be found in the
|
||||
[iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository.
|
||||
|
||||
### Supported Sensors
|
||||
|
||||
Supported [sensor list](http://iotdk.intel.com/docs/master/upm/java/modules.html) from API documentation.
|
||||
|
||||
You can also refer to the [Intel® IoT Developer Zone](https://software.intel.com/iot/sensors).
|
||||
|
||||
### IDE Compatibility
|
||||
|
||||
If you would like to create Eclipse IDE projects using the UPM Java samples,
|
||||
please follow the instructions provided on the Intel Developer Zone IDE page.
|
||||
|
||||
@htmlonly
|
||||
<a href="https://software.intel.com/iot/software/ide"><img src="../docs/icons/eclipse.png"/></a>
|
||||
@endhtmlonly
|
||||
|
||||
### Building UPM
|
||||
|
||||
See @ref building here.
|
||||
|
||||
### Making your own UPM module
|
||||
|
||||
@ref porting link has more information on making new UPM modules.
|
||||
|
||||
There is also an example available for @ref max31855 sensor.
|
||||
|
||||
### Naming conventions and rules for new UPM contributions
|
||||
|
||||
Before you begin development, take a look at our @ref naming conventions.
|
||||
|
||||
Also, please read the guidelines for @ref contributions to UPM.
|
||||
|
||||
Don't forget to check the @ref documentation section.
|
||||
|
||||
Make sure you add yourself as an author on every new code file submitted.
|
||||
If you are providing a fix with significant changes, feel free to add yourself
|
||||
as a contributor. Signing-off your commits is mandatory.
|
||||
|
||||
API Documentation
|
||||
==============
|
||||
|
||||
@htmlonly
|
||||
|
||||
<a href="http://iotdk.intel.com/docs/master/upm"><img src="../docs/icons/c++.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png"/></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png"/></a>
|
||||
|
||||
@endhtmlonly
|
||||
|
||||
### Changelog
|
||||
Version @ref changelog here.
|
||||
|
||||
### Known Limitations
|
||||
List of @ref knownlimitations here.
|
@ -21,7 +21,16 @@ For building UPM, please follow this `link <https://github.com/intel-iot-devkit/
|
||||
Multi-sensor samples for the starter and specialized kits can be found in the `iot-devkit-samples <https://github.com/intel-iot-devkit/iot-devkit-samples>`_
|
||||
repository.
|
||||
|
||||
Individual sensor usage examples for python are available `here <https://github.com/intel-iot-devkit/upm/tree/master/examples/python>`_.
|
||||
Individual sensor usage examples for Python are available `here <https://github.com/intel-iot-devkit/upm/tree/master/examples/python>`_.
|
||||
|
||||
``IDE Compatibility``
|
||||
################
|
||||
|
||||
While there is no official IDE provided with our Python libraries, we do recommend the web-based IDE Wyliodrin. It can be used with multiple programming
|
||||
languages, including Python. More information can be found on the Intel Developer Zone IDE page.
|
||||
|
||||
.. image:: ../docs/icons/wyliodrin.png
|
||||
:target: https://software.intel.com/iot/software/ide
|
||||
|
||||
``Making your own UPM Module``
|
||||
##############################
|
||||
@ -48,8 +57,10 @@ Don't forget to check the documentation `section <https://github.com/intel-iot-d
|
||||
``List of Available Sensors Drivers``
|
||||
######################################
|
||||
|
||||
Click on the library prefix below to expand the full list of sensors:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:maxdepth: 1
|
||||
|
||||
modules
|
||||
|
||||
@ -57,7 +68,9 @@ Don't forget to check the documentation `section <https://github.com/intel-iot-d
|
||||
###########################
|
||||
|
||||
.. image:: ../docs/icons/c++.png
|
||||
:target: http://iotdk.intel.com/docs/master/upm/modules.html
|
||||
:target: http://iotdk.intel.com/docs/master/upm
|
||||
.. image:: ../docs/icons/java.png
|
||||
:target: http://iotdk.intel.com/docs/master/upm/java
|
||||
.. image:: ../docs/icons/python.png
|
||||
:target: http://iotdk.intel.com/docs/master/upm/python
|
||||
.. image:: ../docs/icons/node.png
|
||||
|
@ -7,8 +7,8 @@
|
||||
<p>Browse to a module or class using the sidebar to view its API
|
||||
documentation.</p>
|
||||
|
||||
<p>UPM is a high level repository for sensors that use libmraa. Each
|
||||
sensor links to libmraa and are not meant to be interlinked although
|
||||
<p>UPM is a high level repository for sensors that use MRAA. Each
|
||||
sensor links to MRAA and are not meant to be interlinked although
|
||||
some groups of sensors may be. Each sensor contains a header which
|
||||
allows to interface with it. Typically a sensor is represented as a
|
||||
class and instantiated.</p>
|
||||
@ -36,6 +36,19 @@
|
||||
href="https://github.com/intel-iot-devkit/upm/tree/master/examples/javascript">here</a>.</p>
|
||||
|
||||
</div>
|
||||
<div class="section" id="ide">
|
||||
<h3><tt class="docutils literal"><span class="pre">IDE Compatibility</span>
|
||||
<span class="pre">UPM</span></tt><a class="headerlink"
|
||||
href="#ide"
|
||||
title="Permalink to this headline">*</a></h3>
|
||||
|
||||
|
||||
<p>Intel® XDK IoT Edition is the recommended IDE for Node.js development.
|
||||
Visit the Intel® Developer Zone IDE page for more information on how to get
|
||||
started.<br>
|
||||
<a href="https://software.intel.com/iot/software/ide"><img src="../docs/icons/xdk.png"/></a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="section" id="building-upm">
|
||||
<h3><tt class="docutils literal"><span class="pre">Building</span>
|
||||
<span class="pre">UPM</span></tt><a class="headerlink"
|
||||
@ -109,7 +122,8 @@
|
||||
title="Permalink to this headline"></a></h1>
|
||||
|
||||
|
||||
<p><a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="../docs/icons/c++.png" /></a>
|
||||
<p><a href="http://iotdk.intel.com/docs/master/upm"><img src="../docs/icons/c++.png" /></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png" /></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png" /></a>
|
||||
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png" /></a>
|
||||
</p>
|
||||
|
73
doxy/samples.mapping.txt
Normal file
@ -0,0 +1,73 @@
|
||||
# Mapping C++ sample files to Java sample files
|
||||
a110x-intr.cxx A110X_intrSample.java
|
||||
a110x.cxx A110XSample.java
|
||||
adc121c021.cxx ADC121C021Sample.java
|
||||
adxl345.cxx Adxl345Sample.java
|
||||
biss0001.cxx BISS0001Sample.java
|
||||
bmpx8x.cxx BMPX8XSample.java
|
||||
buzzer-sound.cxx Buzzer_soundSample.java
|
||||
cjq4435.cxx CJQ4435Sample.java
|
||||
ds1307.cxx DS1307Sample.java
|
||||
enc03r.cxx ENC03RSample.java
|
||||
es08a.cxx ES08ASample.java
|
||||
grovebutton.cxx GroveButtonSample.java
|
||||
groveehr.cxx GroveEHRSample.java
|
||||
groveled.cxx GroveLEDSample.java
|
||||
grovelinefinder.cxx GroveLineFinderSample.java
|
||||
grovelight.cxx GroveLightSample.java
|
||||
grovemoisture.cxx GroveMoistureSample.java
|
||||
groverelay.cxx GroveRelaySample.java
|
||||
groverotary.cxx GroveRotarySample.java
|
||||
grovescam.cxx GROVESCAMSample.java
|
||||
groveslide.cxx GroveSlideSample.java
|
||||
grovespeaker.cxx GroveSpeakerSample.java
|
||||
grovevdiv.cxx GroveVDivSample.java
|
||||
grovewater.cxx GroveWaterSample.java
|
||||
grovewfs.cxx GroveWFSSample.java
|
||||
guvas12d.cxx GUVAS12DSample.java
|
||||
h3lis331dl.cxx H3LIS331DLSample.java
|
||||
hcsr04.cxx HCSR04Sample.java
|
||||
hm11.cxx HM11Sample.java
|
||||
hmc5883l.cxx Hmc5883lSample.java
|
||||
htu21d.cxx HTU21DSample.java
|
||||
itg3200.cxx Itg3200Sample.java
|
||||
jhd1313m1-lcd.cxx Jhd1313m1_lcdSample.java
|
||||
joystick12.cxx Joystick12Sample.java
|
||||
lcm1602-i2c.cxx Lcm1602_i2cSample.java
|
||||
ldt0028.cxx LDT0028Sample.java
|
||||
lol.cxx LoLSample.java
|
||||
lsm303.cxx LSM303Sample.java
|
||||
m24lr64e.cxx M24LR64ESample.java
|
||||
max44000.cxx MAX44000Sample.java
|
||||
mic.cxx MicrophoneSample.java
|
||||
mma7455.cxx MMA7455Sample.java
|
||||
mma7660.cxx MMA7660Sample.java
|
||||
mpl3115a2.cxx MPL3115A2Sample.java
|
||||
mpr121.cxx MPR121Sample.java
|
||||
mpu9150.cxx MPU9150Sample.java
|
||||
mq2.cxx MQ2Sample.java
|
||||
mq303a.cxx MQ303ASample.java
|
||||
mq5.cxx MQ5Sample.java
|
||||
groveledbar GroveLEDBar
|
||||
nrf24l01-receiver.cxx NRF24L01_receiverSample.java
|
||||
nrf24l01-transmitter.cxx NRF24L01_transmitterSample.java
|
||||
nunchuck.cxx NUNCHUCKSample.java
|
||||
otp538u.cxx OTP538USample.java
|
||||
ppd42ns.cxx PPD42NSSample.java
|
||||
pulsensor.cxx PulsensorSample.java
|
||||
rfr359f.cxx RFR359FSample.java
|
||||
rotaryencoder.cxx RotaryEncoderSample.java
|
||||
rpr220-intr.cxx RPR220_intrSample.java
|
||||
rpr220.cxx RPR220Sample.java
|
||||
ssd1308-oled.cxx SSD1308_oledSample.java
|
||||
ssd1327-oled.cxx SSD1327_oledSample.java
|
||||
st7735.cxx ST7735Sample.java
|
||||
stepmotor.cxx StepMotorSample.java
|
||||
tm1637.cxx TM1637Sample.java
|
||||
tp401.cxx TP401Sample.java
|
||||
tsl2561.cxx TSL2561Sample.java
|
||||
ttp223.cxx TTP223Sample.java
|
||||
ublox6.cxx Ublox6Sample.java
|
||||
uln200xa.cxx ULN200XASample.java
|
||||
wt5001.cxx WT5001Sample.java
|
||||
yg1006.cxx YG1006Sample.java
|
@ -1,375 +1,285 @@
|
||||
# Extract module name from non-standard example name
|
||||
macro(get_module_name example_name module_name)
|
||||
string(LENGTH ${example_name} length)
|
||||
string(FIND ${example_name} "-" index)
|
||||
if (${index} GREATER 1)
|
||||
string(SUBSTRING ${example_name} 0 ${index} substr)
|
||||
set(${module_name} ${substr})
|
||||
elseif (${example_name} MATCHES "^grove")
|
||||
set (${module_name} "grove")
|
||||
elseif ((${example_name} MATCHES "^mq" AND ${length} EQUAL 3) OR ${example_name} STREQUAL "tp401")
|
||||
set (${module_name} "gas")
|
||||
else()
|
||||
set(${module_name} ${example_name})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Set source file, include and linker settings for an example
|
||||
# If example cannot be built, example_bin is cleared
|
||||
macro(add_custom_example example_bin example_src example_module_list)
|
||||
set(found_all_modules TRUE)
|
||||
foreach (module ${example_module_list})
|
||||
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/src/${module}")
|
||||
set(found_all_modules FALSE)
|
||||
endif()
|
||||
if (MODULE_LIST)
|
||||
list(FIND MODULE_LIST ${module} index)
|
||||
if (${index} EQUAL -1)
|
||||
set(found_all_modules FALSE)
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
if (found_all_modules)
|
||||
add_executable (${example_bin} ${example_src})
|
||||
target_link_libraries (${example_bin} ${CMAKE_THREAD_LIBS_INIT})
|
||||
foreach (module ${example_module_list})
|
||||
set(module_dir "${PROJECT_SOURCE_DIR}/src/${module}")
|
||||
include_directories (${module_dir})
|
||||
if (${module} STREQUAL "lcd")
|
||||
set(module "i2clcd")
|
||||
endif()
|
||||
target_link_libraries (${example_bin} ${module})
|
||||
endforeach()
|
||||
else()
|
||||
MESSAGE(INFO " Ignored ${example_bin}")
|
||||
set (example_bin "")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
# Add specified example by name
|
||||
# Note special case for grove based examples
|
||||
macro(add_example example_name)
|
||||
set(example_src "${example_name}.cxx")
|
||||
set(example_bin "${example_name}-example")
|
||||
get_module_name(${example_name} module_name)
|
||||
set(module_dir "${PROJECT_SOURCE_DIR}/src/${module_name}")
|
||||
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${example_src}"
|
||||
AND EXISTS ${module_dir}
|
||||
AND IS_DIRECTORY ${module_dir})
|
||||
add_custom_example(${example_bin} ${example_src} ${module_name})
|
||||
if ((NOT ${example_bin} STREQUAL "") AND (${module_name} STREQUAL "grove"))
|
||||
set(grove_module_path "${PROJECT_SOURCE_DIR}/src/${example_name}")
|
||||
if (EXISTS ${grove_module_path})
|
||||
include_directories(${grove_module_path})
|
||||
target_link_libraries (${example_bin} ${example_name})
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
MESSAGE(INFO " Ignored ${example_bin}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples)
|
||||
|
||||
add_executable (hmc5883l-example hmc5883l.cxx)
|
||||
add_executable (groveled-example groveled.cxx)
|
||||
add_executable (groveled-multi-example groveled-multi.cxx)
|
||||
add_executable (groverelay-example groverelay.cxx)
|
||||
add_executable (grovelight-example grovelight.cxx)
|
||||
add_executable (grovetemp-example grovetemp.cxx)
|
||||
add_executable (grovebutton-example grovebutton.cxx)
|
||||
add_executable (groverotary-example groverotary.cxx)
|
||||
add_executable (groveslide-example groveslide.cxx)
|
||||
add_executable (lcm1602-lcd-example lcm1602-lcd.cxx)
|
||||
add_executable (jhd1313m1-lcd-example jhd1313m1-lcd.cxx)
|
||||
add_executable (buzzer-sound-example buzzer-sound.cxx)
|
||||
add_executable (my9221-ledbar-example my9221-ledbar.cxx)
|
||||
add_executable (my9221-updown-example my9221-updown.cxx)
|
||||
add_executable (nrf24l01-transmitter-example nrf24l01-transmitter.cxx)
|
||||
add_executable (nrf24l01-receiver-example nrf24l01-receiver.cxx)
|
||||
add_executable (nrf24l01-broadcast-example nrf24l01-broadcast.cxx)
|
||||
add_executable (es08a-example es08a.cxx)
|
||||
add_executable (son-hcsr04-example hcsr04.cxx)
|
||||
add_executable (ssd1308-oled-example ssd1308-oled.cxx)
|
||||
add_executable (ssd1327-oled-example ssd1327-oled.cxx)
|
||||
add_executable (max44000-example max44000.cxx)
|
||||
add_executable (mma7455-example mma7455.cxx)
|
||||
add_executable (st7735-example st7735.cxx)
|
||||
add_executable (max31855-example max31855.cxx)
|
||||
add_executable (bmpx8x-example bmpx8x.cxx)
|
||||
add_executable (stepmotor-example stepmotor.cxx)
|
||||
add_executable (pulsensor-example pulsensor.cxx)
|
||||
add_executable (mic-example mic.cxx)
|
||||
add_executable (mpu9150-example mpu9150.cxx)
|
||||
add_executable (maxds3231m-example maxds3231m.cxx)
|
||||
add_executable (max31723-example max31723.cxx)
|
||||
add_executable (max5487-example max5487.cxx)
|
||||
add_executable (nrf8001-broadcast-example nrf8001-broadcast.cxx)
|
||||
add_executable (nrf8001-helloworld-example nrf8001-helloworld.cxx)
|
||||
add_executable (lpd8806-example lpd8806.cxx)
|
||||
add_executable (mlx90614-example mlx90614.cxx)
|
||||
add_executable (ecs1030-example ecs1030.cxx)
|
||||
add_executable (mq2-example mq2.cxx)
|
||||
add_executable (mq3-example mq3.cxx)
|
||||
add_executable (mq5-example mq5.cxx)
|
||||
add_executable (mq9-example mq9.cxx)
|
||||
add_executable (tp401-example tp401.cxx)
|
||||
add_executable (tcs3414cs-example tcs3414cs.cxx)
|
||||
add_executable (th02-example th02.cxx)
|
||||
add_executable (ttp223-example ttp223.cxx)
|
||||
add_executable (lsm303-example lsm303.cxx)
|
||||
add_executable (joystick12-example joystick12-example.cxx)
|
||||
add_executable (lol-example lol-example.cxx)
|
||||
add_executable (tsl2561-example tsl2561.cxx)
|
||||
add_executable (htu21d-example htu21d.cxx)
|
||||
add_executable (mpl3115a2-example mpl3115a2.cxx)
|
||||
add_executable (ldt0028-example ldt0028.cxx)
|
||||
add_executable (am2315-example am2315.cxx)
|
||||
add_executable (itg3200-example itg3200.cxx)
|
||||
add_executable (enc03r-example enc03r.cxx)
|
||||
add_executable (adc121c021-example adc121c021.cxx)
|
||||
add_executable (ds1307-example ds1307.cxx)
|
||||
add_executable (a110x-example a110x.cxx)
|
||||
add_executable (gp2y0a-example gp2y0a.cxx)
|
||||
add_executable (grovemoisture-example grovemoisture.cxx)
|
||||
add_executable (groveehr-example groveehr.cxx)
|
||||
add_executable (ta12200-example ta12200.cxx)
|
||||
add_executable (grovelinefinder-example grovelinefinder.cxx)
|
||||
add_executable (grovevdiv-example grovevdiv.cxx)
|
||||
add_executable (grovewater-example grovewater.cxx)
|
||||
add_executable (guvas12d-example guvas12d.cxx)
|
||||
add_executable (groveloudness-example groveloudness.cxx)
|
||||
add_executable (mpr121-example mpr121.cxx)
|
||||
add_executable (ublox6-example ublox6.cxx)
|
||||
add_executable (yg1006-example yg1006.cxx)
|
||||
add_executable (wt5001-example wt5001.cxx)
|
||||
add_executable (ppd42ns-example ppd42ns.cxx)
|
||||
add_executable (mq303a-example mq303a.cxx)
|
||||
add_executable (grovespeaker-example grovespeaker.cxx)
|
||||
add_executable (rfr359f-example rfr359f.cxx)
|
||||
add_executable (biss0001-example biss0001.cxx)
|
||||
add_executable (rotaryencoder-example rotaryencoder.cxx)
|
||||
add_executable (adxl345-example adxl345.cxx)
|
||||
add_executable (rpr220-example rpr220.cxx)
|
||||
add_executable (rpr220-intr-example rpr220-intr.cxx)
|
||||
add_executable (mma7660-example mma7660.cxx)
|
||||
add_executable (cjq4435-example cjq4435.cxx)
|
||||
add_executable (adxl335-example adxl335.cxx)
|
||||
add_executable (hmtrp-example hmtrp.cxx)
|
||||
add_executable (nunchuck-example nunchuck.cxx)
|
||||
add_executable (otp538u-example otp538u.cxx)
|
||||
add_executable (grovecollision-example grovecollision.cxx)
|
||||
add_executable (groveelectromagnet-example groveelectromagnet.cxx)
|
||||
add_executable (groveemg-example groveemg.cxx)
|
||||
add_executable (groveo2-example groveo2.cxx)
|
||||
add_executable (grovegsr-example grovegsr.cxx)
|
||||
add_executable (ina132-example ina132.cxx)
|
||||
add_executable (l298-example l298.cxx)
|
||||
add_executable (l298-stepper-example l298-stepper.cxx)
|
||||
add_executable (at42qt1070-example at42qt1070.cxx)
|
||||
add_executable (grovemd-example grovemd.cxx)
|
||||
add_executable (pca9685-example pca9685.cxx)
|
||||
add_executable (groveeldriver-example groveeldriver.cxx)
|
||||
add_executable (adafruitss-example adafruitss.cxx)
|
||||
add_executable (adafruitms1438-example adafruitms1438.cxx)
|
||||
add_executable (adafruitms1438-stepper-example adafruitms1438-stepper.cxx)
|
||||
add_executable (hx711-example hx711.cxx)
|
||||
add_executable (flex-example flex.cxx)
|
||||
add_executable (a110x-intr-example a110x-intr.cxx)
|
||||
add_executable (mhz16-example mhz16.cxx)
|
||||
add_executable (apds9002-example apds9002.cxx)
|
||||
add_executable (waterlevel-example waterlevel.cxx)
|
||||
add_executable (tm1637-example tm1637.cxx)
|
||||
add_executable (zfm20-example zfm20.cxx)
|
||||
add_executable (zfm20-register-example zfm20-register.cxx)
|
||||
add_executable (uln200xa-example uln200xa.cxx)
|
||||
add_executable (grovewfs-example grovewfs.cxx)
|
||||
add_executable (isd1820-example isd1820.cxx)
|
||||
add_executable (sx6119-example sx6119.cxx)
|
||||
add_executable (si114x-example si114x.cxx)
|
||||
add_executable (maxsonarez-example maxsonarez.cxx)
|
||||
add_executable (hm11-example hm11.cxx)
|
||||
add_executable (ht9170-example ht9170.cxx)
|
||||
add_executable (h3lis331dl-example h3lis331dl.cxx)
|
||||
add_executable (ad8232-example ad8232.cxx)
|
||||
add_executable (grovescam-example grovescam.cxx)
|
||||
add_executable (m24lr64e-example m24lr64e.cxx)
|
||||
add_executable (grovecircularled-example grovecircularled.cxx)
|
||||
add_executable (rgbringcoder-example rgbringcoder.cxx)
|
||||
add_executable (hp20x-example hp20x.cxx)
|
||||
add_executable (pn532-example pn532.cxx)
|
||||
add_executable (pn532-writeurl-example pn532-writeurl.cxx)
|
||||
add_executable (sainsmartks-example sainsmartks.cxx)
|
||||
add_executable (mpu60x0-example mpu60x0.cxx)
|
||||
add_executable (ak8975-example ak8975.cxx)
|
||||
add_executable (lsm9ds0-example lsm9ds0.cxx)
|
||||
add_executable (eboled-example eboled.cxx)
|
||||
# Set the mraa include and link directories prior to adding examples
|
||||
include_directories (${MRAA_INCLUDE_DIRS})
|
||||
link_directories (${MRAA_LIBDIR})
|
||||
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grove)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/lcd)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/buzzer)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/my9221)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/nrf24l01)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/servo)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hcsr04)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/max44000)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mma7455)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/st7735)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/max31855)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/bmpx8x)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/stepmotor)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/pulsensor)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mic)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mpu9150)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/maxds3231m)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/max31723)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/max5487)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/nrf8001)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/lpd8806)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mlx90614)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ecs1030)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/gas)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/tcs3414cs)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/th02)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ttp223)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/lsm303)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/joystick12)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/lol)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/tsl2561)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/htu21d)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mpl3115a2)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ldt0028)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/am2315)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/itg3200)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/enc03r)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/adc121c021)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ds1307)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/a110x)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/gp2y0a)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovemoisture)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveehr)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ta12200)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovelinefinder)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovevdiv)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovewater)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/guvas12d)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveloudness)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mpr121)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ublox6)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/yg1006)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/wt5001)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ppd42ns)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mq303a)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovespeaker)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/rfr359f)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/biss0001)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/rotaryencoder)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/adxl345)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/rpr220)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mma7660)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/cjq4435)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/adxl335)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hmtrp)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/nunchuck)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/otp538u)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovecollision)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveelectromagnet)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveemg)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveo2)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovegsr)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ina132)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/l298)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/at42qt1070)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovemd)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/pca9685)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/groveeldriver)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/adafruitss)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/adafruitms1438)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hx711)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/flex)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/mhz16)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/apds9002)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/waterlevel)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/tm1637)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/zfm20)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/uln200xa)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovewfs)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/isd1820)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/sx6119)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/si114x)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/maxsonarez)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hm11)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ht9170)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/h3lis331dl)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/ad8232)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovescam)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/m24lr64e)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/grovecircularled)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/rgbringcoder)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/hp20x)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/pn532)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src/lsm9ds0)
|
||||
# If your sample source file matches the name of the module it tests, add it here
|
||||
# Exceptions are as follows:
|
||||
# string after first '-' is ignored (e.g. nrf24l01-transmitter maps to nrf24l01)
|
||||
# mq? will use module gas
|
||||
# grove* will use module grove
|
||||
add_example (hmc5883l)
|
||||
add_example (groveled)
|
||||
add_example (groverelay)
|
||||
add_example (grovelight)
|
||||
add_example (grovetemp)
|
||||
add_example (grovebutton)
|
||||
add_example (groverotary)
|
||||
add_example (groveslide)
|
||||
add_example (buzzer-sound)
|
||||
add_example (nrf24l01-transmitter)
|
||||
add_example (nrf24l01-receiver)
|
||||
add_example (nrf24l01-broadcast)
|
||||
add_example (hcsr04)
|
||||
add_example (max44000)
|
||||
add_example (mma7455)
|
||||
add_example (st7735)
|
||||
add_example (max31855)
|
||||
add_example (bmpx8x)
|
||||
add_example (stepmotor)
|
||||
add_example (pulsensor)
|
||||
add_example (mic)
|
||||
add_example (mpu9150)
|
||||
add_example (maxds3231m)
|
||||
add_example (max31723)
|
||||
add_example (max5487)
|
||||
add_example (nrf8001-broadcast)
|
||||
add_example (nrf8001-helloworld)
|
||||
add_example (lpd8806)
|
||||
add_example (mlx90614)
|
||||
add_example (ecs1030)
|
||||
add_example (mq2)
|
||||
add_example (mq3)
|
||||
add_example (mq4)
|
||||
add_example (mq5)
|
||||
add_example (mq6)
|
||||
add_example (mq7)
|
||||
add_example (mq8)
|
||||
add_example (mq9)
|
||||
add_example (tp401)
|
||||
add_example (tcs3414cs)
|
||||
add_example (th02)
|
||||
add_example (ttp223)
|
||||
add_example (lsm303)
|
||||
add_example (joystick12)
|
||||
add_example (lol)
|
||||
add_example (tsl2561)
|
||||
add_example (htu21d)
|
||||
add_example (mpl3115a2)
|
||||
add_example (ldt0028)
|
||||
add_example (am2315)
|
||||
add_example (itg3200)
|
||||
add_example (enc03r)
|
||||
add_example (adc121c021)
|
||||
add_example (ds1307)
|
||||
add_example (a110x)
|
||||
add_example (gp2y0a)
|
||||
add_example (grovemoisture)
|
||||
add_example (groveehr)
|
||||
add_example (ta12200)
|
||||
add_example (grovelinefinder)
|
||||
add_example (grovevdiv)
|
||||
add_example (grovewater)
|
||||
add_example (guvas12d)
|
||||
add_example (mpr121)
|
||||
add_example (ublox6)
|
||||
add_example (yg1006)
|
||||
add_example (wt5001)
|
||||
add_example (ppd42ns)
|
||||
add_example (mq303a)
|
||||
add_example (grovespeaker)
|
||||
add_example (rfr359f)
|
||||
add_example (biss0001)
|
||||
add_example (rotaryencoder)
|
||||
add_example (adxl345)
|
||||
add_example (rpr220)
|
||||
add_example (rpr220-intr)
|
||||
add_example (mma7660)
|
||||
add_example (cjq4435)
|
||||
add_example (adxl335)
|
||||
add_example (hmtrp)
|
||||
add_example (nunchuck)
|
||||
add_example (otp538u)
|
||||
add_example (grovecollision)
|
||||
add_example (groveelectromagnet)
|
||||
add_example (groveemg)
|
||||
add_example (groveo2)
|
||||
add_example (grovegsr)
|
||||
add_example (ina132)
|
||||
add_example (l298)
|
||||
add_example (l298-stepper)
|
||||
add_example (at42qt1070)
|
||||
add_example (grovemd)
|
||||
add_example (grovemd-stepper)
|
||||
add_example (pca9685)
|
||||
add_example (groveeldriver)
|
||||
add_example (adafruitss)
|
||||
add_example (adafruitms1438)
|
||||
add_example (adafruitms1438-stepper)
|
||||
add_example (hx711)
|
||||
add_example (flex)
|
||||
add_example (a110x-intr)
|
||||
add_example (mhz16)
|
||||
add_example (apds9002)
|
||||
add_example (waterlevel)
|
||||
add_example (tm1637)
|
||||
add_example (zfm20)
|
||||
add_example (zfm20-register)
|
||||
add_example (uln200xa)
|
||||
add_example (grovewfs)
|
||||
add_example (isd1820)
|
||||
add_example (sx6119)
|
||||
add_example (si114x)
|
||||
add_example (maxsonarez)
|
||||
add_example (hm11)
|
||||
add_example (ht9170)
|
||||
add_example (h3lis331dl)
|
||||
add_example (ad8232)
|
||||
add_example (grovescam)
|
||||
add_example (m24lr64e)
|
||||
add_example (rgbringcoder)
|
||||
add_example (hp20x)
|
||||
add_example (pn532)
|
||||
add_example (pn532-writeurl)
|
||||
add_example (lsm9ds0)
|
||||
add_example (loudness)
|
||||
add_example (mg811)
|
||||
add_example (wheelencoder)
|
||||
add_example (sm130)
|
||||
add_example (grovegprs)
|
||||
add_example (lm35)
|
||||
add_example (micsv89)
|
||||
add_example (xbee)
|
||||
add_example (urm37)
|
||||
add_example (urm37-uart)
|
||||
add_example (adxrs610)
|
||||
add_example (bma220)
|
||||
add_example (dfrph)
|
||||
add_example (mcp9808)
|
||||
add_example (groveultrasonic)
|
||||
add_example (sx1276-lora)
|
||||
add_example (sx1276-fsk)
|
||||
add_example (ili9341)
|
||||
if (OPENZWAVE_FOUND)
|
||||
include_directories(${OPENZWAVE_INCLUDE_DIRS})
|
||||
add_example (ozw)
|
||||
endif()
|
||||
add_example (nlgpio16)
|
||||
add_example (ads1x15)
|
||||
if (MODBUS_FOUND)
|
||||
include_directories(${MODBUS_INCLUDE_DIRS})
|
||||
add_example (t3311)
|
||||
add_example (hwxpxx)
|
||||
add_example (h803x)
|
||||
endif()
|
||||
add_example (hdxxvxta)
|
||||
add_example (rhusb)
|
||||
add_example (apds9930)
|
||||
add_example (kxcjk1013)
|
||||
add_example (ssd1351)
|
||||
add_example (bme280)
|
||||
add_example (ds1808lc)
|
||||
add_example (hlg150h)
|
||||
add_example (lp8860)
|
||||
add_example (max44009)
|
||||
add_example (si1132)
|
||||
add_example (si7005)
|
||||
add_example (t6713)
|
||||
add_example (cwlsxxa)
|
||||
add_example (teams)
|
||||
add_example (apa102)
|
||||
add_example (tex00)
|
||||
add_example (bmi160)
|
||||
add_example (smartdrive)
|
||||
if (HAVE_FIRMATA)
|
||||
add_example (curieimu)
|
||||
endif ()
|
||||
|
||||
target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveled-multi-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groverelay-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovelight-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovetemp-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovebutton-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groverotary-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveslide-example grove ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (lcm1602-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (jhd1313m1-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (buzzer-sound-example buzzer ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (my9221-ledbar-example my9221 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (my9221-updown-example my9221 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nrf24l01-transmitter-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nrf24l01-receiver-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nrf24l01-broadcast-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (es08a-example servo ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (son-hcsr04-example hcsr04 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ssd1308-oled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ssd1327-oled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (max44000-example max44000 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mma7455-example mma7455 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (st7735-example st7735 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (max31855-example max31855 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (bmpx8x-example bmpx8x ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (stepmotor-example stepmotor ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (pulsensor-example pulsensor ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mic-example mic ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mpu9150-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (maxds3231m-example maxds3231m ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (max31723-example max31723 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (max5487-example max5487 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nrf8001-broadcast-example nrf8001 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nrf8001-helloworld-example nrf8001 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (lpd8806-example lpd8806 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mlx90614-example mlx90614 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ecs1030-example ecs1030 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mq2-example gas ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mq3-example gas ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mq5-example gas ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mq9-example gas ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (tp401-example gas ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (tcs3414cs-example tcs3414cs ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (th02-example th02 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ttp223-example ttp223 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (lsm303-example lsm303 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (joystick12-example joystick12 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (lol-example lol ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (tsl2561-example tsl2561 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (htu21d-example htu21d ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mpl3115a2-example mpl3115a2 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ldt0028-example ldt0028 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (am2315-example am2315 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (itg3200-example itg3200 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (enc03r-example enc03r ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adc121c021-example adc121c021 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ds1307-example ds1307 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (a110x-example a110x ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (gp2y0a-example gp2y0a ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovemoisture-example grovemoisture ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveehr-example groveehr ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ta12200-example ta12200 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovelinefinder-example grovelinefinder ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovevdiv-example grovevdiv ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovewater-example grovewater ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (guvas12d-example guvas12d ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveloudness-example groveloudness ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mpr121-example mpr121 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ublox6-example ublox6 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (yg1006-example yg1006 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (wt5001-example wt5001 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ppd42ns-example ppd42ns ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mq303a-example mq303a ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovespeaker-example grovespeaker ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (rfr359f-example rfr359f ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (biss0001-example biss0001 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (rotaryencoder-example rotaryencoder ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adxl345-example adxl345 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (rpr220-example rpr220 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (rpr220-intr-example rpr220 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mma7660-example mma7660 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (cjq4435-example cjq4435 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adxl335-example adxl335 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (hmtrp-example hmtrp ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (nunchuck-example nunchuck ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (otp538u-example otp538u ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovecollision-example grovecollision ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveelectromagnet-example groveelectromagnet ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveemg-example groveemg ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveo2-example groveo2 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovegsr-example grovegsr ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ina132-example ina132 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (l298-example l298 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (l298-stepper-example l298 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (at42qt1070-example at42qt1070 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovemd-example grovemd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (pca9685-example pca9685 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (groveeldriver-example groveeldriver ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adafruitss-example adafruitss ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adafruitms1438-example adafruitms1438 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (adafruitms1438-stepper-example adafruitms1438 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (hx711-example hx711 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (flex-example flex ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (a110x-intr-example a110x ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mhz16-example mhz16 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (apds9002-example apds9002 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (waterlevel-example waterlevel ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (tm1637-example tm1637 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (zfm20-example zfm20 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (zfm20-register-example zfm20 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (uln200xa-example uln200xa ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovewfs-example grovewfs ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (isd1820-example isd1820 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (sx6119-example sx6119 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (si114x-example si114x ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (maxsonarez-example maxsonarez ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (hm11-example hm11 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ht9170-example ht9170 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (h3lis331dl-example h3lis331dl ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ad8232-example ad8232 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovescam-example grovescam ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (m24lr64e-example m24lr64e ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (grovecircularled-example grovecircularled ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (rgbringcoder-example rgbringcoder ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (hp20x-example hp20x ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (pn532-example pn532 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (pn532-writeurl-example pn532 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (sainsmartks-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (mpu60x0-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (ak8975-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (lsm9ds0-example lsm9ds0 ${CMAKE_THREAD_LIBS_INIT})
|
||||
target_link_libraries (eboled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
|
||||
# These are special cases where you specify example binary, source file and module(s)
|
||||
include_directories (${PROJECT_SOURCE_DIR}/src)
|
||||
add_custom_example (groveled-multi-example groveled-multi.cxx grove)
|
||||
add_custom_example (lcm1602-i2c-example lcm1602-i2c.cxx lcd)
|
||||
add_custom_example (lcm1602-parallel-example lcm1602-parallel.cxx lcd)
|
||||
add_custom_example (jhd1313m1-lcd-example jhd1313m1-lcd.cxx lcd)
|
||||
add_custom_example (es08a-example es08a.cxx servo)
|
||||
add_custom_example (ssd1306-oled-example ssd1306-oled.cxx lcd)
|
||||
add_custom_example (ssd1308-oled-example ssd1308-oled.cxx lcd)
|
||||
add_custom_example (ssd1327-oled-example ssd1327-oled.cxx lcd)
|
||||
add_custom_example (sainsmartks-example sainsmartks.cxx lcd)
|
||||
add_custom_example (eboled-example eboled.cxx lcd)
|
||||
add_custom_example (mpu60x0-example mpu60x0.cxx mpu9150)
|
||||
add_custom_example (ak8975-example ak8975.cxx mpu9150)
|
||||
add_custom_example (mpu9250-example mpu9250.cxx mpu9150)
|
||||
add_custom_example (groveledbar-example groveledbar.cxx my9221)
|
||||
add_custom_example (grovecircularled-example grovecircularled.cxx my9221)
|
||||
add_custom_example (temperature-sensor-example temperature-sensor.cxx "si7005;bmp180;bme280")
|
||||
add_custom_example (humidity-sensor-example humidity-sensor.cxx "si7005;bme280")
|
||||
add_custom_example (pressure-sensor-example pressure-sensor.cxx "bmp180;bme280")
|
||||
add_custom_example (co2-sensor-example co2-sensor.cxx "t6713")
|
||||
add_custom_example (adc-example adc-sensor.cxx "ads1x15")
|
||||
add_custom_example (light-sensor-example light-sensor.cxx "si1132;max44009")
|
||||
add_custom_example (light-controller-example light-controller.cxx "lp8860;ds1808lc;hlg150h")
|
||||
|
80
examples/c++/adc-sensor.cxx
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "ads1015.h"
|
||||
#include "mraa/gpio.hpp"
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
#define FT4222_I2C_BUS 0
|
||||
#define EDISON_GPIO_SI7005_CS 20
|
||||
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using IADC to determine
|
||||
// which sensor is present and return its name.
|
||||
// IADC is then used to get readings from sensor
|
||||
|
||||
|
||||
upm::IADC* getADC()
|
||||
{
|
||||
upm::IADC* adc = NULL;
|
||||
try {
|
||||
adc = new upm::ADS1015(EDISON_I2C_BUS);
|
||||
mraa::Gpio gpio(EDISON_GPIO_SI7005_CS);
|
||||
gpio.dir(mraa::DIR_OUT_HIGH);
|
||||
return adc;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "ADS1015: " << e.what() << std::endl;
|
||||
}
|
||||
return adc;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
upm::IADC* adc = getADC();
|
||||
if (adc == NULL) {
|
||||
std::cout << "ADC not detected" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "ADC " << adc->getModuleName() << " detected. " ;
|
||||
std::cout << adc->getNumInputs() << " inputs available" << std::endl;
|
||||
while (true) {
|
||||
for (unsigned int i=0; i<adc->getNumInputs(); ++i) {
|
||||
std::cout << "Input " << i;
|
||||
try {
|
||||
float voltage = adc->getVoltage(i);
|
||||
std::cout << ": Voltage = " << voltage << "V" << std::endl;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
delete adc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
320
examples/c++/ads1x15.cxx
Normal file
@ -0,0 +1,320 @@
|
||||
/*
|
||||
* Author: Marc Graham <marc@m2ag.net>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "mraa.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include "ads1015.h"
|
||||
#include "ads1115.h"
|
||||
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
using namespace std;
|
||||
using namespace upm;
|
||||
int command;
|
||||
//Select the device you are testing here and adjust case 6 for the correct sample rates.
|
||||
//upm::ADS1015 *ads = new upm::ADS1015(1);
|
||||
upm::ADS1115 *ads = new upm::ADS1115(1, 0x49);
|
||||
float inputVoltage;
|
||||
int ans;
|
||||
|
||||
do
|
||||
{
|
||||
|
||||
cout << endl;
|
||||
cout << "1 - get Conversion \t" ;
|
||||
cout << "2 - get last conversion" << endl;
|
||||
cout << "3 - get Gain \t\t";
|
||||
cout << "4 - set Gain" << endl;;
|
||||
cout << "5 - get Data Rate \t";
|
||||
cout << "6 - set Data Rate" << endl;
|
||||
cout << "7 - Set Upper Threshold \t" ;
|
||||
cout << "8 - Set Lower Threshold \t";
|
||||
cout << "9 - Display Thresholds \t";
|
||||
cout << "10 - Set Default Thresholds \t";
|
||||
cout << "11 - Set conversion ready" << endl;
|
||||
cout << "12 - get Comp Que \t" ;
|
||||
cout << "13 - set Comp Que" << endl;
|
||||
cout << "14 - get Comp Pol \t";
|
||||
cout << "15 - set Comp Pol" << endl;
|
||||
cout << "16 - get Comp mode \t";
|
||||
cout << "17 - set Comp mode " << endl;
|
||||
cout << "18 - get Comp Latch\t";
|
||||
cout << "19 - set Comp Latch " << endl;
|
||||
cout << "20 - get Continuous \t";
|
||||
cout << "21 - set Continuous \t" << endl;
|
||||
cout << "-1 - exit" << endl;
|
||||
cout << "Enter a command: ";
|
||||
cin >> command;
|
||||
|
||||
|
||||
switch(command)
|
||||
{
|
||||
case 2:
|
||||
cout << ads->getLastSample() << endl;
|
||||
break;
|
||||
case 3:
|
||||
cout << std::hex << ads->getGain() << endl;
|
||||
break;
|
||||
case 5:
|
||||
cout << std::hex << ads->getSPS() << endl;
|
||||
break;
|
||||
case 4:
|
||||
int gain;
|
||||
ADS1015::ADSGAIN set_gain;
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> gain 2/3 \t 2 -> gain1 \t 3 -> gain 2" << endl;
|
||||
cout << "4 -> gain 4 \t 5 -> gain 8 \t 6 -> gain 15" << endl;
|
||||
cin >> gain;
|
||||
switch(gain){
|
||||
case 1:
|
||||
set_gain = ADS1X15::GAIN_TWOTHIRDS;
|
||||
break;
|
||||
case 2:
|
||||
set_gain = ADS1X15::GAIN_ONE;
|
||||
break;
|
||||
case 3:
|
||||
set_gain = ADS1X15::GAIN_TWO;
|
||||
break;
|
||||
case 4:
|
||||
set_gain = ADS1X15::GAIN_FOUR;
|
||||
break;
|
||||
case 5:
|
||||
set_gain = ADS1X15::GAIN_EIGHT;
|
||||
break;
|
||||
case 6:
|
||||
set_gain = ADS1X15::GAIN_SIXTEEN;
|
||||
break;
|
||||
default:
|
||||
set_gain = ADS1X15::GAIN_ONE;
|
||||
}
|
||||
ads->setGain(set_gain);
|
||||
break;
|
||||
case 6:
|
||||
int rate;
|
||||
/*ADS1015::ADSDATARATE set_rate;
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> SPS_120 \t 2 -> SPS_250 \t 3 -> SPS_490 \t 4 -> SPS_920" << endl;
|
||||
cout << "5 -> SPS_1600 \t 6 -> SPS_2400 \t 7 -> SPS_3300" << endl;
|
||||
cin >> rate;
|
||||
switch(rate){
|
||||
case 1:
|
||||
set_rate = ADS1015::SPS_128;
|
||||
break;
|
||||
case 2:
|
||||
set_rate = ADS1015::SPS_250;
|
||||
break;
|
||||
case 3:
|
||||
set_rate = ADS1015::SPS_490;
|
||||
break;
|
||||
case 4:
|
||||
set_rate = ADS1015::SPS_920;
|
||||
break;
|
||||
case 5:
|
||||
set_rate = ADS1015::SPS_1600;
|
||||
break;
|
||||
case 6:
|
||||
set_rate = ADS1015::SPS_2400;
|
||||
break;
|
||||
case 7:
|
||||
set_rate = ADS1015::SPS_3300;
|
||||
break;
|
||||
default:
|
||||
set_rate = ADS1015::SPS_1600;
|
||||
} */
|
||||
ADS1115::ADSDATARATE set_rate;
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> SPS_8 \t 2 -> SPS_16 \t 3 -> SPS_32 \t 4 -> SPS_64" << endl;
|
||||
cout << "5 -> SPS_128 \t 6 -> SPS_250 \t 7 -> SPS_475 \t 8-> SPS_860" << endl;
|
||||
cin >> rate;
|
||||
switch(rate){
|
||||
case 1:
|
||||
set_rate = ADS1115::SPS_8;
|
||||
break;
|
||||
case 2:
|
||||
set_rate = ADS1115::SPS_16;
|
||||
break;
|
||||
case 3:
|
||||
set_rate = ADS1115::SPS_32;
|
||||
break;
|
||||
case 4:
|
||||
set_rate = ADS1115::SPS_64;
|
||||
break;
|
||||
case 5:
|
||||
set_rate = ADS1115::SPS_128;
|
||||
break;
|
||||
case 6:
|
||||
set_rate = ADS1115::SPS_250;
|
||||
break;
|
||||
case 7:
|
||||
set_rate = ADS1115::SPS_475;
|
||||
break;
|
||||
case 8:
|
||||
set_rate = ADS1115::SPS_860;
|
||||
break;
|
||||
default:
|
||||
set_rate = ADS1115::SPS_128;
|
||||
}
|
||||
|
||||
ads->setSPS(set_rate);
|
||||
break;
|
||||
case 1:
|
||||
int mode;
|
||||
ADS1X15::ADSMUXMODE set_mode;
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> MUX_0_1 \t 2 -> MUX_0_3 \t 3 -> MUX_1_3 \t 4 -> MUX_2_3" << endl;
|
||||
cout << "5 -> SINGLE_0 \t 6 -> SINGLE_1 \t 7 -> SINGLE_2 \t 8 -> SINGLE_3" << endl;
|
||||
cin >> mode;
|
||||
switch(mode){
|
||||
case 1:
|
||||
set_mode = ADS1X15::DIFF_0_1;
|
||||
break;
|
||||
case 2:
|
||||
set_mode = ADS1X15::DIFF_0_3;
|
||||
break;
|
||||
case 3:
|
||||
set_mode = ADS1X15::DIFF_1_3;
|
||||
break;
|
||||
case 4:
|
||||
set_mode = ADS1X15::DIFF_2_3;
|
||||
break;
|
||||
case 5:
|
||||
set_mode = ADS1X15::SINGLE_0;
|
||||
break;
|
||||
case 6:
|
||||
set_mode = ADS1X15::SINGLE_1;
|
||||
break;
|
||||
case 7:
|
||||
set_mode = ADS1X15::SINGLE_2;
|
||||
break;
|
||||
case 8:
|
||||
set_mode = ADS1X15::SINGLE_3;
|
||||
break;
|
||||
default:
|
||||
set_mode = ADS1X15::DIFF_0_1;
|
||||
break;
|
||||
}
|
||||
cout << ads->getSample(set_mode) << endl;
|
||||
break;
|
||||
case 7:
|
||||
cout << " enter a float value: " ;
|
||||
cin >> inputVoltage;
|
||||
ads->setThresh(ADS1115::THRESH_HIGH, inputVoltage);
|
||||
break;
|
||||
case 8:
|
||||
cout << " enter a float value: " ;
|
||||
cin >> inputVoltage;
|
||||
ads->setThresh(ADS1115::THRESH_LOW, inputVoltage);
|
||||
break;
|
||||
case 9:
|
||||
cout << "Upper " << ads->getThresh(ADS1X15::THRESH_HIGH) << endl;
|
||||
cout << "Lower " << ads->getThresh(ADS1X15::THRESH_LOW) << endl;
|
||||
break;
|
||||
case 10:
|
||||
ads->setThresh(ADS1115::THRESH_DEFAULT);
|
||||
break;
|
||||
case 11:
|
||||
ads->setThresh(ADS1015::CONVERSION_RDY);
|
||||
break;
|
||||
case 12:
|
||||
cout << ads->getCompQue() << endl;
|
||||
break;
|
||||
case 13:
|
||||
int que;
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> CQUE_1CONV \t 2 -> CQUE_2CONV \t 3 -> CQUE_3CONV \t 4 -> CQUE_NONE" << endl;
|
||||
cin >> que;
|
||||
switch(que){
|
||||
case 1:
|
||||
ads->setCompQue(ADS1X15::CQUE_1CONV);
|
||||
break;
|
||||
case 2:
|
||||
ads->setCompQue(ADS1X15::CQUE_2CONV);
|
||||
break;
|
||||
case 3:
|
||||
ads->setCompQue(ADS1X15::CQUE_4CONV);
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
ads->setCompQue(ADS1X15::CQUE_NONE);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
cout << ads->getCompPol() << endl;
|
||||
break;
|
||||
case 15:
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> active high \t 2 -> active low" << endl;
|
||||
cin >> ans;
|
||||
if(ans == 1) ads->setCompPol(true);
|
||||
else ads->setCompPol(false);
|
||||
break;
|
||||
case 16:
|
||||
cout << ads->getCompMode() << endl;
|
||||
break;
|
||||
case 17:
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> Window \t 2 -> Traditional (default)" << endl;
|
||||
cin >> ans;
|
||||
if(ans == 1) ads->setCompMode(true);
|
||||
else ads->setCompMode();
|
||||
break;
|
||||
case 18:
|
||||
cout << ads->getCompLatch() << cout;
|
||||
break;
|
||||
case 19:
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> Latching \t 2 -> Non-latching (default)" << endl;
|
||||
cin >> ans;
|
||||
if(ans == 1) ads->setCompLatch(true);
|
||||
else ads->setCompLatch();
|
||||
break;
|
||||
case 20:
|
||||
cout << ads->getContinuous() << cout;
|
||||
break;
|
||||
case 21:
|
||||
cout << "select one of the following:" << endl;
|
||||
cout << "1 -> Power Down (default) \t 2 -> Continuous" << endl;
|
||||
cin >> ans;
|
||||
if(ans == 1) ads->setContinuous(true);
|
||||
else ads->setContinuous();
|
||||
break;
|
||||
case -1:
|
||||
break;
|
||||
default:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}while (command != -1 );
|
||||
|
||||
delete ads;
|
||||
|
||||
return MRAA_SUCCESS;
|
||||
}
|
71
examples/c++/adxrs610.cxx
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "adxrs610.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a ADXRS610 sensor on analog pin A0 (dataout), and
|
||||
// analog A1 (temp out) with an analog reference voltage of
|
||||
// 5.0
|
||||
upm::ADXRS610 *sensor = new upm::ADXRS610(0, 1, 5.0);
|
||||
|
||||
// set a deadband region around the zero point to report 0.0 (optional)
|
||||
sensor->setDeadband(0.015);
|
||||
|
||||
// Every tenth of a second, sample the ADXRS610 and output it's
|
||||
// corresponding temperature and angular velocity
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
cout << "Vel (deg/s): " << sensor->getAngularVelocity() << endl;
|
||||
cout << "Temp (C): " << sensor->getTemperature() << endl;
|
||||
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
|
||||
* Copyright (c) 2014 Intel Corporation.
|
||||
* Author: Yannick Adam <yannick.adam@gmail.com>
|
||||
* Copyright (c) 2016 Yannick Adam
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
@ -22,42 +22,30 @@
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include "apa102.h"
|
||||
#include <iostream>
|
||||
#include "my9221.h"
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int running = 0;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
printf("got signal\n");
|
||||
if (signo == SIGINT) {
|
||||
printf("exiting application\n");
|
||||
running = 1;
|
||||
}
|
||||
}
|
||||
using namespace std;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
upm::MY9221 *bar = new upm::MY9221(8, 9);
|
||||
// Instantiate a strip of 30 LEDs on SPI bus 0
|
||||
upm::APA102* ledStrip = new upm::APA102(800, 0);
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
// Set all LEDs to Red
|
||||
ledStrip->setAllLeds(31, 255, 0, 0);
|
||||
|
||||
while (!running) {
|
||||
for (int idx = 1; idx < 11; idx++) {
|
||||
bar->setBarLevel (idx);
|
||||
usleep(1000);
|
||||
}
|
||||
}
|
||||
// Set a section (10 to 20) to blue
|
||||
ledStrip->setLeds(10, 20, 31, 0, 0, 255);
|
||||
|
||||
// Set a single LED to green
|
||||
ledStrip->setLed(15, 31, 0, 255, 0);
|
||||
|
||||
delete ledStrip;
|
||||
//! [Interesting]
|
||||
|
||||
std::cout << "exiting application" << std::endl;
|
||||
|
||||
delete bar;
|
||||
|
||||
return 0;
|
||||
}
|
63
examples/c++/apds9930.cxx
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Author: Lay, Kuan Loon <kuan.loon.lay@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "apds9930.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
// Instantiate a Digital Proximity and Ambient Light sensor on iio device 4
|
||||
upm::APDS9930* light_proximity = new upm::APDS9930(4);
|
||||
|
||||
while (shouldRun) {
|
||||
float lux = light_proximity->getAmbient();
|
||||
cout << "Luminance value is " << lux << endl;
|
||||
float proximity = light_proximity->getProximity();
|
||||
cout << "Proximity value is " << proximity << endl;
|
||||
sleep(1);
|
||||
}
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete light_proximity;
|
||||
|
||||
return 0;
|
||||
}
|
70
examples/c++/bma220.cxx
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "bma220.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate an BMA220 using default parameters (bus 0, addr 0x0a)
|
||||
upm::BMA220 *sensor = new upm::BMA220();
|
||||
|
||||
// Output data every half second until interrupted
|
||||
while (shouldRun)
|
||||
{
|
||||
sensor->update();
|
||||
|
||||
float x, y, z;
|
||||
|
||||
sensor->getAccelerometer(&x, &y, &z);
|
||||
cout << "Accelerometer: ";
|
||||
cout << "AX: " << x << " AY: " << y << " AZ: " << z << endl;
|
||||
|
||||
usleep(500000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
51
examples/c++/bme280.cxx
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "bme280.h"
|
||||
|
||||
#define FT4222_I2C_BUS 0
|
||||
|
||||
int main ()
|
||||
{
|
||||
try {
|
||||
upm::BME280* bme280 = new upm::BME280 (mraa_get_sub_platform_id(FT4222_I2C_BUS));
|
||||
while (true) {
|
||||
int temperature = bme280->getTemperatureCelcius();
|
||||
int humidity = bme280->getHumidityRelative();
|
||||
int pressure = bme280->getPressurePa();
|
||||
std::cout << "Temperature = " << temperature << "C" << std::endl;
|
||||
std::cout << "Humidity = " << humidity << "%" << std::endl;
|
||||
std::cout << "Pressure = " << pressure << "Pa" << std::endl;
|
||||
sleep(1);
|
||||
}
|
||||
delete bme280;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
82
examples/c++/bmi160.cxx
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "bmi160.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a BMI160 instance using default i2c bus and address
|
||||
upm::BMI160 *sensor = new upm::BMI160();
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
// update our values from the sensor
|
||||
sensor->update();
|
||||
|
||||
float dataX, dataY, dataZ;
|
||||
|
||||
sensor->getAccelerometer(&dataX, &dataY, &dataZ);
|
||||
cout << "Accelerometer: ";
|
||||
cout << "AX: " << dataX << " AY: " << dataY << " AZ: "
|
||||
<< dataZ << endl;
|
||||
|
||||
sensor->getGyroscope(&dataX, &dataY, &dataZ);
|
||||
cout << "Gryoscope: ";
|
||||
cout << "GX: " << dataX << " GY: " << dataY << " GZ: "
|
||||
<< dataZ << endl;
|
||||
|
||||
sensor->getMagnetometer(&dataX, &dataY, &dataZ);
|
||||
cout << "Magnetometer: ";
|
||||
cout << "MX: " << dataX << " MY: " << dataY << " MZ: "
|
||||
<< dataZ << endl;
|
||||
|
||||
cout << endl;
|
||||
|
||||
usleep(500000);
|
||||
}
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
71
examples/c++/co2-sensor.cxx
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "t6713.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
#define FT4222_I2C_BUS 0
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using ICO2Sensor to determine
|
||||
// which sensor is present and return its name.
|
||||
// ICO2Sensor is then used to get readings from sensor
|
||||
|
||||
|
||||
upm::ICO2Sensor* getCO2Sensor()
|
||||
{
|
||||
upm::ICO2Sensor* cO2Sensor = NULL;
|
||||
try {
|
||||
cO2Sensor = new upm::T6713(mraa_get_sub_platform_id(FT4222_I2C_BUS));
|
||||
return cO2Sensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "T6713: " << e.what() << std::endl;
|
||||
}
|
||||
return cO2Sensor;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
upm::ICO2Sensor* cO2Sensor = getCO2Sensor();
|
||||
if (cO2Sensor == NULL) {
|
||||
std::cout << "CO2 sensor not detected" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "CO2 sensor " << cO2Sensor->getModuleName() << " detected" << std::endl;
|
||||
while (true) {
|
||||
try {
|
||||
uint16_t value = cO2Sensor->getPpm();
|
||||
std::cout << "CO2 level = " << value << " ppm" << std::endl;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
delete cO2Sensor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
81
examples/c++/curieimu.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
|
||||
* Author: Ron Evans (@deadprogram)
|
||||
* Author: Justin Zemlyansky (@JustInDevelopment)
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "curieimu.hpp"
|
||||
#include "mraa.h"
|
||||
#include "mraa/firmata.h"
|
||||
#include <math.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
mraa_init();
|
||||
mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyACM0");
|
||||
|
||||
upm::CurieImu* sensor = new upm::CurieImu();
|
||||
|
||||
std::cout << "temperature is: " << (sensor->getTemperature() * pow(0.5, 9) + 23) << std::endl;
|
||||
|
||||
sensor->updateAccel();
|
||||
int x = sensor->getAccelX(),
|
||||
y = sensor->getAccelY(),
|
||||
z = sensor->getAccelZ();
|
||||
printf("accelerometer is: %d, %d, %d\n", x, y, z);
|
||||
|
||||
sensor->updateGyro();
|
||||
int a = sensor->getGyroX(),
|
||||
b = sensor->getGyroY(),
|
||||
c = sensor->getGyroZ();
|
||||
printf("gyroscope is: %d, %d, %d\n", a, b, c);
|
||||
|
||||
int axis, direction;
|
||||
sensor->enableShockDetection(true);
|
||||
for(int i=0; i<300; i++) {
|
||||
if (sensor->isShockDetected()) {
|
||||
sensor->getNextShock();
|
||||
axis = sensor->getAxis();
|
||||
direction = sensor->getDirection();
|
||||
printf("shock data is: %d, %d\n", axis, direction);
|
||||
}
|
||||
usleep(10000);
|
||||
}
|
||||
|
||||
sensor->updateMotion();
|
||||
int m = sensor->getAccelX(),
|
||||
n = sensor->getAccelY(),
|
||||
o = sensor->getAccelZ(),
|
||||
p = sensor->getGyroX(),
|
||||
q = sensor->getGyroY(),
|
||||
r = sensor->getGyroZ();
|
||||
printf("motion is: %d, %d, %d, %d, %d, %d\n", m, n, o, p, q, r);
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
82
examples/c++/cwlsxxa.cxx
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
|
||||
#include "cwlsxxa.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Initializing..." << endl;
|
||||
|
||||
// Instantiate an CWLSXXA instance, using A0 for CO2, A1 for
|
||||
// humidity and A2 for temperature
|
||||
upm::CWLSXXA *sensor = new upm::CWLSXXA(0, 1, 2);
|
||||
|
||||
// update and print available values every second
|
||||
while (shouldRun)
|
||||
{
|
||||
// update our values from the sensor
|
||||
sensor->update();
|
||||
|
||||
// we show both C and F for temperature
|
||||
cout << "Temperature: " << sensor->getTemperature()
|
||||
<< " C / " << sensor->getTemperature(true) << " F"
|
||||
<< endl;
|
||||
|
||||
cout << "Humidity: " << sensor->getHumidity()
|
||||
<< " %" << endl;
|
||||
|
||||
cout << "CO2: " << sensor->getCO2()
|
||||
<< " ppm" << endl;
|
||||
|
||||
cout << endl;
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
return 0;
|
||||
}
|
76
examples/c++/dfrph.cxx
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "dfrph.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
#define DFRPH_AREF 5.0
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a DFRPH sensor on analog pin A0, with an analog
|
||||
// reference voltage of DFRPH_AREF
|
||||
upm::DFRPH *sensor = new upm::DFRPH(0, DFRPH_AREF);
|
||||
|
||||
|
||||
// After calibration, set the offset (based on calibration with a pH
|
||||
// 7.0 buffer solution). See the UPM sensor documentation for
|
||||
// calibrations instructions.
|
||||
sensor->setOffset(0.065);
|
||||
|
||||
// Every second, sample the pH and output it's corresponding
|
||||
// analog voltage.
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
cout << "Detected volts: " << sensor->volts() << endl;
|
||||
cout << "pH value: " << sensor->pH() << endl;
|
||||
cout << endl;
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
51
examples/c++/ds1808lc.cxx
Normal file
@ -0,0 +1,51 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "ds1808lc.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1 // Edison I2C-1
|
||||
#define DS1808_GPIO_PWR 15 // Edison GP165
|
||||
|
||||
void printState(upm::ILightController *lightController)
|
||||
{
|
||||
if (lightController->isPowered())
|
||||
{
|
||||
std::cout << "Light is powered, brightness = " << lightController->getBrightness() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Light is not powered." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
int status = 0;
|
||||
upm::ILightController* lightController;
|
||||
|
||||
try {
|
||||
lightController = new upm::DS1808LC(DS1808_GPIO_PWR, EDISON_I2C_BUS);
|
||||
std::cout << "Existing state: "; printState(lightController);
|
||||
if (argc == 2)
|
||||
{
|
||||
std::string arg = argv[1];
|
||||
int brightness = ::atoi(argv[1]);
|
||||
if (brightness > 0) {
|
||||
lightController->setPowerOn();
|
||||
lightController->setBrightness(brightness);
|
||||
} else
|
||||
lightController->setPowerOff();
|
||||
}
|
||||
std::cout << "Now: ";printState(lightController);
|
||||
} catch (std::exception& e) {
|
||||
std::cout << "Error: " << e.what() << std::endl;
|
||||
status = 1;
|
||||
}
|
||||
|
||||
delete lightController;
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -34,10 +34,11 @@ int main(int argc, char **argv)
|
||||
upm::EBOLED *lcd = new upm::EBOLED();
|
||||
|
||||
lcd->clear();
|
||||
lcd->setCursor(2, 0);
|
||||
lcd->setCursor(10, 15);
|
||||
lcd->write("Hello");
|
||||
lcd->setCursor(3, 5);
|
||||
lcd->setCursor(30, 15);
|
||||
lcd->write("World!");
|
||||
lcd->refresh();
|
||||
|
||||
cout << "Sleeping for 5 seconds..." << endl;
|
||||
sleep(5);
|
||||
|
@ -43,9 +43,9 @@ int main()
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a Grove Circular LED on gpio pins 5 and 4
|
||||
// Instantiate a Grove Circular LED on D9 for data, D8 for clock
|
||||
|
||||
upm::GroveCircularLED *circle = new upm::GroveCircularLED(5, 4);
|
||||
upm::GroveCircularLED *circle = new upm::GroveCircularLED(9, 8);
|
||||
|
||||
int level = 0;
|
||||
while (shouldRun)
|
||||
@ -54,6 +54,7 @@ int main()
|
||||
level = (level + 1) % 24;
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
111
examples/c++/grovegprs.cxx
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include "grovegprs.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace upm;
|
||||
|
||||
void printUsage(char *progname)
|
||||
{
|
||||
cout << "Usage: " << progname << " [AT command]" << endl;
|
||||
cout << endl;
|
||||
|
||||
cout << "If an argument is supplied on the command line, that argument is"
|
||||
<< endl;
|
||||
cout << "sent to the module and the response is printed out." << endl;
|
||||
cout << endl;
|
||||
cout << "If no argument is used, then the manufacturer and the current"
|
||||
<< endl;
|
||||
cout << "saved profiles are queried and the results printed out." << endl;
|
||||
cout << endl;
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
// simple helper function to send a command and wait for a response
|
||||
void sendCommand(upm::GroveGPRS* sensor, string cmd)
|
||||
{
|
||||
// commands need to be terminated with a carriage return
|
||||
cmd += "\r";
|
||||
|
||||
sensor->writeDataStr(cmd);
|
||||
|
||||
// wait up to 1 second
|
||||
if (sensor->dataAvailable(1000))
|
||||
{
|
||||
cout << "Returned: " << sensor->readDataStr(1024) << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
cerr << "Timed out waiting for response" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a GroveGPRS Module on UART 0
|
||||
upm::GroveGPRS* sensor = new upm::GroveGPRS(0);
|
||||
|
||||
// Set the baud rate, 19200 baud is the default.
|
||||
if (sensor->setBaudRate(19200) != mraa::SUCCESS)
|
||||
{
|
||||
cerr << "Failed to set tty baud rate" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
printUsage(argv[0]);
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
cout << "Sending command line argument (" << argv[1] << ")..." << endl;
|
||||
sendCommand(sensor, argv[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// query the module manufacturer
|
||||
cout << "Querying module manufacturer (AT+CGMI)..." << endl;
|
||||
sendCommand(sensor, "AT+CGMI");
|
||||
|
||||
sleep(1);
|
||||
|
||||
// query the saved profiles
|
||||
cout << "Querying the saved profiles (AT&V)..." << endl;
|
||||
sendCommand(sensor, "AT&V");
|
||||
|
||||
// A comprehensive list is available from the datasheet at:
|
||||
// http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
@ -25,7 +25,7 @@
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "my9221.h"
|
||||
#include "groveledbar.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -42,28 +42,27 @@ int main ()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a MY9221, we use D2 for the data, and D3 for the
|
||||
// data clock. This was tested with a Grove LED bar.
|
||||
// Instantiate a GroveLEDBar, we use D8 for the data, and D9 for the
|
||||
// clock. This was tested with a Grove LED bar.
|
||||
upm::GroveLEDBar* bar = new upm::GroveLEDBar(8, 9);
|
||||
|
||||
upm::MY9221* bar = new upm::MY9221(2, 3);
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
// count up from green to red
|
||||
for (int i=1; i<=10; i++)
|
||||
for (int i=0; i<=10; i++)
|
||||
{
|
||||
bar->setBarLevel(i, true);
|
||||
usleep(50000);
|
||||
usleep(100000);
|
||||
}
|
||||
sleep(1);
|
||||
|
||||
// count down from red to green
|
||||
for (int i=1; i<=10; i++)
|
||||
for (int i=0; i<=10; i++)
|
||||
{
|
||||
bar->setBarLevel(i, false);
|
||||
usleep(50000);
|
||||
usleep(100000);
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
@ -71,7 +70,7 @@ int main ()
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
// turn off the LED's
|
||||
bar->setBarLevel(0, true);
|
||||
bar->setBarLevel(0);
|
||||
|
||||
delete bar;
|
||||
return 0;
|
66
examples/c++/grovemd-stepper.cxx
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <iostream>
|
||||
#include "grovemd.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
// Instantiate an I2C Grove Motor Driver on I2C bus 0
|
||||
|
||||
upm::GroveMD *motors = new upm::GroveMD(GROVEMD_I2C_BUS,
|
||||
GROVEMD_DEFAULT_I2C_ADDR);
|
||||
|
||||
// This example demonstrates using the GroveMD to drive a stepper motor
|
||||
|
||||
// configure it, for this example, we'll assume 200 steps per rev
|
||||
motors->configStepper(200);
|
||||
|
||||
// set for half a rotation
|
||||
motors->setStepperSteps(100);
|
||||
|
||||
// let it go - clockwise rotation, 10 RPM speed
|
||||
motors->enableStepper(upm::GroveMD::STEP_DIR_CW, 10);
|
||||
|
||||
sleep(3);
|
||||
|
||||
// Now do it backwards...
|
||||
motors->setStepperSteps(100);
|
||||
motors->enableStepper(upm::GroveMD::STEP_DIR_CCW, 10);
|
||||
|
||||
// now disable
|
||||
motors->disableStepper();
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete motors;
|
||||
return 0;
|
||||
}
|
62
examples/c++/groveultrasonic.cxx
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Author: Jun Kato <i@junkato.jp>
|
||||
* Copyright (c) 2015 Jun Kato.
|
||||
*
|
||||
* Thanks to Seeed Studio for a working arduino sketch
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "groveultrasonic.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
upm::GroveUltraSonic *sonar = NULL;
|
||||
bool running = true;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT) {
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
// upm::GroveUltraSonic *sonar = NULL;
|
||||
sonar = new upm::GroveUltraSonic(2);
|
||||
while(running) {
|
||||
int width = sonar->getDistance();
|
||||
printf("Echo width = %d\n", width);
|
||||
printf("Distance inches = %f.2\n\n", width/148.0);
|
||||
sleep(3);
|
||||
}
|
||||
//! [Interesting]
|
||||
printf("exiting application\n");
|
||||
delete sonar;
|
||||
return 0;
|
||||
}
|
149
examples/c++/h803x.cxx
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
|
||||
#include "h803x.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
string defaultDev = "/dev/ttyUSB0";
|
||||
|
||||
// if an argument was specified, use it as the device instead
|
||||
if (argc > 1)
|
||||
defaultDev = string(argv[1]);
|
||||
|
||||
cout << "Using device " << defaultDev << endl;
|
||||
cout << "Initializing..." << endl;
|
||||
|
||||
// Instantiate an H803X instance, using MODBUS slave address 1, and
|
||||
// default comm parameters (9600, 8, N, 2)
|
||||
upm::H803X *sensor = new upm::H803X(defaultDev, 1);
|
||||
|
||||
// output the Slave ID string
|
||||
cout << "Slave ID: " << sensor->getSlaveID() << endl;
|
||||
cout << endl;
|
||||
|
||||
// update and print available values every second
|
||||
while (shouldRun)
|
||||
{
|
||||
// update our values from the sensor
|
||||
sensor->update();
|
||||
|
||||
// H8035 / H8036
|
||||
cout << "Consumption (kWh): " << sensor->getConsumption() << endl;
|
||||
cout << "Real Power (kW): " << sensor->getRealPower() << endl;
|
||||
|
||||
if (sensor->isH8036())
|
||||
{
|
||||
// The H8036 has much more data available...
|
||||
|
||||
cout << "Reactive Power (kVAR): " << sensor->getReactivePower()
|
||||
<< endl;
|
||||
cout << "Apparent Power (kVA): " << sensor->getApparentPower()
|
||||
<< endl;
|
||||
cout << "Power Factor: " << sensor->getPowerFactor()
|
||||
<< endl;
|
||||
cout << "Volts Line to Line: " << sensor->getVoltsLineToLine()
|
||||
<< endl;
|
||||
cout << "Volts Line to Neutral: " << sensor->getVoltsLineToNeutral()
|
||||
<< endl;
|
||||
|
||||
cout << "Current: " << sensor->getCurrent()
|
||||
<< endl;
|
||||
|
||||
cout << "Real Power Phase A (kW): " << sensor->getRealPowerPhaseA()
|
||||
<< endl;
|
||||
cout << "Real Power Phase B (kW): " << sensor->getRealPowerPhaseB()
|
||||
<< endl;
|
||||
cout << "Real Power Phase C (kW): " << sensor->getRealPowerPhaseC()
|
||||
<< endl;
|
||||
|
||||
cout << "Power Factor Phase A: " << sensor->getPowerFactorPhaseA()
|
||||
<< endl;
|
||||
cout << "Power Factor Phase B: " << sensor->getPowerFactorPhaseB()
|
||||
<< endl;
|
||||
cout << "Power Factor Phase C: " << sensor->getPowerFactorPhaseC()
|
||||
<< endl;
|
||||
|
||||
cout << "Volts Phase A to B: " << sensor->getVoltsPhaseAToB()
|
||||
<< endl;
|
||||
cout << "Volts Phase B to C: " << sensor->getVoltsPhaseBToC()
|
||||
<< endl;
|
||||
cout << "Volts Phase A to C: " << sensor->getVoltsPhaseAToC()
|
||||
<< endl;
|
||||
cout << "Volts Phase A to Neutral: "
|
||||
<< sensor->getVoltsPhaseAToNeutral()
|
||||
<< endl;
|
||||
cout << "Volts Phase B to Neutral: "
|
||||
<< sensor->getVoltsPhaseBToNeutral()
|
||||
<< endl;
|
||||
cout << "Volts Phase C to Neutral: "
|
||||
<< sensor->getVoltsPhaseCToNeutral()
|
||||
<< endl;
|
||||
|
||||
cout << "Current Phase A: " << sensor->getCurrentPhaseA()
|
||||
<< endl;
|
||||
cout << "Current Phase B: " << sensor->getCurrentPhaseB()
|
||||
<< endl;
|
||||
cout << "Current Phase C: " << sensor->getCurrentPhaseC()
|
||||
<< endl;
|
||||
|
||||
cout << "Avg Real Power (kW): " << sensor->getAvgRealPower()
|
||||
<< endl;
|
||||
cout << "Min Real Power (kW): " << sensor->getMinRealPower()
|
||||
<< endl;
|
||||
cout << "Max Real Power (kW): " << sensor->getMaxRealPower()
|
||||
<< endl;
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
|
||||
sleep(2);
|
||||
}
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
return 0;
|
||||
}
|
@ -42,19 +42,20 @@ sig_handler(int signo)
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
void
|
||||
interrupt (void * args) {
|
||||
sonar->ackEdgeDetected ();
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
sonar = new upm::HCSR04(5, 7, &interrupt);
|
||||
sonar = new upm::HCSR04(5, 6);
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
printf ("width = %d\n", sonar->getDistance());
|
||||
std::cout << "exiting application" << std::endl;
|
||||
sleep(1);
|
||||
|
||||
for(;;){
|
||||
std::cout << "get distance" << std::endl;
|
||||
double distance = sonar->getDistance(CM);
|
||||
std::cout << "distance " << distance << std::endl;
|
||||
sleep(5);
|
||||
}
|
||||
|
||||
delete sonar;
|
||||
|
||||
|
79
examples/c++/hdxxvxta.cxx
Normal file
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
|
||||
#include "hdxxvxta.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Initializing..." << endl;
|
||||
|
||||
// Instantiate an HDXXVXTA instance, using A1 for humidity and A0
|
||||
// for temperature
|
||||
upm::HDXXVXTA *sensor = new upm::HDXXVXTA(1, 0);
|
||||
|
||||
// update and print available values every second
|
||||
while (shouldRun)
|
||||
{
|
||||
// update our values from the sensor
|
||||
sensor->update();
|
||||
|
||||
// we show both C and F for temperature
|
||||
cout << "Temperature: " << sensor->getTemperature()
|
||||
<< " C / " << sensor->getTemperature(true) << " F"
|
||||
<< endl;
|
||||
|
||||
cout << "Humidity: " << sensor->getHumidity()
|
||||
<< " %" << endl;
|
||||
|
||||
cout << endl;
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
return 0;
|
||||
}
|
51
examples/c++/hlg150h.cxx
Normal file
@ -0,0 +1,51 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "hlg150h.h"
|
||||
|
||||
#define HLG150H_GPIO_RELAY 21
|
||||
#define HLG150H_GPIO_PWM 22
|
||||
|
||||
void printState(upm::ILightController *lightController)
|
||||
{
|
||||
if (lightController->isPowered())
|
||||
{
|
||||
std::cout << "Light is powered, brightness = " << lightController->getBrightness() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Light is not powered." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
int status = 0;
|
||||
upm::ILightController* lightController;
|
||||
|
||||
try {
|
||||
lightController = new upm::HLG150H(HLG150H_GPIO_RELAY, HLG150H_GPIO_PWM);
|
||||
std::cout << "Existing state: "; printState(lightController);
|
||||
if (argc == 2)
|
||||
{
|
||||
std::string arg = argv[1];
|
||||
int brightness = ::atoi(argv[1]);
|
||||
if (brightness > 0) {
|
||||
lightController->setPowerOn();
|
||||
lightController->setBrightness(brightness);
|
||||
} else
|
||||
lightController->setPowerOff();
|
||||
}
|
||||
std::cout << "Now: ";printState(lightController);
|
||||
delete lightController;
|
||||
} catch (std::exception& e) {
|
||||
std::cout << "Error: " << e.what() << std::endl;
|
||||
status = 1;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
82
examples/c++/humidity-sensor.cxx
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "si7005.h"
|
||||
#include "bme280.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
#define FT4222_I2C_BUS 0
|
||||
|
||||
#define EDISON_GPIO_SI7005_CS 20
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using ILightSensor to determine
|
||||
// which sensor is present and return its name.
|
||||
// ILightSensor is then used to get readings from sensor
|
||||
|
||||
|
||||
upm::IHumiditySensor* getHumiditySensor()
|
||||
{
|
||||
upm::IHumiditySensor* humiditySensor = NULL;
|
||||
try {
|
||||
humiditySensor = new upm::BME280 (mraa_get_sub_platform_id(FT4222_I2C_BUS));
|
||||
return humiditySensor ;
|
||||
} catch (std::exception& e)
|
||||
{
|
||||
std::cerr <<"BME280: "<<e.what() << std::endl;
|
||||
}
|
||||
|
||||
try {
|
||||
humiditySensor = new upm::SI7005(EDISON_I2C_BUS, EDISON_GPIO_SI7005_CS);
|
||||
return humiditySensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "SI7005: " << e.what() << std::endl;
|
||||
}
|
||||
return humiditySensor;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
upm::IHumiditySensor* humiditySensor = getHumiditySensor();
|
||||
if (humiditySensor == NULL) {
|
||||
std::cout << "Humidity sensor not detected" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Humidity sensor " << humiditySensor->getModuleName() << " detected" << std::endl;
|
||||
while (true) {
|
||||
try {
|
||||
int value = humiditySensor->getHumidityRelative();
|
||||
std::cout << "Humidity = " << value << "%" << std::endl;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
delete humiditySensor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
102
examples/c++/hwxpxx.cxx
Normal file
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2016 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
|
||||
#include "hwxpxx.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
string defaultDev = "/dev/ttyUSB0";
|
||||
|
||||
// if an argument was specified, use it as the device instead
|
||||
if (argc > 1)
|
||||
defaultDev = string(argv[1]);
|
||||
|
||||
cout << "Using device " << defaultDev << endl;
|
||||
cout << "Initializing..." << endl;
|
||||
|
||||
// Instantiate an HWXPXX instance, using MODBUS slave address 3, and
|
||||
// default comm parameters (19200, 8, N, 2)
|
||||
upm::HWXPXX *sensor = new upm::HWXPXX(defaultDev, 3);
|
||||
|
||||
// output the Slave ID (manufacturer, model, serno)
|
||||
cout << "Slave ID: " << sensor->getSlaveID() << endl;
|
||||
|
||||
// stored temperature and humidity offsets
|
||||
cout << "Temperature Offset: " << sensor->getTemperatureOffset()
|
||||
<< endl;
|
||||
cout << "Humidity Offset: " << sensor->getHumidityOffset()
|
||||
<< endl;
|
||||
|
||||
cout << endl;
|
||||
|
||||
// update and print available values every second
|
||||
while (shouldRun)
|
||||
{
|
||||
// update our values from the sensor
|
||||
sensor->update();
|
||||
|
||||
// we show both C and F for temperature
|
||||
cout << "Temperature: " << sensor->getTemperature()
|
||||
<< " C / " << sensor->getTemperature(true) << " F"
|
||||
<< endl;
|
||||
|
||||
cout << "Humidity: " << sensor->getHumidity()
|
||||
<< " %" << endl;
|
||||
|
||||
cout << "Slider: " << sensor->getSlider() << " %" << endl;
|
||||
|
||||
cout << "Override Switch Status: " << sensor->getOverrideSwitchStatus()
|
||||
<< endl;
|
||||
|
||||
cout << endl;
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
return 0;
|
||||
}
|
84
examples/c++/ili9341.cxx
Normal file
@ -0,0 +1,84 @@
|
||||
/**
|
||||
* Author: Shawn Hymel
|
||||
* Copyright (c) 2016 SparkFun Electronics
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "ili9341.h"
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
//! [Interesting]
|
||||
|
||||
// Pins (Edison)
|
||||
// CS_LCD GP44 (MRAA 31)
|
||||
// CS_SD GP43 (MRAA 38) unused
|
||||
// DC GP12 (MRAA 20)
|
||||
// RESEST GP13 (MRAA 14)
|
||||
upm::ILI9341 * lcd = new upm::ILI9341(31, 38, 20, 14);
|
||||
|
||||
// Fill the screen with a solid color
|
||||
lcd->fillScreen(lcd->color565(0, 40, 16));
|
||||
|
||||
// Draw some shapes
|
||||
lcd->drawFastVLine(10, 10, 100, ILI9341_RED);
|
||||
lcd->drawFastHLine(20, 10, 50, ILI9341_CYAN);
|
||||
lcd->drawLine(160, 30, 200, 60, ILI9341_GREEN);
|
||||
lcd->fillRect(20, 30, 75, 60, ILI9341_ORANGE);
|
||||
lcd->drawCircle(70, 50, 20, ILI9341_PURPLE);
|
||||
lcd->fillCircle(120, 50, 20, ILI9341_PURPLE);
|
||||
lcd->drawTriangle(50, 100, 10, 140, 90, 140, ILI9341_YELLOW);
|
||||
lcd->fillTriangle(150, 100, 110, 140, 190, 140, ILI9341_YELLOW);
|
||||
lcd->drawRoundRect(20, 150, 50, 30, 10, ILI9341_RED);
|
||||
lcd->drawRoundRect(130, 150, 50, 30, 10, ILI9341_RED);
|
||||
lcd->fillRoundRect(75, 150, 50, 30, 10, ILI9341_RED);
|
||||
|
||||
// Write some text
|
||||
lcd->setCursor(0, 200);
|
||||
lcd->setTextColor(ILI9341_LIGHTGREY);
|
||||
lcd->setTextWrap(true);
|
||||
lcd->setTextSize(1);
|
||||
lcd->print("Text 1\n");
|
||||
lcd->setTextSize(2);
|
||||
lcd->print("Text 2\n");
|
||||
lcd->setTextSize(3);
|
||||
lcd->print("Text 3\n");
|
||||
lcd->setTextSize(4);
|
||||
lcd->print("Text 4\n");
|
||||
|
||||
// Test screen rotation
|
||||
for(int r = 0; r < 4; r++) {
|
||||
lcd->setRotation(r);
|
||||
lcd->fillRect(0, 0, 5, 5, ILI9341_WHITE);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
// Invert colors, wait, then revert back
|
||||
lcd->invertDisplay(true);
|
||||
sleep(2);
|
||||
lcd->invertDisplay(false);
|
||||
|
||||
// Don't forget to free up that memory!
|
||||
delete lcd;
|
||||
//! [Interesting]
|
||||
return 0;
|
||||
}
|
75
examples/c++/kxcjk1013.cxx
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Author: Lay, Kuan Loon <kuan.loon.lay@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "kxcjk1013.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
upm::KXCJK1013* accelerometer;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
void
|
||||
data_callback(char* data)
|
||||
{
|
||||
float x, y, z;
|
||||
accelerometer->extract3Axis(data, &x, &y, &z);
|
||||
printf("%.1f %.1f %.1f\n", x, y, z);
|
||||
// usleep(100);
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
// Instantiate a KXCJK1013 Accelerometer Sensor on iio device 0
|
||||
accelerometer = new upm::KXCJK1013(0);
|
||||
accelerometer->setScale(0.019163);
|
||||
accelerometer->setSamplingFrequency(25.0);
|
||||
accelerometer->enable3AxisChannel();
|
||||
accelerometer->installISR(data_callback, NULL);
|
||||
accelerometer->enableBuffer(16);
|
||||
|
||||
while (shouldRun) {
|
||||
sleep(1);
|
||||
}
|
||||
accelerometer->disableBuffer();
|
||||
|
||||
//! [Interesting]
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete accelerometer;
|
||||
|
||||
return 0;
|
||||
}
|
@ -32,12 +32,16 @@ main(int argc, char **argv)
|
||||
lcd->setCursor(0,0);
|
||||
lcd->write("Hello World");
|
||||
//! [Interesting]
|
||||
sleep(3);
|
||||
lcd->setCursor(1,2);
|
||||
lcd->write("Hello World");
|
||||
sleep(3);
|
||||
lcd->setCursor(2,4);
|
||||
lcd->write("Hello World");
|
||||
sleep(3);
|
||||
lcd->setCursor(3,6);
|
||||
lcd->write("Hello World");
|
||||
sleep(3);
|
||||
delete lcd;
|
||||
|
||||
return 0;
|
54
examples/c++/lcm1602-parallel.cxx
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Author: Sergey Kiselev <sergey.kiselev@intel.com>
|
||||
* Author: Yevgeniy Kiveish <yevgeniy.kiveisha@intel.com>
|
||||
* Copyright (c) 2014 - 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <lcm1602.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
// LCD connection:
|
||||
// LCD RS pin to digital pin 8
|
||||
// LCD Enable pin to digital pin 13
|
||||
// LCD D4 pin to digital pin 2
|
||||
// LCD D5 pin to digital pin 3
|
||||
// LCD D6 pin to digital pin 4
|
||||
// LCD D7 pin to digital pin 5
|
||||
// LCD R/W pin to ground
|
||||
// 10K trimmer potentiometer:
|
||||
// ends to +5V and ground
|
||||
// wiper to LCD VO pin (pin 3)
|
||||
upm::Lcm1602 *lcd = new upm::Lcm1602(8, 13, 2, 3, 4, 5, 20, 2);
|
||||
lcd->setCursor(0,0);
|
||||
lcd->write("Hello World");
|
||||
lcd->setCursor(1,2);
|
||||
lcd->write("Hello World");
|
||||
|
||||
printf("Sleeping for 5 seconds\n");
|
||||
sleep(5);
|
||||
delete lcd;
|
||||
//! [Interesting]
|
||||
return 0;
|
||||
}
|
98
examples/c++/light-controller.cxx
Normal file
@ -0,0 +1,98 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "lp8860.h"
|
||||
#include "ds1808lc.h"
|
||||
#include "hlg150h.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1 // Edison I2C-1
|
||||
#define GPIO_SI7005_CS 20 // Edison GP12
|
||||
#define HLG150H_GPIO_RELAY 21
|
||||
#define HLG150H_GPIO_PWM 22
|
||||
#define LP8860_GPIO_PWR 45 // Edison GP45
|
||||
#define DS1808_GPIO_PWR 15 // Edison GP165
|
||||
#define DS1808_GPIO_EDISON_LIVE 36 // Edison GP14
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using ILightController to determine
|
||||
// which controller is present and return its name.
|
||||
// ILightController is then used to get readings from sensor
|
||||
|
||||
upm::ILightController* getLightController()
|
||||
{
|
||||
upm::ILightController* lightController = NULL;
|
||||
try {
|
||||
lightController = new upm::LP8860(LP8860_GPIO_PWR, EDISON_I2C_BUS);
|
||||
return lightController;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "LP8860: " << e.what() << std::endl;
|
||||
}
|
||||
try {
|
||||
lightController = new upm::DS1808LC(DS1808_GPIO_PWR, EDISON_I2C_BUS);
|
||||
return lightController;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "DS1808LC: " << e.what() << std::endl;
|
||||
}
|
||||
try {
|
||||
lightController = new upm::HLG150H(HLG150H_GPIO_RELAY, HLG150H_GPIO_PWM);
|
||||
return lightController;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "HLG150H: " << e.what() << std::endl;
|
||||
}
|
||||
return lightController;
|
||||
}
|
||||
|
||||
|
||||
void printState(upm::ILightController *lightController)
|
||||
{
|
||||
if (lightController->isPowered())
|
||||
{
|
||||
std::cout << "Light is powered, brightness = " << lightController->getBrightness() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Light is not powered." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
int status = 0;
|
||||
// MraaUtils::setGpio(GPIO_SI7005_CS, 1);
|
||||
|
||||
upm::ILightController *lightController = getLightController();
|
||||
if (lightController != NULL)
|
||||
{
|
||||
std::cout << "Detected light controller " << lightController->getModuleName() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Error. Unsupported platform." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
try {
|
||||
std::cout << "Existing state: "; printState(lightController);
|
||||
if (argc == 2)
|
||||
{
|
||||
std::string arg = argv[1];
|
||||
int brightness = ::atoi(argv[1]);
|
||||
if (brightness > 0) {
|
||||
lightController->setPowerOn();
|
||||
lightController->setBrightness(brightness);
|
||||
} else
|
||||
lightController->setPowerOff();
|
||||
}
|
||||
std::cout << "Now: ";printState(lightController);
|
||||
} catch (std::exception& e) {
|
||||
std::cout << "Error: " << e.what() << std::endl;
|
||||
status = 1;
|
||||
}
|
||||
|
||||
delete lightController;
|
||||
return status;
|
||||
}
|
||||
|
||||
|
78
examples/c++/light-sensor.cxx
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "max44009.h"
|
||||
#include "si1132.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
#define FT4222_I2C_BUS 0
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using ILightSensor to determine
|
||||
// which sensor is present and return its name.
|
||||
// ILightSensor is then used to get readings from sensor
|
||||
|
||||
|
||||
upm::ILightSensor* getLightSensor()
|
||||
{
|
||||
upm::ILightSensor* lightSensor = NULL;
|
||||
try {
|
||||
lightSensor = new upm::SI1132(mraa_get_sub_platform_id(FT4222_I2C_BUS));
|
||||
return lightSensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "SI1132: " << e.what() << std::endl;
|
||||
}
|
||||
try {
|
||||
lightSensor = new upm::MAX44009(EDISON_I2C_BUS);
|
||||
return lightSensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "MAX44009: " << e.what() << std::endl;
|
||||
}
|
||||
return lightSensor;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
upm::ILightSensor* lightSensor = getLightSensor();
|
||||
if (lightSensor == NULL) {
|
||||
std::cout << "Light sensor not detected" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Light sensor " << lightSensor->getModuleName() << " detected" << std::endl;
|
||||
while (true) {
|
||||
try {
|
||||
float value = lightSensor->getVisibleLux();
|
||||
std::cout << "Light level = " << value << " lux" << std::endl;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
delete lightSensor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2014 Intel Corporation.
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
@ -25,11 +25,11 @@
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "groveloudness.h"
|
||||
#include "lm35.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
bool shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
@ -37,27 +37,29 @@ void sig_handler(int signo)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
|
||||
int main ()
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
// Instantiate a Grove Loudness sensor on analog pin A0
|
||||
upm::GroveLoudness* loudness = new upm::GroveLoudness(0);
|
||||
|
||||
// Print the loudness value every 0.1 seconds
|
||||
// Instantiate a LM35 on analog pin A0, with a default analog
|
||||
// reference voltage of 5.0
|
||||
upm::LM35 *sensor = new upm::LM35(0);
|
||||
|
||||
// Every half second, sample the sensor and output the temperature
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
int val = loudness->value();
|
||||
cout << "Loudness value (higher is louder): " << val << endl;
|
||||
|
||||
usleep(100000);
|
||||
cout << "Temperature: " << sensor->getTemperature() << " C" << endl;
|
||||
|
||||
usleep(500000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete loudness;
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
68
examples/c++/loudness.cxx
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "loudness.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
#define LOUDNESS_AREF 5.0
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate a Loudness sensor on analog pin A0, with an analog
|
||||
// reference voltage of LOUDNESS_AREF
|
||||
upm::Loudness *loud = new upm::Loudness(0, LOUDNESS_AREF);
|
||||
|
||||
// Every tenth of a second, sample the loudness and output it's
|
||||
// corresponding analog voltage.
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
cout << "Detected loudness (volts): " << loud->loudness() << endl;
|
||||
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete loud;
|
||||
return 0;
|
||||
}
|
52
examples/c++/lp8860.cxx
Normal file
@ -0,0 +1,52 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include "lp8860.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1 // Edison I2C-1
|
||||
#define LP8860_GPIO_PWR 45 // Edison GP45
|
||||
|
||||
|
||||
void printState(upm::ILightController *lightController)
|
||||
{
|
||||
if (lightController->isPowered())
|
||||
{
|
||||
std::cout << "Light is powered, brightness = " << lightController->getBrightness() << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Light is not powered." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
int status = 0;
|
||||
upm::LP8860* lightController;
|
||||
|
||||
try {
|
||||
lightController = new upm::LP8860(LP8860_GPIO_PWR, EDISON_I2C_BUS);
|
||||
std::cout << "Existing state: "; printState(lightController);
|
||||
if (argc == 2)
|
||||
{
|
||||
std::string arg = argv[1];
|
||||
int brightness = ::atoi(argv[1]);
|
||||
if (brightness > 0) {
|
||||
lightController->setPowerOn();
|
||||
lightController->setBrightness(brightness);
|
||||
} else
|
||||
lightController->setPowerOff();
|
||||
}
|
||||
std::cout << "Now: ";printState(lightController);
|
||||
delete lightController;
|
||||
} catch (std::exception& e) {
|
||||
std::cout << "Error: " << e.what() << std::endl;
|
||||
status = 1;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
46
examples/c++/max44009.cxx
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "max44009.h"
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
|
||||
int main ()
|
||||
{
|
||||
try {
|
||||
upm::MAX44009* lightSensor = new upm::MAX44009(EDISON_I2C_BUS);
|
||||
while (true) {
|
||||
float value = lightSensor->getVisibleLux();
|
||||
std::cout << "Light level = " << value << " lux" << std::endl;
|
||||
sleep(1);
|
||||
}
|
||||
delete lightSensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
163
examples/c++/mcp9808.cxx
Normal file
@ -0,0 +1,163 @@
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include "mcp9808.h"
|
||||
|
||||
#include "mraa.hpp"
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
//! [Interesting]
|
||||
int command;
|
||||
upm::MCP9808 *temp = new upm::MCP9808(6);
|
||||
|
||||
do
|
||||
{
|
||||
cout << endl;
|
||||
cout << "1 - read temp \t" ;
|
||||
cout << "2 - sleep mode \t";
|
||||
cout << "3 - wake up" << endl;
|
||||
cout << "4 - set mode to " << (temp->isCelsius() == true ? "Fahrenheit" : "Celcius") << endl;
|
||||
cout << "5 - show status bits" << endl;
|
||||
cout << "6 - Set Tcrit \t" ;
|
||||
cout << "7 - Set Tupper \t" ;
|
||||
cout << "8 - Set Tlower " << endl;
|
||||
cout << "9 - Display monitor temps " << endl;
|
||||
cout << "10 - Enable alert default\t";
|
||||
cout << "11 - Enable alert interrupt" << endl;
|
||||
cout << "12 - Clear interrupt \t" ;
|
||||
cout << "13 - Clear alert mode" << endl;
|
||||
cout << "14 - Get Hysteresis\t";
|
||||
cout << "15 - Set Hysteresis" << endl;
|
||||
cout << "16 - Get Resolution\t";
|
||||
cout << "17 - Set Resolution" << endl;
|
||||
cout << "18 - Get Manufacturer ID"<< endl;
|
||||
cout << "19 - Get Device ID" << endl;
|
||||
cout << "-1 - exit" << endl;
|
||||
cout << "Enter a command: ";
|
||||
cin >> command;
|
||||
|
||||
switch(command)
|
||||
{
|
||||
float t;
|
||||
case 1:
|
||||
std::cout << "Temp: " << temp->getTemp() << "° " << (temp->isCelsius()? "Celsius" : "Fahrenheit")<< std::endl;
|
||||
break;
|
||||
case 2:
|
||||
cout << "shutdown sensor (sleep mode)" << endl;
|
||||
temp->shutDown();
|
||||
break;
|
||||
case 3:
|
||||
cout << "wake up sensor" << endl;
|
||||
temp->shutDown(false);
|
||||
break;
|
||||
case 4:
|
||||
cout << "set mode to " << (temp->isCelsius() ? "Fahrenheit" : "Celcius") << endl;
|
||||
temp->setMode(!temp->isCelsius());
|
||||
break;
|
||||
case 5:
|
||||
cout << "Tcrit = " << temp->isTcrit();
|
||||
cout << " Tupper = " << temp->isTupper();
|
||||
cout << " Tlower = " << temp->isTlower();
|
||||
break;
|
||||
case 6:
|
||||
cout << "enter a value";
|
||||
cin >> t;
|
||||
temp->setMonitorReg(temp->CRIT_TEMP, t);
|
||||
break;
|
||||
case 7:
|
||||
cout << "enter a value";
|
||||
cin >> t;
|
||||
temp->setMonitorReg(temp->UPPER_TEMP, t);
|
||||
break;
|
||||
case 8:
|
||||
cout << "enter a value";
|
||||
cin >> t;
|
||||
temp->setMonitorReg(temp->LOWER_TEMP, t);
|
||||
break;
|
||||
case 9:
|
||||
cout << "tcrit = " << temp->getMonitorReg(temp->CRIT_TEMP) << endl;
|
||||
cout << "tupper = " << temp->getMonitorReg(temp->UPPER_TEMP) << endl;
|
||||
cout << "tlower = " << temp->getMonitorReg(temp->LOWER_TEMP) << endl;
|
||||
break;
|
||||
case 10:
|
||||
cout << "set alert mode default" ;
|
||||
temp->setAlertMode(temp->ALERTCTRL);
|
||||
break;
|
||||
case 11:
|
||||
cout << "set alert mode interrupt";
|
||||
temp->setAlertMode(temp->ALERTMODE | temp->ALERTCTRL );
|
||||
break;
|
||||
case 12:
|
||||
temp->clearInterrupt();
|
||||
break;
|
||||
case 13:
|
||||
cout << "Clear alerts" << endl;
|
||||
temp->clearAlertMode();
|
||||
break;
|
||||
case 14:
|
||||
cout << "Hysteresis: " << temp->getHysteresis() << endl;
|
||||
break;
|
||||
case 15:
|
||||
int u;
|
||||
cout << "enter 1 to 4";
|
||||
cin >> u ;
|
||||
switch(u)
|
||||
{
|
||||
case 1:
|
||||
temp->setHysteresis(temp->HYST_0);
|
||||
break;
|
||||
case 2:
|
||||
temp->setHysteresis(temp->HYST_1_5);
|
||||
break;
|
||||
case 3:
|
||||
temp->setHysteresis(temp->HYST_3_0);
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
temp->setHysteresis(temp->HYST_6_0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
cout << "Resolution: " << temp->getResolution() << endl;
|
||||
break;
|
||||
case 17:
|
||||
int v;
|
||||
cout << "enter 1 to 4";
|
||||
cin >> v ;
|
||||
switch(v)
|
||||
{
|
||||
case 1:
|
||||
temp->setResolution(temp->RES_LOW);
|
||||
break;
|
||||
case 2:
|
||||
temp->setResolution(temp->RES_MEDIUM);
|
||||
break;
|
||||
case 3:
|
||||
temp->setResolution(temp->RES_HIGH);
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
temp->setResolution(temp->RES_PRECISION);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
cout << "Manufacturer ID: " << std::hex << temp->getManufacturer() << endl;
|
||||
break;
|
||||
case 19:
|
||||
cout << "Get device ID: " << std::hex << temp->getDevicedId() << endl;
|
||||
break;
|
||||
case -1:
|
||||
break;
|
||||
default:
|
||||
cout << endl << "That option is not available. Try again" << endl;
|
||||
break;
|
||||
}
|
||||
|
||||
}while (command != -1 );
|
||||
//! [Interesting]
|
||||
return MRAA_SUCCESS;
|
||||
}
|
68
examples/c++/mg811.cxx
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "mg811.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
#define MG811_AREF 5.0
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
// Instantiate an MG811 on analog pin A0, and digital pin D2 with an
|
||||
// analog reference voltage of MG811_AREF (5.0)
|
||||
upm::MG811 *sensor = new upm::MG811(0, 2, MG811_AREF);
|
||||
|
||||
// Every tenth of a second, sample the sensor and output it's
|
||||
// detected CO2 concentration in parts per million (ppm)
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
cout << "CO2 concentration in PPM: " << sensor->ppm() << endl;
|
||||
|
||||
usleep(100000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
@ -62,14 +62,15 @@ int main (int argc, char **argv)
|
||||
|
||||
sleep(1);
|
||||
|
||||
int gas;
|
||||
int temp;
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
co2->getData(&gas, &temp);
|
||||
cout << "CO2 concentration: " << gas << " PPM, "
|
||||
<< "Temperature (in C): " << temp <<endl;
|
||||
if(!co2->getData()){
|
||||
cerr << "Failed to retrieve data" << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
cout << "CO2 concentration: " << co2->getGas() << " PPM, "
|
||||
<< "Temperature (in C): " << co2->getTemperature() <<endl;
|
||||
|
||||
sleep(2);
|
||||
}
|
||||
|
78
examples/c++/micsv89.cxx
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Author: Marc Graham <marc@m2ag.net>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include "micsv89.h"
|
||||
|
||||
/*
|
||||
* An example for using the MICSV89 sensor library.
|
||||
* The MICSV89 comes in 4 variants, PWM and I2c
|
||||
* in 3.3 volts and 5 volts. This library only implements
|
||||
* the I2c version of the device.
|
||||
*
|
||||
* Device output is not valid until a warm up of 15 minutes
|
||||
* of operation.
|
||||
*
|
||||
* Additional linker flags: -lupm-micsv89
|
||||
*/
|
||||
|
||||
using namespace std;
|
||||
|
||||
volatile int running = 1;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT) {
|
||||
cout << "Exiting program." << endl;
|
||||
running = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
//! [Interesting]
|
||||
upm::MICSV89 *sensor = new upm::MICSV89(6);
|
||||
|
||||
while(running)
|
||||
{
|
||||
sensor->update();
|
||||
while(!sensor->valid());
|
||||
cout << "co2: " << sensor->co2equ() << endl;
|
||||
cout << "short: " << sensor->vocshort() << endl;
|
||||
cout << "tvoc: " << sensor->tvoc() << endl;
|
||||
cout << "resistor: " << sensor->resistor() << endl;
|
||||
cout << "****************************" << endl;
|
||||
sleep(5);
|
||||
}
|
||||
|
||||
delete sensor;
|
||||
//! [Interesting]
|
||||
|
||||
return MRAA_SUCCESS;
|
||||
}
|
81
examples/c++/mpu9250.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include "mpu9250.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int shouldRun = true;
|
||||
|
||||
void sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
shouldRun = false;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
//! [Interesting]
|
||||
|
||||
upm::MPU9250 *sensor = new upm::MPU9250();
|
||||
|
||||
sensor->init();
|
||||
|
||||
while (shouldRun)
|
||||
{
|
||||
sensor->update();
|
||||
|
||||
float x, y, z;
|
||||
|
||||
sensor->getAccelerometer(&x, &y, &z);
|
||||
cout << "Accelerometer: ";
|
||||
cout << "AX: " << x << " AY: " << y << " AZ: " << z << endl;
|
||||
|
||||
sensor->getGyroscope(&x, &y, &z);
|
||||
cout << "Gryoscope: ";
|
||||
cout << "GX: " << x << " GY: " << y << " GZ: " << z << endl;
|
||||
|
||||
sensor->getMagnetometer(&x, &y, &z);
|
||||
cout << "Magnetometer: ";
|
||||
cout << "MX = " << x << " MY = " << y << " MZ = " << z << endl;
|
||||
|
||||
cout << "Temperature: " << sensor->getTemperature() << endl;
|
||||
cout << endl;
|
||||
|
||||
usleep(500000);
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
81
examples/c++/mq4.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "mq4.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
{
|
||||
shouldRun = false;
|
||||
}
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Attach gas sensor to Analog A0
|
||||
upm::MQ4 *sensor = new upm::MQ4(0);
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
uint16_t buffer [128];
|
||||
|
||||
thresholdContext ctx;
|
||||
ctx.averageReading = 0;
|
||||
ctx.runningAverage = 0;
|
||||
ctx.averagedOver = 2;
|
||||
|
||||
// Infinite loop, ends when script is cancelled
|
||||
// Repeatedly, take a sample every 2 microseconds;
|
||||
// find the average of 128 samples; and
|
||||
// print a running graph of asteriskss as averages
|
||||
while (shouldRun)
|
||||
{
|
||||
int len = sensor->getSampledWindow (2, 128, buffer);
|
||||
if (len) {
|
||||
int thresh = sensor->findThreshold (&ctx, 30, buffer, len);
|
||||
sensor->printGraph(&ctx, 5);
|
||||
if (thresh) {
|
||||
// do something ....
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [Interesting]
|
81
examples/c++/mq6.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "mq6.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
{
|
||||
shouldRun = false;
|
||||
}
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Attach gas sensor to Analog A0
|
||||
upm::MQ6 *sensor = new upm::MQ6(0);
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
uint16_t buffer [128];
|
||||
|
||||
thresholdContext ctx;
|
||||
ctx.averageReading = 0;
|
||||
ctx.runningAverage = 0;
|
||||
ctx.averagedOver = 2;
|
||||
|
||||
// Infinite loop, ends when script is cancelled
|
||||
// Repeatedly, take a sample every 2 microseconds;
|
||||
// find the average of 128 samples; and
|
||||
// print a running graph of asteriskss as averages
|
||||
while (shouldRun)
|
||||
{
|
||||
int len = sensor->getSampledWindow (2, 128, buffer);
|
||||
if (len) {
|
||||
int thresh = sensor->findThreshold (&ctx, 30, buffer, len);
|
||||
sensor->printGraph(&ctx, 5);
|
||||
if (thresh) {
|
||||
// do something ....
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [Interesting]
|
81
examples/c++/mq7.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "mq7.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
{
|
||||
shouldRun = false;
|
||||
}
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Attach gas sensor to Analog A0
|
||||
upm::MQ7 *sensor = new upm::MQ7(0);
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
uint16_t buffer [128];
|
||||
|
||||
thresholdContext ctx;
|
||||
ctx.averageReading = 0;
|
||||
ctx.runningAverage = 0;
|
||||
ctx.averagedOver = 2;
|
||||
|
||||
// Infinite loop, ends when script is cancelled
|
||||
// Repeatedly, take a sample every 2 microseconds;
|
||||
// find the average of 128 samples; and
|
||||
// print a running graph of asteriskss as averages
|
||||
while (shouldRun)
|
||||
{
|
||||
int len = sensor->getSampledWindow (2, 128, buffer);
|
||||
if (len) {
|
||||
int thresh = sensor->findThreshold (&ctx, 30, buffer, len);
|
||||
sensor->printGraph(&ctx, 5);
|
||||
if (thresh) {
|
||||
// do something ....
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [Interesting]
|
81
examples/c++/mq8.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "mq8.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
bool shouldRun = true;
|
||||
|
||||
using namespace std;
|
||||
|
||||
void
|
||||
sig_handler(int signo)
|
||||
{
|
||||
if (signo == SIGINT)
|
||||
{
|
||||
shouldRun = false;
|
||||
}
|
||||
}
|
||||
|
||||
//! [Interesting]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Attach gas sensor to Analog A0
|
||||
upm::MQ8 *sensor = new upm::MQ8(0);
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
uint16_t buffer [128];
|
||||
|
||||
thresholdContext ctx;
|
||||
ctx.averageReading = 0;
|
||||
ctx.runningAverage = 0;
|
||||
ctx.averagedOver = 2;
|
||||
|
||||
// Infinite loop, ends when script is cancelled
|
||||
// Repeatedly, take a sample every 2 microseconds;
|
||||
// find the average of 128 samples; and
|
||||
// print a running graph of asteriskss as averages
|
||||
while (shouldRun)
|
||||
{
|
||||
int len = sensor->getSampledWindow (2, 128, buffer);
|
||||
if (len) {
|
||||
int thresh = sensor->findThreshold (&ctx, 30, buffer, len);
|
||||
sensor->printGraph(&ctx, 5);
|
||||
if (thresh) {
|
||||
// do something ....
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Exiting" << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [Interesting]
|
52
examples/c++/nlgpio16.cxx
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include "nlgpio16.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace upm;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Instantiate a NLGPIO16 Module on the default UART (/dev/ttyACM0)
|
||||
upm::NLGPIO16* sensor = new upm::NLGPIO16();
|
||||
|
||||
// get the Version
|
||||
cout << "Device Version: " << sensor->getVersion() << endl;
|
||||
// read the gpio at pin 3
|
||||
cout << "GPIO 3 Value: " << sensor->gpioRead(3) << endl;
|
||||
// read the analog voltage at pin 5
|
||||
cout << "Analog 5 Voltage: " << sensor->analogReadVolts(5) << endl;
|
||||
// set the gpio at pin 14 to HIGH
|
||||
sensor->gpioSet(14);
|
||||
|
||||
delete sensor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|
@ -60,7 +60,7 @@ main(int argc, char **argv)
|
||||
comm->configure ();
|
||||
comm->setSpeedRate (upm::NRF_250KBPS);
|
||||
comm->setChannel (99);
|
||||
comm->dataRecievedHandler = nrf_handler;
|
||||
comm->setDataReceivedHandler (nrf_handler);
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
|
@ -58,7 +58,7 @@ main(int argc, char **argv)
|
||||
comm->setPayload (MAX_BUFFER);
|
||||
comm->setChannel (99);
|
||||
comm->configure ();
|
||||
comm->dataRecievedHandler = nrf_handler;
|
||||
comm->setDataReceivedHandler (nrf_handler);
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
|
@ -49,7 +49,7 @@ int main()
|
||||
|
||||
// Instantiate a OTP538U on analog pins A0 and A1
|
||||
// A0 is used for the Ambient Temperature and A1 is used for the
|
||||
// Object tempewrature.
|
||||
// Object temperature.
|
||||
upm::OTP538U *temps = new upm::OTP538U(0, 1, OTP538U_AREF);
|
||||
|
||||
// Output ambient and object temperatures
|
||||
|
141
examples/c++/ozw.cxx
Normal file
@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Author: Jon Trulson <jtrulson@ics.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
|
||||
#include "ozw.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//! [Interesting]
|
||||
|
||||
string defaultDev = "/dev/ttyACM0";
|
||||
|
||||
// if an argument was specified, use it as the device instead
|
||||
if (argc > 1)
|
||||
defaultDev = string(argv[1]);
|
||||
|
||||
// Instantiate an OZW instance
|
||||
upm::OZW *sensor = new upm::OZW();
|
||||
|
||||
// The first thing to do is create options, then lock them when done.
|
||||
sensor->optionsCreate();
|
||||
sensor->optionsLock();
|
||||
|
||||
// Next, initialize it.
|
||||
cout << "Initializing, this may take awhile depending on your ZWave network"
|
||||
<< endl;
|
||||
|
||||
if (!sensor->init(defaultDev))
|
||||
{
|
||||
cerr << "Init failed." << endl;
|
||||
return 0;
|
||||
}
|
||||
cout << "Initialization complete" << endl;
|
||||
|
||||
cout << "Dumping nodes..." << endl;
|
||||
|
||||
sensor->dumpNodes();
|
||||
|
||||
// The following is example output of dumpNodes:
|
||||
//
|
||||
// Dumping nodes...
|
||||
// Node 1: Z-Stick Gen5
|
||||
// Node 2: Smart Switch 6
|
||||
// Index: 0, Type: bool, Label: Switch, Value: False
|
||||
// Index: 2, Type: float, Label: Energy, Value: 1.190 kWh
|
||||
// Index: 3, Type: float, Label: Previous Reading, Value: 1.190 kWh
|
||||
// Index: 4, Type: int32, Label: Interval, Value: 1521 seconds
|
||||
// Index: 5, Type: float, Label: Power, Value: 0.000 W
|
||||
// Index: 6, Type: float, Label: Voltage, Value: 121.256 V
|
||||
// Index: 7, Type: float, Label: Current, Value: 0.000 A
|
||||
// Index: 8, Type: bool, Label: Exporting, Value: False
|
||||
// Index: 45, Type: list, Label: Day, Value: Friday
|
||||
// Index: 46, Type: byte, Label: Hour, Value: 5
|
||||
// Index: 47, Type: byte, Label: Minute, Value: 53
|
||||
// Node 3: Multi Sensor
|
||||
// Index: 0, Type: bool, Label: Sensor, Value: True
|
||||
// Index: 1, Type: float, Label: Temperature, Value: 72.8 F
|
||||
// Index: 2, Type: float, Label: Luminance, Value: 4 lux
|
||||
// Index: 3, Type: float, Label: Relative Humidity, Value: 22 %
|
||||
// Index: 17, Type: byte, Label: Battery Level, Value: 98 %
|
||||
// Node 5: Minimote
|
||||
// Node 6: Smart Energy Switch
|
||||
// Index: 0, Type: bool, Label: Switch, Value: False
|
||||
// Index: 2, Type: float, Label: Power, Value: 0.000 W
|
||||
// Index: 3, Type: float, Label: Energy, Value: 1.609 kWh
|
||||
// Index: 4, Type: float, Label: Previous Reading, Value: 1.609 kWh
|
||||
// Index: 5, Type: int32, Label: Interval, Value: 1521 seconds
|
||||
// Index: 6, Type: float, Label: Power, Value: 0.000 W
|
||||
// Index: 7, Type: float, Label: Previous Reading, Value: 1.609 W
|
||||
// Index: 8, Type: int32, Label: Interval, Value: 1521 seconds
|
||||
// Index: 9, Type: bool, Label: Exporting, Value: False
|
||||
// Node 7: Smart Energy Switch
|
||||
// Index: 0, Type: bool, Label: Switch, Value: False
|
||||
// Index: 2, Type: float, Label: Power, Value: 0.000 W
|
||||
// Index: 3, Type: float, Label: Energy, Value: 0.000 kWh
|
||||
// Index: 4, Type: float, Label: Previous Reading, Value: 0.000 kWh
|
||||
// Index: 5, Type: int32, Label: Interval, Value: 1521 seconds
|
||||
// Index: 6, Type: float, Label: Power, Value: 0.000 W
|
||||
// Index: 7, Type: float, Label: Previous Reading, Value: 0.000 W
|
||||
// Index: 8, Type: int32, Label: Interval, Value: 1521 seconds
|
||||
// Index: 9, Type: bool, Label: Exporting, Value: False
|
||||
//
|
||||
// So, with the above in mind:
|
||||
//
|
||||
// 1. Query the temperature on node 3 and print it out (as a
|
||||
// string), along with the units of measure:
|
||||
//
|
||||
// cout << "Temperature: " << sensor->getValueAsString(3, 1)
|
||||
// << " " << sensor->getValueUnits(3, 1) << endl;
|
||||
//
|
||||
// 2. query the same temperature as a float:
|
||||
//
|
||||
// float temperature = sensor->getValueAsFloat(3, 1);
|
||||
//
|
||||
// 3. Turn on the light plugged into the switch on Node 7, wait 5
|
||||
// seconds, then turn it back off again:
|
||||
//
|
||||
// cout << "Turning ON node 7" << endl;
|
||||
// sensor->setValueAsBool(7, 0, true);
|
||||
//
|
||||
// cout << "Sleeping for 5 seconds" << endl;
|
||||
// sleep(5);
|
||||
//
|
||||
// cout << "Turning OFF node 7" << endl;
|
||||
// sensor->setValueAsBool(7, 0, false);
|
||||
|
||||
|
||||
//! [Interesting]
|
||||
|
||||
|
||||
cout << "Exiting..." << endl;
|
||||
|
||||
delete sensor;
|
||||
|
||||
return 0;
|
||||
}
|
81
examples/c++/pressure-sensor.cxx
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Author: Henry Bruce <henry.bruce@intel.com>
|
||||
* Copyright (c) 2015 Intel Corporation.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <iostream>
|
||||
#include "bmp180.h"
|
||||
#include "bme280.h"
|
||||
|
||||
|
||||
#define EDISON_I2C_BUS 1
|
||||
#define FT4222_I2C_BUS 0
|
||||
|
||||
//! [Interesting]
|
||||
// Simple example of using ILightSensor to determine
|
||||
// which sensor is present and return its name.
|
||||
// ILightSensor is then used to get readings from sensor
|
||||
|
||||
|
||||
upm::IPressureSensor* getPressureSensor()
|
||||
{
|
||||
upm::IPressureSensor* pressureSensor = NULL;
|
||||
try {
|
||||
pressureSensor = new upm::BME280 (mraa_get_sub_platform_id(FT4222_I2C_BUS));
|
||||
return pressureSensor ;
|
||||
} catch (std::exception& e)
|
||||
{
|
||||
std::cerr <<"BME280: "<<e.what() << std::endl;
|
||||
}
|
||||
|
||||
try {
|
||||
pressureSensor = new upm::BMP180(EDISON_I2C_BUS);
|
||||
return pressureSensor;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << "BMP180: " << e.what() << std::endl;
|
||||
}
|
||||
return pressureSensor;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
upm::IPressureSensor* pressureSensor = getPressureSensor();
|
||||
if (pressureSensor == NULL) {
|
||||
std::cout << "Pressure sensor not detected" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Pressure sensor " << pressureSensor->getModuleName() << " detected" << std::endl;
|
||||
while (true) {
|
||||
try {
|
||||
int value = pressureSensor->getPressurePa();
|
||||
std::cout << "Pressure = " << value << " Pa" << std::endl;
|
||||
} catch (std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
delete pressureSensor;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//! [Interesting]
|