// into trace, along with its length and other annotations.
//uint8_t *trace = (uint8_t *)BigBuf;
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
// reset traceLen to 0
iso14a_set_tracing(TRUE);
- iso14a_clear_tracelen();
+ iso14a_clear_trace();
iso14a_set_trigger(FALSE);
// The DMA buffer, used to stream samples from the FPGA
{
uint8_t simType = arg0;
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
// Enable and clear the trace
tracing = TRUE;
traceLen = 0;
CodeIClassTagAnswer(response4, sizeof(response4));
memcpy(resp4, ToSend, ToSendMax); resp4Len = ToSendMax;
+
+ // Start from off (no field generated)
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+ SpinDelay(200);
+
+
// We need to listen to the high-frequency, peak-detected path.
SetAdcMuxFor(GPIO_MUXSEL_HIPKD);
FpgaSetupSsc();
LED_A_ON();
for(;;) {
LED_B_OFF();
+ //Signal tracer
+ // Can be used to get a trigger for an oscilloscope..
+ LED_C_OFF();
+
if(!GetIClassCommandFromReader(receivedCmd, &len, 100)) {
DbpString("button press");
break;
}
+ //Signal tracer
+ LED_C_ON();
+
// Okay, look at the command now.
if(receivedCmd[0] == 0x0a) {
}
if (tracing) {
- LogTrace(receivedCmd,len, 0, Uart.parityBits, TRUE);
+ LogTrace(receivedCmd,len, rsamples, Uart.parityBits, TRUE);
if (respdata != NULL) {
- LogTrace(respdata,respsize, 0, SwapBits(GetParity(respdata,respsize),respsize), FALSE);
+ LogTrace(respdata,respsize, rsamples, SwapBits(GetParity(respdata,respsize),respsize), FALSE);
}
if(traceLen > TRACE_SIZE) {
DbpString("Trace full");
static int SendIClassAnswer(uint8_t *resp, int respLen, int delay)
{
- int i = 0, u = 0, d = 0;
+ int i = 0, d=0;//, u = 0, d = 0;
uint8_t b = 0;
- // return 0;
- // Modulate Manchester
- // FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD424);
- FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_MOD);
+
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_SIMULATOR|FPGA_HF_SIMULATOR_MODULATE_424K);
+
AT91C_BASE_SSC->SSC_THR = 0x00;
FpgaSetupSsc();
-
- // send cycle
- for(;;) {
- if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {
- volatile uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
- (void)b;
+ while(!BUTTON_PRESS()) {
+ if((AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)){
+ b = AT91C_BASE_SSC->SSC_RHR; (void) b;
}
- if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {
+ if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)){
+ b = 0x00;
if(d < delay) {
- b = 0x00;
d++;
}
- else if(i >= respLen) {
- b = 0x00;
- u++;
- } else {
- b = resp[i];
- u++;
- if(u > 1) { i++; u = 0; }
+ else {
+ if( i < respLen){
+ b = resp[i];
+ //Hack
+ //b = 0xAC;
+ }
+ i++;
}
AT91C_BASE_SSC->SSC_THR = b;
-
- if(u > 4) break;
- }
- if(BUTTON_PRESS()) {
- break;
}
+
+ if (i > respLen +4) break;
}
return 0;
static void TransmitIClassCommand(const uint8_t *cmd, int len, int *samples, int *wait)
{
int c;
-
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD);
AT91C_BASE_SSC->SSC_THR = 0x00;
FpgaSetupSsc();
b = cmd[i];
for(j = 0; j < 4; j++) {
for(k = 0; k < 4; k++) {
- if(k == (b & 3)) {
- ToSend[++ToSendMax] = 0x0f;
- }
- else {
- ToSend[++ToSendMax] = 0x00;
- }
+ if(k == (b & 3)) {
+ ToSend[++ToSendMax] = 0x0f;
+ }
+ else {
+ ToSend[++ToSendMax] = 0x00;
+ }
}
b >>= 2;
}
LED_A_ON();
// Store reader command in buffer
- if (tracing) LogTrace(frame,len,0,par,TRUE);
+ if (tracing) LogTrace(frame,len,rsamples,par,TRUE);
}
//-----------------------------------------------------------------------------
{
int samples = 0;
if (!GetIClassAnswer(receivedAnswer,160,&samples,0)) return FALSE;
- if (tracing) LogTrace(receivedAnswer,Demod.len,samples,Demod.parityBits,FALSE);
+ rsamples += samples;
+ if (tracing) LogTrace(receivedAnswer,Demod.len,rsamples,Demod.parityBits,FALSE);
if(samples == 0) return FALSE;
return Demod.len;
}
uint8_t* resp = (((uint8_t *)BigBuf) + 3560); // was 3560 - tied to other size changes
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
// Reset trace buffer
memset(trace, 0x44, RECV_CMD_OFFSET);
traceLen = 0;