From d1cab70dd8611b9ec5736d3d09514f84b2b5f78f Mon Sep 17 00:00:00 2001 From: James Foster Date: Thu, 19 Nov 2020 23:49:26 -0500 Subject: [PATCH 1/3] Add test for external library installation and reference (squashed) --- CHANGELOG.md | 1 + SampleProjects/BusIO/.arduino-ci.yml | 12 ++++++ SampleProjects/BusIO/.gitignore | 1 + SampleProjects/BusIO/Gemfile | 2 + SampleProjects/BusIO/README.md | 4 ++ .../examples/spi_readwrite/spi_readwrite.ino | 39 +++++++++++++++++++ SampleProjects/BusIO/library.properties | 10 +++++ SampleProjects/BusIO/src/BusIO.h | 9 +++++ SampleProjects/BusIO/test/test.cpp | 17 ++++++++ 9 files changed, 95 insertions(+) create mode 100644 SampleProjects/BusIO/.arduino-ci.yml create mode 100644 SampleProjects/BusIO/.gitignore create mode 100644 SampleProjects/BusIO/Gemfile create mode 100644 SampleProjects/BusIO/README.md create mode 100644 SampleProjects/BusIO/examples/spi_readwrite/spi_readwrite.ino create mode 100644 SampleProjects/BusIO/library.properties create mode 100644 SampleProjects/BusIO/src/BusIO.h create mode 100644 SampleProjects/BusIO/test/test.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index cd610c86..1a8c347f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Support for mock EEPROM (but only if board supports it) - Add stubs for `Client.h`, `IPAddress.h`, `Printable.h`, `Server.h`, and `Udp.h` - `Wire` now has a mock support for the master role +- Sample project for `BusIO` to show problem finding header file ### Changed - Move repository from https://github.com/ianfixes/arduino_ci to https://github.com/Arduino-CI/arduino_ci diff --git a/SampleProjects/BusIO/.arduino-ci.yml b/SampleProjects/BusIO/.arduino-ci.yml new file mode 100644 index 00000000..2237cd47 --- /dev/null +++ b/SampleProjects/BusIO/.arduino-ci.yml @@ -0,0 +1,12 @@ +unittest: + platforms: + - mega2560 + libraries: + - "Adafruit BusIO" + # - "Adafruit_BusIO" <= This works if you have the library pre-installed + +compile: + platforms: + - mega2560 + libraries: + - "Adafruit BusIO" diff --git a/SampleProjects/BusIO/.gitignore b/SampleProjects/BusIO/.gitignore new file mode 100644 index 00000000..06de90aa --- /dev/null +++ b/SampleProjects/BusIO/.gitignore @@ -0,0 +1 @@ +.bundle \ No newline at end of file diff --git a/SampleProjects/BusIO/Gemfile b/SampleProjects/BusIO/Gemfile new file mode 100644 index 00000000..b2b3b1fd --- /dev/null +++ b/SampleProjects/BusIO/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'arduino_ci', path: '../../' diff --git a/SampleProjects/BusIO/README.md b/SampleProjects/BusIO/README.md new file mode 100644 index 00000000..86e2e642 --- /dev/null +++ b/SampleProjects/BusIO/README.md @@ -0,0 +1,4 @@ +# BusIO + +This is an example of a library that depends on Adafruit BusIO. +It is provided to help reproduce #192. diff --git a/SampleProjects/BusIO/examples/spi_readwrite/spi_readwrite.ino b/SampleProjects/BusIO/examples/spi_readwrite/spi_readwrite.ino new file mode 100644 index 00000000..6f2c063f --- /dev/null +++ b/SampleProjects/BusIO/examples/spi_readwrite/spi_readwrite.ino @@ -0,0 +1,39 @@ +#include + +#define SPIDEVICE_CS 10 +Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS); + + +void setup() { + while (!Serial) { delay(10); } + Serial.begin(115200); + Serial.println("SPI device read and write test"); + + if (!spi_dev.begin()) { + Serial.println("Could not initialize SPI device"); + while (1); + } + + uint8_t buffer[32]; + + // Try to read 32 bytes + spi_dev.read(buffer, 32); + Serial.print("Read: "); + for (uint8_t i=0; i<32; i++) { + Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); + } + Serial.println(); + + // read a register by writing first, then reading + buffer[0] = 0x8F; // we'll reuse the same buffer + spi_dev.write_then_read(buffer, 1, buffer, 2, false); + Serial.print("Write then Read: "); + for (uint8_t i=0; i<2; i++) { + Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", "); + } + Serial.println(); +} + +void loop() { + +} diff --git a/SampleProjects/BusIO/library.properties b/SampleProjects/BusIO/library.properties new file mode 100644 index 00000000..964dc329 --- /dev/null +++ b/SampleProjects/BusIO/library.properties @@ -0,0 +1,10 @@ +name=BusIO +version=0.1.0 +author=James Foster +maintainer=James Foster +sentence=Sample BusIO library to validate import of Adafruit BusIO +paragraph=Sample BusIO library to validate import of Adafruit BusIO +category=Other +url=https://github.com/Arduino-CI/arduino_ci/SampleProjects/BusIO +architectures=avr,esp8266 +includes=BusIO.h diff --git a/SampleProjects/BusIO/src/BusIO.h b/SampleProjects/BusIO/src/BusIO.h new file mode 100644 index 00000000..2ec22de0 --- /dev/null +++ b/SampleProjects/BusIO/src/BusIO.h @@ -0,0 +1,9 @@ +#include +#include + +class BusIO { +public: + BusIO() {} + ~BusIO() {} + int answer() { return 42; } +} diff --git a/SampleProjects/BusIO/test/test.cpp b/SampleProjects/BusIO/test/test.cpp new file mode 100644 index 00000000..7acb96a8 --- /dev/null +++ b/SampleProjects/BusIO/test/test.cpp @@ -0,0 +1,17 @@ +/* +bundle config --local path vendor/bundle +bundle install +bundle exec arduino_ci.rb --skip-examples-compilation +*/ + +#include +#include +#include + +unittest(loop) { + // token test + BusIO busIO; + assertEqual(42, busIO.answer())); +} + +unittest_main() From fe4c689e534d261b01a71c75b8243498895b6315 Mon Sep 17 00:00:00 2001 From: Ian Katz Date: Thu, 19 Nov 2020 23:52:36 -0500 Subject: [PATCH 2/3] Fix regression in library name space coercion --- lib/arduino_ci/cpp_library.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb index d5634ca3..810d32be 100644 --- a/lib/arduino_ci/cpp_library.rb +++ b/lib/arduino_ci/cpp_library.rb @@ -317,7 +317,12 @@ def arduino_library_src_dirs(aux_libraries) # Pull in all possible places that headers could live, according to the spec: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification - aux_libraries.map { |d| self.class.new(@arduino_lib_dir + d, @arduino_lib_dir, @exclude_dirs).header_dirs }.flatten.uniq + aux_libraries.map do |d| + # library manager coerces spaces in package names to underscores + # see https://github.com/ianfixes/arduino_ci/issues/132#issuecomment-518857059 + legal_dir = d.tr(" ", "_") + self.class.new(@arduino_lib_dir + legal_dir, @arduino_lib_dir, @exclude_dirs).header_dirs + end.flatten.uniq end # GCC command line arguments for including aux libraries From 94a2df005de91f0ec6e44592796699e8f4739013 Mon Sep 17 00:00:00 2001 From: Ian Katz Date: Fri, 20 Nov 2020 00:14:01 -0500 Subject: [PATCH 3/3] Fix compilation errors in busIO code --- SampleProjects/BusIO/src/BusIO.h | 2 +- SampleProjects/BusIO/test/{test.cpp => busio.cpp} | 4 ++-- cpp/arduino/Wire.h | 15 ++++++++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) rename SampleProjects/BusIO/test/{test.cpp => busio.cpp} (79%) diff --git a/SampleProjects/BusIO/src/BusIO.h b/SampleProjects/BusIO/src/BusIO.h index 2ec22de0..99e041b7 100644 --- a/SampleProjects/BusIO/src/BusIO.h +++ b/SampleProjects/BusIO/src/BusIO.h @@ -6,4 +6,4 @@ class BusIO { BusIO() {} ~BusIO() {} int answer() { return 42; } -} +}; diff --git a/SampleProjects/BusIO/test/test.cpp b/SampleProjects/BusIO/test/busio.cpp similarity index 79% rename from SampleProjects/BusIO/test/test.cpp rename to SampleProjects/BusIO/test/busio.cpp index 7acb96a8..f41793bc 100644 --- a/SampleProjects/BusIO/test/test.cpp +++ b/SampleProjects/BusIO/test/busio.cpp @@ -8,10 +8,10 @@ bundle exec arduino_ci.rb --skip-examples-compilation #include #include -unittest(loop) { +unittest(busio_answer) { // token test BusIO busIO; - assertEqual(42, busIO.answer())); + assertEqual(42, busIO.answer()); } unittest_main() diff --git a/cpp/arduino/Wire.h b/cpp/arduino/Wire.h index bedf9d58..c77667a8 100644 --- a/cpp/arduino/Wire.h +++ b/cpp/arduino/Wire.h @@ -116,7 +116,7 @@ class TwoWire : public ObservableDataStream { // https://www.arduino.cc/en/Reference/WireRequestFrom // Used by the master to request bytes from a slave device. The bytes may then // be retrieved with the available() and read() functions. - uint8_t requestFrom(uint8_t address, size_t quantity, bool stop) { + uint8_t requestFrom(uint8_t address, uint8_t quantity, uint32_t _iaddress, uint8_t _isize, uint8_t stop) { assert(_didBegin); assert(address > 0 && address < SLAVE_COUNT); assert(quantity <= BUFFER_LENGTH); @@ -131,11 +131,20 @@ class TwoWire : public ObservableDataStream { return 0; } } + + uint8_t requestFrom(uint8_t address, uint8_t quantity, uint8_t stop) { + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint32_t)0, (uint8_t)0, (uint8_t)stop); + } + + uint8_t requestFrom(uint8_t address, uint8_t quantity) { + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true); + } + uint8_t requestFrom(int address, int quantity) { - return requestFrom((uint8_t)address, (size_t)quantity, true); + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)true); } uint8_t requestFrom(int address, int quantity, int stop) { - return requestFrom((uint8_t)address, (size_t)quantity, (bool)stop); + return requestFrom((uint8_t)address, (uint8_t)quantity, (uint8_t)stop); } // https://www.arduino.cc/en/Reference/WireWrite