syntax sugar

This commit is contained in:
iceman1001 2017-01-18 22:56:55 +01:00
commit 81e82dfe51

View file

@ -218,8 +218,9 @@ int cleanAskRawDemod(uint8_t *BinStream, size_t *size, int clk, int invert, int
smplCnt++; smplCnt++;
} else { //transition } else { //transition
if ((BinStream[i] >= high && !waveHigh) || (BinStream[i] <= low && waveHigh)){ if ((BinStream[i] >= high && !waveHigh) || (BinStream[i] <= low && waveHigh)){
if (smplCnt > clk-(clk/4)-1) { //full clock if (smplCnt > clk-(clk/4)-1) { //full clock
if (smplCnt > clk + (clk/4)+1) { //too many samples if (smplCnt > clk + (clk/4)+2) { //too many samples
errCnt++; errCnt++;
if (g_debugMode==2) prnt("DEBUG ASK: Modulation Error at: %u", i); if (g_debugMode==2) prnt("DEBUG ASK: Modulation Error at: %u", i);
BinStream[bitCnt++] = 7; BinStream[bitCnt++] = 7;
@ -280,7 +281,7 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
if (*clk==0 || start < 0) return -3; if (*clk==0 || start < 0) return -3;
if (*invert != 1) *invert = 0; if (*invert != 1) *invert = 0;
if (amp==1) askAmp(BinStream, *size); if (amp==1) askAmp(BinStream, *size);
if (g_debugMode==2) prnt("DEBUG ASK: clk %d, beststart %d", *clk, start); if (g_debugMode==2) prnt("DEBUG ASK: size %d, clk %d, beststart %d", *size, *clk, start);
uint8_t initLoopMax = 255; uint8_t initLoopMax = 255;
if (initLoopMax > *size) initLoopMax = *size; if (initLoopMax > *size) initLoopMax = *size;
@ -297,7 +298,7 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
errCnt = cleanAskRawDemod(BinStream, size, *clk, *invert, high, low); errCnt = cleanAskRawDemod(BinStream, size, *clk, *invert, high, low);
if (askType) //askman if (askType) //askman
return manrawdecode(BinStream, size, 0); return manrawdecode(BinStream, size, 0);
else //askraw //askraw
return errCnt; return errCnt;
} }
if (g_debugMode==2) prnt("DEBUG ASK: Weak Wave Detected - using weak wave demod"); if (g_debugMode==2) prnt("DEBUG ASK: Weak Wave Detected - using weak wave demod");
@ -345,25 +346,23 @@ int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr
*size = bitnum; *size = bitnum;
return errCnt; return errCnt;
} }
//by marshmellow //by marshmellow
//take 10 and 01 and manchester decode //take 10 and 01 and manchester decode
//run through 2 times and take least errCnt //run through 2 times and take least errCnt
int manrawdecode(uint8_t * BitStream, size_t *size, uint8_t invert) int manrawdecode(uint8_t * BitStream, size_t *size, uint8_t invert){
{
uint16_t bitnum = 0, MaxBits = 512, errCnt = 0; uint16_t bitnum = 0, MaxBits = 512, errCnt = 0;
size_t i, ii; size_t i, k;
uint16_t bestErr = 1000, bestRun = 0; uint16_t bestErr = 1000, bestRun = 0;
if (*size < 16) return -1; if (*size < 16) return -1;
//find correct start position [alignment] //find correct start position [alignment]
for (ii=0;ii<2;++ii){ for (k=0; k < 2; ++k){
for (i=ii; i<*size-3; i+=2) for (i=k; i<*size-3; i += 2)
if (BitStream[i] == BitStream[i+1]) if (BitStream[i] == BitStream[i+1])
errCnt++; errCnt++;
if (bestErr > errCnt){ if (bestErr > errCnt){
bestErr = errCnt; bestErr = errCnt;
bestRun=ii; bestRun = k;
} }
errCnt=0; errCnt=0;
} }
@ -940,8 +939,9 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
if (clockFnd>0) { if (clockFnd>0) {
clkCnt = clockFnd; clkCnt = clockFnd;
clkEnd = clockFnd+1; clkEnd = clockFnd+1;
} else {
clkCnt=1;
} }
else clkCnt=1;
//test each valid clock from smallest to greatest to see which lines up //test each valid clock from smallest to greatest to see which lines up
for(; clkCnt < clkEnd; clkCnt++) { for(; clkCnt < clkEnd; clkCnt++) {
@ -951,8 +951,11 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
tol=0; tol=0;
} }
//if no errors allowed - keep start within the first clock //if no errors allowed - keep start within the first clock
if (!maxErr && size > clk[clkCnt]*2 + tol && clk[clkCnt]<128) loopCnt=clk[clkCnt]*2; if (!maxErr && size > clk[clkCnt]*2 + tol && clk[clkCnt]<128)
loopCnt = clk[clkCnt] * 2;
bestErr[clkCnt] = 1000; bestErr[clkCnt] = 1000;
//try lining up the peaks by moving starting point (try first few clocks) //try lining up the peaks by moving starting point (try first few clocks)
for (ii=0; ii < loopCnt; ii++){ for (ii=0; ii < loopCnt; ii++){
if (dest[ii] < peak && dest[ii] > low) continue; if (dest[ii] < peak && dest[ii] > low) continue;
@ -983,17 +986,17 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
} }
} }
} }
uint8_t iii; uint8_t k;
uint8_t best = 0; uint8_t best = 0;
for (iii=1; iii<clkEnd; ++iii){ for (k=1; k < clkEnd; ++k){
if (bestErr[iii] < bestErr[best]){ if (bestErr[k] < bestErr[best]){
if (bestErr[iii] == 0) bestErr[iii]=1; if (bestErr[k] == 0) bestErr[k]=1;
// current best bit to error ratio vs new bit to error ratio // current best bit to error ratio vs new bit to error ratio
if ( (size/clk[best])/bestErr[best] < (size/clk[iii])/bestErr[iii] ){ if ( (size/clk[best])/bestErr[best] < (size/clk[k])/bestErr[k] ){
best = iii; best = k;
} }
} }
if (g_debugMode == 2) prnt("DEBUG ASK: clk %d, # Errors %d, Current Best Clk %d, bestStart %d",clk[iii],bestErr[iii],clk[best],bestStart[best]); if (g_debugMode == 2) prnt("DEBUG ASK: clk %d, # Errors %d, Current Best Clk %d, bestStart %d", clk[k], bestErr[k], clk[best], bestStart[best]);
} }
if (!clockFnd) *clock = clk[best]; if (!clockFnd) *clock = clk[best];
return bestStart[best]; return bestStart[best];