21
21
I2CEEBlockDevice::I2CEEBlockDevice (
22
22
PinName sda, PinName scl, uint8_t addr,
23
23
bd_size_t size, bd_size_t block, int freq)
24
- : _i2c_p(new I2C(sda, scl)), _i2c(*_i2c_p), _i2c_addr(addr),
25
- _size(size), _block(block)
24
+ : _i2c_addr(addr), _size(size), _block(block)
26
25
{
27
- _i2c.frequency (freq);
26
+ _i2c = new I2C (sda, scl);
27
+ _i2c->frequency (freq);
28
28
}
29
29
30
30
I2CEEBlockDevice::I2CEEBlockDevice (
31
- I2C & i2c_obj, uint8_t addr,
31
+ I2C * i2c_obj, uint8_t addr,
32
32
bd_size_t size, bd_size_t block)
33
- : _i2c_p(NULL ), _i2c(i2c_obj), _i2c_addr(addr),
34
- _size(size), _block(block)
33
+ : _i2c_addr(addr), _size(size), _block(block)
35
34
{
35
+ _i2c = i2c_obj;
36
36
}
37
37
I2CEEBlockDevice::~I2CEEBlockDevice ()
38
38
{
39
- if (_i2c_p != NULL ){
40
- delete _i2c_p;
41
- }
39
+ _i2c->~I2C ();
42
40
}
43
41
44
42
int I2CEEBlockDevice::init ()
@@ -56,15 +54,15 @@ int I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
56
54
// Check the address and size fit onto the chip.
57
55
MBED_ASSERT (is_valid_read (addr, size));
58
56
59
- _i2c. start ();
60
- if (!_i2c. write (_i2c_addr | 0 ) ||
61
- !_i2c. write ((char )(addr >> 8 )) ||
62
- !_i2c. write ((char )(addr & 0xff ))) {
57
+ _i2c-> start ();
58
+ if (!_i2c-> write (_i2c_addr | 0 ) ||
59
+ !_i2c-> write ((char )(addr >> 8 )) ||
60
+ !_i2c-> write ((char )(addr & 0xff ))) {
63
61
return BD_ERROR_DEVICE_ERROR;
64
62
}
65
- _i2c. stop ();
63
+ _i2c-> stop ();
66
64
67
- if (_i2c. read (_i2c_addr, static_cast <char *>(buffer), size) < 0 ) {
65
+ if (_i2c-> read (_i2c_addr, static_cast <char *>(buffer), size) < 0 ) {
68
66
return BD_ERROR_DEVICE_ERROR;
69
67
}
70
68
@@ -81,17 +79,17 @@ int I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size
81
79
uint32_t off = addr % _block;
82
80
uint32_t chunk = (off + size < _block) ? size : (_block - off);
83
81
84
- _i2c. start ();
85
- if (!_i2c. write (_i2c_addr | 0 ) ||
86
- !_i2c. write ((char )(addr >> 8 )) ||
87
- !_i2c. write ((char )(addr & 0xff ))) {
82
+ _i2c-> start ();
83
+ if (!_i2c-> write (_i2c_addr | 0 ) ||
84
+ !_i2c-> write ((char )(addr >> 8 )) ||
85
+ !_i2c-> write ((char )(addr & 0xff ))) {
88
86
return BD_ERROR_DEVICE_ERROR;
89
87
}
90
88
91
89
for (unsigned i = 0 ; i < chunk; i++) {
92
- _i2c. write (static_cast <const char *>(buffer)[i]);
90
+ _i2c-> write (static_cast <const char *>(buffer)[i]);
93
91
}
94
- _i2c. stop ();
92
+ _i2c-> stop ();
95
93
96
94
int err = _sync ();
97
95
if (err) {
@@ -118,7 +116,7 @@ int I2CEEBlockDevice::_sync()
118
116
// so loop trying to do a zero byte write until it is ACKed
119
117
// by the chip.
120
118
for (int i = 0 ; i < I2CEE_TIMEOUT; i++) {
121
- if (_i2c. write (_i2c_addr | 0 , 0 , 0 ) < 1 ) {
119
+ if (_i2c-> write (_i2c_addr | 0 , 0 , 0 ) < 1 ) {
122
120
return 0 ;
123
121
}
124
122
0 commit comments