/*
 * SmartHome server: Plug-in xbee
 *
 * Copyright (C) 2010 Daniel Pisi <dan.pisi@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License
 * as published by the Free Software Foundation.
 *
 */

/**
 * @file xbpackets.h
 * @brief Various XBee2 API frame types
 * @author Daniel Pisi
 */

#ifndef XBPACKETS_H
#define XBPACKETS_H

#include "xbpacket.h"

// -----------------------------------------------------------------------------

/**
 * \class XbLocalCommand
 * \brief Local AT command frame
 */
class XbLocalCommand : public XbPacket,
                       public XbFrameId,
                       public XbCommand
{
public:
    XbLocalCommand();
};
// -----------------------------------------------------------------------------

/**
 * \class XbLocalCommandResponse
 * \brief Local AT command response frame
 */
class XbLocalCommandResponse : public XbPacket,
                               public XbFrameId,
                               public XbCommand,
                               public XbCmdStatus
{
public:
    XbLocalCommandResponse();
};
// -----------------------------------------------------------------------------

/**
 * \class XbTransmitRequest
 * \brief Data transmit request frame
 */
class XbTransmitRequest : public XbPacket,
                          public XbFrameId,
                          public XbAddress,
                          public XbBcRadius,
                          public XbOptions,
                          public XbRfData
{
public:
    XbTransmitRequest();
};
// -----------------------------------------------------------------------------

/**
 * \class XbTransmitStatus
 * \brief Transmit status frame
 */
class XbTransmitStatus : public XbPacket,
                         public XbFrameId,
                         public XbAddr16,
                         public XbTxRetryCnt,
                         public XbDeliveryStatus,
                         public XbDiscoveryStatus
{
public:
    XbTransmitStatus();
};
// -----------------------------------------------------------------------------

/**
 * \class XbRemoteCommand
 * \brief Remote AT command frame
 */
class XbRemoteCommand : public XbPacket,
                        public XbFrameId,
                        public XbAddress,
                        public XbOptions,
                        public XbCommand
{
public:
    XbRemoteCommand();
};
// -----------------------------------------------------------------------------

/**
 * \class XbRemoteCommandResponse
 * \brief Remote AT command response frame
 */
class XbRemoteCommandResponse : public XbPacket,
                                public XbFrameId,
                                public XbAddress,
                                public XbCommand,
                                public XbCmdStatus
{
public:
    XbRemoteCommandResponse();
};
// -----------------------------------------------------------------------------

/**
 * \class XbReceivedData
 * \brief Received data frame
 */
class XbReceivedData : public XbPacket,
                       public XbAddress,
                       public XbOptions,
                       public XbRfData
{
public:
    XbReceivedData();
};
// -----------------------------------------------------------------------------

/**
 * \class XbIoSample
 * \brief I/O sample frame
 */
class XbIoSample : public XbPacket,
                   public XbAddress,
                   public XbOptions,
                   public XbIoSamples
{
public:
    XbIoSample();
};
// -----------------------------------------------------------------------------

#endif // XBPACKETS_H
