Alex Mikhalev
5 years ago
9 changed files with 684 additions and 0 deletions
@ -0,0 +1,325 @@ |
|||||||
|
# This file is automatically @generated by Cargo. |
||||||
|
# It is not intended for manual editing. |
||||||
|
[[package]] |
||||||
|
name = "aho-corasick" |
||||||
|
version = "0.7.6" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "atty" |
||||||
|
version = "0.2.13" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "bindgen" |
||||||
|
version = "0.52.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "bitflags" |
||||||
|
version = "1.2.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "byteorder" |
||||||
|
version = "1.3.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "cc" |
||||||
|
version = "1.0.48" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "cexpr" |
||||||
|
version = "0.3.6" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "cfg-if" |
||||||
|
version = "0.1.10" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "clang-sys" |
||||||
|
version = "0.28.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "env_logger" |
||||||
|
version = "0.7.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "glob" |
||||||
|
version = "0.3.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "humantime" |
||||||
|
version = "1.3.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "lazy_static" |
||||||
|
version = "1.4.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "lazycell" |
||||||
|
version = "1.2.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "libc" |
||||||
|
version = "0.2.66" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "libloading" |
||||||
|
version = "0.5.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "log" |
||||||
|
version = "0.4.8" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "memchr" |
||||||
|
version = "2.2.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "mraa" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"mraa-sys 0.1.0", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "mraa-sys" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"bindgen 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "nom" |
||||||
|
version = "4.2.3" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "peeking_take_while" |
||||||
|
version = "0.1.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "pkg-config" |
||||||
|
version = "0.3.17" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "proc-macro2" |
||||||
|
version = "1.0.6" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "quick-error" |
||||||
|
version = "1.2.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "quote" |
||||||
|
version = "1.0.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "regex" |
||||||
|
version = "1.3.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "regex-syntax" |
||||||
|
version = "0.6.12" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "rustc-hash" |
||||||
|
version = "1.0.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "shlex" |
||||||
|
version = "0.1.1" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "termcolor" |
||||||
|
version = "1.0.5" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "thread_local" |
||||||
|
version = "0.3.6" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "unicode-xid" |
||||||
|
version = "0.2.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "version_check" |
||||||
|
version = "0.1.5" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "winapi" |
||||||
|
version = "0.3.8" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "winapi-i686-pc-windows-gnu" |
||||||
|
version = "0.4.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "winapi-util" |
||||||
|
version = "0.1.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "winapi-x86_64-pc-windows-gnu" |
||||||
|
version = "0.4.0" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "wincolor" |
||||||
|
version = "1.0.2" |
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||||
|
dependencies = [ |
||||||
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", |
||||||
|
] |
||||||
|
|
||||||
|
[metadata] |
||||||
|
"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" |
||||||
|
"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" |
||||||
|
"checksum bindgen 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c85344eb535a31b62f0af37be84441ba9e7f0f4111eb0530f43d15e513fe57" |
||||||
|
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" |
||||||
|
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" |
||||||
|
"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" |
||||||
|
"checksum cexpr 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" |
||||||
|
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" |
||||||
|
"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" |
||||||
|
"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" |
||||||
|
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" |
||||||
|
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" |
||||||
|
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" |
||||||
|
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" |
||||||
|
"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" |
||||||
|
"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" |
||||||
|
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" |
||||||
|
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" |
||||||
|
"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" |
||||||
|
"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" |
||||||
|
"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" |
||||||
|
"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" |
||||||
|
"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" |
||||||
|
"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" |
||||||
|
"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" |
||||||
|
"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" |
||||||
|
"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8" |
||||||
|
"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" |
||||||
|
"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e" |
||||||
|
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" |
||||||
|
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" |
||||||
|
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" |
||||||
|
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" |
||||||
|
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" |
||||||
|
"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" |
||||||
|
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" |
||||||
|
"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9" |
@ -0,0 +1,17 @@ |
|||||||
|
[package] |
||||||
|
name = "mraa-sys" |
||||||
|
description = "Generated bindings for Intel's mraa library for low speed device I/O" |
||||||
|
authors = ["Alex Mikhalev <alexmikhalevalex@gmail.com>"] |
||||||
|
license = "MIT" |
||||||
|
homepage = "" |
||||||
|
version = "0.1.0" |
||||||
|
|
||||||
|
edition = "2018" |
||||||
|
links = "mraa" |
||||||
|
build = "build.rs" |
||||||
|
|
||||||
|
[build-dependencies] |
||||||
|
bindgen = { version = "0.52", default-features = false, features = ["logging", "runtime"] } |
||||||
|
pkg-config = "0.3" |
||||||
|
|
||||||
|
[dependencies] |
@ -0,0 +1,50 @@ |
|||||||
|
extern crate bindgen; |
||||||
|
extern crate pkg_config; |
||||||
|
|
||||||
|
use std::env; |
||||||
|
use std::path::PathBuf; |
||||||
|
|
||||||
|
fn main() { |
||||||
|
let pkgconfig = pkg_config::Config::new(); |
||||||
|
let mraa_config = pkgconfig |
||||||
|
.probe("mraa") |
||||||
|
.expect("pkg_config probe failed for mraa"); |
||||||
|
|
||||||
|
let _ = pkgconfig |
||||||
|
.probe("json-c"); |
||||||
|
// .expect("pkg_config probe failed for json-c");
|
||||||
|
|
||||||
|
// Tell cargo to invalidate the built crate whenever the wrapper changes
|
||||||
|
println!("cargo:rerun-if-changed=src/wrapper.h"); |
||||||
|
|
||||||
|
let mut clang_args: Vec<String> = Vec::new(); |
||||||
|
for include_dir in &mraa_config.include_paths { |
||||||
|
clang_args.push("-I".to_owned()); |
||||||
|
clang_args.push(include_dir.to_str().unwrap().to_owned()); |
||||||
|
} |
||||||
|
|
||||||
|
// The bindgen::Builder is the main entry point
|
||||||
|
// to bindgen, and lets you build up options for
|
||||||
|
// the resulting bindings.
|
||||||
|
let mraa_bindings = bindgen::Builder::default() |
||||||
|
.clang_args(clang_args) |
||||||
|
// The input header we would like to generate
|
||||||
|
// bindings for.
|
||||||
|
.header("src/wrapper.h") |
||||||
|
.whitelist_type("mraa_.*") |
||||||
|
.whitelist_function("mraa_.*") |
||||||
|
.whitelist_var("mraa_.*") |
||||||
|
// Tell cargo to invalidate the built crate whenever any of the
|
||||||
|
// included header files changed.
|
||||||
|
.parse_callbacks(Box::new(bindgen::CargoCallbacks)) |
||||||
|
// Finish the builder and generate the bindings.
|
||||||
|
.generate() |
||||||
|
// Unwrap the Result and panic on failure.
|
||||||
|
.expect("Unable to generate bindings"); |
||||||
|
|
||||||
|
// Write the bindings to the $OUT_DIR/bindings.rs file.
|
||||||
|
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); |
||||||
|
mraa_bindings |
||||||
|
.write_to_file(out_path.join("mraa_bindings.rs")) |
||||||
|
.expect("Couldn't write bindings!"); |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
#![allow(non_upper_case_globals)] |
||||||
|
#![allow(non_camel_case_types)] |
||||||
|
#![allow(non_snake_case)] |
||||||
|
#![allow(dead_code)] |
||||||
|
|
||||||
|
//! A crate with bindings generated by
|
||||||
|
//! [`bindgen`](https://github.com/rust-lang/rust-bindgen) for the Intel `mraa`
|
||||||
|
//! library for low-speed IO communication.
|
||||||
|
//!
|
||||||
|
//! # Cross compilation
|
||||||
|
//! This package uses [pkg_config](https://docs.rs/pkg-config/0.3.17/pkg_config/)
|
||||||
|
//! to find the location of `mraa` headers and libraries, so by setting the
|
||||||
|
//! appropriate environment variables, it is possible to cross compile this
|
||||||
|
//! library for other systems.
|
||||||
|
//!
|
||||||
|
//! Example for cross compiling to BeagleBone:
|
||||||
|
//! ```bash
|
||||||
|
//! SYSROOT=/path/to/sysroot
|
||||||
|
//! export PKG_CONFIG_SYSROOT_DIR="$SYSROOT"
|
||||||
|
//! export PKG_CONFIG_LIBDIR="$SYSROOT/usr/lib/arm-linux-gnueabihf/pkgconfig"
|
||||||
|
//! export PKG_CONFIG_ALLOW_CROSS=1
|
||||||
|
//! export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
|
||||||
|
//! export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
|
||||||
|
//! cargo build --target=armv7-unknown-linux-gnueabihf
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/mraa_bindings.rs")); |
@ -0,0 +1,11 @@ |
|||||||
|
[package] |
||||||
|
name = "mraa" |
||||||
|
version = "0.1.0" |
||||||
|
authors = ["Alex Mikhalev <alexmikhalevalex@gmail.com>"] |
||||||
|
edition = "2018" |
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
mraa-sys = { path = "../mraa-sys" } |
||||||
|
libc = "0.2.66" |
@ -0,0 +1,249 @@ |
|||||||
|
extern crate libc; |
||||||
|
extern crate mraa_sys; |
||||||
|
|
||||||
|
use std::fmt; |
||||||
|
|
||||||
|
const MRAA_RESULT_CHECK_SYSLOG: mraa_sys::mraa_result_t = 10000; |
||||||
|
|
||||||
|
#[derive(Debug)] |
||||||
|
pub struct Error { |
||||||
|
inner: mraa_sys::mraa_result_t, |
||||||
|
operation: &'static str, |
||||||
|
} |
||||||
|
|
||||||
|
impl Error { |
||||||
|
fn new_check_syslog(operation: &'static str) -> Self { |
||||||
|
Self { |
||||||
|
inner: MRAA_RESULT_CHECK_SYSLOG, |
||||||
|
operation, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn raw_code(&self) -> mraa_sys::mraa_result_t { |
||||||
|
self.inner |
||||||
|
} |
||||||
|
|
||||||
|
pub fn operation(&self) -> &'static str { |
||||||
|
self.operation |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
impl fmt::Display for Error { |
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
||||||
|
write!(f, "MRAA error on {}: ", self.operation)?; |
||||||
|
match self.inner { |
||||||
|
mraa_sys::mraa_result_t_MRAA_SUCCESS => write!(f, "Success"), |
||||||
|
mraa_sys::mraa_result_t_MRAA_ERROR_FEATURE_NOT_IMPLEMENTED => { |
||||||
|
write!(f, "Feature not implemented") |
||||||
|
} |
||||||
|
mraa_sys::mraa_result_t_MRAA_ERROR_FEATURE_NOT_SUPPORTED => { |
||||||
|
write!(f, "Feature not supported by HW") |
||||||
|
} |
||||||
|
mraa_sys::mraa_result_t_MRAA_ERROR_INVALID_PARAMETER => write!(f, "Parameter invalid"), |
||||||
|
mraa_sys::mraa_result_t_MRAA_ERROR_INVALID_RESOURCE => write!(f, "Resource invalid"), |
||||||
|
MRAA_RESULT_CHECK_SYSLOG => write!(f, "Unknown error, check syslog for error message"), |
||||||
|
unk => write!(f, "Unknown MRAA error: {}", unk), |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
impl std::error::Error for Error {} |
||||||
|
|
||||||
|
pub type Result<T> = std::result::Result<T, self::Error>; |
||||||
|
|
||||||
|
fn handle_result(inner: mraa_sys::mraa_result_t, operation: &'static str) -> self::Result<()> { |
||||||
|
if inner == mraa_sys::mraa_result_t_MRAA_SUCCESS { |
||||||
|
Ok(()) |
||||||
|
} else { |
||||||
|
Err(Error { inner, operation }) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn init() -> self::Result<()> { |
||||||
|
handle_result(unsafe { mraa_sys::mraa_init() }, "init") |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: this crashes sometimes for some reason
|
||||||
|
pub unsafe fn deinit() { |
||||||
|
// unsafe { mraa_sys::mraa_deinit() };
|
||||||
|
mraa_sys::mraa_deinit(); |
||||||
|
} |
||||||
|
|
||||||
|
pub enum LogLevel { |
||||||
|
Emergency = 0, |
||||||
|
Alert = 1, |
||||||
|
Critical = 2, |
||||||
|
Error = 3, |
||||||
|
Warning = 4, |
||||||
|
Notice = 5, |
||||||
|
Info = 6, |
||||||
|
Debug = 7, |
||||||
|
} |
||||||
|
|
||||||
|
pub fn set_log_level(log_level: LogLevel) -> self::Result<()> { |
||||||
|
handle_result( |
||||||
|
unsafe { mraa_sys::mraa_set_log_level(log_level as i32) }, |
||||||
|
"set_log_level", |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)] |
||||||
|
pub enum GpioDirection { |
||||||
|
Out, |
||||||
|
In, |
||||||
|
OutHigh, |
||||||
|
OutLow, |
||||||
|
} |
||||||
|
|
||||||
|
impl GpioDirection { |
||||||
|
fn into_raw(self) -> mraa_sys::mraa_gpio_dir_t { |
||||||
|
use GpioDirection::*; |
||||||
|
match self { |
||||||
|
Out => mraa_sys::mraa_gpio_dir_t_MRAA_GPIO_OUT, |
||||||
|
In => mraa_sys::mraa_gpio_dir_t_MRAA_GPIO_IN, |
||||||
|
OutHigh => mraa_sys::mraa_gpio_dir_t_MRAA_GPIO_OUT_HIGH, |
||||||
|
OutLow => mraa_sys::mraa_gpio_dir_t_MRAA_GPIO_OUT_LOW, |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)] |
||||||
|
pub enum GpioEdge { |
||||||
|
NoEdge, |
||||||
|
Both, |
||||||
|
Rising, |
||||||
|
Falling, |
||||||
|
} |
||||||
|
|
||||||
|
impl GpioEdge { |
||||||
|
fn into_raw(self) -> mraa_sys::mraa_gpio_edge_t { |
||||||
|
use GpioEdge::*; |
||||||
|
match self { |
||||||
|
NoEdge => mraa_sys::mraa_gpio_edge_t_MRAA_GPIO_EDGE_NONE, |
||||||
|
Both => mraa_sys::mraa_gpio_edge_t_MRAA_GPIO_EDGE_BOTH, |
||||||
|
Rising => mraa_sys::mraa_gpio_edge_t_MRAA_GPIO_EDGE_RISING, |
||||||
|
Falling => mraa_sys::mraa_gpio_edge_t_MRAA_GPIO_EDGE_FALLING, |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub struct Gpio { |
||||||
|
inner: mraa_sys::mraa_gpio_context, |
||||||
|
isr_callback: Option<Box<dyn FnMut()>>, |
||||||
|
} |
||||||
|
|
||||||
|
impl Gpio { |
||||||
|
pub fn new(pin: i32) -> Result<Self> { |
||||||
|
let inner = unsafe { mraa_sys::mraa_gpio_init(pin) }; |
||||||
|
if inner.is_null() { |
||||||
|
Err(Error::new_check_syslog("Gpio::new")) |
||||||
|
} else { |
||||||
|
Ok(Self { |
||||||
|
inner, |
||||||
|
isr_callback: None, |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn set_dir(&mut self, dir: GpioDirection) -> Result<()> { |
||||||
|
handle_result( |
||||||
|
unsafe { mraa_sys::mraa_gpio_dir(self.inner, dir.into_raw()) }, |
||||||
|
"Gpio::set_dir", |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
pub fn read(&mut self) -> Result<bool> { |
||||||
|
match unsafe { mraa_sys::mraa_gpio_read(self.inner) } { |
||||||
|
0 => Ok(false), |
||||||
|
1 => Ok(true), |
||||||
|
_ => Err(Error::new_check_syslog("Gpio::read")), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn set_isr<F>(&mut self, edge: GpioEdge, callback: F) -> Result<()> |
||||||
|
where |
||||||
|
F: FnMut() + 'static + Send + Sync, |
||||||
|
{ |
||||||
|
if self.isr_callback.is_some() { |
||||||
|
let _ = self.remove_isr(); |
||||||
|
} |
||||||
|
self.isr_callback = Some(Box::new(callback)); |
||||||
|
|
||||||
|
let data = self.isr_callback.as_mut().unwrap().as_mut() as *mut _; |
||||||
|
let result = unsafe { |
||||||
|
mraa_sys::mraa_gpio_isr( |
||||||
|
self.inner, |
||||||
|
edge.into_raw(), |
||||||
|
Some(call_closure::<F>), |
||||||
|
data as *mut _, |
||||||
|
) |
||||||
|
}; |
||||||
|
handle_result(result, "Gpio::set_isr") |
||||||
|
} |
||||||
|
|
||||||
|
pub fn remove_isr(&mut self) -> Result<()> { |
||||||
|
let result = unsafe { mraa_sys::mraa_gpio_isr_exit(self.inner) }; |
||||||
|
self.isr_callback = None; |
||||||
|
handle_result(result, "Gpio::remove_isr") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
unsafe extern "C" fn call_closure<F>(data: *mut libc::c_void) |
||||||
|
where |
||||||
|
F: FnMut(), |
||||||
|
{ |
||||||
|
let callback_ptr = data as *mut F; |
||||||
|
let callback = &mut *callback_ptr; |
||||||
|
callback(); |
||||||
|
} |
||||||
|
|
||||||
|
impl Drop for Gpio { |
||||||
|
fn drop(&mut self) { |
||||||
|
unsafe { mraa_sys::mraa_gpio_close(self.inner) }; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub struct Aio { |
||||||
|
inner: mraa_sys::mraa_aio_context, |
||||||
|
} |
||||||
|
|
||||||
|
impl Aio { |
||||||
|
pub fn new(pin: u32) -> Result<Self> { |
||||||
|
let inner = unsafe { mraa_sys::mraa_aio_init(pin) }; |
||||||
|
if inner.is_null() { |
||||||
|
Err(Error::new_check_syslog("Aio::new")) |
||||||
|
} else { |
||||||
|
Ok(Self { inner }) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn read(&mut self) -> Result<i32> { |
||||||
|
match unsafe { mraa_sys::mraa_aio_read(self.inner) } { |
||||||
|
-1 => Err(Error::new_check_syslog("Aio::read")), |
||||||
|
value => Ok(value), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn read_float(&mut self) -> Result<f32> { |
||||||
|
let value = unsafe { mraa_sys::mraa_aio_read_float(self.inner) }; |
||||||
|
if value < 0.0 { |
||||||
|
Err(Error::new_check_syslog("Aio::read_float")) |
||||||
|
} else { |
||||||
|
Ok(value) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
impl Drop for Aio { |
||||||
|
fn drop(&mut self) { |
||||||
|
unsafe { mraa_sys::mraa_aio_close(self.inner) }; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[cfg(test)] |
||||||
|
mod tests { |
||||||
|
#[test] |
||||||
|
fn it_works() { |
||||||
|
assert_eq!(2 + 2, 4); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue