slight em410xdecode adjustments

a little faster
This commit is contained in:
marshmellow42 2015-01-13 17:52:48 -05:00
parent 84871873a4
commit dc065b4e34

View file

@ -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;
} }