mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-29 19:18:35 -07:00
slight em410xdecode adjustments
a little faster
This commit is contained in:
parent
84871873a4
commit
dc065b4e34
1 changed files with 4 additions and 16 deletions
|
@ -19,21 +19,9 @@ uint64_t Em410xDecode(uint8_t *BitStream, size_t size)
|
||||||
//no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future
|
//no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future
|
||||||
// otherwise could be a void with no arguments
|
// otherwise could be a void with no arguments
|
||||||
//set defaults
|
//set defaults
|
||||||
int high=0, low=255;
|
|
||||||
uint64_t lo=0;
|
uint64_t lo=0;
|
||||||
|
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
uint32_t initLoopMax = 65;
|
if (BitStream[10]>1){ //allow only 1s and 0s
|
||||||
if (initLoopMax>size) initLoopMax=size;
|
|
||||||
|
|
||||||
for (;i < initLoopMax; ++i) //65 samples should be plenty to find high and low values
|
|
||||||
{
|
|
||||||
if (BitStream[i] > high)
|
|
||||||
high = BitStream[i];
|
|
||||||
else if (BitStream[i] < low)
|
|
||||||
low = BitStream[i];
|
|
||||||
}
|
|
||||||
if (((high !=1)||(low !=0))){ //allow only 1s and 0s
|
|
||||||
// PrintAndLog("no data found");
|
// PrintAndLog("no data found");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -51,9 +39,9 @@ uint64_t Em410xDecode(uint8_t *BitStream, size_t size)
|
||||||
idx+=9;
|
idx+=9;
|
||||||
for (i=0; i<10;i++){
|
for (i=0; i<10;i++){
|
||||||
for(ii=0; ii<5; ++ii){
|
for(ii=0; ii<5; ++ii){
|
||||||
parityTest += BitStream[(i*5)+ii+idx];
|
parityTest ^= BitStream[(i*5)+ii+idx];
|
||||||
}
|
}
|
||||||
if (parityTest== ((parityTest>>1)<<1)){
|
if (!parityTest){
|
||||||
parityTest=0;
|
parityTest=0;
|
||||||
for (ii=0; ii<4;++ii){
|
for (ii=0; ii<4;++ii){
|
||||||
lo=(lo<<1LL)|(BitStream[(i*5)+ii+idx]);
|
lo=(lo<<1LL)|(BitStream[(i*5)+ii+idx]);
|
||||||
|
@ -63,7 +51,7 @@ uint64_t Em410xDecode(uint8_t *BitStream, size_t size)
|
||||||
//PrintAndLog("DEBUG: EM parity failed parity val: %d, i:%d, ii:%d,idx:%d, Buffer: %d%d%d%d%d",parityTest,i,ii,idx,BitStream[idx+ii+(i*5)-5],BitStream[idx+ii+(i*5)-4],BitStream[idx+ii+(i*5)-3],BitStream[idx+ii+(i*5)-2],BitStream[idx+ii+(i*5)-1]);
|
//PrintAndLog("DEBUG: EM parity failed parity val: %d, i:%d, ii:%d,idx:%d, Buffer: %d%d%d%d%d",parityTest,i,ii,idx,BitStream[idx+ii+(i*5)-5],BitStream[idx+ii+(i*5)-4],BitStream[idx+ii+(i*5)-3],BitStream[idx+ii+(i*5)-2],BitStream[idx+ii+(i*5)-1]);
|
||||||
parityTest=0;
|
parityTest=0;
|
||||||
idx-=8;
|
idx-=8;
|
||||||
if (resetCnt>5)return 0;
|
if (resetCnt>5)return 0; //try 5 times
|
||||||
resetCnt++;
|
resetCnt++;
|
||||||
goto restart;//continue;
|
goto restart;//continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue