Seeed-Studio / stm32f4ArduinoCore

This is an Arduino porting for STM32F405/407
13 stars 11 forks source link

Match Arduino Standard #8

Open trawinlegacy opened 4 years ago

trawinlegacy commented 4 years ago

Can the board library be made to match the Arduino Standard? I am trying to use a WIO LTE Cat. 1 to communicate with a Adafruit MPL3115A2 breakout board via I2C but I get the following errors:

C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'float Adafruit_MPL3115A2::getPressure()': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:95:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); // end transmission ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:95:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'float Adafruit_MPL3115A2::getAltitude()': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:134:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); // end transmission ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:134:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'void Adafruit_MPL3115A2::setSeaPressure(float)': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:157:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:157:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'float Adafruit_MPL3115A2::getTemperature()': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:177:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); // end transmission ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:177:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'uint8_t Adafruit_MPL3115A2::read8(uint8_t)': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:204:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); // end transmission ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:204:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp: In member function 'void Adafruit_MPL3115A2::write8(uint8_t, uint8_t)': C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:222:30: error: no matching function for call to 'TwoWire::endTransmission(int)' _i2c->endTransmission(false); // end transmission ^ C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:222:30: note: candidate is: In file included from C:\Users\liamt\Documents\Arduino\libraries\Adafruit_MPL3115A2_Library-master\Adafruit_MPL3115A2.cpp:33:0: C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: uint8 TwoWire::endTransmission() uint8 endTransmission(void); ^ C:\Users\liamt\AppData\Local\Arduino15\packages\Seeeduino\hardware\Seeed_STM32F4\1.2.5\libraries\Wire/Wire.h:85:11: note: candidate expects 0 arguments, 1 provided exit status 1 Error compiling for board Wio Tracker LTE.

According to Adafruit the board library needs to be made to meet Arduino Standard.

Board Details: https://wiki.seeedstudio.com/Wio_LTE_Cat.1/

Board Library: https://github.com/Seeed-Studio/stm32f4ArduinoCore

Code Libraries: https://github.com/SeeedJP/WioLTEforArduino https://github.com/adafruit/Adafruit_MPL3115A2_Library

trawinlegacy commented 3 years ago

Can the Wire library function please match the following:

// // Originally, 'endTransmission' was an f(void) function. // It has been modified to take one parameter indicating // whether or not a STOP should be performed on the bus. // Calling endTransmission(false) allows a sketch to // perform a repeated start. // // WARNING: Nothing in the library keeps track of whether // the bus tenure has been properly ended with a STOP. It // is very possible to leave the bus in a hung state if // no call to endTransmission(true) is made. Some I2C // devices will behave oddly if they do not see a STOP. //

uint8_t TwoWire::endTransmission(uint8_t sendStop)
{
#if !defined(I2C_OTHER_FRAME)
  UNUSED(sendStop);
#endif
  int8_t ret = 4;
  // check transfer options and store it in the I2C handle
#if defined(I2C_OTHER_FRAME)
  if (sendStop == 0) {
    _i2c.handle.XferOptions = I2C_OTHER_FRAME ;
  } else {
    _i2c.handle.XferOptions = I2C_OTHER_AND_LAST_FRAME;
  }
#endif

  if (_i2c.isMaster == 1) {
    // transmit buffer (blocking)
    switch (i2c_master_write(&_i2c, txAddress, txBuffer, txBufferLength)) {
      case I2C_OK :
        ret = 0; // Success
        break;
      case I2C_DATA_TOO_LONG :
        ret = 1;
        break;
      case I2C_NACK_ADDR:
        ret = 2;
        break;
      case I2C_NACK_DATA:
        ret = 3;
        break;
      case I2C_TIMEOUT:
      case I2C_BUSY:
      case I2C_ERROR:
      default:
        ret = 4;
        break;
    }

    // reset Tx buffer
    resetTxBuffer();

    // reset tx buffer iterator vars
    txBufferIndex = 0;
    txBufferLength = 0;

    // indicate that we are done transmitting
    transmitting = 0;
  }
  return ret;
}

// This provides backwards compatibility with the original // definition, and expected behaviour, of endTransmission //

uint8_t TwoWire::endTransmission(void)
{
  return endTransmission((uint8_t)true);
}

As seen from the stm32duino/Arduino_Core_STM32 wire library.