From: travisutk Date: Fri, 19 Feb 2010 21:54:10 +0000 (+0000) Subject: dos2unix, smart card app. X-Git-Url: http://git.rot13.org/?p=goodfet;a=commitdiff_plain;h=31f45062572380f91438aa566fe6b83ca66c4951 dos2unix, smart card app. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@334 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- diff --git a/firmware/Makefile b/firmware/Makefile index 8e3b1ea..531f3d1 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -23,7 +23,7 @@ CCEXTRA?= CC=msp430-gcc -Wall -Os -g -mmcu=$(mcu) -D$(mcu) -DGCC $(GCCINC) -I include $(CCEXTRA) #Define extra modules here. -moreapps?=apps/i2c/i2c.o apps/chipcon/chipcon.o apps/glitch/glitch.o apps/jtag/sbw.o +moreapps?=apps/i2c/i2c.o apps/chipcon/chipcon.o apps/glitch/glitch.o apps/jtag/sbw.o apps/smartcard/smartcard.o apps= $(moreapps) apps/monitor/monitor.o apps/spi/spi.o apps/jtag/jtag.o apps/jtag/jtag430.o apps/jtag/jtag430x2.o apps/avr/avr.o apps/jtag/ejtag.o libs= lib/$(mcu).o lib/command.o apps/jtag/jtag430asm.o diff --git a/firmware/apps/plugins/ps2.c b/firmware/apps/plugins/ps2.c index 1f345d2..df31503 100644 --- a/firmware/apps/plugins/ps2.c +++ b/firmware/apps/plugins/ps2.c @@ -11,7 +11,6 @@ #include "ps2.h" #include "jtag.h" - u32 mclock=0; u32 clock=0; diff --git a/firmware/apps/smartcard/smartcard.c b/firmware/apps/smartcard/smartcard.c new file mode 100644 index 0000000..8d1e745 --- /dev/null +++ b/firmware/apps/smartcard/smartcard.c @@ -0,0 +1,25 @@ +/*! \file smartcard.c + \author Travis Goodspeed + \brief Smartcard and SIM application. + + This module allows for communication with smart cards and SIM cards. +*/ + +#include "platform.h" +#include "command.h" +#include "jtag.h" + +//! Handles a monitor command. +int smartcardhandle(unsigned char app, + unsigned char verb, + unsigned int len){ + switch(verb){ + case START: + debugstr("Unable to start smart card."); + break; + case STOP: + default: + debugstr("Unknown smartcard verb."); + txdata(app,NOK,0); + } +} diff --git a/firmware/goodfet.c b/firmware/goodfet.c index 355ae00..11afcdd 100644 --- a/firmware/goodfet.c +++ b/firmware/goodfet.c @@ -1,163 +1,166 @@ -/*! \file goodfet.c - \author Travis Goodspeed - \brief Main module. - - This is the main module of the GoodFET, which calls the initialization - routines and delegates commands to the various applications. -*/ - - -#include "platform.h" -#include "command.h" -#include "apps.h" -#include "glitch.h" - - -//! Initialize registers and all that jazz. -void init(){ - int i; - WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer - - //LED out and on. - PLEDDIR |= PLEDPIN; - PLEDOUT &= ~PLEDPIN; - - //Setup clocks, unique to each '430. - msp430_init_dco(); - msp430_init_uart(); - - //DAC should be at full voltage if it exists. -#ifdef DAC12IR - //glitchvoltages(0xfff,0xfff); - ADC12CTL0 = REF2_5V + REFON; // Internal 2.5V ref on - for(i=0;i!=0xFFFF;i++) asm("nop"); - DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1 - DAC12_0DAT = 0xFFF; //Max voltage 0xfff - DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1 - DAC12_1DAT = 0x000; //Min voltage 0x000 -#endif - - /** FIXME - - This part is really ugly. GSEL (P5.7) must be high to select - normal voltage, but a lot of applications light to swing it low - to be a nuissance. To get around this, we assume that anyone - with a glitching FET will also have a DAC, then we set that DAC - to a high voltage. - - At some point, each target must be sanitized to show that it - doesn't clear P5OUT or P5DIR. - */ - P5DIR|=BIT7; P5OUT=BIT7; //Normal Supply - //P5DIR&=~BIT7; //Glitch Supply - - //Enable Interrupts. - //eint(); -} - - -//! Handle a command. -void handle(unsigned char app, - unsigned char verb, - unsigned long len){ - //debugstr("GoodFET"); - P1OUT&=~1; - switch(app){ - case GLITCH: - glitchhandle(app,verb,len); - break; - case MONITOR: - monitorhandle(app,verb,len); - break; - case SPI: - spihandle(app,verb,len); - break; - case AVR: - avrhandle(app,verb,len); - break; - case I2CAPP: - i2chandle(app,verb,len); - break; - case CHIPCON: - cchandle(app,verb,len); - break; - case JTAG: - jtaghandle(app,verb,len); - break; - case EJTAG: - ejtaghandle(app,verb,len); - break; - case JTAG430: //Also JTAG430X, JTAG430X2 - jtag430x2handle(app,verb,len); - break; - default: - if(pluginhandle){ - pluginhandle(app,verb,len); - }else{ - debugstr("Plugin missing."); - debughex(app); - txdata(app,NOK,0); - } - break; - } -} - -//! Main loop. -int main(void) -{ - volatile unsigned int i; - unsigned char app, verb; - unsigned long len; - // MSP reboot count for reset input & reboot function located at 0xFFFE - volatile unsigned int reset_count = 0; - void (*reboot_function)(void) = (void *) 0xFFFE; - - init(); - - txstring(MONITOR,OK,"http://goodfet.sf.net/"); - - - //Command loop. There's no end! - while(1){ - //Magic 3 - app=serial_rx(); - - // If the app is the reset byte (0x80) increment and loop - if (app == 0x80) { - reset_count++; - - if (reset_count > 4) { - // We could trigger the WDT with either: - // WDTCTL = 0; - // or - // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00; - // but instead we'll jump to our reboot function pointer - (*reboot_function)(); - } - - continue; - } else { - reset_count = 0; - } - - verb=serial_rx(); - //len=serial_rx(); - len=rxword(); - - //Read data, looking for buffer overflow.y - if(len<=CMDDATALEN){ - for(i=0;i 4) { + // We could trigger the WDT with either: + // WDTCTL = 0; + // or + // WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + 0x00; + // but instead we'll jump to our reboot function pointer + (*reboot_function)(); + } + + continue; + } else { + reset_count = 0; + } + + verb=serial_rx(); + //len=serial_rx(); + len=rxword(); + + //Read data, looking for buffer overflow.y + if(len<=CMDDATALEN){ + for(i=0;i