ex

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

DuerOS-Light-SDK-v1.1.0/duer-os-light/external/targets_ext/TARGET_UNO_91H/rda58xx/rda58xx.h

Committer:
TMBOY
Date:
2017-07-18
Revision:
47:9e361da97763

File content as of revision 47:9e361da97763:

/** file rda58xx.h
 * Headers for interfacing with the codec chip.
 */

#ifndef RDA58XX_H
#define RDA58XX_H

#include "mbed.h"
#include "rda58xx_int_types.h"
// #include "rda58xx_dbg.h"

typedef enum {
    MCI_TYPE_NONE=-1,
    MCI_TYPE_GSM_FR,              /* 0  */
    MCI_TYPE_GSM_HR,              /* 1  */
    MCI_TYPE_GSM_EFR,             /* 2  */
    MCI_TYPE_AMR,                 /* 3  */
    MCI_TYPE_AMR_WB,              /* 4  */
    MCI_TYPE_DAF,                 /* 5  */
    MCI_TYPE_AAC,                 /* 6  */
    MCI_TYPE_PCM_8K,              /* 7  */
    MCI_TYPE_PCM_16K,             /* 8  */
    MCI_TYPE_G711_ALAW,           /* 9  */
    MCI_TYPE_G711_ULAW,           /* 10 */
    MCI_TYPE_DVI_ADPCM,           /* 11 */
    MCI_TYPE_VR,                  /* 12 */
    MCI_TYPE_WAV,                 /* 13 */
    MCI_TYPE_WAV_ALAW,            /* 14 */
    MCI_TYPE_WAV_ULAW,            /* 15 */
    MCI_TYPE_WAV_DVI_ADPCM,       /* 16 */
    MCI_TYPE_SMF,                 /* 17 */
    MCI_TYPE_IMELODY,             /* 18 */
    MCI_TYPE_SMF_SND,             /* 19 */
    MCI_TYPE_MMF,                 /* 20 */
    MCI_TYPE_AU,                  /* 21 */
    MCI_TYPE_AIFF,                /* 22 */
    MCI_TYPE_M4A,                 /* 23 */
    MCI_TYPE_3GP,                 /* 24 */
    MCI_TYPE_MP4,                 /* 25 */
    MCI_TYPE_JPG,                 /* 26 */
    MCI_TYPE_GIF,                 /* 27 */
    MCI_TYPE_MJPG,                /* 28 */
    MCI_TYPE_WMA,                 /* 29 */
    MCI_TYPE_MIDI,                /* 30 */
    MCI_TYPE_RM,                  /* 31 */
    //MCI_TYPE_AVSTRM,              /* 32 */
    MCI_TYPE_SBC,                 /* 32 */
    MCI_TYPE_SCO,                 /* 33 */
    MCI_TYPE_TONE,                /* 34 */
    MCI_TYPE_USB,                 /* 35 */
    MCI_TYPE_LINEIN,              /* 36 */
    MCI_NO_OF_TYPE
} mci_type_enum;

typedef enum {
    UNREADY = -1,
    STOP = 0,
    PLAY,
    PAUSE,
    RECORDING,
    STOP_RECORDING,
    MODE_SWITCHING
} rda58xx_status;

typedef enum {
    EMPTY = 0,
    FULL
} rda58xx_buffer_status;

typedef enum {
    WITHOUT_ENDING = 0,
    WITH_ENDING
} rda58xx_stop_type;

typedef enum {
    NACK = 0, //No ACK
    IACK,     //Invalid ACK
    VACK      //Valid ACK
} rda58xx_at_status;

typedef enum {
    FT_DISABLE = 0,
    FT_ENABLE
} rda58xx_ft_test;

typedef enum {
    UART_MODE = 0,
    BT_MODE
} rda58xx_mode;

typedef struct {
    uint8_t *buffer;
    uint8_t bufferSize;
    rda58xx_status status;
    int value;
} rda58xx_parameter;

class rda58xx
{
public:
    rda58xx(PinName TX, PinName RX, PinName HRESET);
    ~rda58xx(void);
    void hardReset(void);
    rda58xx_at_status bufferReq(mci_type_enum ftype, uint16_t size, uint16_t threshold);
    rda58xx_at_status stopPlay(void);
    rda58xx_at_status stopPlay(rda58xx_stop_type stype);
    rda58xx_at_status pause(void);
    rda58xx_at_status resume(void);
    rda58xx_at_status startRecord(mci_type_enum ftype, uint16_t size);
    rda58xx_at_status stopRecord(void);
    rda58xx_at_status setMicGain(uint8_t gain);
    rda58xx_at_status volAdd(void);
    rda58xx_at_status volSub(void);
    rda58xx_at_status volSet(uint8_t vol);
    rda58xx_at_status sendRawData(uint8_t *databuf, uint16_t n);
    void setBaudrate(int32_t baud);
    void setStatus(rda58xx_status status);
    rda58xx_status getStatus(void);
    void clearBufferStatus(void);
    rda58xx_buffer_status getBufferStatus(void);
    uint8_t *getBufferAddr(void);
    void setBufferSize(uint32_t size);
    uint32_t getBufferSize(void);
    rda58xx_at_status factoryTest(rda58xx_ft_test mode);
    rda58xx_at_status getCodecStatus(rda58xx_status *status);
    rda58xx_at_status getChipVersion(char *version);
    rda58xx_at_status getBtRssi(int8_t *RSSI);
    rda58xx_at_status setMode(rda58xx_mode mode);
    rda58xx_mode getMode(void);
    rda58xx_at_status setBtBrMode(void);
    rda58xx_at_status setBtLeMode(void);
    rda58xx_at_status lesWifiScs(void);
    rda58xx_at_status getApSsid(char *SSID);
    rda58xx_at_status getApPwd(char *PWD);
    bool isReady(void);
    bool isPowerOn(void);
    int32_t (*atHandler) (int32_t status);
    int32_t setAtHandler(int32_t (*handler)(int32_t status));
    void rx_handler(void);
    void tx_handler(void);
private:
    RawSerial  _serial;
    int32_t    _baud;
    Semaphore  _rxsem;
    Semaphore  _bufsem;
    volatile bool _bufflag;
    DigitalOut _HRESET;
    volatile rda58xx_mode _mode;
    volatile rda58xx_status _status;
    volatile rda58xx_buffer_status _rx_buffer_status;
    uint32_t _rx_buffer_size;
    uint32_t _tx_buffer_size;
    uint32_t _rx_idx;
    uint32_t _tx_idx;
    uint8_t *_rx_buffer;
    uint8_t *_tx_buffer;
    rda58xx_parameter _parameter;
    volatile bool _with_parameter;
    volatile rda58xx_at_status _at_status;
    volatile bool _ready;
    volatile bool _power_on;
    uint32_t _ats;
    uint32_t _atr;
};

#endif