/*
* This file is part of OpenKC
*
* Copyright(c) Matthias Schöpfer (mschoepf@techfak.uni-bielefeld.de)
* http://opensource.cit-ec.de/projects/openkc
*
* This file may be licensed under the terms of of the
* GNU Lesser General Public License Version 3 (the ``LGPL''),
* or (at your option) any later version.
*
* Software distributed under the License is distributed
* on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the LGPL for the specific language
* governing rights and limitations.
*
* You should have received a copy of the LGPL along with this
* program. If not, go to http://www.gnu.org/licenses/lgpl.html
* or write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The development of this software was supported by the
* Excellence Cluster EXC 277 Cognitive Interaction Technology.
* The Excellence Cluster EXC 277 is a grant of the Deutsche
* Forschungsgemeinschaft (DFG) in the context of the German
* Excellence Initiative.
*
*/

#ifndef _OKC_HELPER_H_
#define _OKC_HELPER_H_

#include "fri_okc_types.h"
#include <stdlib.h>
#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

void 
okc_print_coords (coords_t k);

void
okc_print_axis (lbr_axis_t l);

void
okc_print_lbr_mnj (fri_float_t* l);

void
okc_subtract_coords (coords_t* difference, coords_t minuend, 
		     coords_t subtrahend);

void
okc_subtract_axis (lbr_axis_t* difference, lbr_axis_t minuend, 
		   lbr_axis_t subtrahend);

okc_handle_t*
okc_malloc_init_okc_handle_t (void);

okc_handle_t*
okc_destroy_okc_handle_t (okc_handle_t* okch);


void
okc_coords_set_all_zero (coords_t* k);


void
okc_axis_set_all_zero (lbr_axis_t* l);


void
okc_copy_axis (const lbr_axis_t src, lbr_axis_t* dest);


void
okc_copy_coords (const coords_t src, coords_t* dest);

int
okc_is_axis_zero (lbr_axis_t l);

int
okc_is_coords_zero (coords_t k);

void
okc_print_robot_informations (okc_handle_t* okc, int robot_id);

int
okc_check_axis_stiffness_value_range (lbr_axis_t stiff);

int
okc_check_axis_damping_value_range (lbr_axis_t damp);

int
okc_check_cp_stiffness_value_range (coords_t stiff);

int
okc_check_cp_damping_value_range (coords_t damp);

int
okc_sleep_cycletime (okc_handle_t* okc, int robot_id);

void
okc_print_cart_frm_dim (fri_float_t* vec);

void
okc_print_transform (transform_t t);

void
okc_cp_cart_frm_dim (const fri_float_t* source, fri_float_t* target);

void
okc_cp_lbr_mnj (const fri_float_t* source, fri_float_t* target);

void
okc_cp_cart_vec (const fri_float_t* source, fri_float_t* target);

void
okc_set_to_cp_stiff_damp_default (fri_float_t* cp_stiff,
				  fri_float_t* cp_damp);

#ifdef __cplusplus
}
#endif

#endif