#ifndef BODY_CTRL_H
#define BODY_CTRL_H

/*!
  \file
  \brief 並進速度、回転制御を指定した筐体の制御

  \author Satofumi KAMIMURA

  $Id: bodyCtrl.h 286 2008-10-20 09:40:22Z satofumi $
*/

#include "wheelCtrl.h"


/*!
  \brief 筐体情報の管理
*/
typedef struct {
  wheelInfo_t *whl[2];
  int mtr_direction[2];	      /*!< 車輪とモータの取り付け方向の状態 */
  int tread_mm;
  int div2vel_const;
} bodyInfo_t;


enum MtrDirSettings {
  WHL_CW_FWD = +1,	/*!< モータの CW 回転で、前進する方向に移動 */
  WHL_CW_BACK = -1,	/*!< モータの CW 回転で、後進する方向に移動 */

  BODY_WHL_RIGHT = 0,
  BODY_WHL_LEFT = 1,

  DIV2VEL_CONST_SHIFT = 4,
};


#ifndef BODY_TREAD_MM
#define BODY_TREAD_MM 290.7
#endif

#ifndef DEFAULT_WHL_RIGHT
#define DEFAULT_WHL_RIGHT WHL_CW_BACK /*! 右輪の CW制御時の移動方向 */
#endif
#ifndef DEFAULT_WHL_LEFT
#define DEFAULT_WHL_LEFT WHL_CW_BACK /*! 右輪の CW制御時の移動方向 */
#endif


extern void initBodyInfo(bodyInfo_t *body,
			 wheelInfo_t *right, wheelInfo_t *left);
extern int change_bodyDiv2Whl(int div16_vel, bodyInfo_t *body);
extern void setBodyMove(bodyInfo_t *body,
			int straight_mm_vel, int rotate_div16_vel);

#endif /* !BODY_CTRL_H */
