移植到stm32f1,实现手动线赋码控制器功能
This commit is contained in:
86
source/coder/JQ_PSDGenerate.c
Normal file
86
source/coder/JQ_PSDGenerate.c
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "JQ_PSDGenerate.h"
|
||||
|
||||
/********************************************************************************************************************
|
||||
* 新版密码支持BCD码 *
|
||||
********************************************************************************************************************/
|
||||
static u32 GetSpecialCodeIndex(u8 ucSpecialCode)
|
||||
{
|
||||
if (ucSpecialCode >= '0' && ucSpecialCode <= '9')
|
||||
{
|
||||
return ucSpecialCode - 0x30;
|
||||
}
|
||||
else if (ucSpecialCode >= 'A' && ucSpecialCode <= 'Z')
|
||||
{
|
||||
return ucSpecialCode - 'A' + 10;
|
||||
}
|
||||
else if (ucSpecialCode >= 'a' && ucSpecialCode <= 'z')
|
||||
{
|
||||
return ucSpecialCode - 'a' + 36;
|
||||
}
|
||||
else
|
||||
return 63;
|
||||
}
|
||||
|
||||
static u32 GetiDateInfo(u8 *ucpDate)
|
||||
{
|
||||
u8 ucMonth = ucpDate[0]*10 + ucpDate[1];
|
||||
u8 ucDay = ucpDate[2]*10 + ucpDate[3];
|
||||
|
||||
return ucMonth << 5 | ucDay;
|
||||
}
|
||||
|
||||
//public static string GetPasswordByShellCode(string shellcode)
|
||||
//{
|
||||
// string ssp = shellcode.Substring(7, 1);
|
||||
// string sdate = shellcode.Substring(3, 4);
|
||||
// string sindex = shellcode.Substring(8, 5);
|
||||
|
||||
// UInt32 u32BCD = (UInt32)(((GetiDateInfo(sdate) & 0x1FF) << 23) |
|
||||
// ((GetSpecialCodeIndex(ssp) & 0x3F) << 17) |
|
||||
// (GetiIndex(sindex) & 0x1FFFF));
|
||||
|
||||
// return U32tohexstr(u32BCD);
|
||||
|
||||
//}
|
||||
|
||||
u8 JQ_GetPasswordByUidCode(const u8 *uidcode,u8* psd)
|
||||
{
|
||||
u8 ucSpecialCode = 0;
|
||||
u8 usaDate[4] = {0};
|
||||
u32 ulIndex = 0;
|
||||
u32 ulBCDPsd = 0;
|
||||
u8 i=0;
|
||||
|
||||
|
||||
//581900230A12345
|
||||
ucSpecialCode = uidcode[9];
|
||||
for(i=5;i<9;i++)
|
||||
usaDate[i-5] = uidcode[i]-0x30;
|
||||
|
||||
for(i=10;i<15;i++)
|
||||
{
|
||||
ulIndex *= 10;
|
||||
ulIndex += (uidcode[i]-0x30);
|
||||
}
|
||||
|
||||
ulBCDPsd = (GetiDateInfo(usaDate) & 0x1FF) << 23 |
|
||||
(GetSpecialCodeIndex(ucSpecialCode) & 0x3F) << 17 |
|
||||
ulIndex & 0x1FFFF;
|
||||
|
||||
// psd[0] = (ulBCDPsd&0xFF000000)>>24;
|
||||
// psd[1] = (ulBCDPsd&0x00FF0000)>>16;
|
||||
// psd[2] = (ulBCDPsd&0x0000FF00)>>8;
|
||||
// psd[3] = ulBCDPsd&0x000000FF;
|
||||
// 反序
|
||||
psd[3] = (ulBCDPsd&0xFF000000)>>24;
|
||||
psd[2] = (ulBCDPsd&0x00FF0000)>>16;
|
||||
psd[1] = (ulBCDPsd&0x0000FF00)>>8;
|
||||
psd[0] = ulBCDPsd&0x000000FF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
13
source/coder/JQ_PSDGenerate.h
Normal file
13
source/coder/JQ_PSDGenerate.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef __JQ_PSDGENERATE_H__
|
||||
#define __JQ_PSDGENERATE_H__
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include "stm32f10x.h"
|
||||
|
||||
|
||||
|
||||
u8 JQ_GetPasswordByUidCode(const u8 *uidcode,u8* psd);
|
||||
|
||||
|
||||
|
||||
#endif
|
250
source/coder/JQ_UIDGenerate.c
Normal file
250
source/coder/JQ_UIDGenerate.c
Normal file
@@ -0,0 +1,250 @@
|
||||
#include "JQ_UIDGenerate.h"
|
||||
#include "stm32f10x.h"
|
||||
#include "string.h"
|
||||
//#include "Common.h"
|
||||
|
||||
|
||||
static uint32_t UINT32_ENDIAN_CHANGE(uint32_t val);
|
||||
|
||||
static bool YMUid_Valid_check(uint8_t *u8ArrayYMUid);
|
||||
|
||||
static u8 _CalcCrc8(u8 *Ptr,u8 num);
|
||||
|
||||
|
||||
bool UidCode_JQ2YM(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID)
|
||||
{
|
||||
UNION_VALUE_CHANGE_TYPEDEF stDate;
|
||||
UNION_VALUE_CHANGE_TYPEDEF stSerialCode ;
|
||||
uint8_t i=0;
|
||||
uint16_t u16Year = 0;
|
||||
uint16_t u16Month = 0;
|
||||
uint8_t u8Day = 0;
|
||||
uint16_t u16Date =0;
|
||||
ST_JQUID_TYPEDEF _stJQUID;
|
||||
|
||||
u16 sum=0;
|
||||
|
||||
for(i=0;i<8;i++)
|
||||
{
|
||||
sum=sum+pstJQUID->u8ArrayJQUidCode[i];
|
||||
_stJQUID.u8ArrayJQUidCode[7-i]=pstJQUID->u8ArrayJQUidCode[i]; //逆序detid
|
||||
}
|
||||
memcpy(pstJQUID->u8ArrayJQUidCode,_stJQUID.u8ArrayJQUidCode,8);
|
||||
|
||||
if(sum == 0) //全0时,CRC码也为0,所以需要避免这种情况
|
||||
return 0;
|
||||
|
||||
|
||||
if(pstJQUID->u8ArrayJQUidCode[7] != _CalcCrc8(pstJQUID->u8ArrayJQUidCode,7))
|
||||
return false;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[0] = pstJQUID->u8ArrayJQUidCode[0]/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[1] = pstJQUID->u8ArrayJQUidCode[0]%10+0x30;
|
||||
|
||||
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[4] = pstJQUID->u8ArrayJQUidCode[1];//特征码
|
||||
|
||||
u16Date = pstJQUID->u8ArrayJQUidCode[2];
|
||||
u16Date = u16Date<<8 | pstJQUID->u8ArrayJQUidCode[3];
|
||||
|
||||
u16Year = (u16Date>>9)&0x7F;
|
||||
u16Month = (u16Date>>5)&0x0F;
|
||||
u8Day = u16Date&0x1F;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[2] = u16Year/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[3] = u16Year%10+0x30;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[5] = u16Month/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[6] = u16Month%10+0x30;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[7] = u8Day/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[8] = u8Day%10+0x30;
|
||||
|
||||
|
||||
memcpy(stSerialCode.u8Val+1,pstJQUID->u8ArrayJQUidCode+4,3);
|
||||
stSerialCode.u32Value = UINT32_ENDIAN_CHANGE( stSerialCode.u32Value);
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[DEF_YM_SPECIALCODE_INDEX] = (stSerialCode.u32Value>>17) & 0x7F;
|
||||
stSerialCode.u32Value = stSerialCode.u32Value&0x1FFFF;
|
||||
|
||||
for(i=14;i>=10;i--)
|
||||
{
|
||||
pstYMUID->ucArrayYMUidCode[i] = (stSerialCode.u32Value%10+0x30);
|
||||
stSerialCode.u32Value = stSerialCode.u32Value/10;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UidCode_JQ2YM_NoBackwardSequence(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID)
|
||||
{
|
||||
UNION_VALUE_CHANGE_TYPEDEF stDate;
|
||||
UNION_VALUE_CHANGE_TYPEDEF stSerialCode ;
|
||||
uint8_t i=0;
|
||||
uint16_t u16Year = 0;
|
||||
uint16_t u16Month = 0;
|
||||
uint8_t u8Day = 0;
|
||||
uint16_t u16Date =0;
|
||||
|
||||
if(pstJQUID->u8ArrayJQUidCode[7] != _CalcCrc8(pstJQUID->u8ArrayJQUidCode,7))
|
||||
return false;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[0] = pstJQUID->u8ArrayJQUidCode[0]/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[1] = pstJQUID->u8ArrayJQUidCode[0]%10+0x30;
|
||||
|
||||
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[4] = pstJQUID->u8ArrayJQUidCode[1];//特征码
|
||||
|
||||
u16Date = pstJQUID->u8ArrayJQUidCode[2];
|
||||
u16Date = u16Date<<8 | pstJQUID->u8ArrayJQUidCode[3];
|
||||
|
||||
u16Year = (u16Date>>9)&0x7F;
|
||||
u16Month = (u16Date>>5)&0x0F;
|
||||
u8Day = u16Date&0x1F;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[2] = u16Year/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[3] = u16Year%10+0x30;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[5] = u16Month/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[6] = u16Month%10+0x30;
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[7] = u8Day/10+0x30;
|
||||
pstYMUID->ucArrayYMUidCode[8] = u8Day%10+0x30;
|
||||
|
||||
|
||||
memcpy(stSerialCode.u8Val+1,pstJQUID->u8ArrayJQUidCode+4,3);
|
||||
stSerialCode.u32Value = UINT32_ENDIAN_CHANGE( stSerialCode.u32Value);
|
||||
|
||||
pstYMUID->ucArrayYMUidCode[DEF_YM_SPECIALCODE_INDEX] = (stSerialCode.u32Value>>17) & 0x7F;
|
||||
stSerialCode.u32Value = stSerialCode.u32Value&0x1FFFF;
|
||||
|
||||
for(i=14;i>=10;i--)
|
||||
{
|
||||
pstYMUID->ucArrayYMUidCode[i] = (stSerialCode.u32Value%10+0x30);
|
||||
stSerialCode.u32Value = stSerialCode.u32Value/10;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool UidCode_YM2JQ(PST_JQUID_TYPEDEF pstJQUID,const PST_YMUID_TYPEDEF pstYMUID)
|
||||
{
|
||||
UNION_VALUE_CHANGE_TYPEDEF stSerialCode ;
|
||||
uint8_t i=0;
|
||||
uint16_t u16Year = 0;
|
||||
uint16_t u16Month = 0;
|
||||
uint8_t u8Day = 0;
|
||||
uint16_t u16Date =0;
|
||||
|
||||
if(!YMUid_Valid_check(pstYMUID->ucArrayYMUidCode))
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
stSerialCode.u32Value = 0;
|
||||
|
||||
pstJQUID->u8ArrayJQUidCode[0] = (pstYMUID->ucArrayYMUidCode[0]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[1]-0x30);//企业代码
|
||||
pstJQUID->u8ArrayJQUidCode[1] = pstYMUID->ucArrayYMUidCode[4];//特征码
|
||||
|
||||
u16Year = (pstYMUID->ucArrayYMUidCode[2]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[3]-0x30);
|
||||
u16Month = (pstYMUID->ucArrayYMUidCode[5]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[6]-0x30);
|
||||
u8Day = (pstYMUID->ucArrayYMUidCode[7]-0x30)*10 + (pstYMUID->ucArrayYMUidCode[8]-0x30);
|
||||
u16Date = (u16Year&0x7F)<<9|(u16Month&0x0F)<<5|(u8Day&0x1F);
|
||||
pstJQUID->u8ArrayJQUidCode[2] = (u16Date&0xFF00)>>8;
|
||||
pstJQUID->u8ArrayJQUidCode[3] = (u16Date&0x00FF);
|
||||
|
||||
|
||||
for(i=10;i<15;i++)
|
||||
{
|
||||
stSerialCode.u32Value = stSerialCode.u32Value*10 + (pstYMUID->ucArrayYMUidCode[i]-0x30);
|
||||
}
|
||||
|
||||
stSerialCode.u32Value |= pstYMUID->ucArrayYMUidCode[DEF_YM_SPECIALCODE_INDEX]<<17;
|
||||
stSerialCode.u32Value = UINT32_ENDIAN_CHANGE(stSerialCode.u32Value);;
|
||||
|
||||
memcpy(pstJQUID->u8ArrayJQUidCode+4,stSerialCode.u8Val+1,3);
|
||||
|
||||
pstJQUID->u8ArrayJQUidCode[7] = _CalcCrc8(pstJQUID->u8ArrayJQUidCode,7);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================================//
|
||||
//8位CRC效验计算,只计算缓存区前6个字节
|
||||
//输入参数:需要计算数据缓存区头指针
|
||||
//返 回 值:效验值
|
||||
//============================================================================//
|
||||
static u8 _CalcCrc8(u8 *Ptr,u8 num)
|
||||
{
|
||||
u8 i,j,crc = 0;
|
||||
|
||||
for (j = 0; j < num; j++)
|
||||
{
|
||||
crc ^= *(Ptr+j);
|
||||
for ( i = 0; i < 8; i++)
|
||||
{
|
||||
if ((crc & 0x01) != 0)
|
||||
{
|
||||
crc >>= 1;
|
||||
crc ^= 0x8c;
|
||||
}
|
||||
else
|
||||
{
|
||||
crc >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
static bool YMUid_Valid_check(uint8_t *u8ArrayYMUid)
|
||||
{
|
||||
uint8_t i=0;
|
||||
uint8_t u8ValidDataCounter = 0;
|
||||
|
||||
for(i=0;i<15;i++)
|
||||
{
|
||||
if(u8ArrayYMUid[i] >= '0' && u8ArrayYMUid[i] <= '9')
|
||||
{
|
||||
u8ValidDataCounter++;
|
||||
continue;
|
||||
}
|
||||
if(u8ArrayYMUid[i] >= 'A' && u8ArrayYMUid[i] <= 'Z')
|
||||
{
|
||||
u8ValidDataCounter++;
|
||||
continue;
|
||||
}
|
||||
if(u8ArrayYMUid[i] >= 'a' && u8ArrayYMUid[i] <= 'z')
|
||||
{
|
||||
u8ValidDataCounter++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(u8ValidDataCounter < 7)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static uint32_t UINT32_ENDIAN_CHANGE(uint32_t val)
|
||||
{
|
||||
|
||||
return ((( val & 0x000000ff)<< 24 ) | ( ( val & 0x0000ff00 ) << 8 ) | ( ( val & 0x00ff0000 ) >> 8 ) | ( ( val & 0xff000000 ) >> 24 ));
|
||||
}
|
||||
|
37
source/coder/JQ_UIDGenerate.h
Normal file
37
source/coder/JQ_UIDGenerate.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef __JQ_UIDGENERATE_H__
|
||||
#define __JQ_UIDGENERATE_H__
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include "stm32f10x.h"
|
||||
|
||||
|
||||
|
||||
#define DEF_YM_SPECIALCODE_INDEX 9
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct
|
||||
{
|
||||
unsigned char ucArrayYMUidCode[15];
|
||||
}ST_YMUID_TYPEDEF,*PST_YMUID_TYPEDEF;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t u8ArrayJQUidCode[8];
|
||||
}ST_JQUID_TYPEDEF,*PST_JQUID_TYPEDEF;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint32_t u32Value;
|
||||
uint8_t u8Val[4];
|
||||
}UNION_VALUE_CHANGE_TYPEDEF,*PST_VALUE_CHANGE_TYPEDEF;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
bool UidCode_YM2JQ(PST_JQUID_TYPEDEF pstJQUID,const PST_YMUID_TYPEDEF pstYMUID);
|
||||
|
||||
bool UidCode_JQ2YM(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID);
|
||||
|
||||
bool UidCode_JQ2YM_NoBackwardSequence(const PST_JQUID_TYPEDEF pstJQUID,PST_YMUID_TYPEDEF pstYMUID);
|
||||
|
||||
#endif
|
||||
|
@@ -197,12 +197,91 @@ uint8_t coder_judge(const uint8_t *data)
|
||||
}
|
||||
|
||||
// 检测电容
|
||||
TASK_FIND_NEXT(8);
|
||||
TASK_FIND_NEXT(12);
|
||||
temp=TASK_DATA(0);
|
||||
if((temp>task->range[0].max)||(temp<task->range[0].min))
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
// temp=TASK_DATA(1);
|
||||
// if((temp>task->range[1].max)||(temp<task->range[1].min))
|
||||
// {
|
||||
// return 2;
|
||||
// }
|
||||
// temp=TASK_DATA(2);
|
||||
// if((temp>task->range[2].max)||(temp<task->range[2].min))
|
||||
// {
|
||||
// return 2;
|
||||
// }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
uint8_t coder_judge_jq(const uint8_t *data)
|
||||
{
|
||||
int temp,temp2;
|
||||
int index=0;
|
||||
const scheme_task_def *task=0;
|
||||
|
||||
// 开总线
|
||||
TASK_FIND_NEXT(0);
|
||||
{
|
||||
if(get_ack(data,0))
|
||||
{
|
||||
// 上电错误,检测器异常
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// 上电充能
|
||||
TASK_FIND_NEXT(1);
|
||||
{
|
||||
temp=TASK_DATA(0);
|
||||
if(temp<task->range[0].min)
|
||||
{
|
||||
// 电压无法上升,检测器异常
|
||||
return 1;
|
||||
}
|
||||
temp=TASK_DATA(1);
|
||||
if((temp>39000)||(temp<1)){
|
||||
// 充能失败,检测电流
|
||||
}
|
||||
}
|
||||
|
||||
// 检测uid
|
||||
int chip_err=0;
|
||||
TASK_FIND_NEXT(4);
|
||||
if(get_ack(data,task->taskindex))
|
||||
{
|
||||
// 芯片错误
|
||||
chip_err=5;
|
||||
}
|
||||
|
||||
// 检测电流
|
||||
TASK_FIND_NEXT(3);
|
||||
temp=TASK_DATA(0);
|
||||
temp2=TASK_DATA(1);
|
||||
if((temp<10)&&(temp2<10))
|
||||
{
|
||||
// 接触异常
|
||||
return 3;
|
||||
}
|
||||
else if(((temp>task->range[0].max)&&(temp<1500))||
|
||||
((temp2>task->range[0].max)&&(temp2<1500)))
|
||||
{
|
||||
// 过流
|
||||
return 7;
|
||||
}else if((temp>1500)&&(temp2>1500))
|
||||
{
|
||||
// 短路
|
||||
return 8;
|
||||
}
|
||||
|
||||
// 检测电容
|
||||
TASK_FIND_NEXT(11);
|
||||
temp=TASK_DATA(1);
|
||||
if((temp>task->range[1].max)||(temp<task->range[1].min))
|
||||
{
|
||||
@@ -214,8 +293,27 @@ uint8_t coder_judge(const uint8_t *data)
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return chip_err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 根据方案获取模块芯片类型
|
||||
int coder_extract_chip(int id)
|
||||
{
|
||||
const scheme_def *s=check_scheme();
|
||||
if(id==0) id=s->plan_id;
|
||||
// 日bit0~bit4 月bit5~bit8 年bit9~bit15
|
||||
int sid=(id>>0)&0x7f;
|
||||
int modele=(id>>7)&0x1f;
|
||||
int chip=(id>>12)&0xf;
|
||||
int day=(id>>16)&0x1f;
|
||||
int month=(id>>21)&0xf;
|
||||
int year=((id>>25)&0x7f)+2022;
|
||||
return chip;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -7,7 +7,9 @@
|
||||
|
||||
uint8_t coder_judge(const uint8_t *data);
|
||||
|
||||
uint8_t coder_judge_jq(const uint8_t *data);
|
||||
|
||||
int coder_extract_chip(int id);
|
||||
|
||||
|
||||
|
||||
|
@@ -111,6 +111,27 @@ int coder_shell_to_uid(const char *year,const char *shell_code,char *uid_code)
|
||||
|
||||
|
||||
|
||||
// JQ管壳码转uid码
|
||||
int coder_shell_to_uid_jq(const char *year,const char *shell_code,char *uid_code)
|
||||
{
|
||||
int ret=0;
|
||||
memset(uid_code,0,16);
|
||||
// 添加雷管厂代号(2byte)
|
||||
memcpy(&uid_code[0],&shell_code[0],2);
|
||||
// 添加年份(2y=byte)
|
||||
ret=coder_calc_year(year,shell_code[2],&uid_code[2]);
|
||||
// 添加0(1byte)
|
||||
memcpy(&uid_code[4],"0",1);
|
||||
// 添加月日特征码流水号
|
||||
memcpy(&uid_code[5], &shell_code[3],10);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 转换hex字符串为一个byte
|
||||
static int coder_strhex_to_byte(const char *str_hex)
|
||||
{
|
||||
@@ -212,3 +233,5 @@ int coder_uid_to_shell(const char *uid_code,char *shell_code)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -26,7 +26,8 @@ int coder_uid_to_shell(const char *uid_code,char *shell_code);
|
||||
|
||||
|
||||
|
||||
|
||||
// JQ管壳码转UID
|
||||
int coder_shell_to_uid_jq(const char *year,const char *shell_code,char *uid_code);
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user