-
-
-// samy's sniff and repeat routine
-void SamyRun()
-{
- DbpString("Stand-alone mode! No PC necessary.");
-
- // 3 possible options? no just 2 for now
-#define OPTS 2
-
- int high[OPTS], low[OPTS];
-
- // Oooh pretty -- notify user we're in elite samy mode now
- LED(LED_RED, 200);
- LED(LED_ORANGE, 200);
- LED(LED_GREEN, 200);
- LED(LED_ORANGE, 200);
- LED(LED_RED, 200);
- LED(LED_ORANGE, 200);
- LED(LED_GREEN, 200);
- LED(LED_ORANGE, 200);
- LED(LED_RED, 200);
-
- int selected = 0;
- int playing = 0;
-
- // Turn on selected LED
- LED(selected + 1, 0);
-
- for (;;)
- {
- usbattached = UsbPoll(FALSE);
- WDT_HIT();
-
- // Was our button held down or pressed?
- int button_pressed = BUTTON_HELD(1000);
- SpinDelay(300);
-
- // Button was held for a second, begin recording
- if (button_pressed > 0)
- {
- LEDsoff();
- LED(selected + 1, 0);
- LED(LED_RED2, 0);
-
- // record
- DbpString("Starting recording");
-
- // wait for button to be released
- while(BUTTON_PRESS())
- WDT_HIT();
-
- /* need this delay to prevent catching some weird data */
- SpinDelay(500);
-
- CmdHIDdemodFSK(1, &high[selected], &low[selected], 0);
- DbpString("Recorded");
- DbpIntegers(selected, high[selected], low[selected]);
-
- LEDsoff();
- LED(selected + 1, 0);
- // Finished recording
-
- // If we were previously playing, set playing off
- // so next button push begins playing what we recorded
- playing = 0;
- }
-
- // Change where to record (or begin playing)
- else if (button_pressed)
- {
- // Next option if we were previously playing
- if (playing)
- selected = (selected + 1) % OPTS;
- playing = !playing;
-
- LEDsoff();
- LED(selected + 1, 0);
-
- // Begin transmitting
- if (playing)
- {
- LED(LED_GREEN, 0);
- DbpString("Playing");
- // wait for button to be released
- while(BUTTON_PRESS())
- WDT_HIT();
- DbpIntegers(selected, high[selected], low[selected]);
- CmdHIDsimTAG(high[selected], low[selected], 0);
- DbpString("Done playing");
- if (BUTTON_HELD(1000) > 0)
- {
- DbpString("Exiting");
- LEDsoff();
- return;
- }
-
- /* We pressed a button so ignore it here with a delay */
- SpinDelay(300);
-
- // when done, we're done playing, move to next option
- selected = (selected + 1) % OPTS;
- playing = !playing;
- LEDsoff();
- LED(selected + 1, 0);
- }
- else
- while(BUTTON_PRESS())
- WDT_HIT();
- }
- }
-}
-
-
-// listen for external reader
-void ListenReaderField(int limit)
-{
- int lf_av, lf_av_new, lf_baseline= 0, lf_count= 0;
- int hf_av, hf_av_new, hf_baseline= 0, hf_count= 0;
-
-#define LF_ONLY 1
-#define HF_ONLY 2
-
- LED_A_OFF();
- LED_B_OFF();
- LED_C_OFF();
- LED_D_OFF();
-
- lf_av= ReadAdc(ADC_CHAN_LF);
-
- if(limit != HF_ONLY)
- {
- DbpString("LF 125/134 Baseline:");
- DbpIntegers(lf_av,0,0);
- lf_baseline= lf_av;
- }
-
- hf_av= ReadAdc(ADC_CHAN_HF);
-
-
- if (limit != LF_ONLY)
- {
- DbpString("HF 13.56 Baseline:");
- DbpIntegers(hf_av,0,0);
- hf_baseline= hf_av;
- }
-
- for(;;)
- {
- if(BUTTON_PRESS())
- {
- DbpString("Stopped");
- LED_B_OFF();
- LED_D_OFF();
- return;
- }
- WDT_HIT();
-
-
- if (limit != HF_ONLY)
- {
- if (abs(lf_av - lf_baseline) > 10)
- LED_D_ON();
- else
- LED_D_OFF();
- ++lf_count;
- lf_av_new= ReadAdc(ADC_CHAN_LF);
- // see if there's a significant change
- if(abs(lf_av - lf_av_new) > 10)
- {
- DbpString("LF 125/134 Field Change:");
- DbpIntegers(lf_av,lf_av_new,lf_count);
- lf_av= lf_av_new;
- lf_count= 0;
- }
- }
-
- if (limit != LF_ONLY)
- {
- if (abs(hf_av - hf_baseline) > 10)
- LED_B_ON();
- else
- LED_B_OFF();
- ++hf_count;
- hf_av_new= ReadAdc(ADC_CHAN_HF);
- // see if there's a significant change
- if(abs(hf_av - hf_av_new) > 10)
- {
- DbpString("HF 13.56 Field Change:");
- DbpIntegers(hf_av,hf_av_new,hf_count);
- hf_av= hf_av_new;
- hf_count= 0;
- }
- }
- }
-}