This commit is contained in:
iceman1001 2022-03-23 18:22:03 +01:00
commit 95d1631bed
13 changed files with 243 additions and 252 deletions

View file

@ -705,12 +705,11 @@ static void DecodeTagFSKInit(DecodeTagFSK_t *DecodeTag, uint8_t *data, uint16_t
// Performances of this function are crutial for stability // Performances of this function are crutial for stability
// as it is called in real time for every samples // as it is called in real time for every samples
static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *DecodeTag, bool recv_speed) static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *DecodeTag, bool recv_speed) {
{
switch (DecodeTag->state) { switch (DecodeTag->state) {
case STATE_FSK_BEFORE_SOF: case STATE_FSK_BEFORE_SOF:
if (FREQ_IS_484(freq)) if (FREQ_IS_484(freq)) {
{ // possible SOF starting // possible SOF starting
DecodeTag->state = STATE_FSK_SOF_484; DecodeTag->state = STATE_FSK_SOF_484;
DecodeTag->lastBit = LOGIC0_PART1; DecodeTag->lastBit = LOGIC0_PART1;
DecodeTag->count = 1; DecodeTag->count = 1;
@ -719,32 +718,26 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
case STATE_FSK_SOF_484: case STATE_FSK_SOF_484:
//DbpString("STATE_FSK_SOF_484"); //DbpString("STATE_FSK_SOF_484");
if (FREQ_IS_424(freq) && SEOF_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_424(freq) && SEOF_COUNT(DecodeTag->count, recv_speed)) {
{ // SOF part1 continue at 424 // SOF part1 continue at 424
DecodeTag->state = STATE_FSK_SOF_424; DecodeTag->state = STATE_FSK_SOF_424;
DecodeTag->count = 1; DecodeTag->count = 1;
} } else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) { // still in SOF at 484
else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF at 484
{
DecodeTag->count++; DecodeTag->count++;
} } else { // SOF failed, roll back
else // SOF failed, roll back
{
DecodeTag->state = STATE_FSK_BEFORE_SOF; DecodeTag->state = STATE_FSK_BEFORE_SOF;
} }
break; break;
case STATE_FSK_SOF_424: case STATE_FSK_SOF_424:
//DbpString("STATE_FSK_SOF_424"); //DbpString("STATE_FSK_SOF_424");
if (FREQ_IS_484(freq) && SEOF_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_484(freq) && SEOF_COUNT(DecodeTag->count, recv_speed)) {
{ // SOF part 1 finished // SOF part 1 finished
DecodeTag->state = STATE_FSK_SOF_END_484; DecodeTag->state = STATE_FSK_SOF_END_484;
DecodeTag->count = 1; DecodeTag->count = 1;
} } else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF at 424
else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF at 424
DecodeTag->count++; DecodeTag->count++;
else // SOF failed, roll back else { // SOF failed, roll back
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("SOF_424 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed); Dbprintf("SOF_424 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed);
@ -754,15 +747,12 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
break; break;
case STATE_FSK_SOF_END_484: case STATE_FSK_SOF_END_484:
if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) {
{
DecodeTag->state = STATE_FSK_SOF_END_424; DecodeTag->state = STATE_FSK_SOF_END_424;
DecodeTag->count = 1; DecodeTag->count = 1;
} } else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF_END_484
else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF_END_484
DecodeTag->count++; DecodeTag->count++;
else // SOF failed, roll back else { // SOF failed, roll back
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("SOF_END_484 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed); Dbprintf("SOF_END_484 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed);
@ -771,24 +761,21 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
} }
break; break;
case STATE_FSK_SOF_END_424: case STATE_FSK_SOF_END_424:
if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) {
{ // SOF finished at 484 // SOF finished at 484
DecodeTag->count = 1; DecodeTag->count = 1;
DecodeTag->lastBit = SOF; DecodeTag->lastBit = SOF;
DecodeTag->state = STATE_FSK_RECEIVING_DATA_484; DecodeTag->state = STATE_FSK_RECEIVING_DATA_484;
LED_C_ON(); LED_C_ON();
} } else if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count - 2, recv_speed)) {
else if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count-2, recv_speed)) // SOF finished at 424 (wait count+2 to be sure that next freq is 424)
{ // SOF finished at 424 (wait count+2 to be sure that next freq is 424)
DecodeTag->count = 2; DecodeTag->count = 2;
DecodeTag->lastBit = SOF; DecodeTag->lastBit = SOF;
DecodeTag->state = STATE_FSK_RECEIVING_DATA_424; DecodeTag->state = STATE_FSK_RECEIVING_DATA_424;
LED_C_ON(); LED_C_ON();
} } else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF_END_424
else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still in SOF_END_424
DecodeTag->count++; DecodeTag->count++;
else // SOF failed, roll back else { // SOF failed, roll back
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("SOF_END_424 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed); Dbprintf("SOF_END_424 failed: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed);
@ -799,10 +786,9 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
case STATE_FSK_RECEIVING_DATA_424: case STATE_FSK_RECEIVING_DATA_424:
if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) {
{ if (DecodeTag->lastBit == LOGIC1_PART1) {
if (DecodeTag->lastBit == LOGIC1_PART1) // logic 1 finished, goto 484
{ // logic 1 finished, goto 484
DecodeTag->lastBit = LOGIC1_PART2; DecodeTag->lastBit = LOGIC1_PART2;
DecodeTag->shiftReg >>= 1; DecodeTag->shiftReg >>= 1;
@ -818,17 +804,15 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
DecodeTag->bitCount = 0; DecodeTag->bitCount = 0;
DecodeTag->shiftReg = 0; DecodeTag->shiftReg = 0;
} }
} } else {
else // end of LOGIC0_PART1
{ // end of LOGIC0_PART1
DecodeTag->lastBit = LOGIC0_PART1; DecodeTag->lastBit = LOGIC0_PART1;
} }
DecodeTag->count = 1; DecodeTag->count = 1;
DecodeTag->state = STATE_FSK_RECEIVING_DATA_484; DecodeTag->state = STATE_FSK_RECEIVING_DATA_484;
} } else if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count - 2, recv_speed) &&
else if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count-2, recv_speed) && DecodeTag->lastBit == LOGIC1_PART1) {
DecodeTag->lastBit == LOGIC1_PART1) // logic 1 finished, stay in 484
{ // logic 1 finished, stay in 484
DecodeTag->lastBit = LOGIC1_PART2; DecodeTag->lastBit = LOGIC1_PART2;
DecodeTag->shiftReg >>= 1; DecodeTag->shiftReg >>= 1;
@ -845,13 +829,12 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
DecodeTag->shiftReg = 0; DecodeTag->shiftReg = 0;
} }
DecodeTag->count = 2; DecodeTag->count = 2;
} } else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still at 424
else if (FREQ_IS_424(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still at 424
DecodeTag->count++; DecodeTag->count++;
else if (FREQ_IS_484(freq) && DecodeTag->lastBit == LOGIC0_PART2 && else if (FREQ_IS_484(freq) && DecodeTag->lastBit == LOGIC0_PART2 &&
SEOF_COUNT(DecodeTag->count, recv_speed)) SEOF_COUNT(DecodeTag->count, recv_speed)) {
{ // EOF has started // EOF has started
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("RECEIVING_DATA_424->EOF: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state); Dbprintf("RECEIVING_DATA_424->EOF: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state);
@ -859,9 +842,7 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
DecodeTag->count = 1; DecodeTag->count = 1;
DecodeTag->state = STATE_FSK_EOF; DecodeTag->state = STATE_FSK_EOF;
LED_C_OFF(); LED_C_OFF();
} } else { // error
else // error
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("RECEIVING_DATA_424 error: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state); Dbprintf("RECEIVING_DATA_424 error: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state);
@ -873,10 +854,9 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
break; break;
case STATE_FSK_RECEIVING_DATA_484: case STATE_FSK_RECEIVING_DATA_484:
if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) if (FREQ_IS_424(freq) && LOGIC_COUNT(DecodeTag->count, recv_speed)) {
{ if (DecodeTag->lastBit == LOGIC0_PART1) {
if (DecodeTag->lastBit == LOGIC0_PART1) // logic 0 finished, goto 424
{ // logic 0 finished, goto 424
DecodeTag->lastBit = LOGIC0_PART2; DecodeTag->lastBit = LOGIC0_PART2;
DecodeTag->shiftReg >>= 1; DecodeTag->shiftReg >>= 1;
@ -891,17 +871,15 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
DecodeTag->bitCount = 0; DecodeTag->bitCount = 0;
DecodeTag->shiftReg = 0; DecodeTag->shiftReg = 0;
} }
} } else {
else // end of LOGIC1_PART1
{ // end of LOGIC1_PART1
DecodeTag->lastBit = LOGIC1_PART1; DecodeTag->lastBit = LOGIC1_PART1;
} }
DecodeTag->count = 1; DecodeTag->count = 1;
DecodeTag->state = STATE_FSK_RECEIVING_DATA_424; DecodeTag->state = STATE_FSK_RECEIVING_DATA_424;
} } else if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count - 2, recv_speed) &&
else if (FREQ_IS_484(freq) && LOGIC_COUNT(DecodeTag->count-2, recv_speed) && DecodeTag->lastBit == LOGIC0_PART1) {
DecodeTag->lastBit == LOGIC0_PART1) // logic 0 finished, stay in 424
{ // logic 0 finished, stay in 424
DecodeTag->lastBit = LOGIC0_PART2; DecodeTag->lastBit = LOGIC0_PART2;
DecodeTag->shiftReg >>= 1; DecodeTag->shiftReg >>= 1;
@ -917,11 +895,9 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
DecodeTag->shiftReg = 0; DecodeTag->shiftReg = 0;
} }
DecodeTag->count = 2; DecodeTag->count = 2;
} } else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still at 484
else if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still at 484
DecodeTag->count++; DecodeTag->count++;
else // error else { // error
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("RECEIVING_DATA_484 error: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state); Dbprintf("RECEIVING_DATA_484 error: freq=%d, count=%d, recv_speed=%d, lastbit=%d, state=%d", freq, DecodeTag->count, recv_speed, DecodeTag->lastBit, DecodeTag->state);
@ -933,14 +909,11 @@ static int RAMFUNC Handle15693FSKSamplesFromTag(uint8_t freq, DecodeTagFSK_t *De
break; break;
case STATE_FSK_EOF: case STATE_FSK_EOF:
if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) // still at 484 if (FREQ_IS_484(freq) && !MAX_COUNT(DecodeTag->count, recv_speed)) { // still at 484
{
DecodeTag->count++; DecodeTag->count++;
if (SEOF_COUNT(DecodeTag->count, recv_speed)) if (SEOF_COUNT(DecodeTag->count, recv_speed))
return true; // end of the transmission return true; // end of the transmission
} } else { // error
else // error
{
#ifdef DEBUG #ifdef DEBUG
if (DEBUG) if (DEBUG)
Dbprintf("EOF error: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed); Dbprintf("EOF error: freq=%d, count=%d, recv_speed=%d", freq, DecodeTag->count, recv_speed);
@ -1744,8 +1717,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string, bool icla
- 16 * 16; // time for EOF transfer - 16 * 16; // time for EOF transfer
LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true);
if (!iclass) // Those flags don't exist in iClass if (!iclass) { // Those flags don't exist in iClass
{
expect_fsk_answer = dreader.output[0] & ISO15_REQ_SUBCARRIER_TWO; expect_fsk_answer = dreader.output[0] & ISO15_REQ_SUBCARRIER_TWO;
expect_fast_answer = dreader.output[0] & ISO15_REQ_DATARATE_HIGH; expect_fast_answer = dreader.output[0] & ISO15_REQ_DATARATE_HIGH;
} }
@ -1765,8 +1737,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string, bool icla
- 32 * 16 // time for SOF transfer - 32 * 16 // time for SOF transfer
- 16 * 16; // time for EOF transfer - 16 * 16; // time for EOF transfer
LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true); LogTrace_ISO15693(dreader.output, dreader.byteCount, (sof_time * 4), (eof_time * 4), NULL, true);
if (!iclass) // Those flags don't exist in iClass if (!iclass) { // Those flags don't exist in iClass
{
expect_fsk_answer = dreader.output[0] & ISO15_REQ_SUBCARRIER_TWO; expect_fsk_answer = dreader.output[0] & ISO15_REQ_SUBCARRIER_TWO;
expect_fast_answer = dreader.output[0] & ISO15_REQ_DATARATE_HIGH; expect_fast_answer = dreader.output[0] & ISO15_REQ_DATARATE_HIGH;
} }
@ -1784,8 +1755,7 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string, bool icla
if (!reader_is_active && expect_tag_answer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet if (!reader_is_active && expect_tag_answer) { // no need to try decoding tag data if the reader is currently sending or no answer expected yet
if (!expect_fsk_answer) if (!expect_fsk_answer) {
{
if (Handle15693SamplesFromTag((sniffdata >> 4) << 2, &dtag, expect_fast_answer)) { if (Handle15693SamplesFromTag((sniffdata >> 4) << 2, &dtag, expect_fast_answer)) {
uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF
@ -1807,22 +1777,18 @@ void SniffIso15693(uint8_t jam_search_len, uint8_t *jam_search_string, bool icla
} else { } else {
tag_is_active = (dtag.state >= STATE_TAG_RECEIVING_DATA); tag_is_active = (dtag.state >= STATE_TAG_RECEIVING_DATA);
} }
} } else {
else
{
if (FREQ_IS_0((sniffdata >> 2) & 0x3)) // tolerate 1 00 if (FREQ_IS_0((sniffdata >> 2) & 0x3)) // tolerate 1 00
sniffdata = sniffdata_prev; sniffdata = sniffdata_prev;
if (Handle15693FSKSamplesFromTag((sniffdata >> 2) & 0x3, &dtagfsk, expect_fast_answer)) { if (Handle15693FSKSamplesFromTag((sniffdata >> 2) & 0x3, &dtagfsk, expect_fast_answer)) {
expect_fsk_answer = false; expect_fsk_answer = false;
} } else {
else {
tag_is_active = (dtagfsk.state >= STATE_FSK_RECEIVING_DATA_484); tag_is_active = (dtagfsk.state >= STATE_FSK_RECEIVING_DATA_484);
} }
if (!expect_fsk_answer) if (!expect_fsk_answer) {
{ // FSK answer no more expected: switch back to ASK // FSK answer no more expected: switch back to ASK
if (dtagfsk.len > 0) if (dtagfsk.len > 0) {
{
uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF uint32_t eof_time = dma_start_time + (samples * 16) - DELAY_TAG_TO_ARM_SNIFF; // end of EOF
if (dtagfsk.lastBit == SOF) { if (dtagfsk.lastBit == SOF) {
eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS) eof_time -= (8 * 16); // needed 8 additional samples to confirm single SOF (iCLASS)

View file

@ -101,6 +101,7 @@ const static vocabulory_t vocabulory[] = {
{ 1, "data bin2hex" }, { 1, "data bin2hex" },
{ 0, "data bitsamples" }, { 0, "data bitsamples" },
{ 1, "data clear" }, { 1, "data clear" },
{ 1, "data diff" },
{ 0, "data hexsamples" }, { 0, "data hexsamples" },
{ 1, "data hex2bin" }, { 1, "data hex2bin" },
{ 1, "data load" }, { 1, "data load" },

View file

@ -322,6 +322,29 @@
], ],
"usage": "data detectclock [-hafnp]" "usage": "data detectclock [-hafnp]"
}, },
"data diff": {
"command": "data diff",
"description": "diff takes a multitude of input data and makes a binary compare. it accepts filenames (filesystem or rdv4 flashmem spiffs), emulator memory, magic gen1",
"notes": [
"data diff -w 4 -a hf-mfu-01020304.bin -b hf-mfu-04030201.bin",
"data diff -a filea -b fileb",
"data diff -a filea --eb",
"data diff --fa filea -b fileb",
"data diff --fa filea --fb fileb",
"data diff --ea --cb"
],
"offline": true,
"options": [
"-h, --help this help",
"-a <fn> input file name a",
"-b <fn> input file name b",
"--eb emulator memory <hf mf esave>",
"--fa <fn> input spiffs file a",
"--fb <fn> input spiffs file b",
"-w <4|8|16> width of data output"
],
"usage": "data diff [-h] [-a <fn>] [-b <fn>] [--eb] [--fa <fn>] [--fb <fn>] [-w <4|8|16>]"
},
"data dirthreshold": { "data dirthreshold": {
"command": "data dirthreshold", "command": "data dirthreshold",
"description": "max rising higher up-thres/ min falling lower down-thres, keep rest as prev.", "description": "max rising higher up-thres/ min falling lower down-thres, keep rest as prev.",
@ -381,7 +404,7 @@
}, },
"data help": { "data help": {
"command": "data help", "command": "data help",
"description": "help this help ----------- ------------------------- modulation------------------------- biphaserawdecode biphase decode bin stream in demodbuffer detectclock detect ask, fsk, nrz, psk clock rate of wave in graphbuffer fsktonrz convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk) manrawdecode manchester decode binary stream in demodbuffer modulation identify lf signal for clock and modulation rawdemod demodulate the data in the graphbuffer and output binary ----------- ------------------------- graph------------------------- askedgedetect adjust graph for manual ask demod using the length of sample differences to detect the edge of a wave autocorr autocorrelation over window dirthreshold max rising higher up-thres/ min falling lower down-thres, keep rest as prev. decimate decimate samples undecimate un-decimate samples hide hide graph window hpf remove dc offset from trace iir apply iir buttersworth filter on plot data grid overlay grid on graph window ltrim trim samples from left of trace mtrim trim out samples from the specified start to the specified stop norm normalize max/min to +/-128 plot show graph window rtrim trim samples from right of trace setgraphmarkers set blue and orange marker in graph window shiftgraphzero shift 0 for graphed wave + or - shift value timescale set a timescale to get a differential reading between the yellow and purple markers as time duration zerocrossings count time between zero-crossings convertbitstream convert graphbuffer's 0/1 values to 127 / -127 getbitstream convert graphbuffer's >=1 values to 1 and <1 to 0 ----------- ------------------------- general------------------------- asn1 asn1 decoder bin2hex converts binary to hexadecimal clear clears bigbuf on deviceside and graph window hex2bin converts hexadecimal to binary load load contents of file into graph window print print the data in the demodbuffer save save signal trace data (from graph window) setdebugmode set debugging level on client side", "description": "help this help ----------- ------------------------- modulation------------------------- biphaserawdecode biphase decode bin stream in demodbuffer detectclock detect ask, fsk, nrz, psk clock rate of wave in graphbuffer fsktonrz convert fsk2 to nrz wave for alternate fsk demodulating (for weak fsk) manrawdecode manchester decode binary stream in demodbuffer modulation identify lf signal for clock and modulation rawdemod demodulate the data in the graphbuffer and output binary ----------- ------------------------- graph------------------------- askedgedetect adjust graph for manual ask demod using the length of sample differences to detect the edge of a wave autocorr autocorrelation over window dirthreshold max rising higher up-thres/ min falling lower down-thres, keep rest as prev. decimate decimate samples undecimate un-decimate samples hide hide graph window hpf remove dc offset from trace iir apply iir buttersworth filter on plot data grid overlay grid on graph window ltrim trim samples from left of trace mtrim trim out samples from the specified start to the specified stop norm normalize max/min to +/-128 plot show graph window rtrim trim samples from right of trace setgraphmarkers set blue and orange marker in graph window shiftgraphzero shift 0 for graphed wave + or - shift value timescale set a timescale to get a differential reading between the yellow and purple markers as time duration zerocrossings count time between zero-crossings convertbitstream convert graphbuffer's 0/1 values to 127 / -127 getbitstream convert graphbuffer's >=1 values to 1 and <1 to 0 ----------- ------------------------- general------------------------- asn1 asn1 decoder bin2hex converts binary to hexadecimal clear clears bigbuf on deviceside and graph window diff diff of input files hex2bin converts hexadecimal to binary load load contents of file into graph window print print the data in the demodbuffer save save signal trace data (from graph window) setdebugmode set debugging level on client side",
"notes": [], "notes": [],
"offline": true, "offline": true,
"options": [], "options": [],
@ -10908,8 +10931,8 @@
} }
}, },
"metadata": { "metadata": {
"commands_extracted": 688, "commands_extracted": 689,
"extracted_by": "PM3Help2JSON v1.00", "extracted_by": "PM3Help2JSON v1.00",
"extracted_on": "2022-02-27T15:27:46" "extracted_on": "2022-03-23T16:50:35"
} }
} }

View file

@ -120,6 +120,7 @@ Check column "offline" for their availability.
|`data bin2hex `|Y |`Converts binary to hexadecimal` |`data bin2hex `|Y |`Converts binary to hexadecimal`
|`data bitsamples `|N |`Get raw samples as bitstring` |`data bitsamples `|N |`Get raw samples as bitstring`
|`data clear `|Y |`Clears bigbuf on deviceside and graph window` |`data clear `|Y |`Clears bigbuf on deviceside and graph window`
|`data diff `|Y |`diff of input files`
|`data hexsamples `|N |`Dump big buffer as hex bytes` |`data hexsamples `|N |`Dump big buffer as hex bytes`
|`data hex2bin `|Y |`Converts hexadecimal to binary` |`data hex2bin `|Y |`Converts hexadecimal to binary`
|`data load `|Y |`Load contents of file into graph window` |`data load `|Y |`Load contents of file into graph window`