/*!
 * \brief Returns the current states
 */
bool PowerCubeCtrl::updateStates()
{
	PCTRL_CHECK_INITIALIZED();

	unsigned int DOF = m_params->GetDOF();

	unsigned long state;
	unsigned char dio;
	float position;
	int ret = 0;
	for (unsigned int i = 0; i < DOF; i++)
	{
		pthread_mutex_lock(&m_mutex);
		ret = PCube_getStateDioPos(m_DeviceHandle, m_params->GetModuleID(i), &state, &dio, &position);
		pthread_mutex_unlock(&m_mutex);
		
		if (ret != 0)
		{
			m_pc_status = PC_CTRL_ERR;
		}

		m_status[i] = state;
		m_dios[i] = dio;
		m_positions[i] = position;

    /// ToDo: calculate vel and acc
    ///m_velocities = ???;
    ///m_accelerations = ???
	}
	
	return true;
}
/// @brief Returns the current states
bool PowerCubeCtrl::updateStates()
{
  PCTRL_CHECK_INITIALIZED();

  unsigned int DOF = m_params->GetDOF();

  unsigned long state;
  unsigned char dio;
  float position;
  for (unsigned int i = 0; i < DOF; i++)
  {
    pthread_mutex_lock(&m_mutex);
    //std::cout << "------------------------------> PCube_getStateDioPos()" << std::endl;
    PCube_getStateDioPos(m_DeviceHandle, m_params->GetModuleID(i), &state, &dio, &position);
    pthread_mutex_unlock(&m_mutex);

    m_status[i] = state;
    m_dios[i] = dio;
    m_positions[i] = position;
    
    // @todo calculate vel and acc
    //m_velocities = ???;
    //m_accelerations = ???
  }

  return true;
}
/*!
 * \brief Returns the current states
 */
bool PowerCubeCtrl::updateStates()
{
	PCTRL_CHECK_INITIALIZED();

	unsigned int DOF = m_params->GetDOF();

	unsigned long state;
	
	unsigned long state_s; // for debug

	unsigned char dio;
	float position;
	int ret = 0;
	for (unsigned int i = 0; i < DOF; i++)
	{	
		state_s = m_status[i]; 
		pthread_mutex_lock(&m_mutex);
		ret = PCube_getStateDioPos(m_DeviceHandle, m_params->GetModuleID(i), &state, &dio, &position);
		pthread_mutex_unlock(&m_mutex);
		
		if (ret != 0)
		{
			//m_pc_status = PC_CTRL_ERR;
			std::cout << "State: Error com" << std::endl; 			
		}
		else
		{	if( state_s != state)
			{
				std::cout << "State: " << state << "Joint: " << i << std::endl; 
			}
		 	m_status[i] = state;
			m_dios[i] = dio;
			m_positions[i] = position;
		}	
		
    /// ToDo: calculate vel and acc
    ///m_velocities = ???;
    ///m_accelerations = ???
	}
	
	return true;
}