/* central command parser */ void Commands(char *buf) { answer[1] = buf[0]; if(buf[0] & 0x80) { /* This is a command / non-XSVF packet */ switch(buf[0]) { case XSVF_INIT: usbprog.datatogl = 0; XsvfInit(); answer[0] = SUCCESS; CommandAnswer(2); break; case XSVF_PRGEND: XsvfClose(); answer[0] = SUCCESS; CommandAnswer(2); break; default: answer[0] = UNKNOWN_COMMAND; CommandAnswer(2); break; } } else { /* This is an XSVF packet */ /* TODO: We always assume a buffer size of 64 at the moment. * Can we determine how many bytes we really received? */ answer[0] = XsvfExec(buf, 64); CommandAnswer(2); } }
void Commands(char * buf) { //PORTA ^= (1<<PA7); at45_write( (uint16_t)(buf[0]|(buf[1]<<8)), &buf[2]); at45_read( (uint16_t)(buf[0]|(buf[1]<<8)), 1); //if(buf[0]==0x77 && buf[1]==0x88) CommandAnswer(320); }
void CommandAnswerRest() { if(usbprog.long_running==1){ PORTA ^= (1<<PA7); if(usbprog.long_index < usbprog.long_bytes){ int dif = usbprog.long_bytes-usbprog.long_index; usbprog.long_index=usbprog.long_index+64; if(dif > 64){ CommandAnswer(64); } else { // last packet CommandAnswer(dif); usbprog.long_running=0; } } } }
// used void FromPC(char * buf) { usbprog.datatogl=0; SendHex(buf[0]); SendHex(buf[1]); SendHex(buf[2]); int i; for(i=0; i<64; i++) answer[i]=0; answer[0]=0x02; answer[1]=0x0A; CommandAnswer(64); }
/* central command parser */ void Commands(char *buf) { //usbprog.datatogl = 1; // 1MHz int i; switch(buf[0]) { case PORT_DIRECTION: set_direction((uint8_t)buf[1]); //answer[0] = PORT_DIRECTION; //answer[1] = 0x00; //CommandAnswer(2); break; case PORT_SET: set_port((uint8_t)buf[1]); //answer[0] = PORT_SET; //answer[1] = 0x00; //CommandAnswer(2); break; case PORT_GET: answer[0] = PORT_GET; answer[1] = get_port(); CommandAnswer(2); break; case PORT_SETPIN: set_bit((uint8_t)buf[1],(uint8_t)buf[2]); //answer[0] = PORT_SETPIN; //answer[1] = 0x00; //CommandAnswer(2); break; case PORT_GETBIT: answer[0] = PORT_GETBIT; answer[1] = (char)get_bit((uint8_t)buf[1]); CommandAnswer(2); break; case WRITE_TDI: write_tdi(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up #if 1 // tck 0 tms 0 tdi 0 CLEARPIN(PIN_WRITE,TCK); // clk CLEARPIN(PIN_WRITE,TDI); // tdi CLEARPIN(PIN_WRITE,TMS); // tms // tck 1 tms 0 tdi 0 SETPIN(PIN_WRITE,TCK); // clk #endif //answer[0] = WRITE_TDI; //answer[1] = 0x00; //CommandAnswer(2); break; case WRITE_TMS: write_tms((uint8_t)buf[1]); //answer[0] = WRITE_TDI; //answer[1] = 0x00; //CommandAnswer(2); break; case READ_TDO: read_tdo(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up #if 1 // tck 0 tms 0 tdi 0 CLEARPIN(PIN_WRITE,TCK); // clk CLEARPIN(PIN_WRITE,TDI); // tdi CLEARPIN(PIN_WRITE,TMS); // tms // tck 1 tms 0 tdi 0 SETPIN(PIN_WRITE,TCK); // clk #endif for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; case WRITE_AND_READ: write_and_read(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up #if 0 // tck 0 tms 0 tdi 0 CLEARPIN(PIN_WRITE,TCK); // clk CLEARPIN(PIN_WRITE,TDI); // tdi CLEARPIN(PIN_WRITE,TMS); // tms // tck 1 tms 0 tdi 0 SETPIN(PIN_WRITE,TCK); // clk #endif for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; case INIT_JTAG: set_direction(0xf4); break; case TAP_RESET: break; case TAP_SHIFT: tap_shift(buf,(uint8_t)buf[1]); for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; case TAP_SHIFT_FINAL: tap_shift_final(buf,(uint8_t)buf[1]); for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; case TAP_CAPTURE_DR: break; case TAP_CAPTURE_IR: break; default: // unkown command answer[0] = UNKOWN_COMMAND; answer[1] = 0x00; CommandAnswer(2); } }
/* central command parser */ void Commands(char *buf) { int i; switch(buf[0]) { case PORT_DIRECTION: set_direction((uint8_t)buf[1]); break; case PORT_SET: set_port((uint8_t)buf[1]); break; case PORT_GET: answer[0] = PORT_GET; answer[1] = get_port(); CommandAnswer(2); break; case PORT_SETBIT: set_bit((uint8_t)buf[1],(uint8_t)buf[2]); break; case PORT_GETBIT: answer[0] = PORT_GETBIT; answer[1] = (char)get_bit((uint8_t)buf[1]); CommandAnswer(2); break; case WRITE_TDI: write_tdi(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up // tck 0 tms 0 tdi 0 CLEARBIT(BIT2_WRITE,BIT2); // clk CLEARBIT(BIT1_WRITE,BIT1); // tdi CLEARBIT(BIT3_WRITE,BIT3); // tms // tck 1 tms 0 tdi 0 SETBIT(BIT2_WRITE,BIT2); // clk break; case WRITE_TMS: write_tms((uint8_t)buf[1]); break; case WRITE_TMS_CHAIN: for(i=0;i<(int)buf[1];i++){ write_tms((uint8_t)buf[2+i]); asm("nop"); asm("nop"); } break; case READ_TDO: read_tdo(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up #if 1 // tck 0 tms 0 tdi 0 CLEARBIT(BIT2_WRITE,BIT2); // clk CLEARBIT(BIT1_WRITE,BIT1); // tdi CLEARBIT(BIT3_WRITE,BIT3); // tms // tck 1 tms 0 tdi 0 SETBIT(BIT2_WRITE,BIT2); // clk #endif for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; case WRITE_AND_READ: write_and_read(buf,((uint8_t)buf[1]*256)+(uint8_t)buf[2]); // size = numbers of byte not bits!!! round up #if 1 // tck 0 tms 0 tdi 0 CLEARBIT(BIT2_WRITE,BIT2); // clk CLEARBIT(BIT1_WRITE,BIT1); // tdi CLEARBIT(BIT3_WRITE,BIT3); // tms // tck 1 tms 0 tdi 0 SETBIT(BIT2_WRITE,BIT2); // clk #endif for(i=0;i<64;i++) answer[i]=buf[i]; CommandAnswer(64); break; default: // unkown command answer[0] = UNKOWN_COMMAND; answer[1] = 0x00; CommandAnswer(2); } }