SAKURA Internet IoT Alpha Communication Module Library for mbed

Dependents:   SakuraAlpha_SPI SakuraAlpha_I2C

SakuraAlpha.h

Committer:
sakurafan
Date:
2016-06-03
Revision:
1:b31d9bb6e65f
Parent:
0:38f4d6047886

File content as of revision 1:b31d9bb6e65f:

/* SAKURA Internet IoT Alpha Communication Module Library for mbed
 *
 * Copyright (c) SAKURA Internet Inc.
 *   The MIT License (MIT)
 *   https://github.com/sakura-internet/SakuraAlphaArduino
 *
 * https://iot.sakura.ad.jp/
 *
 * Porting to mbed by sakurafan. 2016
 */

#ifndef _SAKURAALPHA_H_
#define _SAKURAALPHA_H_

#include "mbed.h"

#define SAKURACC_SLAVE_ADDR (0x4F << 1)

#define CMD_NETWORKSTATUS  0x01

#define CMD_UPDATED     0x10
#define CMD_UNTRANSMITTED 0x11
#define CMD_TXCH_STATUS    0x12
#define CMD_RXCH_STATUS   0x13

#define CMD_READ      0x20

#define CMD_WRITE     0x30

#define CMD_TRANSMIT    0x40


#define TRANSMIT_NONE   0x00
#define TRANSMIT_AUTO   0x01
#define TRANSMIT_ONCE   0x02

#define TYPE_INT32      'i'
#define TYPE_UINT32     'I'
#define TYPE_INT64      'l'
#define TYPE_UINT64     'L'
#define TYPE_FLOAT      'f'
#define TYPE_DOUBLE     'd'
#define TYPE_BYTES      'b'


#define CH_SIZE 128

#define TX_STATUS_NONE    0x00
#define TX_STATUS_MODIFIED  0x01

#define RX_STATUS_NONE    0x00
#define RX_STATUS_UPDATED 0x01

#define min(a,b) (a<b?a:b)

class SakuraAlpha {
protected:

    virtual void begin(){}
    virtual void end(){}

    virtual void sendByte(uint8_t data){}
    virtual void finishSending(){}

    virtual void startReceiving(uint16_t num_recieve){}
    virtual uint8_t receiveByte(){return 0;}
    virtual void finishReceiving(){}

public:

    void writeChannel(uint8_t ch, int32_t data);
    void writeChannel(uint8_t ch, uint32_t data);
    void writeChannel(uint8_t ch, int64_t data);
    void writeChannel(uint8_t ch, uint64_t data);
    void writeChannel(uint8_t ch, float data);
    void writeChannel(uint8_t ch, double data);
    void writeChannel(uint8_t ch, uint8_t *data);
    void readChannel(uint8_t ch, char *type, uint8_t *data);

    void transmit(uint8_t mode);

    uint8_t getTxChannelStatus(uint8_t ch);
    uint8_t getRxChannelStatus(uint8_t ch);

    int getUpdatedChannels(uint8_t *buff, uint8_t len);

    int getUntransmittedChannels(uint8_t *buff, uint8_t len);
    
    uint8_t getNetworkStatus();

};


class SakuraAlphaI2C : public SakuraAlpha {

protected:
    I2C _i2c;
    int _num_recieve;

    virtual void begin();
    virtual void end();

    virtual void sendByte(uint8_t data);
    virtual void finishSending();

    virtual void startReceiving(uint16_t num_recieve);
    virtual uint8_t receiveByte();
    virtual void finishReceiving();

public:
    SakuraAlphaI2C (I2C &i2c);
    SakuraAlphaI2C (PinName sda, PinName scl);
};


class SakuraAlphaSPI : public SakuraAlpha{

protected:
    SPI _spi;
    DigitalOut _cs;

    virtual void begin();
    virtual void end();

    virtual void sendByte(uint8_t data);
    virtual void finishSending();

    virtual void startReceiving(uint16_t num_recieve);
    virtual uint8_t receiveByte();
    virtual void finishReceiving();

public:
    SakuraAlphaSPI(SPI &spi, PinName cs);
    SakuraAlphaSPI(PinName mosi, PinName miso, PinName sck, PinName cs);

};

#endif /* _SAKURAALPHA_H_ */