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

Dependents:   MelInverter_sample

MelInverter.h

Committer:
okini3939
Date:
2012-09-28
Revision:
2:b1ef1c4d9c12
Parent:
1:5963d2a1c30f

File content as of revision 2:b1ef1c4d9c12:

/**
 * Mitsubishi Inverter Protocol library for mbed
 * Copyright (c) 2012 Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file
 * @brief Mitsubishi Inverter Protocol library for mbed
 * @note need: http://mbed.org/users/okini3939/libraries/RingBuffer/latest
 *  FR-E700
 *  Pr.79=2, Pr.340=1, Pr.549=0
 *  19200bps, 8bit data, Stop 2bit, Even parity, CR
 */

#include "mbed.h"
#include "RingBuffer.h"

#define MELDELAY 0
#define MELTIMEOUT 100
#define MELBAUD 19200

enum MELCMD {
    MELCMD_MODE_R = 0x7b,
    MELCMD_FREQ_R = 0x6f,
    MELCMD_CURRENT_R = 0x70,
    MELCMD_VOLT_R = 0x71,
    MELCMD_MONITOR_R = 0x73,
    MELCMD_STATUS = 0x79,
    MELCMD_RUN = 0xfa,
    MELCMD_FREQ = 0xed,
    MELCMD_FREQ_ROM = 0xee,
    MELCMD_RESET = 0xfd,
    MELCMD_ALLCLEAR = 0xfc,
    MELCMD_NAME_R = 0x7c,
    MELCMD_CAPA_R = 0x7d,
};

enum MELMODE {
    MELMODE_NONE,
    MELMODE_STX,
    MELMODE_ACK,
    MELMODE_NAK,
};

enum INVCTRL {
    INVCTRL_STX = 0x02,
    INVCTRL_ETX = 0x03,
    INVCTRL_ENQ = 0x05,
    INVCTRL_ACK = 0x06,
    INVCTRL_LF = 0x0a,
    INVCTRL_CR = 0x0d,
    INVCTRL_NAK = 0x15,
};

/**
 * MelInverter class
 */
class MelInverter {
public:
    /**
     * Default constructor
     */
    MelInverter (PinName p_tx, PinName p_rx, int baud = MELBAUD);

    int send (int iid, MELCMD, char *data);

    int recv (int iid, char *buf, int len);

protected:
    int x2i (char c);
    char i2x (int i);
    void isr_mel ();
    void isr_ack ();
    void isr_nak ();

private:
    Serial _mel;
    volatile int _mel_ok, _mel_failure, _mel_recv;
    MELMODE _mel_mode;
    RingBuffer _buf_data;
    Timeout _res;
    volatile int _iid;

};