/*
ļڲ˵ʵ

API
****˵****
˵ʼ
˵ҳʼ
ȡ
ذʾ
ҳʾ
˵
˵ѡָ
˵ݸ
ҳ
***************

****˵ҳ****


ز

˵ҳ
˵ҳ
ǡٶȼҳ
˵ҳ
˵1 PIDҳ
˵2 PIDҳ
˵3 PIDҳ
˵ѭ PIDҳ
****************

****˵ҳ****
˵1 PIDҳ
˵2 PIDҳ
˵3 PIDҳ
˵ѭ PIDҳ
********************
*/

#ifndef _DOG_MENU_H_
#define _DOG_MENU_H_

#include "common.h"

/****************************** Ļ ******************************/

/* ʾַָ */ 
typedef void (*FUNC_STRING)(uint16, uint16, const char dat[]);
/* ʾͺָ */
typedef void (*FUNC_INT)(uint16, uint16, const int32, uint8);
/* ʾ޷ͺָ */
typedef void (*FUNC_UINT)(uint16, uint16, const uint32, uint8);
/* ʾͺָ */
typedef void (*FUNC_FLOAT)(uint16, uint16, const double, uint8, uint8);
/* ʾҶͼ */
typedef void (*FUNC_IMAGE)(uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold);
/* ָ */
typedef void (*FUNC_CLEAR)(void);
/* ʾֱߺָ */
typedef void (*FUNC_DRAW_LINE)(uint16 x_start, uint16 y_start, uint16 x_end, uint16 y_end, const uint16 color);
/* ʾ㺯ָ */
typedef void (*FUNC_DRAW_POINT)(uint16 x, uint16 y, const uint16 color);

extern FUNC_STRING screen_string;
extern FUNC_INT screen_int;
extern FUNC_UINT screen_uint;
extern FUNC_FLOAT screen_float;
extern FUNC_IMAGE screen_image;
extern FUNC_CLEAR screen_clear;
extern FUNC_DRAW_LINE screen_draw_line;
extern FUNC_DRAW_POINT screen_draw_point;

/**********************************************************************/

/****************************** ˵ ******************************/

/* ˵ҳ溯ָ */
typedef void (*FUNC_PAGE)(void);
/* ˵ҳָ */
typedef void (*FUNC_PAGE_SERVICE)(void);
/* ˵ҳ淵طָ */
typedef void (*FUNC_PAGE_BACK_SERVICE)(void);

/* ˵ҳ */
typedef struct
{
	char* name;	// ҳ
	_bool_ title_show;	// ʾ
	int16 page_level;	// ҳ漶0-޷ּ
	int16 page_num;	// ҳţͬһȺ˳0
	int16 page_row_num;	// ҳѡ
	FUNC_PAGE func_page;	// ˵ҳ
}_MENU_PAGE_;

/* ˵ʼ */
void menu_init(void);

/* ˵ҳʼ */
void menu_page_init(FUNC_PAGE func_page);

/* ˵ */
void menu_service_start(void);

/* ȡ */
void key_action_get(void);

/* ذʾ */
void menu_back_button_show(void);

/* ˵ */
void menu_back(FUNC_PAGE_BACK_SERVICE func_page_back_service);

/* ˵ѡָ */
void menu_point(void);

/* ˵ݸ */
void menu_data_change(FUNC_PAGE_SERVICE func_service_add,FUNC_PAGE_SERVICE func_service_reduce);

/* ҳ */
void menu_root_page(void);

/**********************************************************************/

/****************************** ˵ҳ ******************************/

/*  */
void start(void);

/*  */
void debug(void);

/* ѡ */
void plan(void);

/*  */
void save(void);

/* ز */
void load(void);

/*  */
void cli(void);

/* У׼ */
void sensor_calibrate(void);

/* ˵ҳ */
void menu_encoder_page(void);

/* ˵ҳ */
void menu_motor_page(void);

/* ǡٶȼҳ */
void menu_gyro_acc_page(void);

/* ˵ŷҳ */
void menu_euler_angle_page(void);

/* ˵ƽλҳ */
void menu_translate_shift_page(void);

/* ԳƷҳ */
void menu_symmetry_rectificate_page(void);

/* ͨͷ ҳ */
void menu_common_camera_page(void);
	
/* AIͷ0 ҳ */
void menu_ai_camera_0_page(void);

/* AIͷ1 ҳ */
void menu_ai_camera_1_and_2_page(void);

/* AIʶбҳ */
void menu_detection_list(void);

/* ˵ҳ */
void menu_chassis_page(void);

/* ˵ѭҳ */
void menu_path_page(void);

/* ˵Բѭҳ */
void menu_circle_path_page(void);

/* ˵1 PIDҳ */
void menu_motor_1_pid_page(void);

/* ˵2 PIDҳ */
void menu_motor_2_pid_page(void);

/* ˵3 PIDҳ */
void menu_motor_3_pid_page(void);

/* ˵ѭ PIDҳ */
void menu_path_pid_page(void);

/* ˵תǶ PIDǶ */
void menu_rotate_angle_pid_page(void);

/**********************************************************************/

/****************************** ˵ҳ ******************************/

/* ˵ҳ淵ط */
void menu_start_page_back_service(void);

/* ˵ҳ淵ط */
void menu_debug_page_back_service(void);

/* ҳ淵ط */
void menu_motor_page_back_service(void);

/* ˵ŷҳ淵ط */
void menu_euler_angle_page_back_service(void);

/* ƽλƽҳ淵ط */
void menu_translate_shift_page_back_service(void);

/* PIDҳ淵ط */
void menu_motor_pid_page_back_service(void);

/* ˵ԳƷҳ */
//void menu_symmetry_rectificate_data_add_service(void);
//void menu_asymmetry_rectificate_data_reduce_service(void);

/* ҳ */
void menu_plan_data_add_service(void);
void menu_plan_data_reduce_service(void);

/* ҳ */
void menu_motor_data_add_service(void);
void menu_motor_data_reduce_service(void);

/* ˵ͨͷҳ */
void menu_common_camera_data_add_service(void);
void menu_common_camera_data_reduce_service(void);

/* ˵AIͷ0ҳ */
void menu_ai_camera_0_data_add_service(void);
void menu_ai_camera_0_data_reduce_service(void);

/* ˵AIͷ1/2ҳ */
void menu_ai_camera_1_and_2_data_add_service(void);
void menu_ai_camera_1_and_2_data_reduce_service(void);

/* ˵ҳ */
void menu_chassis_data_add_service(void);
void menu_chassis_data_reduce_service(void);

/* ˵ѭҳ */
void menu_path_data_add_service(void);
void menu_path_data_reduce_service(void);

/* ˵Բѭҳ */
void menu_circle_path_data_add_service(void);
void menu_circle_path_data_reduce_service(void);

/* ˵1 PIDҳ */
void menu_motor_1_pid_add_service(void);
void menu_motor_1_pid_reduce_service(void);

/* ˵2 PIDҳ */
void menu_motor_2_pid_add_service(void);
void menu_motor_2_pid_reduce_service(void);

/* ˵3 PIDҳ */
void menu_motor_3_pid_add_service(void);
void menu_motor_3_pid_reduce_service(void);

/* ˵ѭ PIDҳ */
void menu_path_pid_add_service(void);
void menu_path_pid_reduce_service(void);

/* ˵תǶ PIDҳ */
void menu_rotate_angle_pid_add_service(void);
void menu_rotate_angle_pid_reduce_service(void);

/*************************************************************************/

#endif