﻿// -*- C++ -*-
/*!
 * @file  KinectFace.cpp
 * @brief Image on Kinect
 * @date $Date$
 *
 * @author 名城大学
 * ロボットシステムデザイン研究室
 *
 * $Id$
 */

#include "KinectFace.h"

// Module specification
// <rtc-template block="module_spec">
static const char* kinectface_spec[] =
  {
    "implementation_id", "KinectFace",
    "type_name",         "KinectFace",
    "description",       "Image on Kinect",
    "version",           "1.0.0",
    "vendor",            "rsdlab",
    "category",          "Sensor",
    "activity_type",     "PERIODIC",
    "kind",              "DataFlowComponent",
    "max_instance",      "1",
    "language",          "C++",
    "lang_type",         "compile",
    // Configuration variables
    "conf.default.Output", "raw,camera,jpeg",
    "conf.default.Size", "480x270",

    // Widget
    "conf.__widget__.Output", "checkbox",
    "conf.__widget__.Size", "text",
    // Constraints
    "conf.__constraints__.Output", "(raw,camera,jpeg)",
    "conf.__constraints__.Size", "(240x135,480x270,960x540,1920x1080)",

    "conf.__type__.Output", "string",
    "conf.__type__.Size", "string",

    ""
  };
// </rtc-template>

/*!
 * @brief constructor
 * @param manager Maneger Object
 */
KinectFace::KinectFace(RTC::Manager* manager)
    // <rtc-template block="initializer">
  : RTC::DataFlowComponentBase(manager),
    m_CameraImageOut("CameraImage", m_CameraImage),
    m_FaceAngleOut("FaceAngle", m_FaceAngle),
    m_FacepropertyOut("Faceproperty", m_Faceproperty)

    // </rtc-template>
{
}

/*!
 * @brief destructor
 */
KinectFace::~KinectFace()
{
}


/*!
 * Kinectへ接続する
 */
RTC::ReturnCode_t KinectFace::onInitialize()
{
  // Registration: InPort/OutPort/Service
  // <rtc-template block="registration">
  // Set InPort buffers
  
  // Set OutPort buffer
  addOutPort("CameraImage", m_CameraImageOut);
  addOutPort("FaceAngle", m_FaceAngleOut);
  addOutPort("Faceproperty", m_FacepropertyOut);
  
  // Set service provider to Ports
  
  // Set service consumers to Ports
  
  // Set CORBA Service Ports
  
  // </rtc-template>

  // <rtc-template block="bind_config">
  // Bind variables and configuration variable
  bindParameter("Output", m_Output, "raw,camera,jpeg");
  bindParameter("Size", m_Size, "480x270");
  // </rtc-template>
  
  return RTC::RTC_OK;
}

/*
RTC::ReturnCode_t KinectFace::onFinalize()
{
  return RTC::RTC_OK;
}
*/

/*
RTC::ReturnCode_t KinectFace::onStartup(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/

/*
RTC::ReturnCode_t KinectFace::onShutdown(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/

/*!
 * ポート及びデータの初期化
 */

RTC::ReturnCode_t KinectFace::onActivated(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}

/*!
 * データの破棄
 */

RTC::ReturnCode_t KinectFace::onDeactivated(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}

/*!
 * 画像データ出力
 */

RTC::ReturnCode_t KinectFace::onExecute(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}

/*
RTC::ReturnCode_t KinectFace::onAborting(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/

/*
RTC::ReturnCode_t KinectFace::onError(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/

/*!
 * Kinectへの再接続を試みる
 */

RTC::ReturnCode_t KinectFace::onReset(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}

/*
RTC::ReturnCode_t KinectFace::onStateUpdate(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/

/*
RTC::ReturnCode_t KinectFace::onRateChanged(RTC::UniqueId ec_id)
{
  return RTC::RTC_OK;
}
*/



extern "C"
{
 
  void KinectFaceInit(RTC::Manager* manager)
  {
    coil::Properties profile(kinectface_spec);
    manager->registerFactory(profile,
                             RTC::Create<KinectFace>,
                             RTC::Delete<KinectFace>);
  }
  
};


