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..99e041b7 --- /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/busio.cpp b/SampleProjects/BusIO/test/busio.cpp new file mode 100644 index 00000000..f41793bc --- /dev/null +++ b/SampleProjects/BusIO/test/busio.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(busio_answer) { + // token test + BusIO busIO; + 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 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