#ifndef	__incourse_h__
#define __incourse_h__


#define DEBUG_LOG

/*光センサに使用するポートを選択*/
//#define USE_SENSOR SENSOR_1	//!< Sensor on input pad 1
#define USE_SENSOR	SENSOR_2	//!< Sensor on input pad 2
//#define USE_SENSOR SENSOR_3	//!< Sensor on input pad 3


/*後輪駆動用モータに使用するポートを選択*/
#define DRIVE_MOTOR_SPEED(a)	motor_a_speed(a)
#define DRIVE_MOTOR_DIR(a)		motor_a_dir(a)
//#define DRIVE_MOTOR_SPEED(a)	motor_b_speed(a)
//#define DRIVE_MOTOR_DIR(a)	motor_b_dir(a)
//#define DRIVE_MOTOR_SPEED(a)	motor_c_speed(a)
//#define DRIVE_MOTOR_DIR(a)	motor_c_dir(a)

/*ステアリングモータに使用するポートを選択*/
//#define STEERING_MOTOR_SPEED(a)	motor_a_speed(a)
//#define STEERING_MOTOR_DIR(a)		motor_a_dir(a)
//#define STEERING_MOTOR_SPEED(a)	motor_b_speed(a)
//#define STEERING_MOTOR_DIR(a)		motor_b_dir(a)
#define STEERING_MOTOR_SPEED(a)		motor_c_speed(a)
#define STEERING_MOTOR_DIR(a)		motor_c_dir(a)

/*走行モータ制御*/
#define CTRL_DIRVE_R	rev
#define CTRL_DIRVE_N	off
#define CTRL_DIRVE_D	fwd
#define CTRL_DIRVE_P	brake

/*ステアリングモータ制御*/
#define CTRL_STEERING_LEFT		rev
#define CTRL_STEERING_FREE		off
#define CTRL_STEERING_RIGHT		fwd
#define CTRL_STEERING_LOCK		brake

/*色キャリブレーション時のセンサ値取得回数*/
#define CALIB_COUNT 100

/*走行速度 0〜255 */
#define DRIVE_SPEED_NOMAL	255		/*通常時*/

/*ステアリング速度 0〜255 */
#define STEERING_SPEED_NOMAL	255		/*通常時*/

/*色確定回数*/
#define FIXED_COLOR_COUNT_NOMAL		1
#define FIXED_COLOR_COUNT_TRIGER	50



/*色テーブル*/
typedef enum {
	COLOR_WHITE = 0,
	COLOR_GRAY,
	COLOR_BLACK
} LINE_COLOR;

/*走行場所テーブル*/
typedef enum {
	DRIVE_STAGE1 = 0,	/*スタート〜難所難所入口*/
	DRIVE_STAGE2,		/*難所入口(灰色区間)*/
	DRIVE_STAGE3,		/*難所入口〜ループA入口*/
	DRIVE_STAGE4,		/*ループA入口(灰色区間)*/
	DRIVE_STAGE5,		/*ループA入口〜ループA出口*/
	DRIVE_STAGE6,		/*ループA出口(灰色区間)*/
	DRIVE_STAGE7,		/*ループA出口〜ループB入口*/
	DRIVE_STAGE8,		/*ループB入口(灰色区間)*/
	DRIVE_STAGE9,		/*ループB入口〜ループB出口*/
	DRIVE_STAGE10,		/*ループB出口(灰色区間)*/
	DRIVE_STAGE11,		/*ループB出口〜難所出口*/
	DRIVE_STAGE12,		/*難所出口(灰色区間)*/
	DRIVE_STAGE13,		/*難所出口〜坂道入口*/
	DRIVE_STAGE14,		/*坂路入口(灰色区間)*/
	DRIVE_STAGE15,		/*坂路入口〜坂路出口*/
	DRIVE_STAGE16,		/*坂路出口(灰色区間)*/
	/*2週目*/
	DRIVE_STAGE17,		/*坂路出口〜難所難所入口*/
	DRIVE_STAGE18,		/*難所入口(灰色区間)*/
	DRIVE_STAGE19,		/*難所入口〜ループA入口*/
	DRIVE_STAGE20,		/*ループA入口(灰色区間)*/
	DRIVE_STAGE21,		/*ループA入口〜ループA出口*/
	DRIVE_STAGE22,		/*ループA出口(灰色区間)*/
	DRIVE_STAGE23,		/*ループA出口〜ループB入口*/
	DRIVE_STAGE24,		/*ループB入口(灰色区間)*/
	DRIVE_STAGE25,		/*ループB入口〜ループB出口*/
	DRIVE_STAGE26,		/*ループB出口(灰色区間)*/
	DRIVE_STAGE27,		/*ループB出口〜難所出口*/
	DRIVE_STAGE28,		/*難所出口(灰色区間)*/
	DRIVE_STAGE29,		/*難所出口〜坂道入口*/
	DRIVE_STAGE30,		/*坂路入口(灰色区間)*/
	DRIVE_STAGE31,		/*坂路入口〜坂路出口*/
	DRIVE_STAGE32		/*坂路出口(灰色区間)*/
} DRIVE_STAGE;


typedef struct {
	unsigned char driving_speed;		/*走行速度*/
	unsigned char driving_vector;		/*走行方向	前・後*/

	unsigned char steering_speed;		/*ステアリング速度*/
	unsigned char steering_vector;		/*ステアリング方向	左右*/

	unsigned short calib_black;			/*黒色キャリブレーション結果*/
	unsigned short calib_gray;			/*灰色キャリブレーション結果*/
	unsigned short calib_white;			/*白色キャリブレーション結果*/

	unsigned short border_wg;			/*白色-灰色境界キャリブレーション結果*/
	unsigned short border_gb;			/*灰色-黒色境界キャリブレーション結果*/

	unsigned char fix_color_count_b;	/*黒色確定回数*/
	unsigned char fix_color_count_g;	/*灰色確定回数*/
	unsigned char fix_color_count_w;	/*白色確定回数*/
} DRIVE_DATA;

void start_calib(DRIVE_DATA *data);


#endif // __incourse_h__
