/* e12digitalGP.c reads/writes/configures the coprocessors general purpose port zero 7/24/03 Nathan Z. Gustavson ngustavson@emacinc.com Emac.inc www.emacinc.com */ /*! @defgroup e12digitalGP e12digitalGP - e12digitalGP.c This module is used to build the e12digitalGP application. e12digitalGP is used to read/write from the internal ports of the HCS12 processor on the 37e12.(HDR3) */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DIGRESPONSE BITMASK(PRTIN0) #define ARGCHECK(num){if(argc<=num){printf("invalid number of arguements\n");help();return -1;}} #define OPENDEV(filed,dev){if((filed = open(dev, O_RDWR))<=0){printf("couldn't open %s\n",dev);return -1;}} static int help(void) { const char *help_table = "********************************************** *e12digitalGP * *Nathan Z. Gustavson * *Emac.inc * *"__DATE__" * *usage: * *e12digitalGP device port command (data/mask)* *commands * * * *I/O mask - i mask is input/output bitmask * *1 = output 0 = input * * * *read - r (mask/data) unused * *returns current state of the pins * * * *write - w data * *drive output pins with data * **********************************************\n"; printf("%s",help_table); return 0; } int main(int argc,char **argv) { int fd,rxnum; __u8 mask; Cop_Data *Cop = CopDeviceCreate(0); __u32 typemask=0; __u8 buffer[100]; int port; ARGCHECK(3); OPENDEV(fd,argv[1]); port = strtoul(argv[2],NULL,0); if((port>1)||(port<0)) { printf("invalid port %u\n",port); help(); return 0; } switch(*argv[3])//switch command { case 'i': ARGCHECK(4); mask = strtoul(argv[4],NULL,0); E12_Digital_Cfg(fd, mask,port); break; case 'r': ARGCHECK(3); E12_Digital_Req(fd); while(!(typemask&DIGRESPONSE)) {//disregard any other data rxnum =read(fd,buffer,sizeof(buffer)); typemask = E12_Packet_Route(Cop,buffer, rxnum); } printf("%x\n",Cop->Digital[port]); break; case 'w': ARGCHECK(4); mask = (unsigned char)strtoul(argv[4],NULL,0); E12_Digitalout(fd,mask,port); break; default: printf("invalid command\n"); help(); } return 0; }