ChoroQ

TransmitterChoroQ.h

Committer:
shintamainjp
Date:
2010-09-19
Revision:
1:97921a2adf78
Parent:
0:2a40e6db61c2

File content as of revision 1:97921a2adf78:

/**
 * CHORO Q HYBRID transmitter (Version 0.0.1)
 *
 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
 * http://shinta.main.jp/
 */

#ifndef _TRANSMITTER_CHORO_Q_H_
#define _TRANSMITTER_CHORO_Q_H_

#include <mbed.h>

/**
 * CHORO Q HYBRID transmitter class.
 */
class TransmitterChoroQ {
public:

    /**
     * Constructor.
     *
     * @param txpin Pin for transmit IR signal.
     */
    explicit TransmitterChoroQ(PinName txpin);

    /**
     * Destructor.
     */
    ~TransmitterChoroQ();

    typedef enum {
        Idle,
        Leader,
        Data,
        Trailer
    } State;

    /**
     * Get state.
     *
     * @return Current state.
     */
    State getState(void);

    /**
     * Set data.
     *
     * @param format Format.
     * @param buf Buffer of a data.
     * @param bitlength Bit length of the data.
     *
     * @return Data bit length.
     */
    int setData(uint8_t *buf, int bitlength);

private:

    typedef struct {
        State state;
        int bitcount;
        int leader;
        int data;
        int trailer;
    } work_t;

    typedef struct {
        int bitlength;
        uint8_t buffer[64];
    } data_t;

    PwmOut tx;
    Ticker ticker;
    data_t data;
    work_t work;

    static const int TUS_TAKARATOMY = 400;

    void tick();

};

#endif