ADD: removed the paritythingy, I missunderstood its purpose.

This commit is contained in:
iceman1001 2015-06-03 22:38:59 +02:00
parent 7f96433c8a
commit 22a6a62fbb

View file

@ -1463,6 +1463,19 @@ int CmdFSKdemodPyramid(const char *Cmd)
// NATIONAL CODE, ICAR database // NATIONAL CODE, ICAR database
// COUNTRY CODE (ISO3166) // COUNTRY CODE (ISO3166)
// FLAG (animal/non-animal) // FLAG (animal/non-animal)
/*
38 IDbits
10 country code
1 extra app bit
14 reserved bits
1 animal bit
16 ccitt CRC chksum over 64bit ID CODE.
24 appli bits.
-- sample: 985121004515220
Now is nibble shifting, byte shifting.
*/
int CmdIso11784demodBI(const char *Cmd){ int CmdIso11784demodBI(const char *Cmd){
int invert = 1; int invert = 1;
@ -1482,44 +1495,41 @@ int CmdIso11784demodBI(const char *Cmd){
if (g_debugMode) PrintAndLog("Error BiphaseRawDecode: %d", errCnt); if (g_debugMode) PrintAndLog("Error BiphaseRawDecode: %d", errCnt);
return 0; return 0;
} }
int preambleIndex = ISO11784demodBI(BitStream, &size); int preambleIndex = ISO11784demodBI(BitStream, &size);
if (preambleIndex < 0){ if (preambleIndex < 0){
if (g_debugMode) PrintAndLog("Error ISO11784Demod , no startmarker found :: %d",preambleIndex); if (g_debugMode) PrintAndLog("Error ISO11784Demod , no startmarker found :: %d",preambleIndex);
return 0; return 0;
} }
size = removeParity(BitStream, preambleIndex + 11, 9, 1, 128);
if ( size <= 0 ) {
if (g_debugMode) PrintAndLog("Error removeParity:: %d", size);
return 0;
}
PrintAndLog("startmarker %d; Size %d", preambleIndex, size); PrintAndLog("startmarker %d; Size %d", preambleIndex, size);
return 1;
//got a good demod //got a good demod
uint8_t ByteStream[16] = {0x00}; uint8_t ByteStream[16] = {0x00};
uint8_t bitCnt = 0; uint8_t bitCnt = 0;
uint8_t ByteCnt = 0; uint8_t ByteCnt = 0;
size_t startIdx = preambleIndex + 11; //start after preamble size_t startIdx = preambleIndex + 11; //start after preamble
for (size_t idx = 0; idx < size-11; idx++){ for (size_t idx = 0; idx < size; idx++){
if ( bitCnt == 9 ){
bitCnt = 0;
continue;
}
//lsb first //lsb first
ByteStream[ByteCnt] = ByteStream[ByteCnt] | (BitStream[startIdx+idx] << bitCnt); ByteStream[ByteCnt] |= ( BitStream[startIdx+idx] << bitCnt );
bitCnt++; bitCnt++;
if (bitCnt % 8 == 0){ if (bitCnt % 8 == 0){
if (g_debugMode) PrintAndLog("byte %d: %02x", ByteCnt, ByteStream[ByteCnt]); if (g_debugMode) PrintAndLog("byte %d: %02x", ByteCnt, ByteStream[ByteCnt]);
bitCnt = 0; bitCnt = 9;
ByteCnt++; ByteCnt++;
} }
} }
PrintAndLog("DATA: %s", sprint_hex(ByteStream, 14));
//now ByteStream contains 16 bytes of decrypted raw tag data //now ByteStream contains 16 bytes of decrypted raw tag data
setDemodBuf(ByteStream, 128, 0); setDemodBuf(BitStream+preambleIndex, 128, 0);
//printDemodBuff(); printDemodBuff();
return 1; return 1;
} }