/////////////////////////////////////////////////////////////////////
//                                                                 //
// file: aMTMEtherStem.h                                           //
//                                                                 //
/////////////////////////////////////////////////////////////////////
//                                                                 //
// description: Definition of the Acroname 40-pin module object.   //
//                                                                 //
/////////////////////////////////////////////////////////////////////
//                                                                 //
// Copyright (c) 2018 Acroname Inc. - All Rights Reserved          //
//                                                                 //
// This file is part of the BrainStem release. See the license.txt //
// file included with this package or go to                        //
// https://acroname.com/software/brainstem-development-kit         //
// for full license details.                                       //
/////////////////////////////////////////////////////////////////////

#ifndef __aMTMEtherStem_H__
#define __aMTMEtherStem_H__

#include "BrainStem-all.h"
#include "aProtocoldefs.h"


/**
 * \defgroup aMTMEtherStem_Constants MTM-EterStem Module Constants
 * @{
 */
#define aMTM_ETHERSTEM_MODULE_BASE_ADDRESS  aMTM_STEM_MODULE_BASE_ADDRESS /**< MTM-EtherStem module base address */

#define aMTM_ETHERSTEM_NUM_STORES                    aMTM_STEM_NUM_STORES /**< Number of Store instances available */
#define   aMTM_ETHERSTEM_NUM_INTERNAL_SLOTS  aMTM_STEM_NUM_INTERNAL_SLOTS /**< Store: Number of internal slots instances available */
#define   aMTM_ETHERSTEM_NUM_RAM_SLOTS            aMTM_STEM_NUM_RAM_SLOTS /**< Store: Number of RAM slot instances available */
#define   aMTM_ETHERSTEM_NUM_SD_SLOTS              aMTM_STEM_NUM_SD_SLOTS /**< Store: Number of SD slot instances available */

#define aMTM_ETHERSTEM_NUM_A2D                          aMTM_STEM_NUM_A2D /**< Number of Analog instances available */
#define aMTM_ETHERSTEM_NUM_APPS                        aMTM_STEM_NUM_APPS /**< Number of App instances available */

#define aMTM_ETHERSTEM_BULK_CAPTURE_MAX_HZ  aMTM_STEM_BULK_CAPTURE_MAX_HZ /**< Bulk Capture Max Hertz */
#define aMTM_ETHERSTEM_BULK_CAPTURE_MIN_HZ  aMTM_STEM_BULK_CAPTURE_MIN_HZ /**< Bulk Capture Min Hertz */

#define aMTM_ETHERSTEM_NUM_CLOCK                      aMTM_STEM_NUM_CLOCK /**< Number of Clock instances available */
#define aMTM_ETHERSTEM_NUM_DIG                          aMTM_STEM_NUM_DIG /**< Number of Digital instances available */
#define aMTM_ETHERSTEM_NUM_I2C                          aMTM_STEM_NUM_I2C /**< Number of I2C instances available */
#define aMTM_ETHERSTEM_NUM_POINTERS                aMTM_STEM_NUM_POINTERS /**< Number of Pointer instances available */
#define aMTM_ETHERSTEM_NUM_SERVOS                    aMTM_STEM_NUM_SERVOS /**< Number of RC Servo instances available */

#define aMTM_ETHERSTEM_NUM_SIGNALS                  aMTM_STEM_NUM_SIGNALS /**< Number of Signal instances available */
#define   aMTM_ETHERSTEM_NUM_OUTPUT_SIGNALS  aMTM_STEM_NUM_OUTPUT_SIGNALS /**< Signal: Number of output signal instances available */
#define   aMTM_ETHERSTEM_NUM_INPUT_SIGNALS    aMTM_STEM_NUM_INPUT_SIGNALS /**< Signal: Number of input signal instances available */

#define aMTM_ETHERSTEM_NUM_STORES                    aMTM_STEM_NUM_STORES /**< Number of Store instances available */
#define   aMTM_ETHERSTEM_NUM_INTERNAL_SLOTS  aMTM_STEM_NUM_INTERNAL_SLOTS /**< Store: Number of internal slots instances available */
#define   aMTM_ETHERSTEM_NUM_RAM_SLOTS            aMTM_STEM_NUM_RAM_SLOTS /**< Store: Number of RAM slot instances available */
#define   aMTM_ETHERSTEM_NUM_SD_SLOTS              aMTM_STEM_NUM_SD_SLOTS /**< Store: Number of SD slot instances available */

#define aMTM_ETHERSTEM_NUM_TIMERS                    aMTM_STEM_NUM_TIMERS /**< Number of Timer instances available */
/** @} */

#if defined(__cplusplus)

///  \brief Concrete Module implementation of an MTM-EtherStem
///         Allows a user to connect to and control an attached module
class aMTMEtherStem : public aMTMStemModule
{
public:

    aMTMEtherStem(const uint8_t module = aMTM_ETHERSTEM_MODULE_BASE_ADDRESS,
                  bool bAutoNetworking = true,
                  const uint8_t model = aMODULE_TYPE_MTM_EtherStem) :
    aMTMStemModule(module, bAutoNetworking, model)
    {

    }
};

#endif//defined(__cplusplus)

#endif
