Updated to match API changes in mbed OS

pull/10711/head
Christopher Haster 2017-03-07 17:34:30 -06:00
parent ec88f7822f
commit f3272ad5ba
3 changed files with 28 additions and 37 deletions

View File

@ -26,22 +26,20 @@ I2CEEBlockDevice::I2CEEBlockDevice(
_i2c.frequency(freq); _i2c.frequency(freq);
} }
bd_error_t I2CEEBlockDevice::init() int I2CEEBlockDevice::init()
{ {
return _sync(); return _sync();
} }
bd_error_t I2CEEBlockDevice::deinit() int I2CEEBlockDevice::deinit()
{ {
return 0; return 0;
} }
bd_error_t I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size) int I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
{ {
// Check the address and size fit onto the chip. // Check the address and size fit onto the chip.
if (!is_valid_read(addr, size)) { MBED_ASSERT(is_valid_read(addr, size));
return BD_ERROR_PARAMETER;
}
_i2c.start(); _i2c.start();
if (!_i2c.write(_i2c_addr | 0) || if (!_i2c.write(_i2c_addr | 0) ||
@ -58,12 +56,10 @@ bd_error_t I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
return 0; return 0;
} }
bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size) int I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size)
{ {
// Check the addr and size fit onto the chip. // Check the addr and size fit onto the chip.
if (!is_valid_program(addr, size)) { MBED_ASSERT(is_valid_program(addr, size));
return BD_ERROR_PARAMETER;
}
// While we have some more data to write. // While we have some more data to write.
while (size > 0) { while (size > 0) {
@ -82,7 +78,7 @@ bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size
} }
_i2c.stop(); _i2c.stop();
bd_error_t err = _sync(); int err = _sync();
if (err) { if (err) {
return err; return err;
} }
@ -95,13 +91,13 @@ bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size
return 0; return 0;
} }
bd_error_t I2CEEBlockDevice::erase(bd_addr_t addr, bd_size_t size) int I2CEEBlockDevice::erase(bd_addr_t addr, bd_size_t size)
{ {
// No erase needed // No erase needed
return 0; return 0;
} }
bd_error_t I2CEEBlockDevice::_sync() int I2CEEBlockDevice::_sync()
{ {
// The chip doesn't ACK while writing to the actual EEPROM // The chip doesn't ACK while writing to the actual EEPROM
// so loop trying to do a zero byte write until it is ACKed // so loop trying to do a zero byte write until it is ACKed
@ -117,22 +113,22 @@ bd_error_t I2CEEBlockDevice::_sync()
return BD_ERROR_DEVICE_ERROR; return BD_ERROR_DEVICE_ERROR;
} }
bd_size_t I2CEEBlockDevice::get_read_size() bd_size_t I2CEEBlockDevice::get_read_size() const
{ {
return 1; return 1;
} }
bd_size_t I2CEEBlockDevice::get_program_size() bd_size_t I2CEEBlockDevice::get_program_size() const
{ {
return 1; return 1;
} }
bd_size_t I2CEEBlockDevice::get_erase_size() bd_size_t I2CEEBlockDevice::get_erase_size() const
{ {
return 1; return 1;
} }
bd_size_t I2CEEBlockDevice::size() bd_size_t I2CEEBlockDevice::size() const
{ {
return _size; return _size;
} }

View File

@ -15,9 +15,6 @@
*/ */
#ifndef MBED_I2CEEPROM_BLOCK_DEVICE_H #ifndef MBED_I2CEEPROM_BLOCK_DEVICE_H
#define MBED_I2CEEPROM_BLOCK_DEVICE_H #define MBED_I2CEEPROM_BLOCK_DEVICE_H
/* If the target has no I2C support then I2CEEPROM is not supported */
#ifdef DEVICE_I2C
#include <mbed.h> #include <mbed.h>
#include "BlockDevice.h" #include "BlockDevice.h"
@ -71,13 +68,13 @@ public:
* *
* @return 0 on success or a negative error code on failure * @return 0 on success or a negative error code on failure
*/ */
virtual bd_error_t init(); virtual int init();
/** Deinitialize a block device /** Deinitialize a block device
* *
* @return 0 on success or a negative error code on failure * @return 0 on success or a negative error code on failure
*/ */
virtual bd_error_t deinit(); virtual int deinit();
/** Read blocks from a block device /** Read blocks from a block device
* *
@ -86,7 +83,7 @@ public:
* @param size Size to read in bytes, must be a multiple of read block size * @param size Size to read in bytes, must be a multiple of read block size
* @return 0 on success, negative error code on failure * @return 0 on success, negative error code on failure
*/ */
virtual bd_error_t read(void *buffer, bd_addr_t addr, bd_size_t size); virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
/** Program blocks to a block device /** Program blocks to a block device
* *
@ -97,7 +94,7 @@ public:
* @param size Size to write in bytes, must be a multiple of program block size * @param size Size to write in bytes, must be a multiple of program block size
* @return 0 on success, negative error code on failure * @return 0 on success, negative error code on failure
*/ */
virtual bd_error_t program(const void *buffer, bd_addr_t addr, bd_size_t size); virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
/** Erase blocks on a block device /** Erase blocks on a block device
* *
@ -107,33 +104,33 @@ public:
* @param size Size to erase in bytes, must be a multiple of erase block size * @param size Size to erase in bytes, must be a multiple of erase block size
* @return 0 on success, negative error code on failure * @return 0 on success, negative error code on failure
*/ */
virtual bd_error_t erase(bd_addr_t addr, bd_size_t size); virtual int erase(bd_addr_t addr, bd_size_t size);
/** Get the size of a readable block /** Get the size of a readable block
* *
* @return Size of a readable block in bytes * @return Size of a readable block in bytes
*/ */
virtual bd_size_t get_read_size(); virtual bd_size_t get_read_size() const;
/** Get the size of a programable block /** Get the size of a programable block
* *
* @return Size of a programable block in bytes * @return Size of a programable block in bytes
* @note Must be a multiple of the read size * @note Must be a multiple of the read size
*/ */
virtual bd_size_t get_program_size(); virtual bd_size_t get_program_size() const;
/** Get the size of a eraseable block /** Get the size of a eraseable block
* *
* @return Size of a eraseable block in bytes * @return Size of a eraseable block in bytes
* @note Must be a multiple of the program size * @note Must be a multiple of the program size
*/ */
virtual bd_size_t get_erase_size(); virtual bd_size_t get_erase_size() const;
/** Get the total size of the underlying device /** Get the total size of the underlying device
* *
* @return Size of the underlying device in bytes * @return Size of the underlying device in bytes
*/ */
virtual bd_size_t size(); virtual bd_size_t size() const;
private: private:
I2C _i2c; I2C _i2c;
@ -141,9 +138,8 @@ private:
uint32_t _size; uint32_t _size;
uint32_t _block; uint32_t _block;
bd_error_t _sync(); int _sync();
}; };
#endif /* DEVICE_SPI */
#endif /* MBED_SD_BLOCK_DEVICE_H */ #endif /* MBED_SD_BLOCK_DEVICE_H */

View File

@ -8,10 +8,6 @@
using namespace utest::v1; using namespace utest::v1;
//#if !I2CEE_INSTALLED
//#error [NOT_SUPPORTED] I2CEE Required
//#endif
#define TEST_PINS D14, D15 #define TEST_PINS D14, D15
#define TEST_ADDR 0xa0 #define TEST_ADDR 0xa0
#define TEST_SIZE 32*1024 #define TEST_SIZE 32*1024
@ -22,7 +18,7 @@ using namespace utest::v1;
const struct { const struct {
const char *name; const char *name;
bd_size_t (BlockDevice::*method)(); bd_size_t (BlockDevice::*method)() const;
} ATTRS[] = { } ATTRS[] = {
{"read size", &BlockDevice::get_read_size}, {"read size", &BlockDevice::get_read_size},
{"program size", &BlockDevice::get_program_size}, {"program size", &BlockDevice::get_program_size},
@ -73,7 +69,10 @@ void test_read_write() {
// Write, sync, and read the block // Write, sync, and read the block
printf("test %0*llx:%llu...\n", addrwidth, block, block_size); printf("test %0*llx:%llu...\n", addrwidth, block, block_size);
err = bd.write(write_block, block, block_size); err = bd.erase(block, block_size);
TEST_ASSERT_EQUAL(0, err);
err = bd.program(write_block, block, block_size);
TEST_ASSERT_EQUAL(0, err); TEST_ASSERT_EQUAL(0, err);
printf("write %0*llx:%llu ", addrwidth, block, block_size); printf("write %0*llx:%llu ", addrwidth, block, block_size);