コード例 #1
0
uchar usbFunctionRead(uchar *data, uchar len) {

	uchar i;

	/* check if programmer is in correct read state */
	if ((prog_state != PROG_STATE_READFLASH) && (prog_state
			!= PROG_STATE_READEEPROM) && (prog_state != PROG_STATE_TPI_READ)) {
		return 0xff;
	}

	/* fill packet TPI mode */
	if(prog_state == PROG_STATE_TPI_READ)
	{
		tpi_read_block(prog_address, data, len);
		prog_address += len;
		return len;
	}

	/* fill packet ISP mode */
	for (i = 0; i < len; i++) {
		if (prog_state == PROG_STATE_READFLASH) {
			data[i] = ispReadFlash(prog_address);
		} else {
			data[i] = ispReadEEPROM(prog_address);
		}
		prog_address++;
	}

	/* last packet? */
	if (len < 8) {
		prog_state = PROG_STATE_IDLE;
	}

	return len;
}
コード例 #2
0
ファイル: usbasp.c プロジェクト: Technus/usbavrlab-tool
uchar usbFunctionRead(uchar *data, uchar len)
{
 uchar i;
 int c;

  // check if programmer is in correct read state 
  if (
      (prog_state != PROG_STATE_READFLASH) 
   && (prog_state != PROG_STATE_READEEPROM)
   && (prog_state != STATE_READ_CDC)
     ) 
    return 0xff;

  // fill packet 
  for (i = 0; i < len; i++) 
    {
      if (prog_state == PROG_STATE_READFLASH) 
        data[i] = ispReadFlash(prog_address);
      else if (prog_state == PROG_STATE_READEEPROM) 
        data[i] = ispReadEEPROM(prog_address);
      else if (prog_state == STATE_READ_CDC) 
	    {
		  c = BUF_get(&debug_buffer);
		  if (c == -1) break;
		  data[i] = c;
		}
      prog_address++;
    }
  // last packet? 
  if (len < 8) 
    prog_state = PROG_STATE_IDLE;
  return i;
}