chg; syntax suger

This commit is contained in:
iceman1001 2016-08-14 17:38:11 +02:00
commit af17926620

View file

@ -183,17 +183,13 @@ int CmdLFCommandRead(const char *Cmd) {
int CmdFlexdemod(const char *Cmd) int CmdFlexdemod(const char *Cmd)
{ {
int i;
for (i = 0; i < GraphTraceLen; ++i) {
if (GraphBuffer[i] < 0) {
GraphBuffer[i] = -1;
} else {
GraphBuffer[i] = 1;
}
}
#define LONG_WAIT 100 #define LONG_WAIT 100
int start; int i, j, start, bit, sum;
int phase = 0;
for (i = 0; i < GraphTraceLen; ++i)
GraphBuffer[i] = (GraphBuffer[i] < 0) ? -1 : 1;
for (start = 0; start < GraphTraceLen - LONG_WAIT; start++) { for (start = 0; start < GraphTraceLen - LONG_WAIT; start++) {
int first = GraphBuffer[start]; int first = GraphBuffer[start];
for (i = start; i < start + LONG_WAIT; i++) { for (i = start; i < start + LONG_WAIT; i++) {
@ -201,10 +197,10 @@ int CmdFlexdemod(const char *Cmd)
break; break;
} }
} }
if (i == (start + LONG_WAIT)) { if (i == (start + LONG_WAIT))
break; break;
} }
}
if (start == GraphTraceLen - LONG_WAIT) { if (start == GraphTraceLen - LONG_WAIT) {
PrintAndLog("nothing to wait for"); PrintAndLog("nothing to wait for");
return 0; return 0;
@ -214,48 +210,39 @@ int CmdFlexdemod(const char *Cmd)
GraphBuffer[start+1] = -2; GraphBuffer[start+1] = -2;
uint8_t bits[64] = {0x00}; uint8_t bits[64] = {0x00};
int bit, sum;
i = start; i = start;
for (bit = 0; bit < 64; bit++) { for (bit = 0; bit < 64; bit++) {
sum = 0; sum = 0;
for (int j = 0; j < 16; j++) { for (int j = 0; j < 16; j++) {
sum += GraphBuffer[i++]; sum += GraphBuffer[i++];
} }
bits[bit] = (sum > 0) ? 1 : 0; bits[bit] = (sum > 0) ? 1 : 0;
PrintAndLog("bit %d sum %d", bit, sum); PrintAndLog("bit %d sum %d", bit, sum);
} }
for (bit = 0; bit < 64; bit++) { for (bit = 0; bit < 64; bit++) {
int j; sum = 0;
int sum = 0; for (j = 0; j < 16; j++)
for (j = 0; j < 16; j++) {
sum += GraphBuffer[i++]; sum += GraphBuffer[i++];
}
if (sum > 0 && bits[bit] != 1) { if (sum > 0 && bits[bit] != 1) PrintAndLog("oops1 at %d", bit);
PrintAndLog("oops1 at %d", bit);
} if (sum < 0 && bits[bit] != 0) PrintAndLog("oops2 at %d", bit);
if (sum < 0 && bits[bit] != 0) {
PrintAndLog("oops2 at %d", bit);
}
} }
// HACK writing back to graphbuffer. // HACK writing back to graphbuffer.
GraphTraceLen = 32*64; GraphTraceLen = 32*64;
i = 0; i = 0;
int phase = 0;
for (bit = 0; bit < 64; bit++) { for (bit = 0; bit < 64; bit++) {
phase = (bits[bit] == 0) ? 0 : 1; phase = (bits[bit] == 0) ? 0 : 1;
int j;
for (j = 0; j < 32; j++) { for (j = 0; j < 32; j++) {
GraphBuffer[i++] = phase; GraphBuffer[i++] = phase;
phase = !phase; phase = !phase;
} }
} }
RepaintGraphWindow(); RepaintGraphWindow();
return 0; return 0;
} }
@ -270,10 +257,9 @@ int CmdIndalaDemod(const char *Cmd)
// worst case with GraphTraceLen=64000 is < 4096 // worst case with GraphTraceLen=64000 is < 4096
// under normal conditions it's < 2048 // under normal conditions it's < 2048
uint8_t rawbits[4096]; uint8_t rawbits[4096];
int rawbit = 0;
int worst = 0, worstPos = 0; int rawbit = 0, worst = 0, worstPos = 0;
// PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32); // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32);
// loop through raw signal - since we know it is psk1 rf/32 fc/2 skip every other value (+=2) // loop through raw signal - since we know it is psk1 rf/32 fc/2 skip every other value (+=2)
@ -448,8 +434,7 @@ int CmdIndalaDemod(const char *Cmd)
return 1; return 1;
} }
int CmdIndalaClone(const char *Cmd) int CmdIndalaClone(const char *Cmd){
{
UsbCommand c; UsbCommand c;
unsigned int uid1, uid2, uid3, uid4, uid5, uid6, uid7; unsigned int uid1, uid2, uid3, uid4, uid5, uid6, uid7;
@ -491,8 +476,7 @@ int CmdIndalaClone(const char *Cmd)
return 0; return 0;
} }
int CmdLFSetConfig(const char *Cmd) int CmdLFSetConfig(const char *Cmd) {
{
uint8_t divisor = 0;//Frequency divisor uint8_t divisor = 0;//Frequency divisor
uint8_t bps = 0; // Bits per sample uint8_t bps = 0; // Bits per sample
uint8_t decimation = 0; //How many to keep uint8_t decimation = 0; //How many to keep
@ -502,10 +486,8 @@ int CmdLFSetConfig(const char *Cmd)
uint8_t unsigned_trigg = 0; uint8_t unsigned_trigg = 0;
uint8_t cmdp = 0; uint8_t cmdp = 0;
while(param_getchar(Cmd, cmdp) != 0x00) while(param_getchar(Cmd, cmdp) != 0x00) {
{ switch(param_getchar(Cmd, cmdp)) {
switch(param_getchar(Cmd, cmdp))
{
case 'h': case 'h':
return usage_lf_config(); return usage_lf_config();
case 'H': case 'H':
@ -564,8 +546,7 @@ int CmdLFSetConfig(const char *Cmd)
return 0; return 0;
} }
int CmdLFRead(const char *Cmd) int CmdLFRead(const char *Cmd) {
{
bool arg1 = false; bool arg1 = false;
uint8_t cmdp = param_getchar(Cmd, 0); uint8_t cmdp = param_getchar(Cmd, 0);
@ -584,8 +565,7 @@ int CmdLFRead(const char *Cmd)
return 0; return 0;
} }
int CmdLFSnoop(const char *Cmd) int CmdLFSnoop(const char *Cmd) {
{
uint8_t cmdp = param_getchar(Cmd, 0); uint8_t cmdp = param_getchar(Cmd, 0);
if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop(); if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop();
@ -596,12 +576,9 @@ int CmdLFSnoop(const char *Cmd)
return 0; return 0;
} }
static void ChkBitstream(const char *str) static void ChkBitstream(const char *str) {
{ // convert to bitstream if necessary
int i; for (int i = 0; i < (int)(GraphTraceLen / 2); i++){
/* convert to bitstream if necessary */
for (i = 0; i < (int)(GraphTraceLen / 2); i++){
if (GraphBuffer[i] > 1 || GraphBuffer[i] < 0) { if (GraphBuffer[i] > 1 || GraphBuffer[i] < 0) {
CmdGetBitStream(""); CmdGetBitStream("");
break; break;
@ -610,8 +587,7 @@ static void ChkBitstream(const char *str)
} }
//Attempt to simulate any wave in buffer (one bit per output sample) //Attempt to simulate any wave in buffer (one bit per output sample)
// converts GraphBuffer to bitstream (based on zero crossings) if needed. // converts GraphBuffer to bitstream (based on zero crossings) if needed.
int CmdLFSim(const char *Cmd) int CmdLFSim(const char *Cmd) {
{
int i,j; int i,j;
static int gap; static int gap;
@ -655,10 +631,8 @@ int CmdLFfskSim(const char *Cmd)
int dataLen = 0; int dataLen = 0;
uint8_t cmdp = 0; uint8_t cmdp = 0;
while(param_getchar(Cmd, cmdp) != 0x00) while(param_getchar(Cmd, cmdp) != 0x00) {
{ switch(param_getchar(Cmd, cmdp)){
switch(param_getchar(Cmd, cmdp))
{
case 'h': case 'h':
return usage_lf_simfsk(); return usage_lf_simfsk();
case 'i': case 'i':
@ -838,8 +812,7 @@ int CmdLFaskSim(const char *Cmd)
// by marshmellow - sim psk data given carrier, clock, invert // by marshmellow - sim psk data given carrier, clock, invert
// - allow pull data from DemodBuffer or parameters // - allow pull data from DemodBuffer or parameters
int CmdLFpskSim(const char *Cmd) int CmdLFpskSim(const char *Cmd) {
{
//might be able to autodetect FC and clock from Graphbuffer if using demod buffer //might be able to autodetect FC and clock from Graphbuffer if using demod buffer
//will need carrier, Clock, and bitstream //will need carrier, Clock, and bitstream
uint8_t carrier=0, clk=0; uint8_t carrier=0, clk=0;
@ -850,10 +823,9 @@ int CmdLFpskSim(const char *Cmd)
int dataLen = 0; int dataLen = 0;
uint8_t cmdp = 0; uint8_t cmdp = 0;
uint8_t pskType = 1; uint8_t pskType = 1;
while(param_getchar(Cmd, cmdp) != 0x00)
{ while(param_getchar(Cmd, cmdp) != 0x00) {
switch(param_getchar(Cmd, cmdp)) switch(param_getchar(Cmd, cmdp)) {
{
case 'h': case 'h':
return usage_lf_simpsk(); return usage_lf_simpsk();
case 'i': case 'i':
@ -862,32 +834,32 @@ int CmdLFpskSim(const char *Cmd)
break; break;
case 'c': case 'c':
errors |= param_getdec(Cmd,cmdp+1,&clk); errors |= param_getdec(Cmd,cmdp+1,&clk);
cmdp+=2; cmdp +=2;
break; break;
case 'r': case 'r':
errors |= param_getdec(Cmd,cmdp+1,&carrier); errors |= param_getdec(Cmd,cmdp+1,&carrier);
cmdp+=2; cmdp += 2;
break; break;
case '1': case '1':
pskType=1; pskType = 1;
cmdp++; cmdp++;
break; break;
case '2': case '2':
pskType=2; pskType = 2;
cmdp++; cmdp++;
break; break;
case '3': case '3':
pskType=3; pskType = 3;
cmdp++; cmdp++;
break; break;
case 'd': case 'd':
dataLen = param_getstr(Cmd, cmdp+1, hexData); dataLen = param_getstr(Cmd, cmdp+1, hexData);
if (dataLen==0) { if (dataLen == 0)
errors=TRUE; errors = TRUE;
} else { else
dataLen = hextobinarray((char *)data, hexData); dataLen = hextobinarray((char *)data, hexData);
}
if (dataLen==0) errors=TRUE; if (dataLen == 0) errors = TRUE;
if (errors) PrintAndLog ("Error getting hex data"); if (errors) PrintAndLog ("Error getting hex data");
cmdp+=2; cmdp+=2;
break; break;
@ -898,28 +870,30 @@ int CmdLFpskSim(const char *Cmd)
} }
if (errors) break; if (errors) break;
} }
// No args
if (cmdp == 0 && DemodBufferLen == 0) if (cmdp == 0 && DemodBufferLen == 0)
{ errors = TRUE;
errors = TRUE;// No args
}
//Validations //Validations
if (errors) if (errors) return usage_lf_simpsk();
{
return usage_lf_simpsk();
}
if (dataLen == 0){ //using DemodBuffer if (dataLen == 0){ //using DemodBuffer
PrintAndLog("Getting Clocks"); PrintAndLog("Getting Clocks");
if (clk==0) clk = GetPskClock("", FALSE, FALSE); if (clk==0) clk = GetPskClock("", FALSE, FALSE);
PrintAndLog("clk: %d",clk); PrintAndLog("clk: %d",clk);
if (!carrier) carrier = GetPskCarrier("", FALSE, FALSE); if (!carrier) carrier = GetPskCarrier("", FALSE, FALSE);
PrintAndLog("carrier: %d", carrier); PrintAndLog("carrier: %d", carrier);
} else { } else {
setDemodBuf(data, dataLen, 0); setDemodBuf(data, dataLen, 0);
} }
if (clk <= 0) clk = 32; if (clk <= 0) clk = 32;
if (carrier == 0) carrier = 2; if (carrier == 0) carrier = 2;
if (pskType != 1){ if (pskType != 1){
if (pskType == 2){ if (pskType == 2){
//need to convert psk2 to psk1 data before sim //need to convert psk2 to psk1 data before sim
@ -931,22 +905,20 @@ int CmdLFpskSim(const char *Cmd)
uint16_t arg1, arg2; uint16_t arg1, arg2;
arg1 = clk << 8 | carrier; arg1 = clk << 8 | carrier;
arg2 = invert; arg2 = invert;
size_t size=DemodBufferLen; size_t size = DemodBufferLen;
if (size > USB_CMD_DATA_SIZE) { if (size > USB_CMD_DATA_SIZE) {
PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE); PrintAndLog("DemodBuffer too long for current implementation - length: %d - max: %d", size, USB_CMD_DATA_SIZE);
size=USB_CMD_DATA_SIZE; size = USB_CMD_DATA_SIZE;
} }
UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}}; UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}};
PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size); PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size);
memcpy(c.d.asBytes, DemodBuffer, size); memcpy(c.d.asBytes, DemodBuffer, size);
clearCommandBuffer(); clearCommandBuffer();
SendCommand(&c); SendCommand(&c);
return 0; return 0;
} }
int CmdLFSimBidir(const char *Cmd) int CmdLFSimBidir(const char *Cmd) {
{
// Set ADC to twice the carrier for a slight supersampling // Set ADC to twice the carrier for a slight supersampling
// HACK: not implemented in ARMSRC. // HACK: not implemented in ARMSRC.
PrintAndLog("Not implemented yet."); PrintAndLog("Not implemented yet.");
@ -955,8 +927,7 @@ int CmdLFSimBidir(const char *Cmd)
return 0; return 0;
} }
int CmdVchDemod(const char *Cmd) int CmdVchDemod(const char *Cmd) {
{
// Is this the entire sync pattern, or does this also include some // Is this the entire sync pattern, or does this also include some
// data bits that happen to be the same everywhere? That would be // data bits that happen to be the same everywhere? That would be
// lovely to know. // lovely to know.
@ -975,14 +946,13 @@ int CmdVchDemod(const char *Cmd)
// So first, we correlate for the sync pattern, and mark that. // So first, we correlate for the sync pattern, and mark that.
int bestCorrel = 0, bestPos = 0; int bestCorrel = 0, bestPos = 0;
int i; int i, j, sum = 0;
// It does us no good to find the sync pattern, with fewer than
// 2048 samples after it... // It does us no good to find the sync pattern, with fewer than 2048 samples after it.
for (i = 0; i < (GraphTraceLen-2048); i++) {
int sum = 0; for (i = 0; i < (GraphTraceLen - 2048); i++) {
int j;
for (j = 0; j < ARRAYLEN(SyncPattern); j++) { for (j = 0; j < ARRAYLEN(SyncPattern); j++) {
sum += GraphBuffer[i+j]*SyncPattern[j]; sum += GraphBuffer[i+j] * SyncPattern[j];
} }
if (sum > bestCorrel) { if (sum > bestCorrel) {
bestCorrel = sum; bestCorrel = sum;
@ -994,20 +964,18 @@ int CmdVchDemod(const char *Cmd)
char bits[257]; char bits[257];
bits[256] = '\0'; bits[256] = '\0';
int worst = INT_MAX; int worst = INT_MAX, worstPos = 0;
int worstPos = 0;
for (i = 0; i < 2048; i += 8) { for (i = 0; i < 2048; i += 8) {
int sum = 0; sum = 0;
int j; for (j = 0; j < 8; j++)
for (j = 0; j < 8; j++) {
sum += GraphBuffer[bestPos+i+j]; sum += GraphBuffer[bestPos+i+j];
}
if (sum < 0) { if (sum < 0)
bits[i/8] = '.'; bits[i/8] = '.';
} else { else
bits[i/8] = '1'; bits[i/8] = '1';
}
if(abs(sum) < worst) { if(abs(sum) < worst) {
worst = abs(sum); worst = abs(sum);
worstPos = i; worstPos = i;
@ -1017,11 +985,11 @@ int CmdVchDemod(const char *Cmd)
PrintAndLog("%s", bits); PrintAndLog("%s", bits);
PrintAndLog("worst metric: %d at pos %d", worst, worstPos); PrintAndLog("worst metric: %d at pos %d", worst, worstPos);
// clone
if (strcmp(Cmd, "clone")==0) { if (strcmp(Cmd, "clone")==0) {
GraphTraceLen = 0; GraphTraceLen = 0;
char *s; char *s;
for(s = bits; *s; s++) { for(s = bits; *s; s++) {
int j;
for(j = 0; j < 16; j++) { for(j = 0; j < 16; j++) {
GraphBuffer[GraphTraceLen++] = (*s == '1') ? 1 : 0; GraphBuffer[GraphTraceLen++] = (*s == '1') ? 1 : 0;
} }