added tiwrite command, split LF code from appmain into lfops.c

This commit is contained in:
d18c7db
2009-07-25 11:47:43 +00:00
parent 431ae7e0eb
commit 9bea179a71
8 changed files with 1136 additions and 961 deletions
+1
View File
@@ -21,6 +21,7 @@ OBJLCD = $(OBJDIR)/fonts.o \
OBJ = $(OBJDIR)/start.o \
$(OBJDIR)/appmain.o \
$(OBJDIR)/fpga.o \
$(OBJDIR)/lfops.o \
$(OBJDIR)/iso14443.o \
$(OBJDIR)/iso14443a.o \
$(OBJDIR)/iso15693.o \
+1
View File
@@ -32,6 +32,7 @@ OBJLCD = $(OBJDIR)/LCD.o\
OBJ = $(OBJDIR)/start.o \
$(OBJDIR)/appmain.o \
$(OBJDIR)/fpga.o \
$(OBJDIR)/lfops.o \
$(OBJDIR)/iso15693.o \
$(OBJDIR)/util.o
+380 -905
View File
File diff suppressed because it is too large Load Diff
+18 -2
View File
@@ -7,7 +7,11 @@
#ifndef __APPS_H
#define __APPS_H
/// appmain.c
// The large multi-purpose buffer, typically used to hold A/D samples,
// maybe processed in some way.
DWORD BigBuf[16000];
/// appmain.h
void ReadMem(int addr);
void AppMain(void);
void SamyRun(void);
@@ -22,7 +26,7 @@ extern int ToSendMax;
extern BYTE ToSend[];
extern DWORD BigBuf[];
/// fpga.c
/// fpga.h
void FpgaSendCommand(WORD cmd, WORD v);
void FpgaWriteConfWord(BYTE v);
void FpgaDownloadAndGo(void);
@@ -58,6 +62,18 @@ void SetAdcMuxFor(int whichGpio);
#define FPGA_HF_ISO14443A_READER_LISTEN (3<<0)
#define FPGA_HF_ISO14443A_READER_MOD (4<<0)
/// lfops.h
void AcquireRawAdcSamples125k(BOOL at134khz);
void DoAcquisition125k(BOOL at134khz);
void ModThenAcquireRawAdcSamples125k(int delay_off,int period_0,int period_1,BYTE *command);
void ReadTItag();
void WriteTItag(DWORD idhi, DWORD idlo, WORD crc);
void AcquireTiType(void);
void AcquireRawBitsTI(void);
void SimulateTagLowFrequency(int period, int ledcontrol);
void CmdHIDsimTAG(int hi, int lo, int ledcontrol);
void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol);
/// iso14443.h
void SimulateIso14443Tag(void);
void AcquireRawAdcSamplesIso14443(DWORD parameter);
+654
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,4 +1,4 @@
unsigned short update_crc16( WORD crc, BYTE c ) {
WORD update_crc16( WORD crc, BYTE c ) {
WORD i, v, tcrc = 0;
v = (crc ^ c) & 0xff;
@@ -7,5 +7,5 @@ unsigned short update_crc16( WORD crc, BYTE c ) {
v >>= 1;
}
return (crc >> 8) ^ tcrc;
return ((crc >> 8) ^ tcrc)&0xffff;
}
+44 -45
View File
@@ -20,60 +20,59 @@ typedef struct {
} UsbCommand;
// For the bootloader
#define CMD_DEVICE_INFO 0x0000
#define CMD_SETUP_WRITE 0x0001
#define CMD_FINISH_WRITE 0x0003
#define CMD_HARDWARE_RESET 0x0004
#define CMD_START_FLASH 0x0005
#define CMD_ACK 0x00ff
#define CMD_DEVICE_INFO 0x0000
#define CMD_SETUP_WRITE 0x0001
#define CMD_FINISH_WRITE 0x0003
#define CMD_HARDWARE_RESET 0x0004
#define CMD_START_FLASH 0x0005
#define CMD_ACK 0x00ff
// For general mucking around
#define CMD_DEBUG_PRINT_STRING 0x0100
#define CMD_DEBUG_PRINT_INTEGERS 0x0101
#define CMD_DEBUG_PRINT_BYTES 0x0102
#define CMD_LCD_RESET 0x0103
#define CMD_LCD 0x0104
#define CMD_BUFF_CLEAR 0x0105
#define CMD_READ_MEM 0x0106
#define CMD_DEBUG_PRINT_STRING 0x0100
#define CMD_DEBUG_PRINT_INTEGERS 0x0101
#define CMD_DEBUG_PRINT_BYTES 0x0102
#define CMD_LCD_RESET 0x0103
#define CMD_LCD 0x0104
#define CMD_BUFF_CLEAR 0x0105
#define CMD_READ_MEM 0x0106
// For low-frequency tags
#define CMD_ACQUIRE_RAW_BITS_TI_TYPE 0x0200
#define CMD_DOWNLOAD_RAW_BITS_TI_TYPE 0x0201
#define CMD_DOWNLOADED_RAW_BITS_TI_TYPE 0x0202
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_125K 0x0203
#define CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K 0x0204
#define CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K 0x0205
#define CMD_DOWNLOADED_SIM_SAMPLES_125K 0x0206
#define CMD_SIMULATE_TAG_125K 0x0207
#define CMD_HID_DEMOD_FSK 0x0208 // ## New command: demodulate HID tag ID
#define CMD_HID_SIM_TAG 0x0209 // ## New command: simulate HID tag by ID
#define CMD_SET_LF_DIVISOR 0x020A
#define CMD_SWEEP_LF 0x020B
#define CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K 0x020C
#define CMD_ACQUIRE_RAW_BITS_TI_TYPE 0x0200
#define CMD_DOWNLOAD_RAW_BITS_TI_TYPE 0x0201
#define CMD_READ_TI_TYPE 0x0202
#define CMD_WRITE_TI_TYPE 0x0203
#define CMD_DOWNLOADED_RAW_BITS_TI_TYPE 0x0204
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_125K 0x0205
#define CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K 0x0206
#define CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K 0x0207
#define CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K 0x0208
#define CMD_DOWNLOADED_SIM_SAMPLES_125K 0x0209
#define CMD_SIMULATE_TAG_125K 0x020A
#define CMD_HID_DEMOD_FSK 0x020B
#define CMD_HID_SIM_TAG 0x020C
#define CMD_SET_LF_DIVISOR 0x020D
// For the 13.56 MHz tags
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 0x0300
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443 0x0301
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM 0x0302
#define CMD_READ_SRI512_TAG 0x0303
#define CMD_READER_ISO_15693 0x0310 // ## New command to act like a 15693 reader - greg
#define CMD_SIMTAG_ISO_15693 0x0311 // ## New command to act like a 15693 reader - greg
#define CMD_SIMULATE_TAG_HF_LISTEN 0x0380
#define CMD_SIMULATE_TAG_ISO_14443 0x0381
#define CMD_SNOOP_ISO_14443 0x0382
#define CMD_SNOOP_ISO_14443a 0x0383 // ## New snoop command
#define CMD_SIMULATE_TAG_ISO_14443a 0x0384 // ## New command: Simulate tag 14443a
#define CMD_READER_ISO_14443a 0x0385 // ## New command to act like a 14443a reader
#define CMD_SIMULATE_MIFARE_CARD 0x0386
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 0x0300
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443 0x0301
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM 0x0302
#define CMD_READ_SRI512_TAG 0x0303
#define CMD_READER_ISO_15693 0x0310
#define CMD_SIMTAG_ISO_15693 0x0311
#define CMD_SIMULATE_TAG_HF_LISTEN 0x0380
#define CMD_SIMULATE_TAG_ISO_14443 0x0381
#define CMD_SNOOP_ISO_14443 0x0382
#define CMD_SNOOP_ISO_14443a 0x0383
#define CMD_SIMULATE_TAG_ISO_14443a 0x0384
#define CMD_READER_ISO_14443a 0x0385
#define CMD_SIMULATE_MIFARE_CARD 0x0386
// For measurements of the antenna tuning
#define CMD_MEASURE_ANTENNA_TUNING 0x0400
#define CMD_MEASURED_ANTENNA_TUNING 0x0401
#define CMD_LISTEN_READER_FIELD 0x0402
#define CMD_MEASURE_ANTENNA_TUNING 0x0400
#define CMD_MEASURED_ANTENNA_TUNING 0x0401
#define CMD_LISTEN_READER_FIELD 0x0402
// For direct FPGA control
#define CMD_FPGA_MAJOR_MODE_OFF 0x0500 // ## FPGA Control
#define CMD_TEST 0x0501
#define CMD_FPGA_MAJOR_MODE_OFF 0x0500
#endif
+36 -7
View File
@@ -1395,14 +1395,14 @@ static void CmdHi15demod(char *str)
PrintToScrollback("CRC=%04x", Iso15693Crc(outBuf, k-2));
}
static void CmdTiread(char *str)
static void CmdTIReadRaw(char *str)
{
UsbCommand c;
c.cmd = CMD_ACQUIRE_RAW_BITS_TI_TYPE;
SendCommand(&c, FALSE);
}
static void CmdTibits(char *str)
static void CmdTIBits(char *str)
{
int cnt = 0;
int i;
@@ -1554,7 +1554,30 @@ static void CmdFSKdemod(char *cmdline)
PrintToScrollback("hex: %08x %08x", hi, lo);
}
static void CmdTidemod(char *cmdline)
// read a TI tag and return its ID
static void CmdTIRead(char *str)
{
UsbCommand c;
c.cmd = CMD_READ_TI_TYPE;
SendCommand(&c, FALSE);
}
// write new data to a r/w TI tag
static void CmdTIWrite(char *str)
{
UsbCommand c;
int res=0;
c.cmd = CMD_WRITE_TI_TYPE;
res = sscanf(str, "0x%x 0x%x 0x%x ", &c.ext1, &c.ext2, &c.ext3);
if (res == 2) c.ext3=0;
if (res<2)
PrintToScrollback("Please specify 2 or three hex strings, eg 0x1234 0x5678");
else
SendCommand(&c, FALSE);
}
static void CmdTIDemod(char *cmdline)
{
/* MATLAB as follows:
f_s = 2000000; % sampling frequency
@@ -1754,9 +1777,13 @@ h = sign(sin(cumsum(h)));
// align 16 bit "end bits" or "ident" into lower half of shift3
shift3 >>= 16;
if ( (shift3^shift0)&0xffff ) {
// only 15 bits compare, last bit of ident is not valid
if ( (shift3^shift0)&0x7fff ) {
PrintToScrollback("Error: Ident mismatch!");
}
// WARNING the order of the bytes in which we calc crc below needs checking
// i'm 99% sure the crc algorithm is correct, but it may need to eat the
// bytes in reverse or something
// calculate CRC
crc=0;
crc = update_crc16(crc, (shift0)&0xff);
@@ -2841,9 +2868,11 @@ static struct {
{"scale", CmdScale, 1, "<int> -- Set cursor display scale"},
{"setlfdivisor", CmdSetDivisor, 0, "<19 - 255> -- Drive LF antenna at 12Mhz/(divisor+1)"},
{"sri512read", CmdSri512read, 0, "<int> -- Read contents of a SRI512 tag"},
{"tibits", CmdTibits, 0, "Get raw bits for TI-type LF tag"},
{"tidemod", CmdTidemod, 1, "Demodulate raw bits for TI-type LF tag"},
{"tiread", CmdTiread, 0, "Read a TI-type 134 kHz tag"},
{"tibits", CmdTIBits, 0, "Get raw bits for TI-type LF tag"},
{"tidemod", CmdTIDemod, 1, "Demodulate raw bits for TI-type LF tag"},
{"tireadraw", CmdTIReadRaw, 0, "Read a TI-type 134 kHz tag in raw mode"},
{"tiread", CmdTIRead, 0, "Read and decode a TI 134 kHz tag"},
{"tiwrite", CmdTIWrite, 0, "Write new data to a r/w TI 134 kHz tag"},
{"threshold", CmdThreshold, 1, "Maximize/minimize every value in the graph window depending on threshold"},
{"tune", CmdTune, 0, "Measure antenna tuning"},
{"vchdemod", CmdVchdemod, 0, "['clone'] -- Demodulate samples for VeriChip"},