8 changed files with 1181 additions and 420 deletions
@ -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__
|
||||
|
|
@ -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仅读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 <AE_HIGH. |
||||
|
Dot filter,要设置整数倍,比如0x40,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…
Reference in new issue