http://mbed.org/users/okini3939/notebook/melinverter

Dependents:   MelInverter_sample

Committer:
okini3939
Date:
Tue Sep 18 14:30:22 2012 +0000
Revision:
1:5963d2a1c30f
Parent:
0:db82bb30177e
Child:
2:b1ef1c4d9c12
add timeout

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:db82bb30177e 1 /**
okini3939 0:db82bb30177e 2 * Mitsubishi Inverter Protocol library for mbed
okini3939 0:db82bb30177e 3 * Copyright (c) 2012 Suga
okini3939 0:db82bb30177e 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:db82bb30177e 5 */
okini3939 0:db82bb30177e 6
okini3939 0:db82bb30177e 7 /** @file
okini3939 0:db82bb30177e 8 * @brief Mitsubishi Inverter Protocol library for mbed
okini3939 0:db82bb30177e 9 * @note need: http://mbed.org/users/okini3939/libraries/RingBuffer/latest
okini3939 0:db82bb30177e 10 * FR-E700
okini3939 0:db82bb30177e 11 * Pr.79=2, Pr.340=1, Pr.549=0
okini3939 0:db82bb30177e 12 * 19200bps, 8bit data, Stop 2bit, Even parity, CR
okini3939 0:db82bb30177e 13 */
okini3939 0:db82bb30177e 14
okini3939 0:db82bb30177e 15 #include "mbed.h"
okini3939 0:db82bb30177e 16 #include "RingBuffer.h"
okini3939 0:db82bb30177e 17
okini3939 0:db82bb30177e 18 #define MELDELAY 0
okini3939 1:5963d2a1c30f 19 #define MELTIMEOUT 100
okini3939 0:db82bb30177e 20
okini3939 0:db82bb30177e 21 enum MELCMD {
okini3939 0:db82bb30177e 22 MELCMD_MODE_R = 0x7b,
okini3939 0:db82bb30177e 23 MELCMD_FREQ_R = 0x6f,
okini3939 0:db82bb30177e 24 MELCMD_CURRENT_R = 0x70,
okini3939 0:db82bb30177e 25 MELCMD_VOLT_R = 0x71,
okini3939 0:db82bb30177e 26 MELCMD_MONITOR_R = 0x73,
okini3939 0:db82bb30177e 27 MELCMD_STATUS = 0x79,
okini3939 0:db82bb30177e 28 MELCMD_RUN = 0xfa,
okini3939 0:db82bb30177e 29 MELCMD_FREQ = 0xed,
okini3939 0:db82bb30177e 30 MELCMD_FREQ_ROM = 0xee,
okini3939 0:db82bb30177e 31 MELCMD_RESET = 0xfd,
okini3939 0:db82bb30177e 32 MELCMD_ALLCLEAR = 0xfc,
okini3939 0:db82bb30177e 33 MELCMD_NAME_R = 0x7c,
okini3939 0:db82bb30177e 34 MELCMD_CAPA_R = 0x7d,
okini3939 0:db82bb30177e 35 };
okini3939 0:db82bb30177e 36
okini3939 0:db82bb30177e 37 enum MELMODE {
okini3939 0:db82bb30177e 38 MELMODE_NONE,
okini3939 0:db82bb30177e 39 MELMODE_STX,
okini3939 0:db82bb30177e 40 MELMODE_ACK,
okini3939 0:db82bb30177e 41 MELMODE_NAK,
okini3939 0:db82bb30177e 42 };
okini3939 0:db82bb30177e 43
okini3939 0:db82bb30177e 44 enum INVCTRL {
okini3939 0:db82bb30177e 45 INVCTRL_STX = 0x02,
okini3939 0:db82bb30177e 46 INVCTRL_ETX = 0x03,
okini3939 0:db82bb30177e 47 INVCTRL_ENQ = 0x05,
okini3939 0:db82bb30177e 48 INVCTRL_ACK = 0x06,
okini3939 0:db82bb30177e 49 INVCTRL_LF = 0x0a,
okini3939 0:db82bb30177e 50 INVCTRL_CR = 0x0d,
okini3939 0:db82bb30177e 51 INVCTRL_NAK = 0x15,
okini3939 0:db82bb30177e 52 };
okini3939 0:db82bb30177e 53
okini3939 0:db82bb30177e 54 /**
okini3939 0:db82bb30177e 55 * MelInverter class
okini3939 0:db82bb30177e 56 */
okini3939 0:db82bb30177e 57 class MelInverter {
okini3939 0:db82bb30177e 58 public:
okini3939 0:db82bb30177e 59 /**
okini3939 0:db82bb30177e 60 * Default constructor
okini3939 0:db82bb30177e 61 */
okini3939 0:db82bb30177e 62 MelInverter (PinName p_tx, PinName p_rx);
okini3939 0:db82bb30177e 63
okini3939 0:db82bb30177e 64 int send (int iid, MELCMD, char *data);
okini3939 0:db82bb30177e 65
okini3939 0:db82bb30177e 66 int recv (int iid, char *buf, int len);
okini3939 0:db82bb30177e 67
okini3939 0:db82bb30177e 68 protected:
okini3939 0:db82bb30177e 69 int x2i (char c);
okini3939 0:db82bb30177e 70 char i2x (int i);
okini3939 0:db82bb30177e 71 void isr_mel ();
okini3939 0:db82bb30177e 72 void isr_ack ();
okini3939 0:db82bb30177e 73 void isr_nak ();
okini3939 0:db82bb30177e 74
okini3939 0:db82bb30177e 75 private:
okini3939 0:db82bb30177e 76 Serial _mel;
okini3939 0:db82bb30177e 77 volatile int _mel_ok, _mel_failure, _mel_recv;
okini3939 0:db82bb30177e 78 MELMODE _mel_mode;
okini3939 0:db82bb30177e 79 RingBuffer _buf_data;
okini3939 0:db82bb30177e 80 Timeout _res;
okini3939 0:db82bb30177e 81 int _iid;
okini3939 0:db82bb30177e 82
okini3939 0:db82bb30177e 83 };
okini3939 0:db82bb30177e 84