// the license.
//-----------------------------------------------------------------------------
// Low frequency Presco tag commands
+// ASK/Manchester, rf/32, 128 bits (complete)
//-----------------------------------------------------------------------------
+
+#include "cmdlfpresco.h"
+
#include <string.h>
#include <inttypes.h>
-#include "cmdlfpresco.h"
-#include "proxmark3.h"
+#include <stdio.h>
+#include "comms.h"
#include "ui.h"
#include "util.h"
#include "graph.h"
*fullcode = param_get32ex(Cmd, cmdp+1, 0, 10);
cmdp+=2;
break;
- case 'P':
- case 'p':
+ case 'D':
+ case 'd':
//param get string int param_getstr(const char *line, int paramnum, char * str)
- stringlen = param_getstr(Cmd, cmdp+1, id);
+ stringlen = param_getstr(Cmd, cmdp+1, id, sizeof(id));
if (stringlen < 2) return -1;
cmdp+=2;
break;
if(cmdp == 0) errors = 1;
//Validations
- if(errors) return -1;
+ if(errors || (stringlen == 0 && !hex) ) return -1;
if (!hex) {
for (int index =0; index < strlen(id); ++index) {
return 0;
}
size_t size = DemodBufferLen;
- //call lfdemod.c demod for Viking
+ //call lfdemod.c demod for presco
int ans = PrescoDemod(DemodBuffer, &size);
if (ans < 0) {
if (g_debugMode) PrintAndLog("Error Presco_Demod %d", ans);
uint32_t cardid = raw4;
PrintAndLog("Presco Tag Found: Card ID %08X", cardid);
PrintAndLog("Raw: %08X%08X%08X%08X", raw1,raw2,raw3,raw4);
- setDemodBuf(DemodBuffer+ans, 128, 0);
-
+ setDemodBuf(DemodBuffer, 128, ans);
+ setClockGrid(g_DemodClock, g_DemodStartIdx + (ans*g_DemodClock));
+
uint32_t sitecode = 0, usercode = 0, fullcode = 0;
bool Q5=false;
char cmd[12] = {0};
// Presco Number: 123456789 --> Sitecode 30 | usercode 8665
// read lf silently
- CmdLFRead("s");
- // get samples silently
- getSamples("30000",false);
+ lf_read(true, 10000);
// demod and output Presco ID
return CmdPrescoDemod(Cmd);
}
if (GetWiegandFromPresco(Cmd, &sitecode, &usercode, &fullcode, &Q5) == -1) return usage_lf_presco_clone();
if (Q5)
- blocks[0] = T5555_MODULATION_MANCHESTER | 32<<T5555_BITRATE_SHIFT | 4<<T5555_MAXBLOCK_SHIFT | T5555_ST_TERMINATOR;
+ blocks[0] = T5555_MODULATION_MANCHESTER | ((32-2)>>1)<<T5555_BITRATE_SHIFT | 4<<T5555_MAXBLOCK_SHIFT | T5555_ST_TERMINATOR;
if ((sitecode & 0xFF) != sitecode) {
sitecode &= 0xFF;