option to pass I2C object

pull/10711/head
Pavel Slama 2018-06-18 20:35:54 +02:00
parent 286a260c04
commit 87056697f4
2 changed files with 36 additions and 3 deletions

View File

@ -21,11 +21,26 @@
I2CEEBlockDevice::I2CEEBlockDevice( I2CEEBlockDevice::I2CEEBlockDevice(
PinName sda, PinName scl, uint8_t addr, PinName sda, PinName scl, uint8_t addr,
bd_size_t size, bd_size_t block, int freq) bd_size_t size, bd_size_t block, int freq)
: _i2c(sda, scl), _i2c_addr(addr), _size(size), _block(block) : _i2c_p(new I2C(sda, scl)), _i2c(*_i2c_p), _i2c_addr(addr),
_size(size), _block(block)
{ {
_i2c.frequency(freq); _i2c.frequency(freq);
} }
I2CEEBlockDevice::I2CEEBlockDevice(
I2C &i2c_obj, uint8_t addr,
bd_size_t size, bd_size_t block)
: _i2c_p(NULL), _i2c(i2c_obj), _i2c_addr(addr),
_size(size), _block(block)
{
}
I2CEEBlockDevice::~I2CEEBlockDevice()
{
if (_i2c_p != NULL){
delete _i2c_p;
}
}
int I2CEEBlockDevice::init() int I2CEEBlockDevice::init()
{ {
return _sync(); return _sync();

View File

@ -70,7 +70,24 @@ public:
I2CEEBlockDevice( I2CEEBlockDevice(
PinName sda, PinName scl, uint8_t address, PinName sda, PinName scl, uint8_t address,
bd_size_t size, bd_size_t block=32, bd_size_t size, bd_size_t block=32,
int bus_speed=400000); int bus_speed=400000);
/** Constructor to create an I2CEEBlockDevice on I2C pins
*
* @param i2c The I2C instance
* @param addr The 8bit I2C address of the chip, common range 0xa0 - 0xae.
* @param size The size of the device in bytes
* @param block The page size of the device in bytes, defaults to 32bytes
* @param freq The frequency of the I2C bus, defaults to 400K.
*/
I2CEEBlockDevice(
I2C &i2c_obj, uint8_t address,
bd_size_t size, bd_size_t block=32);
/** Destructor of I2CEEBlockDevice
*/
virtual ~I2CEEBlockDevice();
/** Initialize a block device /** Initialize a block device
* *
@ -141,7 +158,8 @@ public:
virtual bd_size_t size() const; virtual bd_size_t size() const;
private: private:
I2C _i2c; I2C *_i2c_p;
I2C &_i2c;
uint8_t _i2c_addr; uint8_t _i2c_addr;
uint32_t _size; uint32_t _size;
uint32_t _block; uint32_t _block;