diff --git a/.vscode/settings.json b/.vscode/settings.json
index b75f5ca..c1febf6 100644
--- a/.vscode/settings.json
+++ b/.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"
}
}
\ No newline at end of file
diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx
index fc2b632..29bc1aa 100644
--- a/keilp/cc_as_stc02_ps5ws.uvprojx
+++ b/keilp/cc_as_stc02_ps5ws.uvprojx
@@ -394,9 +394,14 @@
..\source\app\task_w600.c
- task_SmartConfig.c
+ app_eeprom.c
1
- ..\source\app\task_SmartConfig.c
+ ..\source\app\app_eeprom.c
+
+
+ msp_adc.c
+ 1
+ ..\source\msp\msp_adc.c
diff --git a/source/app/app_config.c b/source/app/app_config.c
index 67cf09d..f121cd5 100644
--- a/source/app/app_config.c
+++ b/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;
-
-
-
}
diff --git a/source/app/main.c b/source/app/main.c
index 078269b..49fcab7 100644
--- a/source/app/main.c
+++ b/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);
// // 系统状态测试任务
diff --git a/source/bsp/bsp_oid.c b/source/bsp/bsp_oid.c
index 5a5e0df..87b5c12 100644
--- a/source/bsp/bsp_oid.c
+++ b/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;
@@ -187,10 +167,7 @@ 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];
@@ -440,31 +328,11 @@ void L2_oid_ParseF1(void) //解析
///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
+ ts_oid.Xdec = (ts_oid.rec.d[3]<<4) | (ts_oid.rec.d[4]>>4);
+
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仅读OID3S,0X20仅读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 = 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
-
diff --git a/source/bsp/bsp_oid.h b/source/bsp/bsp_oid.h
index d5503f0..72eda30 100644
--- a/source/bsp/bsp_oid.h
+++ b/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);
diff --git a/source/bsp/bsp_oid_undelect..h b/source/bsp/bsp_oid_undelect..h
new file mode 100644
index 0000000..d5503f0
--- /dev/null
+++ b/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
+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__
+
diff --git a/source/bsp/bsp_oid_undelect.c b/source/bsp/bsp_oid_undelect.c
new file mode 100644
index 0000000..325cb32
--- /dev/null
+++ b/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
+#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仅读OID3S,0X20仅读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 = 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
+