code cleanup. re-added psk commands.

also fixed a bug in detect clock functions.
sync with master prep for pull request
This commit is contained in:
marshmellow42 2015-01-06 23:29:45 -05:00
parent c07b79fcbf
commit ba1a299ce6
7 changed files with 4174 additions and 3841 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -20,61 +20,61 @@ int GraphTraceLen;
/* write a bit to the graph */ /* write a bit to the graph */
void AppendGraph(int redraw, int clock, int bit) void AppendGraph(int redraw, int clock, int bit)
{ {
int i; int i;
for (i = 0; i < (int)(clock / 2); ++i) for (i = 0; i < (int)(clock / 2); ++i)
GraphBuffer[GraphTraceLen++] = bit ^ 1; GraphBuffer[GraphTraceLen++] = bit ^ 1;
for (i = (int)(clock / 2); i < clock; ++i)
GraphBuffer[GraphTraceLen++] = bit;
if (redraw) for (i = (int)(clock / 2); i < clock; ++i)
RepaintGraphWindow(); GraphBuffer[GraphTraceLen++] = bit;
if (redraw)
RepaintGraphWindow();
} }
/* clear out our graph window */ /* clear out our graph window */
int ClearGraph(int redraw) int ClearGraph(int redraw)
{ {
int gtl = GraphTraceLen; int gtl = GraphTraceLen;
GraphTraceLen = 0; GraphTraceLen = 0;
if (redraw) if (redraw)
RepaintGraphWindow(); RepaintGraphWindow();
return gtl; return gtl;
} }
/* /*
* Detect clock rate * Detect clock rate
*/ */
//decommissioned - has difficulty detecting rf/32 //decommissioned - has difficulty detecting rf/32
/* /*
int DetectClockOld(int peak) int DetectClockOld(int peak)
{ {
int i; int i;
int clock = 0xFFFF; int clock = 0xFFFF;
int lastpeak = 0; int lastpeak = 0;
// Detect peak if we don't have one // Detect peak if we don't have one
if (!peak) if (!peak)
for (i = 0; i < GraphTraceLen; ++i) for (i = 0; i < GraphTraceLen; ++i)
if (GraphBuffer[i] > peak) if (GraphBuffer[i] > peak)
peak = GraphBuffer[i]; peak = GraphBuffer[i];
// peak=(int)(peak*.75); // peak=(int)(peak*.75);
for (i = 1; i < GraphTraceLen; ++i) for (i = 1; i < GraphTraceLen; ++i)
{ {
// If this is the beginning of a peak // If this is the beginning of a peak
if (GraphBuffer[i - 1] != GraphBuffer[i] && GraphBuffer[i] >= peak) if (GraphBuffer[i - 1] != GraphBuffer[i] && GraphBuffer[i] >= peak)
{ {
// Find lowest difference between peaks // Find lowest difference between peaks
if (lastpeak && i - lastpeak < clock) if (lastpeak && i - lastpeak < clock)
clock = i - lastpeak; clock = i - lastpeak;
lastpeak = i; lastpeak = i;
} }
} }
return clock; return clock;
} }
*/ */
/* /*
@ -85,155 +85,155 @@ NOW IN LFDEMOD.C
// maybe somehow adjust peak trimming value based on samples to fix? // maybe somehow adjust peak trimming value based on samples to fix?
int DetectASKClock(int peak) int DetectASKClock(int peak)
{ {
int i=0; int i=0;
int low=0; int low=0;
int clk[]={16,32,40,50,64,100,128,256}; int clk[]={16,32,40,50,64,100,128,256};
int loopCnt = 256; int loopCnt = 256;
if (GraphTraceLen<loopCnt) loopCnt = GraphTraceLen; if (GraphTraceLen<loopCnt) loopCnt = GraphTraceLen;
if (!peak){ if (!peak){
for (i=0;i<loopCnt;++i){ for (i=0;i<loopCnt;++i){
if(GraphBuffer[i]>peak){ if(GraphBuffer[i]>peak){
peak = GraphBuffer[i]; peak = GraphBuffer[i];
} }
if(GraphBuffer[i]<low){ if(GraphBuffer[i]<low){
low = GraphBuffer[i]; low = GraphBuffer[i];
} }
} }
peak=(int)(peak*.75); peak=(int)(peak*.75);
low= (int)(low*.75); low= (int)(low*.75);
} }
int ii; int ii;
int clkCnt; int clkCnt;
int tol = 0; int tol = 0;
int bestErr=1000; int bestErr=1000;
int errCnt[]={0,0,0,0,0,0,0,0}; int errCnt[]={0,0,0,0,0,0,0,0};
for(clkCnt=0; clkCnt<6;++clkCnt){ for(clkCnt=0; clkCnt<6;++clkCnt){
if (clk[clkCnt]==32){ if (clk[clkCnt]==32){
tol=1; tol=1;
}else{ }else{
tol=0; tol=0;
} }
bestErr=1000; bestErr=1000;
for (ii=0; ii<loopCnt; ++ii){ for (ii=0; ii<loopCnt; ++ii){
if ((GraphBuffer[ii]>=peak) || (GraphBuffer[ii]<=low)){ if ((GraphBuffer[ii]>=peak) || (GraphBuffer[ii]<=low)){
errCnt[clkCnt]=0; errCnt[clkCnt]=0;
for (i=0; i<((int)(GraphTraceLen/clk[clkCnt])-1); ++i){ for (i=0; i<((int)(GraphTraceLen/clk[clkCnt])-1); ++i){
if (GraphBuffer[ii+(i*clk[clkCnt])]>=peak || GraphBuffer[ii+(i*clk[clkCnt])]<=low){ if (GraphBuffer[ii+(i*clk[clkCnt])]>=peak || GraphBuffer[ii+(i*clk[clkCnt])]<=low){
}else if(GraphBuffer[ii+(i*clk[clkCnt])-tol]>=peak || GraphBuffer[ii+(i*clk[clkCnt])-tol]<=low){ }else if(GraphBuffer[ii+(i*clk[clkCnt])-tol]>=peak || GraphBuffer[ii+(i*clk[clkCnt])-tol]<=low){
}else if(GraphBuffer[ii+(i*clk[clkCnt])+tol]>=peak || GraphBuffer[ii+(i*clk[clkCnt])+tol]<=low){ }else if(GraphBuffer[ii+(i*clk[clkCnt])+tol]>=peak || GraphBuffer[ii+(i*clk[clkCnt])+tol]<=low){
}else{ //error no peak detected }else{ //error no peak detected
errCnt[clkCnt]++; errCnt[clkCnt]++;
} }
} }
if(errCnt[clkCnt]==0) return clk[clkCnt]; if(errCnt[clkCnt]==0) return clk[clkCnt];
if(errCnt[clkCnt]<bestErr) bestErr=errCnt[clkCnt]; if(errCnt[clkCnt]<bestErr) bestErr=errCnt[clkCnt];
} }
} }
} }
int iii=0; int iii=0;
int best=0; int best=0;
for (iii=0; iii<6;++iii){ for (iii=0; iii<6;++iii){
if (errCnt[iii]<errCnt[best]){ if (errCnt[iii]<errCnt[best]){
best = iii; best = iii;
} }
} }
// PrintAndLog("DEBUG: clkCnt: %d, ii: %d, i: %d peak: %d, low: %d, errcnt: %d, errCnt64: %d",clkCnt,ii,i,peak,low,errCnt[best],errCnt[4]); // PrintAndLog("DEBUG: clkCnt: %d, ii: %d, i: %d peak: %d, low: %d, errcnt: %d, errCnt64: %d",clkCnt,ii,i,peak,low,errCnt[best],errCnt[4]);
return clk[best]; return clk[best];
} }
*/ */
void setGraphBuf(uint8_t *buff,int size) void setGraphBuf(uint8_t *buff, size_t size)
{ {
int i=0; int i=0;
ClearGraph(0); ClearGraph(0);
for (; i < size; ++i){ for (; i < size; ++i){
GraphBuffer[i]=buff[i]-128; GraphBuffer[i]=buff[i]-128;
} }
GraphTraceLen=size; GraphTraceLen=size;
RepaintGraphWindow(); RepaintGraphWindow();
return; return;
} }
int getFromGraphBuf(uint8_t *buff) size_t getFromGraphBuf(uint8_t *buff)
{ {
uint32_t i; uint32_t i;
for (i=0;i<GraphTraceLen;++i){ for (i=0;i<GraphTraceLen;++i){
if (GraphBuffer[i]>127) GraphBuffer[i]=127; //trim if (GraphBuffer[i]>127) GraphBuffer[i]=127; //trim
if (GraphBuffer[i]<-127) GraphBuffer[i]=-127; //trim if (GraphBuffer[i]<-127) GraphBuffer[i]=-127; //trim
buff[i]=(uint8_t)(GraphBuffer[i]+128); buff[i]=(uint8_t)(GraphBuffer[i]+128);
} }
return i; return i;
} }
/* Get or auto-detect clock rate */ /* Get or auto-detect clock rate */
int GetClock(const char *str, int peak, int verbose) int GetClock(const char *str, int peak, int verbose)
{ {
int clock; int clock;
// int clock2; // int clock2;
sscanf(str, "%i", &clock); sscanf(str, "%i", &clock);
if (!strcmp(str, "")) if (!strcmp(str, ""))
clock = 0; clock = 0;
/* Auto-detect clock */ /* Auto-detect clock */
if (!clock) if (!clock)
{ {
uint8_t grph[MAX_GRAPH_TRACE_LEN]={0}; uint8_t grph[MAX_GRAPH_TRACE_LEN]={0};
int size = getFromGraphBuf(grph); size_t size = getFromGraphBuf(grph);
clock = DetectASKClock(grph,size,0); clock = DetectASKClock(grph,size,0);
//clock2 = DetectClock2(peak); //clock2 = DetectClock2(peak);
/* Only print this message if we're not looping something */ /* Only print this message if we're not looping something */
if (!verbose){ if (!verbose){
PrintAndLog("Auto-detected clock rate: %d", clock); PrintAndLog("Auto-detected clock rate: %d", clock);
//PrintAndLog("clock2: %d",clock2); //PrintAndLog("clock2: %d",clock2);
} }
} }
return clock; return clock;
} }
int GetNRZpskClock(const char *str, int peak, int verbose) int GetNRZpskClock(const char *str, int peak, int verbose)
{ {
// return GetClock(str,peak,verbose); // return GetClock(str,peak,verbose);
int clock; int clock;
// int clock2; // int clock2;
sscanf(str, "%i", &clock); sscanf(str, "%i", &clock);
if (!strcmp(str, "")) if (!strcmp(str, ""))
clock = 0; clock = 0;
/* Auto-detect clock */ /* Auto-detect clock */
if (!clock) if (!clock)
{ {
uint8_t grph[MAX_GRAPH_TRACE_LEN]={0}; uint8_t grph[MAX_GRAPH_TRACE_LEN]={0};
int size = getFromGraphBuf(grph); size_t size = getFromGraphBuf(grph);
clock = DetectpskNRZClock(grph,size,0); clock = DetectpskNRZClock(grph,size,0);
//clock2 = DetectClock2(peak); //clock2 = DetectClock2(peak);
/* Only print this message if we're not looping something */ /* Only print this message if we're not looping something */
if (!verbose){ if (!verbose){
PrintAndLog("Auto-detected clock rate: %d", clock); PrintAndLog("Auto-detected clock rate: %d", clock);
//PrintAndLog("clock2: %d",clock2); //PrintAndLog("clock2: %d",clock2);
} }
} }
return clock; return clock;
} }
// Get or auto-detect clock rate // Get or auto-detect clock rate
/* /*
int GetNRZpskClock(const char *str, int peak, int verbose) int GetNRZpskClock(const char *str, int peak, int verbose)
{ {
int clock; int clock;
// int clock2; // int clock2;
sscanf(str, "%i", &clock); sscanf(str, "%i", &clock);
if (!strcmp(str, "")) if (!strcmp(str, ""))
clock = 0; clock = 0;
// Auto-detect clock // Auto-detect clock
if (!clock) if (!clock)
{ {
uint8_t grph[MAX_GRAPH_TRACE_LEN]={0}; uint8_t grph[MAX_GRAPH_TRACE_LEN]={0};
int size = getFromGraphBuf(grph); int size = getFromGraphBuf(grph);
clock = DetectASKClock(grph,size,0); clock = DetectASKClock(grph,size,0);
//clock2 = DetectClock2(peak); //clock2 = DetectClock2(peak);
// Only print this message if we're not looping something // Only print this message if we're not looping something
if (!verbose){ if (!verbose){
PrintAndLog("Auto-detected clock rate: %d", clock); PrintAndLog("Auto-detected clock rate: %d", clock);
//PrintAndLog("clock2: %d",clock2); //PrintAndLog("clock2: %d",clock2);
} }
} }
return clock; return clock;
} }
*/ */

View file

@ -15,10 +15,10 @@
void AppendGraph(int redraw, int clock, int bit); void AppendGraph(int redraw, int clock, int bit);
int ClearGraph(int redraw); int ClearGraph(int redraw);
//int DetectClock(int peak); //int DetectClock(int peak);
int getFromGraphBuf(uint8_t *buff); size_t getFromGraphBuf(uint8_t *buff);
int GetClock(const char *str, int peak, int verbose); int GetClock(const char *str, int peak, int verbose);
int GetNRZpskClock(const char *str, int peak, int verbose); int GetNRZpskClock(const char *str, int peak, int verbose);
void setGraphBuf(uint8_t *buff,int size); void setGraphBuf(uint8_t *buff, size_t size);
#define MAX_GRAPH_TRACE_LEN (1024*128) #define MAX_GRAPH_TRACE_LEN (1024*128)
extern int GraphBuffer[MAX_GRAPH_TRACE_LEN]; extern int GraphBuffer[MAX_GRAPH_TRACE_LEN];

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
// Copyright (C) 2014 // Copyright (C) 2014
// //
// This code is licensed to you under the terms of the GNU GPL, version 2 or, // This code is licensed to you under the terms of the GNU GPL, version 2 or,
// at your option, any later version. See the LICENSE.txt file for the text of // at your option, any later version. See the LICENSE.txt file for the text of
@ -12,14 +12,18 @@
#include <stdint.h> #include <stdint.h>
int DetectASKClock(uint8_t dest[], size_t size, int clock); int DetectASKClock(uint8_t dest[], size_t size, int clock);
int askmandemod(uint8_t *BinStream,uint32_t *BitLen,int *clk, int *invert); int askmandemod(uint8_t *BinStream, size_t *size, int *clk, int *invert);
uint64_t Em410xDecode(uint8_t *BitStream,uint32_t BitLen); uint64_t Em410xDecode(uint8_t *BitStream,size_t size);
int manrawdecode(uint8_t *BitStream, int *bitLen); int manrawdecode(uint8_t *BitStream, size_t *size);
int BiphaseRawDecode(uint8_t * BitStream, int *bitLen, int offset); int BiphaseRawDecode(uint8_t * BitStream, size_t *size, int offset);
int askrawdemod(uint8_t *BinStream, int *bitLen,int *clk, int *invert); int askrawdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert);
int HIDdemodFSK(uint8_t *dest, size_t size, uint32_t *hi2, uint32_t *hi, uint32_t *lo); int HIDdemodFSK(uint8_t *dest, size_t size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
int IOdemodFSK(uint8_t *dest, size_t size); int IOdemodFSK(uint8_t *dest, size_t size);
int fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow); int fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t fchigh, uint8_t fclow);
uint32_t bytebits_to_byte(uint8_t* src, int numbits); uint32_t bytebits_to_byte(uint8_t* src, size_t numbits);
int pskNRZrawDemod(uint8_t *dest, size_t *size, int *clk, int *invert);
int DetectpskNRZClock(uint8_t dest[], size_t size, int clock);
int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert);
void pskCleanWave(uint8_t *bitStream, size_t size);
#endif #endif