Esempio n. 1
0
/* 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);
	}
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;
      }
    }
  }
}
Esempio n. 4
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);
}
Esempio n. 5
0
/* 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);
  }

}
Esempio n. 6
0
/* 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);
  }


}