#ifndef BODY_POSITION_H
#define BODY_POSITION_H

/*!
  \file
  \brief 筐体の自己位置推定

  \author Satofumi KAMIMURA

  $Id: bodyPosition.h 286 2008-10-20 09:40:22Z satofumi $

  \todo adjustEncCnt() を実装する
*/

#include "coordinateCtrl_target.h"
#include "bodyCtrl.h"


enum {
  DIV16_MUL_SHIFT = 30,
};


/*!
  \brief 筐体制御の管理情報
*/
typedef struct {
  bodyInfo_t *body;
  long cnt_integer[2];
  long cnt_decimal[2];
  long rotate_num;

  long cnt_per_m;
  long div16_cnt;
  long div16_cnt_max;
  long div16_cnt_mul;

  long cnt2mm_const;

  coordinateInfo_t body_crd;

  long straight_cnt_vel;
  long rotate_cnt_vel;

  long adjust_base;
  long adjust_current_cnt;
  long adjust_cnt;
  long adjust_max;

} bodyPosition_t;


extern void initBodyPositionInfo(bodyPosition_t *bodyPos,
				 bodyInfo_t *bodyInfo);
extern void updateBodyPosition(bodyPosition_t *bodyPos,
			       int right_cnt, int left_cnt);
extern void updateCoordinatePosition(coordinateInfo_t *crd,
				     bodyPosition_t *bodyPos);

#endif /* !BODY_POSITION_H */
