X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=firmware%2Fapps%2Fsmartcard%2Fsmartcard.c;h=d8b85391c4022952e20daeda136e160693bb5abb;hb=ad4619be9d5a713318196ead4aeb6000e7d3f0e3;hp=e984f24ae201fae6aef6397407dd516c0efc26e4;hpb=577c3ba46d80db877c08a4ce0be89890e294a868;p=goodfet diff --git a/firmware/apps/smartcard/smartcard.c b/firmware/apps/smartcard/smartcard.c index e984f24..d8b8539 100644 --- a/firmware/apps/smartcard/smartcard.c +++ b/firmware/apps/smartcard/smartcard.c @@ -9,16 +9,65 @@ #include "command.h" #include "jtag.h" +//TDO/P5.2 is Data + +//Read a bit. +#define SCIN (P5IN&BIT2) +//Set I/O direction. +#define SCINPUT (P5DIR&=~BIT2) +#define SCOUTPUT (P5DIR|=BIT2) +//Set data value. +#define SCH (P5OUT|=BIT2) +#define SCL (P5OUT&=~BIT2) + +//Clock. +#define SCTICK (P5OUT|=BIT3) +#define SCTOCK (P5OUT&=~BIT3) + + +//! Setup the smart card mode. +void smartcardsetup(){ + P5DIR|=BIT3; + P2DIR|=RST; + msdelay(100); +} + +u16 sctime=0, foo=0; + //! Handles a monitor command. int smartcardhandle(unsigned char app, unsigned char verb, unsigned int len){ switch(verb){ case SETUP: - debugstr("Unable to setup smart card."); + smartcardsetup(); break; case START: - debugstr("Unable to start smart card."); + smartcardsetup(); + debugstr("Reseting card"); + SCINPUT; + + CLRRST; + SCTICK; + SCTOCK; + SCTICK; + SCTOCK; + delay(500); + SETRST; + + while(1){ + sctime++; + SCTICK; + delay(5); + SCTOCK; + + P1OUT^=1; + if(SCIN!=foo){ + foo=SCIN; + } + if(sctime%0x1000==0) + debughex(foo); + } break; case STOP: default: