#ifndef __DEVICE_ROTATE_BLDC_L6235D_H_
#define __DEVICE_ROTATE_BLDC_L6235D_H_

#include "ptz_type_select.h"


#ifdef PTZ_LIGHT_GEAR_L6235D_AS5047D

      //电机控制方式为L6235D
      #define PTZ_MOTOR_CONTROL_L6235D  1
      ///云台水平右转
      #define PTZ_HORI_DIR_RIGHT     0
      ///云台水平左转
      #define PTZ_HORI_DIR_LEFT      1
      ///云台处于停止状态
      #define PTZ_HORI_DIR_STOP      2

      ///云台垂直向上
      #define PTZ_VERT_DIR_UP        0
      ///云台垂直向下
      #define PTZ_VERT_DIR_DOWN      1
      ///云台处于停止状态
      #define PTZ_VERT_DIR_STOP      2

      ///距离最近刹车点以最小转速运行的距离
      #define PTZ_HORI_MIN_SPEED_ANGLE  10.0
      #define PTZ_VERT_MIN_SPEED_ANGLE  6.0

      ///刹车最近距离
      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_HORI_STOP_FAR_DISTANCE     4.0

      ///刹车最近距离
      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_VERT_STOP_FAR_DISTANCE     4.0

      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_HORI_ANGLE_ACCURACY  0.1
      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_VERT_ANGLE_ACCURACY  0.1

#endif

#ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D
/***********************标准云台*********************/
      //电机控制方式为L6235D
      #define PTZ_MOTOR_CONTROL_L6235D  1
      ///云台水平右转
      #define PTZ_HORI_DIR_RIGHT     0//1//0
      ///云台水平左转
      #define PTZ_HORI_DIR_LEFT      1//0//1
      ///云台处于停止状态
      #define PTZ_HORI_DIR_STOP      2

      ///云台垂直向上
      #define PTZ_VERT_DIR_UP        0//01
      ///云台垂直向下
      #define PTZ_VERT_DIR_DOWN      1//0
      ///云台处于停止状态
      #define PTZ_VERT_DIR_STOP      2

      ///距离最近刹车点以最小转速运行的距离
      #define PTZ_HORI_MIN_SPEED_ANGLE  3.0
      #define PTZ_VERT_MIN_SPEED_ANGLE  3.0

      ///刹车最近距离
      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_HORI_STOP_FAR_DISTANCE     4.0

      ///刹车最近距离
      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_VERT_STOP_FAR_DISTANCE     4.0

      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_HORI_ANGLE_ACCURACY  0.1
      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_VERT_ANGLE_ACCURACY  0.1


/***********************激光云台定制*********************/
//      //电机控制方式为L6235D
//      #define PTZ_MOTOR_CONTROL_L6235D  1
//      ///云台水平右转
//      #define PTZ_HORI_DIR_RIGHT     0
//      ///云台水平左转
//      #define PTZ_HORI_DIR_LEFT      1
//      ///云台处于停止状态
//      #define PTZ_HORI_DIR_STOP      2
//
//      ///云台垂直向上
//      #define PTZ_VERT_DIR_UP        1
//      ///云台垂直向下
//      #define PTZ_VERT_DIR_DOWN      0
//      ///云台处于停止状态
//      #define PTZ_VERT_DIR_STOP      2
//
//      ///距离最近刹车点以最小转速运行的距离
//      #define PTZ_HORI_MIN_SPEED_ANGLE  3.0
//      #define PTZ_VERT_MIN_SPEED_ANGLE  3.0
//
//      ///刹车最近距离
//      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.01
//      ///刹车最远距离
//      #define PTZ_HORI_STOP_FAR_DISTANCE     10.0
//
//      ///刹车最近距离
//      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.01
//      ///刹车最远距离
//      #define PTZ_VERT_STOP_FAR_DISTANCE     10.0
//
//      ///云台定位精度，也可用于判断是不是同一个位置
//      #define PTZ_HORI_ANGLE_ACCURACY  0.1
//      ///云台定位精度，也可用于判断是不是同一个位置
//      #define PTZ_VERT_ANGLE_ACCURACY  0.1
      
#endif 

#ifdef PTZ_HEAVY_WORM_L6235D_AS5047D
      ///电机控制方式为L6235D
      #define PTZ_MOTOR_CONTROL_L6235D   1
      ///云台水平右转
      #define PTZ_HORI_DIR_RIGHT     1
      ///云台水平左转
      #define PTZ_HORI_DIR_LEFT      0
      ///云台处于停止状态
      #define PTZ_HORI_DIR_STOP      2

      ///云台垂直向上
      #define PTZ_VERT_DIR_UP        0
      ///云台垂直向下
      #define PTZ_VERT_DIR_DOWN      1
      ///云台处于停止状态
      #define PTZ_VERT_DIR_STOP      2
      
      ///距离最近刹车点以最小转速运行的距离
      #define PTZ_HORI_MIN_SPEED_ANGLE  7.0//5.0
      #define PTZ_VERT_MIN_SPEED_ANGLE  3.0//3.0
      
      ///刹车最近距离
      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.005
      ///刹车最远距离
      #define PTZ_HORI_STOP_FAR_DISTANCE     4.0

      ///刹车最近距离
      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.005
      ///刹车最远距离
      #define PTZ_VERT_STOP_FAR_DISTANCE     4.0

      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_HORI_ANGLE_ACCURACY  0.01
      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_VERT_ANGLE_ACCURACY  0.01
          
#endif

#ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_12V
      //电机控制方式为L6235D
      #define PTZ_MOTOR_CONTROL_L6235D  1
      ///云台水平右转
      #define PTZ_HORI_DIR_RIGHT     1
      ///云台水平左转
      #define PTZ_HORI_DIR_LEFT      0
      ///云台处于停止状态
      #define PTZ_HORI_DIR_STOP      2

      ///云台垂直向上
      #define PTZ_VERT_DIR_UP        1
      ///云台垂直向下
      #define PTZ_VERT_DIR_DOWN      0
      ///云台处于停止状态
      #define PTZ_VERT_DIR_STOP      2

      ///距离最近刹车点以最小转速运行的距离
      #define PTZ_HORI_MIN_SPEED_ANGLE  5.0
      #define PTZ_VERT_MIN_SPEED_ANGLE  5.0

      ///刹车最近距离
      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_HORI_STOP_FAR_DISTANCE     4.0

      ///刹车最近距离
      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_VERT_STOP_FAR_DISTANCE     4.0

      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_HORI_ANGLE_ACCURACY  0.1
      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_VERT_ANGLE_ACCURACY  0.1
#endif 

#ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_24V
      //电机控制方式为L6235D
      #define PTZ_MOTOR_CONTROL_L6235D  1
      ///云台水平右转
      #define PTZ_HORI_DIR_RIGHT     0//1
      ///云台水平左转
      #define PTZ_HORI_DIR_LEFT      1//0
      ///云台处于停止状态
      #define PTZ_HORI_DIR_STOP      2

      ///云台垂直向上
      #define PTZ_VERT_DIR_UP        0//1
      ///云台垂直向下
      #define PTZ_VERT_DIR_DOWN      1//0
      ///云台处于停止状态
      #define PTZ_VERT_DIR_STOP      2

      ///距离最近刹车点以最小转速运行的距离
      #define PTZ_HORI_MIN_SPEED_ANGLE  5.0
      #define PTZ_VERT_MIN_SPEED_ANGLE  5.0

      ///刹车最近距离
      #define PTZ_HORI_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_HORI_STOP_FAR_DISTANCE     4.0

      ///刹车最近距离
      #define PTZ_VERT_STOP_NEAR_DISTANCE    0.01
      ///刹车最远距离
      #define PTZ_VERT_STOP_FAR_DISTANCE     4.0

      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_HORI_ANGLE_ACCURACY  0.1
      ///云台定位精度，也可用于判断是不是同一个位置
      #define PTZ_VERT_ANGLE_ACCURACY  0.1
#endif 



#ifdef PTZ_BLDC_MOTOR


void ptz_sem_post_stop_mutex();
void ptz_hori_start(char direction, float speed);
void ptz_hori_stop(unsigned short int time);
void ptz_vert_start(char direction, float speed);
void ptz_vert_stop(unsigned short int time);

void init_rotate_monitor_module(void);
#endif

#endif