X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fsmartcard%2Fsmartcard.c;h=0d8de50d8194128f8fa0192ad11dffe1db382f25;hp=8d1e745f0f9de599b111a2ac7d813710e3efea8f;hb=602c5212c0b08f5056f639749e0246b4855a4921;hpb=31f45062572380f91438aa566fe6b83ca66c4951 diff --git a/firmware/apps/smartcard/smartcard.c b/firmware/apps/smartcard/smartcard.c index 8d1e745..0d8de50 100644 --- a/firmware/apps/smartcard/smartcard.c +++ b/firmware/apps/smartcard/smartcard.c @@ -9,17 +9,70 @@ #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: + 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: debugstr("Unknown smartcard verb."); txdata(app,NOK,0); } + return 0; }