Sony FeliCa reader/writer (RC-S620/S) library Copyright 2010 Sony Corporation, modified by SWITCHSCIENCE, modified by Suga

Dependents:   RFID_FeliCa_sample

RCS620S.h

Committer:
okini3939
Date:
2012-05-10
Revision:
0:ccb5446a6b93

File content as of revision 0:ccb5446a6b93:

/*
 * RC-S620/S sample library for Arduino
 *
 * Copyright 2010 Sony Corporation
 *
 * Rewrite for mbed
 *
 * modified by SWITCHSCIENCE
 *   https://github.com/SWITCHSCIENCE/mbed-FeliCa
 * 
 * modified by Suga
 */

/** @file
 * @brief Sony FeliCa reader/writer (RC-S620/S) library for mbed
 */

#include "mbed.h"
#include <inttypes.h>

#ifndef RCS620S_H_
#define RCS620S_H_

/* --------------------------------
 * Constant
 * -------------------------------- */

#define RCS620S_MAX_CARD_RESPONSE_LEN    254
#define RCS620S_MAX_RW_RESPONSE_LEN      265

/* --------------------------------
 * Class Declaration
 * -------------------------------- */

class RCS620S
{
public:
    RCS620S(PinName p_tx, PinName p_rx);

    int initDevice(void);
    int polling(uint16_t systemCode = 0xffff);
    int cardCommand(
        const uint8_t* command,
        uint8_t commandLen,
        uint8_t response[RCS620S_MAX_CARD_RESPONSE_LEN],
        uint8_t* responseLen);
    int rfOff(void);

    int push(
        const uint8_t* data,
        uint8_t dataLen);

private:
    int rwCommand(
        const uint8_t* command,
        uint16_t commandLen,
        uint8_t response[RCS620S_MAX_RW_RESPONSE_LEN],
        uint16_t* responseLen);
    void cancel(void);
    uint8_t calcDCS(
        const uint8_t* data,
        uint16_t len);

    void writeSerial(
        const uint8_t* data,
        uint16_t len);
    int readSerial(
        uint8_t* data,
        uint16_t len);
    void flushSerial(void);

    int checkTimeout(time_t t0);

public:
    time_t timeout;
    uint8_t idm[8];
    uint8_t pmm[8];
    
private:
    Serial serial;
};

#endif /* !RCS620S_H_ */