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; }
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; }