Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SakuraIO by
SakuraIO_I2C.cpp@1:20e1dfe45dab, 2016-11-19 (annotated)
- Committer:
- spiralray
- Date:
- Sat Nov 19 12:32:11 2016 +0000
- Revision:
- 1:20e1dfe45dab
- Parent:
- 0:8d34375d954c
- Child:
- 3:c54a1eba22c4
Support I2C
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| spiralray | 0:8d34375d954c | 1 | #include "mbed.h" |
| spiralray | 0:8d34375d954c | 2 | #include "SakuraIO.h" |
| spiralray | 1:20e1dfe45dab | 3 | #include "debug.h" |
| spiralray | 1:20e1dfe45dab | 4 | |
| spiralray | 0:8d34375d954c | 5 | #define SAKURAIO_SLAVE_ADDR 0x4F |
| spiralray | 1:20e1dfe45dab | 6 | |
| spiralray | 0:8d34375d954c | 7 | #define MODE_IDLE 0x00 |
| spiralray | 0:8d34375d954c | 8 | #define MODE_WRITE 0x01 |
| spiralray | 0:8d34375d954c | 9 | #define MODE_READ 0x02 |
| spiralray | 1:20e1dfe45dab | 10 | |
| spiralray | 0:8d34375d954c | 11 | void SakuraIO_I2C::begin(){ |
| spiralray | 0:8d34375d954c | 12 | mode = MODE_IDLE; |
| spiralray | 0:8d34375d954c | 13 | } |
| spiralray | 1:20e1dfe45dab | 14 | |
| spiralray | 0:8d34375d954c | 15 | void SakuraIO_I2C::end(){ |
| spiralray | 0:8d34375d954c | 16 | switch(mode){ |
| spiralray | 0:8d34375d954c | 17 | case MODE_WRITE: |
| spiralray | 0:8d34375d954c | 18 | i2c.stop(); |
| spiralray | 0:8d34375d954c | 19 | break; |
| spiralray | 0:8d34375d954c | 20 | case MODE_READ: |
| spiralray | 1:20e1dfe45dab | 21 | while (_length > 0) { |
| spiralray | 1:20e1dfe45dab | 22 | _length --; |
| spiralray | 1:20e1dfe45dab | 23 | i2c.read(_length > 0 ? 1 : 0); |
| spiralray | 1:20e1dfe45dab | 24 | } |
| spiralray | 1:20e1dfe45dab | 25 | i2c.stop(); |
| spiralray | 0:8d34375d954c | 26 | break; |
| spiralray | 0:8d34375d954c | 27 | } |
| spiralray | 1:20e1dfe45dab | 28 | |
| spiralray | 0:8d34375d954c | 29 | mode = MODE_IDLE; |
| spiralray | 0:8d34375d954c | 30 | } |
| spiralray | 1:20e1dfe45dab | 31 | |
| spiralray | 0:8d34375d954c | 32 | void SakuraIO_I2C::sendByte(uint8_t data){ |
| spiralray | 0:8d34375d954c | 33 | if(mode != MODE_WRITE){ |
| spiralray | 1:20e1dfe45dab | 34 | dbg("beginTr\r\n"); |
| spiralray | 0:8d34375d954c | 35 | i2c.start(); |
| spiralray | 0:8d34375d954c | 36 | i2c.write(SAKURAIO_SLAVE_ADDR<<1); |
| spiralray | 0:8d34375d954c | 37 | mode = MODE_WRITE; |
| spiralray | 0:8d34375d954c | 38 | } |
| spiralray | 1:20e1dfe45dab | 39 | dbg("Write=%02x\r\n", data); |
| spiralray | 0:8d34375d954c | 40 | i2c.write(data); |
| spiralray | 0:8d34375d954c | 41 | } |
| spiralray | 1:20e1dfe45dab | 42 | |
| spiralray | 1:20e1dfe45dab | 43 | |
| spiralray | 0:8d34375d954c | 44 | uint8_t SakuraIO_I2C::startReceive(uint8_t length){ |
| spiralray | 1:20e1dfe45dab | 45 | if(mode != MODE_IDLE){ |
| spiralray | 1:20e1dfe45dab | 46 | dbg("endTransmission\r\n"); |
| spiralray | 1:20e1dfe45dab | 47 | i2c.stop(); |
| spiralray | 1:20e1dfe45dab | 48 | } |
| spiralray | 1:20e1dfe45dab | 49 | dbg("requestForm=%d\r\n", length); |
| spiralray | 1:20e1dfe45dab | 50 | _length = length; |
| spiralray | 0:8d34375d954c | 51 | i2c.start(); |
| spiralray | 0:8d34375d954c | 52 | i2c.write(SAKURAIO_SLAVE_ADDR<<1 | 1); |
| spiralray | 0:8d34375d954c | 53 | mode = MODE_READ; |
| spiralray | 1:20e1dfe45dab | 54 | return 0; |
| spiralray | 0:8d34375d954c | 55 | } |
| spiralray | 1:20e1dfe45dab | 56 | |
| spiralray | 0:8d34375d954c | 57 | uint8_t SakuraIO_I2C::receiveByte(){ |
| spiralray | 1:20e1dfe45dab | 58 | return receiveByte(false); |
| spiralray | 0:8d34375d954c | 59 | } |
| spiralray | 1:20e1dfe45dab | 60 | |
| spiralray | 0:8d34375d954c | 61 | uint8_t SakuraIO_I2C::receiveByte(bool stop){ |
| spiralray | 0:8d34375d954c | 62 | uint8_t ret = 0; |
| spiralray | 1:20e1dfe45dab | 63 | if (_length > 0) { |
| spiralray | 1:20e1dfe45dab | 64 | _length --; |
| spiralray | 1:20e1dfe45dab | 65 | ret = i2c.read(_length > 0 ? 1 : 0); |
| spiralray | 1:20e1dfe45dab | 66 | } |
| spiralray | 1:20e1dfe45dab | 67 | if(stop){ |
| spiralray | 1:20e1dfe45dab | 68 | end(); |
| spiralray | 1:20e1dfe45dab | 69 | } |
| spiralray | 1:20e1dfe45dab | 70 | dbg("Read=%d\r\n", ret); |
| spiralray | 0:8d34375d954c | 71 | return ret; |
| spiralray | 0:8d34375d954c | 72 | } |
| spiralray | 1:20e1dfe45dab | 73 | |
| spiralray | 1:20e1dfe45dab | 74 | SakuraIO_I2C::SakuraIO_I2C (I2C &_i2c) : i2c(_i2c) { |
| spiralray | 0:8d34375d954c | 75 | mode = MODE_IDLE; |
| spiralray | 0:8d34375d954c | 76 | } |
| spiralray | 1:20e1dfe45dab | 77 | |
| spiralray | 1:20e1dfe45dab | 78 | SakuraIO_I2C::SakuraIO_I2C (PinName sda, PinName scl) : i2c(sda, scl) { |
| spiralray | 1:20e1dfe45dab | 79 | mode = MODE_IDLE; |
| spiralray | 1:20e1dfe45dab | 80 | } |
