http://mbed.org/users/okini3939/notebook/melinverter
Dependents: MelInverter_sample
Diff: MelInverter.cpp
- Revision:
- 1:5963d2a1c30f
- Parent:
- 0:db82bb30177e
- Child:
- 2:b1ef1c4d9c12
--- a/MelInverter.cpp Thu Mar 29 06:13:13 2012 +0000 +++ b/MelInverter.cpp Tue Sep 18 14:30:22 2012 +0000 @@ -35,32 +35,32 @@ switch (_mel_mode) { case MELMODE_NONE: - switch (dat) { - case INVCTRL_STX: - // Start of text - DBG("INVCTRL_STX\r\n"); - _mel_mode = MELMODE_STX; - mode = 0; - len = 0; - sum = 0; - s = 0; - _iid = 0; - break; - case INVCTRL_ACK: - // Acknowledge - DBG("INVCTRL_ACK\r\n"); - _mel_mode = MELMODE_ACK; - len = 0; - _iid = 0; - break; - case INVCTRL_NAK: - // Negative acknowledge - DBG("INVCTRL_NAK\r\n"); - _mel_mode = MELMODE_NAK; - len = 0; - _iid = 0; - break; - } + switch (dat) { + case INVCTRL_STX: + // Start of text + DBG("INVCTRL_STX\r\n"); + _mel_mode = MELMODE_STX; + mode = 0; + len = 0; + sum = 0; + s = 0; + _iid = 0; + break; + case INVCTRL_ACK: + // Acknowledge + DBG("INVCTRL_ACK\r\n"); + _mel_mode = MELMODE_ACK; + len = 0; + _iid = 0; + break; + case INVCTRL_NAK: + // Negative acknowledge + DBG("INVCTRL_NAK\r\n"); + _mel_mode = MELMODE_NAK; + len = 0; + _iid = 0; + break; + } break; case MELMODE_STX: @@ -151,6 +151,7 @@ int MelInverter::send (int iid, MELCMD cmd, char *data) { int i, sum = 0; char buf[40]; + Timer timer; _mel.putc(INVCTRL_ENQ); sprintf(buf, "%02X%02X%01X", iid, cmd, MELDELAY); @@ -161,14 +162,30 @@ } _mel.printf("%02X\r", sum & 0xff); DBG("command: %d %02X %s\r\n", iid, cmd, buf); - while (!_mel_ok && !_mel_failure); + + timer.start(); + while (_mel_ok == 0 && _mel_failure == 0) { + if (timer.read_ms() >= MELTIMEOUT) { + DBG("timeout\r\n"); + timer.stop(); + return 0; + } + } + timer.stop(); return (_mel_ok == 1); } int MelInverter::recv (int iid, char *buf, int len) { int r; + Timer timer; - while (iid != _iid && _mel_recv == 0); + timer.start(); + while (iid != _iid && _mel_recv == 0) { + if (timer.read_ms() >= MELTIMEOUT) { + DBG("timeout\r\n"); + return 0; + } + } _mel_recv = 0; r = _buf_data.get(buf, len);