You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

183 lines
6.5 KiB

#ifndef __OPTICALDATA__
#define __OPTICALDATA__
#include "bsp_config.h"
#include "../app/app_config.h"
/******************************************************************************************************
配置参数
*******************************************************************************************************/
#define ROM009_HANDWRITE 0
#define DATA_FORMAT_2 0
#define OID_4C 0
#define DEBOUNCE_FUNC 0
#define LOG_REGISTER 0
#if DEBOUNCE_FUNC
#define DEBOUNCE_TIMES 3 // 连续三笔相同,才触发,debounce时,可设置。去抖动时间
#define DEBOUNCE_RELESE_TIME 20 //5ms * 20 = 100ms,100ms无任何码,认为抬笔。
#endif
/******************************************************************************************************
2-wire GPIO
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
*******************************************************************************************************/
#define LD_oid_io_init() LD_Oid_SCK_INIT()
////#define LD_Oid_SCK_INIT() D_stdIO_P3(BITN4);
#define LD_Oid_SCK_LOW() D_P34_OFF();
#define LD_Oid_SCK_HIGH() D_P34_ON();
#define LD_Oid_SCK_INIT(); D_HighI_P3(BITN4);LD_Oid_SCK_LOW();
#define LD_Oid_SDIO_INIT() D_HighR_P5(BITN0)
#define LD_Oid_SDIO_LOW() D_P50_OFF()
#define LD_Oid_SDIO_HIGH() D_P50_ON()
#define LD_Oid_SDIO_IN() D_HighR_P5(BITN0)//高阻输入
#define LD_Oid_SDIO_OUT() D_HighI_P5(BITN0)//推挽输出
#define LD_Oid_SDIO_AT() D_P50_AT()
#define LD_Oid_DIO_INIT(); LD_Oid_SCK_INIT();LD_Oid_SDIO_INIT();
#define OID_DET P50
/******************************************************************************************************
OID命令
*******************************************************************************************************/
////20211229依据53xx和54xx系列操作
#define USERCMD_20FPS 0x24
#define USERCMD_30FPS 0x25
#define USERCMD_40FPS 0x26
#define USERCMD_50FPS 0x27
#define USERCMD_80FPS 0x3C
#define USERCMD_80FPS_EXIT 0x3B
#define USERCMD_DECODE_SHUT 0x4D
#define USERCMD_LIANCHUAN 0x40
#define USERCMD_SUSPEND 0x57
#define USERCMD_EN_ANGLE 0x10
#define USERCMD_EN_POSITION 0x35
#define USERCMD_SW_POSITION 0x43
#define USERCMD_DATA_FORMAT_2 0x2C
#define USERCMD_LOU_GUANG 0xD7
#define USERCMD_POWER_DOWN 0x56
#define OIDCMD_POWER_ON 0x0000FFF8
#define OIDCMD_POWER_OFF 0x0000FFF7
/******************************************************************************************************
OID版本
*******************************************************************************************************/
#define OID_VER_D 0x1169
#define OID_VER_REG 0x1670
#define OID_VER_F 0x1168
#define REG_READOID_SET 0xD40
#define REG_EN_DECODE 0xD63
#define REG_ROM008 0xDA5
#define REG_ROM009 0xDA6
#define ROM_009 0x09
#define ROM_008 0x00
/******************************************************************************************************
Dataformat 2定义
*******************************************************************************************************/
#define CHECK_INVALID_DF2 0x40000000
#define CHECK_OID_VERSION_DF2 0xFC000000
#define OID_2_GENERAL_DF2 0x00000000
#define OID_3_GENERAL_DF2 0x08000000
#define OID_3_POSITION_DF2 0x04000000
#define OID_3S_GENERAL_DF2 0x10000000
#define OID_3S_POSITION_DF2 0x0C000000
#define OID_35_GENERAL_DF2 0x14000000
#define OID_4_GENERAL_DF2 0x1C000000
#define OID_4_POSITION_DF2 0x18000000
#define OID_4C_POSITION_DF2 0x20000000
/******************************************************************************************************
函数声明
*******************************************************************************************************/
typedef enum
{
eHandWrite = 0,
ePointRead_2000A = 1,
ePointRead_3000A = 2,
ePointRead_LightGuide = 3,
eCar_LightGuide = 4,
}AppDevice;
extern AppDevice eAppDevice;
/*****************
void OidTaskLoop(void);
uint8_t L1_oid_TransCmd(uint8_t Cmd);
uint8_t WakeUpOID(void);
void L1_oid_RecvOptData(void);
void LogRegister(void);
uint8_t L1_oid_CheckVersionAndInit(AppDevice eAppDevice);
/*****************************/
/**********************************************************
Bit Indication
63–60 0110b
59–54 Reserved
53–45 Angle
44 Reserved
43–36 1111 0010b (Y decimal)
35–28 0111 0100b (X decimal)
27–14 00 0000 0000 0100b (Y integer)
13–0 00 0000 0000 0100b (X integer) 变量定义
******************************************************/
typedef struct _ts_OID
{
U_U64 rec;
// Data format of OID
U8 oid_type; //oid类型 :63–60 0110b
U16 angle; //Angle :53–45
U8 Ydec; //小数部分(Y decimal) :43–36 1111 0010b
U8 Xdec; //小数部分(X decimal) :35–28 0111 0100b
vU16 Yint; //整数部分(Y integer) :27–14 00 0000 0000 0100b
vU16 Xint; //整数部分(X integer) :13–0 00 0000 0000 0100b
vU16 Y100,X100; ///放大100倍的输出
vU32 gCode; //
vU32 time;
vU32 last_time;
vU32 overtime;
float x,y;//cut
vU16 pre_x,pre_y;//cut
U8 oid_x;
U8 oid_p;
}Ts_OID_;
extern Ts_OID_ ts_oid;
///extern volatile uint32_t RecvData[3];
void L0_Oid_Init(void);
uint8_t L1_oid_TransCmd(uint8_t Cmd);
void L1_print_rcv(char *str);
uint32_t L1_oidReadRegister (uint16_t Data1);
void L1_Oid_readoid(void);
uint8_t L1_OID_WakeUp(void);
void L2_oid_ParseF1(void);
void L0_oid_Recv64(void);
void L1_Oid_Rec_PRINT(void);
#endif // __OPTICALDATA__