

#ifndef __MAC_LINK_H__
#define __MAC_LINK_H__

#include "PN532/PN532/PN532.h"

class MACLink {
  public:
    MACLink(PN532Interface& interface) : pn532(interface) {

    };

    /**
        @brief    Activate PN532 as a target
        @param    timeout max time to wait, 0 means no timeout
        @return   > 0     success
                = 0     timeout
                < 0     failed
    */
    int8_t activateAsTarget(uint16_t timeout = 0);

    /**
        @brief    write a PDU packet, the packet should be less than (255 - 2) bytes
        @param    header  packet header
        @param    hlen    length of header
        @param 	body	packet body
        @param 	blen	length of body
        @return   true    success
                false   failed
    */
    bool write(const uint8_t* header, uint8_t hlen, const uint8_t* body = 0, uint8_t blen = 0);

    /**
        @brief    read a PDU packet, the packet will be less than (255 - 2) bytes
        @param    buf     the buffer to contain the PDU packet
        @param    len     lenght of the buffer
        @return   >=0     length of the PDU packet
                <0      failed
    */
    int16_t read(uint8_t* buf, uint8_t len);

    uint8_t* getHeaderBuffer(uint8_t* len) {
        return pn532.getBuffer(len);
    };

  private:
    PN532 pn532;
};

#endif // __MAC_LINK_H__
