Browse Source

feature:1.oid读取bsp层完成

issu01
Zhangwen 4 months ago
parent
commit
6ede45ccdd
  1. 4
      .vscode/settings.json
  2. 9
      keilp/cc_as_stc02_ps5ws.uvprojx
  3. 5
      source/app/app_config.c
  4. 28
      source/app/main.c
  5. 461
      source/bsp/bsp_oid.c
  6. 4
      source/bsp/bsp_oid.h
  7. 183
      source/bsp/bsp_oid_undelect..h
  8. 903
      source/bsp/bsp_oid_undelect.c

4
.vscode/settings.json

@ -80,6 +80,8 @@
"msp_adc.h": "c",
"system_error": "c",
"*.tcc": "c",
"ctype.h": "c"
"ctype.h": "c",
"time.h": "c",
"task_pen_head.h": "c"
}
}

9
keilp/cc_as_stc02_ps5ws.uvprojx

@ -394,9 +394,14 @@
<FilePath>..\source\app\task_w600.c</FilePath>
</File>
<File>
<FileName>task_SmartConfig.c</FileName>
<FileName>app_eeprom.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_SmartConfig.c</FilePath>
<FilePath>..\source\app\app_eeprom.c</FilePath>
</File>
<File>
<FileName>msp_adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\msp_adc.c</FilePath>
</File>
</Files>
</Group>

5
source/app/app_config.c

@ -112,7 +112,7 @@ void L3_iap_2_reg(void)
void L3_reg_reset(void)
{
U8 i = 0;
U8 i = 0;
R.app_status = POW_OFF;
@ -164,9 +164,6 @@ void L3_reg_reset(void)
G.datapkg = 0;
G.pen_t = 1;
G.debug = 1;
}

28
source/app/main.c

@ -36,10 +36,10 @@ void L0_BSP_init(void)
// WIFI初始化
L2_Wifi_init();
// OID初始化
L2_OID_init();
// L2_OID_init();
LED2 = 0;
// L0_Oid_Init();
L0_Oid_Init();
}
void L0_TASK_init(void)
{
@ -93,14 +93,34 @@ void main(void)
while(1)
{
// OID数据采集
L1_Oid_readoid();
if(1 == s_nos_tick.t1s_heartbeat)//1s
{
s_nos_tick.t1s_heartbeat = 0;//置0清空
// L0_uart0_uc('.');
L0_uart0_uc('.');
// L0_uart0_sendstr("ADC = ");
L0_uart0_us(L1_ADC_Read(12));
// L0_uart0_us(L1_ADC_Read(12));
}
if (ts_oid.ok == 1)
{
ts_oid.ok = 0;
L0_uart0_sendstr("ts_oid.Xint = ");
L0_uart0_ushex(ts_oid.Xint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Yint = ");
L0_uart0_ushex(ts_oid.Yint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Xdec = ");
L0_uart0_ushex(ts_oid.Xdec);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Ydec = ");
L0_uart0_ushex(ts_oid.Ydec);
L0_uart0_0d0a();
L0_uart0_sendstr("oid_p");
}
// // 系统状态任务
// L3_task_appstatus_handler(&_s_task_appstatus);
// // 系统状态测试任务

461
source/bsp/bsp_oid.c

@ -7,34 +7,24 @@
#include "../ctask/tick.h"
#include "../app/app_task_speech.h"
#include "../bsp/bsp_WT2605B.h"
#include "../bsp/bsp_wifi.h"
/******************************************************************************************************
*******************************************************************************************************/
AppDevice eAppDevice = ePointRead_2000A;
///volatile uint32_t RecvData[3];
Ts_OID_ ts_oid;
uint8_t TransCmd[7];
///#define MAIN_Fosc 11059260L
#if 0
#define MAIN_Fosc (12459260L/4)
#define D_DELAY_10US 10
#define D_DELAY_ROD_80US 80
#else
#define MAIN_Fosc (12459260L/2)
#define D_DELAY_10US 20
#define D_DELAY_ROD_80US 160
#endif
//========================================================================
// 函数: void delay_ms(uint8_t ms)
// 描述: 延时函数。
@ -52,7 +42,6 @@ void delay_ms(uint8_t ms)
while(--i); //10T per loop
}while(--ms);
}
void delay_us(uint8_t us)
{
// uint16_t i;
@ -63,11 +52,6 @@ void delay_us(uint8_t us)
}while(--us);
}
/******************************************************************************************************
Function:
Input:
Output:
*******************************************************************************************************/
void L0_oid_SendCmd(uint8_t Cmd)
{
uint8_t i;
@ -110,7 +94,6 @@ uint16_t L0_oid_RecvAck16(void)
uint8_t i;
uint16_t AckValue;
AckValue = 0;
///
LD_Oid_SDIO_OUT();
delay_us(D_DELAY_10US);
LD_Oid_SCK_HIGH();
@ -129,12 +112,10 @@ uint16_t L0_oid_RecvAck16(void)
{
AckValue +=1;
}
if(i < 15)
{
AckValue <<= 1;
}
delay_us(D_DELAY_10US);
}
delay_us(D_DELAY_ROD_80US);
@ -142,7 +123,6 @@ uint16_t L0_oid_RecvAck16(void)
return AckValue;
}
void L0_oid_Recv64(void)
{
uint8_t i;
@ -188,9 +168,6 @@ uint8_t L1_oid_TransCmd(uint8_t Cmd)
uint8_t TxCmd;///,det_busy;
uint32_t RxAckCnt = 0;
// L0_uart0_sendstr("\r\n w cmd=");
/// L0_uart0_uchex(Cmd);
//
while(!OID_DET)
{
L0_oid_Recv64();
@ -213,14 +190,12 @@ uint8_t L1_oid_TransCmd(uint8_t Cmd)
break;
}
}
if(RxAckCnt <= D_oid_waitrcv_delay)
{
TxCmd = (uint8_t)L0_oid_RecvAck16();
TxCmd -= 1;
if(TxCmd == Cmd)
{
L0_uart0_sendstr("\r\nCmd=");
L0_uart0_uchex(Cmd);L0_uart0_uc('-');
L0_uart0_uchex(TxCmd);
@ -231,43 +206,42 @@ uint8_t L1_oid_TransCmd(uint8_t Cmd)
uint32_t L1_oidReadRegister (uint16_t Data1)
{
uint8_t i,Ret;
uint32_t uxReturn;
uint8_t i,Ret;
uint32_t uxReturn;
TransCmd[0] = 0x74;
TransCmd[1] = 3;
TransCmd[2] = Data1 >> 8;
TransCmd[3] = Data1 & 0x00FF;
TransCmd[4] = (TransCmd[1] + TransCmd[2] + TransCmd[3]) & 0xFF;
TransCmd[0] = 0x74;
TransCmd[1] = 3;
TransCmd[2] = Data1 >> 8;
TransCmd[3] = Data1 & 0x00FF;
TransCmd[4] = (TransCmd[1] + TransCmd[2] + TransCmd[3]) & 0xFF;
for(i=0;i<5;i++)
{
for(i=0;i<5;i++)
{
Ret = L1_oid_TransCmd(TransCmd[i]);
if(Ret == 0)
{
return 0x5FFFFFFF;
}
}
i = 0;
while(1)
{
if(!OID_DET)
{
L0_oid_Recv64();
/// uxReturn = RecvData[1];
uxReturn = ts_oid.rec.d32[1];
uxReturn &= 0xFFFF;
return uxReturn;
}
delay_us(100);
i += 1;
if(i >= 20) // check 100ms
{
return 0x2FFFFFFF;
}
}
}
i = 0;
while(1)
{
if(!OID_DET)
{
L0_oid_Recv64();
//uxReturn = RecvData[1];
uxReturn = ts_oid.rec.d32[1];
uxReturn &= 0xFFFF;
return uxReturn;
}
delay_us(100);
i += 1;
if(i >= 20) // check 100ms
{
return 0x2FFFFFFF;
}
}
}
/******************************************************************************************************
@ -307,55 +281,8 @@ uint8_t Write_Register(uint16_t Data1,uint16_t Data2)
void L1_print_rcv(char *str)
{
L0_uart0_sendstr(str);
/********
// Lc_delay_ms(1);
L0_uart0_ulhex(RecvData[0]);
// Lc_delay_ms(1);
L0_uart0_uc(0x09);
L0_uart0_ulhex(RecvData[1]);
L0_uart0_uc(0x09);
**********/
/// L0_uart0_ulhex(ts_oid.rec.d32[1]);L0_uart0_uc(0x09);
///
// L0_uart0_sendArrayHex(ts_oid.rec.d,8);
///L2_oid_ParseF1();
}
/******************************************************************************************************
Function:
Input:
Output:
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
76543210 76543210 76543210 76543210
76543210 76543210 76543210 76543210
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
U16[0] U16[1] U16[2] U16[3]
111111 111111 111111 111111
5432109876543210543210987654321054321098765432105432109876543210
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
u32[0] u32[1]
3322222222221111111111 3322222222221111111111
1098765432109876543210987654321010987654321098765432109876543210
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
U16 angle; // 53–45 Angle 53,52 51 50 49,48 47 46 45
U8 Ydec; //小数部分43–36 1111 0010b (Y decimal)
U8 Xdec; //小数部分35–28 0111 0100b (X decimal)
U8 Yint; //整数部分 27–14 00 0000 0000 0100b (Y integer)
U8 Xint; //整数部分 13–0 00 0000 0000 0100b (X integer)
*******************************************************************************************************/
vU16 Lc_dec_us100(vU16 pint,u8 pdec)
{
pint *= 100;
@ -365,13 +292,11 @@ vU16 Lc_dec_us100(vU16 pint,u8 pdec)
pint -= 100;
}else
{
}
pdec *= 100;
pdec /= 128;
pint += (vU16)pdec;
return pint;
}
void L2_oid_ParseF1(void) //解析
@ -381,20 +306,7 @@ void L2_oid_ParseF1(void) //解析
// L1_print_rcv("\r\n F1=");
ts_oid.oid_type = ts_oid.rec.d[0];
R.game.type = ts_oid.rec.d[6];
R.game.dat = ts_oid.rec.d[7];
L0_uart0_sendstr("R.game.type = ");
L0_uart0_uchex(R.game.type);
L0_uart0_0d0a();
L0_uart0_sendstr("R.game.dat = ");
L0_uart0_uchex(R.game.dat);
L0_uart0_0d0a();
// R.oid.type = ts_oid.rec.d[6];
// R.oid.dat = ts_oid.rec.d[7];
L1_Oid_Rec_PRINT();
// L1_Oid_Rec_PRINT();
if(ts_oid.rec.d[0] == 0x00) // 4
{/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分
@ -403,33 +315,9 @@ void L2_oid_ParseF1(void) //解析
ts_oid.last_time = s_nos_tick.t_1s;
ts_oid.Xint = ts_oid.rec.d16[3] & 0x3fff;
#if 0
// 测试oid,led,喇叭联动
if(ts_oid.rec.d16[3] == 0x4E85)
{
L0_uart3_sendArray((U8 *)&audio_SchulteGrid,9);
LED1 = ~LED1;
}
if(ts_oid.rec.d16[3] == 0x4E86)
{
L0_uart3_sendArray((U8 *)&audio_up,9);
LED2 = ~LED2;
}
if(ts_oid.rec.d16[3] == 0x4E87)
{
L0_uart3_sendArray((U8 *)&audio_down,9);
LED3 = ~LED3;
}
if(ts_oid.rec.d16[3] == 0x4E88)
{
L0_uart3_sendArray((U8 *)&audio_zmg,9);
LED4 = ~LED4;
}
#endif
if(ts_oid.Xint < 300)///取决于图片 fixme: cc //0E87 --- 3719
{
L0_uart0_sendstr("ts_oid.Xint < 300");
ts_oid.oid_x = 1;
u32t[0] = ts_oid.rec.d32[0];
@ -441,30 +329,10 @@ void L2_oid_ParseF1(void) //解析
ts_oid.Ydec = (ts_oid.rec.d[2]<<4) | (ts_oid.rec.d[3]>>4);
///28 35
ts_oid.Xdec = (ts_oid.rec.d[3]<<4) | (ts_oid.rec.d[4]>>4);
#ifdef docsdfads
C0EC58E5 60 4D 24 23 A0 23 80 57 (12800.4500,142.5156) 105
C0EC58E5 60 4C E4 54 C0 23 40 5A (12800.5900,141.5391) 103
C0EC58E5 60 4D 44 B5 A0 23 00 5D (12800.7000,140.5859) 106
C0EC58E5 60 4D 24 AF 30 22 C0 61 (12800.9000,139.5781) 105
C0EC58E5 60 4D 24 B1 E0 22 80 64 (12800.2300,138.5859) 105
A0 23 80 57 (12800.4500,142.5156) 105
A0 23 80 57
C0 23 40 5A
A0 23 00 5D
30 22 C0 61
E0 22 80 64
1010 0000 0010 0011 1000 0000 0101 0111
3322 2222 2222 1111 1111 11
1098 7654 3210 9876 5432 1098 7654 3210
#endif
u32t[1] >>= 14;
ts_oid.Yint = (vU16)u32t[1];
ts_oid.Yint &= 0x3fff;
#if 0
if(ts_oid.Xdec&0x80)
{
@ -497,12 +365,10 @@ void L2_oid_ParseF1(void) //解析
#endif
//数据存储到寄存器
printf(" %hd %hd %hd ",
ts_oid.X100,ts_oid.Y100,
ts_oid.angle);
printf(" 1111111 %hd %hd %hd ",
ts_oid.X100,ts_oid.Y100,
ts_oid.angle);
}
else
{
@ -512,17 +378,9 @@ void L2_oid_ParseF1(void) //解析
}
else if(ts_oid.rec.d[0] == 0x40)///手写
{
//// 普通码(bit61=0)
//// Bit60:码是否有效(1:无效码;0:有效码)
//// Bit59~Bit28:保留
/// Bit27~Bit0:有效数据
/// G.oid_p = 1;
ts_oid.oid_p = 1;
ts_oid.gCode = ts_oid.rec.d32[1]&0x0fFFffFF;
/// R.oid3_order = (int)ts_oid.gCode *100;
printf(" %ld %x ",ts_oid.gCode,(int)ts_oid.gCode);
printf(" 2222222 %ld %x ",ts_oid.gCode,(int)ts_oid.gCode);
L0_uart0_ulhex(ts_oid.gCode);
}
else
@ -546,7 +404,6 @@ void L2_oid_status(void)
//L0_uart2_sendstr("456");
}
}
}
uint8_t L1_OID_WakeUp(void)
@ -557,7 +414,6 @@ uint8_t L1_OID_WakeUp(void)
LD_Oid_SCK_HIGH();
delay_ms(30);
LD_Oid_SCK_LOW();
L0_uart0_sendstr(" 44 ");
while(1)
@ -578,7 +434,6 @@ uint8_t L1_OID_WakeUp(void)
///use
L0_uart0_sendstr(" ok\r\n");
return 1;//ucCheckVersionAndInit(eAppDevice);
}
else
{
@ -588,8 +443,6 @@ uint8_t L1_OID_WakeUp(void)
}
}
}
/******************************************************************************************************
Function:
Input:
@ -598,72 +451,21 @@ Output:
void L0_Oid_Init(void)
{
LD_Oid_DIO_INIT();
/******************************************************************************************************
5430C2000A/3000A点读应用初始化设置
1 single command 0x4D
2 REG(0xD40) = 0x00 OID码0X00仅读OID3/OID2,0X10仅读OID3S0X20仅读OID4
3 single command 0x36
4 "REG(0x0DAD) = 4250 //设置AE Target
REG(0x0DB1) = 4000 //设置AE LOW
REG(0x0DAF) = 4000 //设置AE LOW
REG(0x0DB0) = 4500 //设置AE HIGH
REG(0x0DAE) = 4500 //设置AE HIGH
REG(0x1641) = 0xA0 //设置dot filter
REG(0x0D6A) = 0x3F //此项不要改动
REG(0x0D2C) = 0x3F //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
AE Range和dot filter
AE_LOW < AE_Target <AE_HIGH.
Dot filter0x40,0x50,0x60"
5
6 REG(0xD63) = 0x80
6 "i = REG(0xD63)
i &= 0xFFFE
REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
*******************************************************************************************************/
L0_uart0_sendstr("\r\nL1_OID_WakeUp3 ");
L1_OID_WakeUp();
L0_uart0_sendstr("666666");
/***
L1_oid_TransCmd(0x4D);//// 1 single command 0x4D 关闭解码
Write_Register(0x0D40,0x00); //// 2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4
L1_oid_TransCmd(0x36);///3 single command 0x36 关闭手写码侦测
Write_Register(0x0DAD,4250); //设置 AE Target 4 "REG(0x0DAD) = 4250 //设置AE Target
Write_Register(0x0DB1,4000); //设置 AE LOW
Write_Register(0x0DAF,4000); //设置 AE LOW
Write_Register(0x0DB0,4500); //设置 AE High
Write_Register(0x0DAE,4500); //设置 AE High 0x1194
Write_Register(0x1641,0xA0); //设置 dot filter
Write_Register(0x0D6A,0x3F); //此项不要改动
Write_Register(0x0D2C,0x3F); //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
******/
Write_Register(0x0D63,0x80); //cc 好像数据分辨率有区别 此项不要改动 6 REG(0xD63) = 0x80 打开解码。此命令错误改为如下命令。
///L1_oid_CheckVersionAndInit();///cc 仍然有读取错误的时候
// 6 "i = REG(0xD63)
// i &= 0xFFFE
// REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
L1_oid_TransCmd(USERCMD_20FPS);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_ANGLE);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_POSITION);//cc 必须添加
L1_oid_TransCmd(USERCMD_20FPS);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_ANGLE);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_POSITION);//cc 必须添加
printf("\r\n L0_Oid_Init finish\r\n");
printf("\r\n L0_Oid_Init finish\r\n");
///while(9)
{
L1_Oid_readoid();
}
ts_oid.ok = 0;
}
void L1_Oid_readoid(void)
@ -675,29 +477,21 @@ void L1_Oid_readoid(void)
ts_oid.pre_y = ts_oid.Y100;
L0_oid_Recv64(); //ts_oid.rec.d[i/8] <<= 1;
L2_oid_ParseF1();
ts_oid.ok = 1;
//L2_oid_status();
L1_print_rcv("\r\n ");
L0_uart0_sendstr("ts_oid.Xint = ");
L0_uart0_ushex(ts_oid.Xint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Yint = ");
L0_uart0_ushex(ts_oid.Yint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Xdec = ");
L0_uart0_ushex(ts_oid.Xdec);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Ydec = ");
L0_uart0_ushex(ts_oid.Ydec);
L0_uart0_0d0a();
L0_uart0_sendstr("oid_p");
}
else if((s_nos_tick.t_1s - ts_oid.last_time >= 2)&& (G.pen_t == 0))
{
G.pen_up = 1;
G.pen_t =1;
L0_uart0_sendstr("789");
}
/// delay_us(100);
// else if((s_nos_tick.t_1s - ts_oid.last_time >= 5) && (G.pen_t == 0))
// {
// G.pen_up = 1;
// G.pen_t =1;
// L0_uart0_sendstr("789789aabbcc");
// }
// else if((G.pen_t == 0))
// {
// G.pen_up = 1;
// G.pen_t =1;
// L0_uart0_sendstr("789789aabbcc");
// }
}
void L1_Oid_Rec_PRINT(void)
@ -754,150 +548,3 @@ void L1_Oid_Rec_PRINT(void)
}
#if 0
step1
if(!OID_DET)
{
L0_oid_Recv64();
step2
L2_oid_ParseF1();
step 3
///#ifdef doc980808
unsigned char s[64]=
{
1 , // 0
1 , // 1
1 , // 2
1 , // 3
1 , // 4
1 , // 5
1 , // 6
1 , // 7 xxxx
1 , // 8
1 , // 9
1 , // 10
1 , // 11
1 , // 12
1 , // 13
1 , // 14
1 , // 15 xxxx
1 , // 16
1 , // 17
1 , // 18
1 , // 19
1 , // 20
1 , // 21
1 , // 22
1 , // 23 xxxx
1 , // 24
1 , // 25
1 , // 26
1 , // 27
1 , // 28
1 , // 29
1 , // 30
1 , // 31 xxxx
1 , // 32
1 , // 33
1 , // 34
1 , // 35
1 , // 36
1 , // 37
1 , // 38
1 , // 39 xxxx
1 , // 40
1 , // 41
1 , // 42
1 , // 43
1 , // 44
1 , // 45
1 , // 46
1 , // 47 xxxx
1 , // 48
1 , // 49
1 , // 50
1 , // 51
1 , // 52
1 , // 53
1 , // 54
1 , // 55 xxxx
1 , // 56
1 , // 57
1 , // 58
1 , // 59
1 , // 60
1 , // 61
1 , // 62
1 // 63 xxxx
};
int x =0;
int i;
void t(void)
{RecvData[0] = 0;RecvData[1] = 0;
for(i = 0; i < 64; i++)
{
if(s[63-i])
{
if(i < 32)
{
RecvData[0] += 1;
}
if(i>=32 && i<64)
{
RecvData[1] += 1;
}
}
if(i < 31)
{
RecvData[0] <<= 1;
}
if( i >31 && i < 63)
{
RecvData[1] <<= 1;
}
}
for(i = 0; i < 64; i++)
{
ts_oid.d[i/8] <<= 1;
if(s[63-i])
{
ts_oid.d[i/8] |= 1;
}
else
{
ts_oid.d[i/8] &= 0xfe;
}
}
i =5;
}
#endif

4
source/bsp/bsp_oid.h

@ -163,6 +163,8 @@ typedef struct _ts_OID
U8 oid_x;
U8 oid_p;
U8 ok;
}Ts_OID_;
extern Ts_OID_ ts_oid;
@ -170,6 +172,8 @@ extern Ts_OID_ ts_oid;
void L0_Oid_Init(void);
extern void L2_OID_init();
uint8_t L1_oid_TransCmd(uint8_t Cmd);
void L1_print_rcv(char *str);
uint32_t L1_oidReadRegister (uint16_t Data1);

183
source/bsp/bsp_oid_undelect..h

@ -0,0 +1,183 @@
#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
6360 0110b
5954 Reserved
5345 Angle
44 Reserved
4336 1111 0010b (Y decimal)
3528 0111 0100b (X decimal)
2714 00 0000 0000 0100b (Y integer)
130 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__

903
source/bsp/bsp_oid_undelect.c

@ -0,0 +1,903 @@
#include "bsp_oid.h"
#include "intrins.h"
#include "../msp/uart0.h"
#include "../msp/uart3.h"
#include <stdio.h>
#include "../ctask/task.h"
#include "../ctask/tick.h"
#include "../app/app_task_speech.h"
#include "../bsp/bsp_WT2605B.h"
/******************************************************************************************************
*******************************************************************************************************/
AppDevice eAppDevice = ePointRead_2000A;
///volatile uint32_t RecvData[3];
Ts_OID_ ts_oid;
uint8_t TransCmd[7];
///#define MAIN_Fosc 11059260L
#if 0
#define MAIN_Fosc (12459260L/4)
#define D_DELAY_10US 10
#define D_DELAY_ROD_80US 80
#else
#define MAIN_Fosc (12459260L/2)
#define D_DELAY_10US 20
#define D_DELAY_ROD_80US 160
#endif
//========================================================================
// 函数: void delay_ms(uint8_t ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-3-9
// 备注:
//========================================================================
void delay_ms(uint8_t ms)
{
uint16_t i;
do{
i = MAIN_Fosc / 10000L;
while(--i); //10T per loop
}while(--ms);
}
void delay_us(uint8_t us)
{
// uint16_t i;
do{
// i = MAIN_Fosc / 10000000L;
// i = 1;///5 10 150u 1---50us
/// while(--i); //10T per loop
}while(--us);
}
/******************************************************************************************************
Function:
Input:
Output:
*******************************************************************************************************/
void L0_oid_SendCmd(uint8_t Cmd)
{
uint8_t i;
LD_Oid_SDIO_OUT();
LD_Oid_SCK_HIGH();
LD_Oid_SDIO_HIGH(); // Write control bit
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
delay_us(D_DELAY_10US);
for(i=0;i<8;i++)
{
LD_Oid_SCK_HIGH();
if(Cmd & 0x80)
{
LD_Oid_SDIO_HIGH();
}
else
{
LD_Oid_SDIO_LOW();
}
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
#if 0
if(i == 7)
{
LD_Oid_SDIO_IN();
}
#endif
delay_us(D_DELAY_10US);
Cmd <<= 1;
}
delay_us(D_DELAY_ROD_80US);
LD_Oid_SDIO_IN();
}
uint16_t L0_oid_RecvAck16(void)
{
uint8_t i;
uint16_t AckValue;
AckValue = 0;
///
LD_Oid_SDIO_OUT();
delay_us(D_DELAY_10US);
LD_Oid_SCK_HIGH();
LD_Oid_SDIO_LOW();
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
delay_us(D_DELAY_10US);
for(i = 0; i < 16; i++)
{
LD_Oid_SCK_HIGH();
LD_Oid_SDIO_IN()
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
if(OID_DET)
{
AckValue +=1;
}
if(i < 15)
{
AckValue <<= 1;
}
delay_us(D_DELAY_10US);
}
delay_us(D_DELAY_ROD_80US);
return AckValue;
}
void L0_oid_Recv64(void)
{
uint8_t i;
Lc_memset8bits(ts_oid.rec.d, 0, 8);
LD_Oid_SDIO_OUT();
delay_us(D_DELAY_10US);
LD_Oid_SCK_HIGH();
LD_Oid_SDIO_LOW();
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
delay_us(D_DELAY_10US);
LD_Oid_SDIO_IN()
for(i = 0; i < 64; i++)
{
LD_Oid_SCK_HIGH();
delay_us(D_DELAY_10US);
LD_Oid_SCK_LOW();
ts_oid.rec.d[i/8] <<= 1;
if(OID_DET)
{
ts_oid.rec.d[i/8] |= 1;
}
else
{
ts_oid.rec.d[i/8] &= 0xfe;
}
delay_us(D_DELAY_10US);
}
ts_oid.time = D_sys_now;
delay_us(D_DELAY_ROD_80US);
return;
}
uint8_t L1_oid_TransCmd(uint8_t Cmd)
{
uint8_t TxCmd;///,det_busy;
uint32_t RxAckCnt = 0;
// L0_uart0_sendstr("\r\n w cmd=");
/// L0_uart0_uchex(Cmd);
//
while(!OID_DET)
{
L0_oid_Recv64();
L1_print_rcv("\r\n busy: RD=");
}
TxCmd = Cmd;
L0_oid_SendCmd(TxCmd);
LD_Oid_SCK_LOW();
delay_us(10);
#define D_oid_waitrcv_delay 100000
while(OID_DET)
{
/// L1_oid_RecvOptData();
RxAckCnt ++;
if(RxAckCnt > D_oid_waitrcv_delay)
{
L0_uart0_sendstr("\r\nno rec");
L0_uart0_uchex(Cmd);
break;
}
}
if(RxAckCnt <= D_oid_waitrcv_delay)
{
TxCmd = (uint8_t)L0_oid_RecvAck16();
TxCmd -= 1;
if(TxCmd == Cmd)
{
L0_uart0_sendstr("\r\nCmd=");
L0_uart0_uchex(Cmd);L0_uart0_uc('-');
L0_uart0_uchex(TxCmd);
return 1;
}
}
}
uint32_t L1_oidReadRegister (uint16_t Data1)
{
uint8_t i,Ret;
uint32_t uxReturn;
TransCmd[0] = 0x74;
TransCmd[1] = 3;
TransCmd[2] = Data1 >> 8;
TransCmd[3] = Data1 & 0x00FF;
TransCmd[4] = (TransCmd[1] + TransCmd[2] + TransCmd[3]) & 0xFF;
for(i=0;i<5;i++)
{
Ret = L1_oid_TransCmd(TransCmd[i]);
if(Ret == 0)
{
return 0x5FFFFFFF;
}
}
i = 0;
while(1)
{
if(!OID_DET)
{
L0_oid_Recv64();
/// uxReturn = RecvData[1];
uxReturn = ts_oid.rec.d32[1];
uxReturn &= 0xFFFF;
return uxReturn;
}
delay_us(100);
i += 1;
if(i >= 20) // check 100ms
{
return 0x2FFFFFFF;
}
}
}
/******************************************************************************************************
Function:
Input:
Output:
*******************************************************************************************************/
uint8_t Write_Register(uint16_t Data1,uint16_t Data2)
{
uint8_t Ret,i;
uint16_t j;
Ret = 1;
TransCmd[0] = 0X73;
TransCmd[1] = 0x05;
j = Data1>>8;
TransCmd[2] = (uint8_t)j;
j = Data1;
TransCmd[3] = (uint8_t)j;
j = Data2>>8;
TransCmd[4] = (uint8_t)j;
j = Data2;
TransCmd[5] = (uint8_t)j;
TransCmd[6] = (TransCmd[1] + TransCmd[2] + TransCmd[3] + TransCmd[4] + TransCmd[5]);
for(i=0;i<7;i++)
{
Ret = L1_oid_TransCmd(TransCmd[i]);
if(Ret == 0)
{
break;
}
}
return Ret;
}
void L1_print_rcv(char *str)
{
L0_uart0_sendstr(str);
/********
// Lc_delay_ms(1);
L0_uart0_ulhex(RecvData[0]);
// Lc_delay_ms(1);
L0_uart0_uc(0x09);
L0_uart0_ulhex(RecvData[1]);
L0_uart0_uc(0x09);
**********/
/// L0_uart0_ulhex(ts_oid.rec.d32[1]);L0_uart0_uc(0x09);
///
// L0_uart0_sendArrayHex(ts_oid.rec.d,8);
///L2_oid_ParseF1();
}
/******************************************************************************************************
Function:
Input:
Output:
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
76543210 76543210 76543210 76543210
76543210 76543210 76543210 76543210
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
U16[0] U16[1] U16[2] U16[3]
111111 111111 111111 111111
5432109876543210543210987654321054321098765432105432109876543210
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
u32[0] u32[1]
3322222222221111111111 3322222222221111111111
1098765432109876543210987654321010987654321098765432109876543210
666655555555554444444444333333333322222222221111111111
3210987654321098765432109876543210987654321098765432109876543210
U16 angle; // 53–45 Angle 53,52 51 50 49,48 47 46 45
U8 Ydec; //小数部分43–36 1111 0010b (Y decimal)
U8 Xdec; //小数部分35–28 0111 0100b (X decimal)
U8 Yint; //整数部分 27–14 00 0000 0000 0100b (Y integer)
U8 Xint; //整数部分 13–0 00 0000 0000 0100b (X integer)
*******************************************************************************************************/
vU16 Lc_dec_us100(vU16 pint,u8 pdec)
{
pint *= 100;
if(pdec&0x80)///负数
{
pdec &= 0x7f;
pint -= 100;
}else
{
}
pdec *= 100;
pdec /= 128;
pint += (vU16)pdec;
return pint;
}
void L2_oid_ParseF1(void) //解析
{
uint16_t u16i = 0;
uint32_t u32t[2] = 0;
// L1_print_rcv("\r\n F1=");
ts_oid.oid_type = ts_oid.rec.d[0];
R.game.type = ts_oid.rec.d[6];
R.game.dat = ts_oid.rec.d[7];
L0_uart0_sendstr("R.game.type = ");
L0_uart0_uchex(R.game.type);
L0_uart0_0d0a();
L0_uart0_sendstr("R.game.dat = ");
L0_uart0_uchex(R.game.dat);
L0_uart0_0d0a();
// R.oid.type = ts_oid.rec.d[6];
// R.oid.dat = ts_oid.rec.d[7];
L1_Oid_Rec_PRINT();
if(ts_oid.rec.d[0] == 0x00) // 4
{/// Bit43~Bit0:x,y 轴的坐标数据,x 坐标和 y 坐标都是由整数和小数部分
///组成,整数部分 14bit,小数部分 8bit
G.pen_t = 0;
ts_oid.last_time = s_nos_tick.t_1s;
ts_oid.Xint = ts_oid.rec.d16[3] & 0x3fff;
#if 0
// 测试oid,led,喇叭联动
if(ts_oid.rec.d16[3] == 0x4E85)
{
L0_uart3_sendArray((U8 *)&audio_SchulteGrid,9);
LED1 = ~LED1;
}
if(ts_oid.rec.d16[3] == 0x4E86)
{
L0_uart3_sendArray((U8 *)&audio_up,9);
LED2 = ~LED2;
}
if(ts_oid.rec.d16[3] == 0x4E87)
{
L0_uart3_sendArray((U8 *)&audio_down,9);
LED3 = ~LED3;
}
if(ts_oid.rec.d16[3] == 0x4E88)
{
L0_uart3_sendArray((U8 *)&audio_zmg,9);
LED4 = ~LED4;
}
#endif
if(ts_oid.Xint < 300)///取决于图片 fixme: cc //0E87 --- 3719
{
ts_oid.oid_x = 1;
u32t[0] = ts_oid.rec.d32[0];
u32t[1] = ts_oid.rec.d32[1];
ts_oid.angle = (vU16)(u32t[0]>>13); //45-32= 13
ts_oid.angle &= 0x01ff; //53-45+1=8
///36-43
ts_oid.Ydec = (ts_oid.rec.d[2]<<4) | (ts_oid.rec.d[3]>>4);
///28 35
ts_oid.Xdec = (ts_oid.rec.d[3]<<4) | (ts_oid.rec.d[4]>>4);
#ifdef docsdfads
C0EC58E5 60 4D 24 23 A0 23 80 57 (12800.4500,142.5156) 105
C0EC58E5 60 4C E4 54 C0 23 40 5A (12800.5900,141.5391) 103
C0EC58E5 60 4D 44 B5 A0 23 00 5D (12800.7000,140.5859) 106
C0EC58E5 60 4D 24 AF 30 22 C0 61 (12800.9000,139.5781) 105
C0EC58E5 60 4D 24 B1 E0 22 80 64 (12800.2300,138.5859) 105
A0 23 80 57 (12800.4500,142.5156) 105
A0 23 80 57
C0 23 40 5A
A0 23 00 5D
30 22 C0 61
E0 22 80 64
1010 0000 0010 0011 1000 0000 0101 0111
3322 2222 2222 1111 1111 11
1098 7654 3210 9876 5432 1098 7654 3210
#endif
u32t[1] >>= 14;
ts_oid.Yint = (vU16)u32t[1];
ts_oid.Yint &= 0x3fff;
#if 0
if(ts_oid.Xdec&0x80)
{
ts_oid.x -= 1.0;
}
ts_oid.Xdec&=0x7f;
ts_oid.x = (float)ts_oid.Xdec;
ts_oid.x /= 128.0;
if(ts_oid.Xdec&0x80)
{
ts_oid.x -= 1.0;
}
ts_oid.x += ts_oid.Xint;
ts_oid.Ydec&=0x7f;
ts_oid.y = (float)ts_oid.Ydec;
ts_oid.y /= 128.0;
if(ts_oid.Ydec&0x80)
{
ts_oid.y -= 1.0;
}
ts_oid.y += ts_oid.Yint;
#else
ts_oid.X100 = Lc_dec_us100(ts_oid.Xint,ts_oid.Xdec);
ts_oid.Y100 = Lc_dec_us100(ts_oid.Yint,ts_oid.Ydec);
#endif
//数据存储到寄存器
printf(" %hd %hd %hd ",
ts_oid.X100,ts_oid.Y100,
ts_oid.angle);
}
else
{
ts_oid.oid_type = 0;
L0_uart0_uc(';');
}
}
else if(ts_oid.rec.d[0] == 0x40)///手写
{
//// 普通码(bit61=0)
//// Bit60:码是否有效(1:无效码;0:有效码)
//// Bit59~Bit28:保留
/// Bit27~Bit0:有效数据
/// G.oid_p = 1;
ts_oid.oid_p = 1;
ts_oid.gCode = ts_oid.rec.d32[1]&0x0fFFffFF;
/// R.oid3_order = (int)ts_oid.gCode *100;
printf(" %ld %x ",ts_oid.gCode,(int)ts_oid.gCode);
L0_uart0_ulhex(ts_oid.gCode);
}
else
{
ts_oid.oid_type = 0;
L0_uart0_uc(',');
}
}
void L2_oid_status(void)
{
if(G.oid_x)
{
if(ts_oid.pre_x == 0 && ts_oid.pre_y == 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
{
G.pen_down = 1;
//L0_uart2_sendstr("123");
}
else if(ts_oid.pre_x != 0 && ts_oid.pre_y != 0&& ts_oid.X100 != 0 &&ts_oid.Y100 != 0)
{
G.pen_hold = 1;
//L0_uart2_sendstr("456");
}
}
}
uint8_t L1_OID_WakeUp(void)
{
uint32_t i = 0;
LD_Oid_SCK_LOW();
delay_ms(2);
LD_Oid_SCK_HIGH();
delay_ms(30);
LD_Oid_SCK_LOW();
L0_uart0_sendstr(" 44 ");
while(1)
{
delay_ms(10);
i += 1;
if(i >= 400) // 400*5ms = 2s
{
L0_uart0_sendstr(" !!out!! ");
return 0;
}
if(!OID_DET)
{
L0_oid_Recv64();
L1_print_rcv("\r\n WakeUpOID get=");
if(ts_oid.rec.d[7] == 0xf8)
{
///use
L0_uart0_sendstr(" ok\r\n");
return 1;//ucCheckVersionAndInit(eAppDevice);
}
else
{
L0_uart0_sendstr("\r\nno?? OIDCMD_POWER_ON \r\n");
return 0;
}
}
}
}
/******************************************************************************************************
Function:
Input:
Output:
*******************************************************************************************************/
void L0_Oid_Init(void)
{
LD_Oid_DIO_INIT();
/******************************************************************************************************
5430C2000A/3000A点读应用初始化设置
1 single command 0x4D
2 REG(0xD40) = 0x00 OID码0X00仅读OID3/OID2,0X10仅读OID3S0X20仅读OID4
3 single command 0x36
4 "REG(0x0DAD) = 4250 //设置AE Target
REG(0x0DB1) = 4000 //设置AE LOW
REG(0x0DAF) = 4000 //设置AE LOW
REG(0x0DB0) = 4500 //设置AE HIGH
REG(0x0DAE) = 4500 //设置AE HIGH
REG(0x1641) = 0xA0 //设置dot filter
REG(0x0D6A) = 0x3F //此项不要改动
REG(0x0D2C) = 0x3F //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
AE Range和dot filter
AE_LOW < AE_Target <AE_HIGH.
Dot filter0x40,0x50,0x60"
5
6 REG(0xD63) = 0x80
6 "i = REG(0xD63)
i &= 0xFFFE
REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
*******************************************************************************************************/
L0_uart0_sendstr("\r\nL1_OID_WakeUp3 ");
L1_OID_WakeUp();
L0_uart0_sendstr("666666");
/***
L1_oid_TransCmd(0x4D);//// 1 single command 0x4D 关闭解码
Write_Register(0x0D40,0x00); //// 2 REG(0xD40) = 0x00 设置仅读OID码,0X00仅读OID3/OID2,0X10仅读OID3S,0X20仅读OID4
L1_oid_TransCmd(0x36);///3 single command 0x36 关闭手写码侦测
Write_Register(0x0DAD,4250); //设置 AE Target 4 "REG(0x0DAD) = 4250 //设置AE Target
Write_Register(0x0DB1,4000); //设置 AE LOW
Write_Register(0x0DAF,4000); //设置 AE LOW
Write_Register(0x0DB0,4500); //设置 AE High
Write_Register(0x0DAE,4500); //设置 AE High 0x1194
Write_Register(0x1641,0xA0); //设置 dot filter
Write_Register(0x0D6A,0x3F); //此项不要改动
Write_Register(0x0D2C,0x3F); //此项不要改动" "初始化,可不下此部分命令,若笔头配合底码识别不佳,可以下此部分命令,设置不同参数尝试。
******/
Write_Register(0x0D63,0x80); //cc 好像数据分辨率有区别 此项不要改动 6 REG(0xD63) = 0x80 打开解码。此命令错误改为如下命令。
///L1_oid_CheckVersionAndInit();///cc 仍然有读取错误的时候
// 6 "i = REG(0xD63)
// i &= 0xFFFE
// REG(0xD63) = i" 打开解码,方法是把寄存器0xD63中的数据的bit0清零,其它bit不可动。
L1_oid_TransCmd(USERCMD_20FPS);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_ANGLE);//cc 必须添加
L1_oid_TransCmd(USERCMD_EN_POSITION);//cc 必须添加
printf("\r\n L0_Oid_Init finish\r\n");
///while(9)
{
L1_Oid_readoid();
}
}
void L1_Oid_readoid(void)
{
if(!OID_DET)
{
L2_WT2605B_Broadcast(&audio_game_correct);
ts_oid.pre_x = ts_oid.X100;
ts_oid.pre_y = ts_oid.Y100;
L0_oid_Recv64(); //ts_oid.rec.d[i/8] <<= 1;
L2_oid_ParseF1();
//L2_oid_status();
L1_print_rcv("\r\n ");
L0_uart0_sendstr("ts_oid.Xint = ");
L0_uart0_ushex(ts_oid.Xint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Yint = ");
L0_uart0_ushex(ts_oid.Yint);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Xdec = ");
L0_uart0_ushex(ts_oid.Xdec);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.Ydec = ");
L0_uart0_ushex(ts_oid.Ydec);
L0_uart0_0d0a();
L0_uart0_sendstr("oid_p");
}
else if((s_nos_tick.t_1s - ts_oid.last_time >= 10)&& (G.pen_t == 0))
{
G.pen_up = 1;
G.pen_t =1;
L0_uart0_sendstr("789");
}
/// delay_us(100);
}
void L1_Oid_Rec_PRINT(void)
{
// d[7]
L0_uart0_sendstr("ts_oid.rec.d[0] = ");
L0_uart0_uchex(ts_oid.rec.d[0]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[1] = ");
L0_uart0_uchex(ts_oid.rec.d[1]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[2] = ");
L0_uart0_uchex(ts_oid.rec.d[2]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[3] = ");
L0_uart0_uchex(ts_oid.rec.d[3]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[4] = ");
L0_uart0_uchex(ts_oid.rec.d[4]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[5] = ");
L0_uart0_uchex(ts_oid.rec.d[5]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[6] = ");
L0_uart0_uchex(ts_oid.rec.d[6]);
L0_uart0_0d0a();
L0_uart0_sendstr("ts_oid.rec.d[7] = ");
L0_uart0_uchex(ts_oid.rec.d[7]);
L0_uart0_0d0a();
// // d16
// L0_uart0_sendstr("ts_oid.rec.d16[0] = ");
// L0_uart0_ushex(ts_oid.rec.d16[0]);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.rec.d16[1] = ");
// L0_uart0_ushex(ts_oid.rec.d16[1]);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.rec.d16[2] = ");
// L0_uart0_ushex(ts_oid.rec.d16[2]);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.rec.d16[3] = ");
// L0_uart0_ushex(ts_oid.rec.d16[3]);
// L0_uart0_0d0a();
// // d32
// L0_uart0_sendstr("ts_oid.rec.d32[0] = ");
// L0_uart0_ulhex(ts_oid.rec.d32[0]);
// L0_uart0_0d0a();
// L0_uart0_sendstr("ts_oid.rec.d32[1] = ");
// L0_uart0_ulhex(ts_oid.rec.d32[1]);
// L0_uart0_0d0a();
// // oid_type
// L0_uart0_sendstr("ts_oid.oid_type = ");
// L0_uart0_uchex(ts_oid.oid_type);
// L0_uart0_0d0a();
}
#if 0
step1
if(!OID_DET)
{
L0_oid_Recv64();
step2
L2_oid_ParseF1();
step 3
///#ifdef doc980808
unsigned char s[64]=
{
1 , // 0
1 , // 1
1 , // 2
1 , // 3
1 , // 4
1 , // 5
1 , // 6
1 , // 7 xxxx
1 , // 8
1 , // 9
1 , // 10
1 , // 11
1 , // 12
1 , // 13
1 , // 14
1 , // 15 xxxx
1 , // 16
1 , // 17
1 , // 18
1 , // 19
1 , // 20
1 , // 21
1 , // 22
1 , // 23 xxxx
1 , // 24
1 , // 25
1 , // 26
1 , // 27
1 , // 28
1 , // 29
1 , // 30
1 , // 31 xxxx
1 , // 32
1 , // 33
1 , // 34
1 , // 35
1 , // 36
1 , // 37
1 , // 38
1 , // 39 xxxx
1 , // 40
1 , // 41
1 , // 42
1 , // 43
1 , // 44
1 , // 45
1 , // 46
1 , // 47 xxxx
1 , // 48
1 , // 49
1 , // 50
1 , // 51
1 , // 52
1 , // 53
1 , // 54
1 , // 55 xxxx
1 , // 56
1 , // 57
1 , // 58
1 , // 59
1 , // 60
1 , // 61
1 , // 62
1 // 63 xxxx
};
int x =0;
int i;
void t(void)
{RecvData[0] = 0;RecvData[1] = 0;
for(i = 0; i < 64; i++)
{
if(s[63-i])
{
if(i < 32)
{
RecvData[0] += 1;
}
if(i>=32 && i<64)
{
RecvData[1] += 1;
}
}
if(i < 31)
{
RecvData[0] <<= 1;
}
if( i >31 && i < 63)
{
RecvData[1] <<= 1;
}
}
for(i = 0; i < 64; i++)
{
ts_oid.d[i/8] <<= 1;
if(s[63-i])
{
ts_oid.d[i/8] |= 1;
}
else
{
ts_oid.d[i/8] &= 0xfe;
}
}
i =5;
}
#endif
Loading…
Cancel
Save