void server_task_queue(int accept_fd) { //5! Work here! int i; pthread_t *threads = malloc(sizeof(pthread_t) * MAX_CONCURRENCY); for (i = 0 ; i < MAX_CONCURRENCY ; i++) pthread_create(&threads[i], NULL, (void *)&pthread_handle, NULL); printf("ALL THREADS CREATED\n"); for(;;) { int fd = server_accept(accept_fd); put_request(req_create((void*)fd)); printf("ADDING STUFF!\n"); } return; }
static int ft245r_paged_load_flash(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, int page_size, int n_bytes) { unsigned long i,j,n; //int rc; int addr,addr_save,buf_pos; int req_count = 0; char buf[FT245R_FRAGMENT_SIZE+1]; addr = 0; for (i=0; i<n_bytes; ) { buf_pos = 0; addr_save = addr; for (j=0; j< FT245R_FRAGMENT_SIZE/8/FT245R_CYCLES/4; j++) { if (i >= n_bytes) break; buf_pos += set_data(buf+buf_pos, (addr & 1)?0x28:0x20 ); buf_pos += set_data(buf+buf_pos, (addr >> 9) & 0xff ); buf_pos += set_data(buf+buf_pos, (addr >> 1) & 0xff ); buf_pos += set_data(buf+buf_pos, 0); addr ++; i++; } if (i >= n_bytes) { buf[buf_pos++] = 0; // sck down } n = j; ft245r_send(pgm, buf, buf_pos); put_request(addr_save, buf_pos, n); req_count++; if (req_count > REQ_OUTSTANDINGS) do_request(pgm, m); report_progress(i, n_bytes, NULL); } while (do_request(pgm, m)) ; return 0; }
static int ft245r_paged_load_flash(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, unsigned int page_size, unsigned int addr, unsigned int n_bytes) { unsigned long i,j,n; int addr_save,buf_pos; int req_count = 0; unsigned char buf[FT245R_FRAGMENT_SIZE+1]; for (i=0; i<n_bytes; ) { buf_pos = 0; addr_save = addr; for (j=0; j< FT245R_FRAGMENT_SIZE/8/FT245R_CYCLES/4; j++) { if (i >= n_bytes) break; buf_pos += set_data(pgm, buf+buf_pos, (addr & 1)?0x28:0x20 ); buf_pos += set_data(pgm, buf+buf_pos, (addr >> 9) & 0xff ); buf_pos += set_data(pgm, buf+buf_pos, (addr >> 1) & 0xff ); buf_pos += set_data(pgm, buf+buf_pos, 0); addr ++; i++; } if (i >= n_bytes) { ft245r_out = SET_BITS_0(ft245r_out,pgm,PIN_AVR_SCK,0); // sck down buf[buf_pos++] = ft245r_out; } n = j; ft245r_send(pgm, buf, buf_pos); put_request(addr_save, buf_pos, n); req_count++; if (req_count > REQ_OUTSTANDINGS) do_request(pgm, m); } while (do_request(pgm, m)) ; return 0; }
static int ft245r_paged_write_flash(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, int page_size, int n_bytes) { unsigned int i,j; int addr,addr_save,buf_pos,do_page_write,req_count; char buf[FT245R_FRAGMENT_SIZE+1+128]; req_count = 0; addr = 0; for (i=0; i<n_bytes; ) { addr_save = addr; buf_pos = 0; do_page_write = 0; for (j=0; j< FT245R_FRAGMENT_SIZE/8/FT245R_CYCLES/4; j++) { buf_pos += set_data(buf+buf_pos, (addr & 1)?0x48:0x40 ); buf_pos += set_data(buf+buf_pos, (addr >> 9) & 0xff ); buf_pos += set_data(buf+buf_pos, (addr >> 1) & 0xff ); buf_pos += set_data(buf+buf_pos, m->buf[i]); addr ++; i++; if ( (m->paged) && (((i % m->page_size) == 0) || (i == n_bytes))) { do_page_write = 1; break; } } #if defined(USE_INLINE_WRITE_PAGE) if (do_page_write) { int addr_wk = addr_save - (addr_save % m->page_size); /* If this device has a "load extended address" command, issue it. */ if (m->op[AVR_OP_LOAD_EXT_ADDR]) { unsigned char cmd[4]; OPCODE *lext = m->op[AVR_OP_LOAD_EXT_ADDR]; memset(cmd, 0, 4); avr_set_bits(lext, cmd); avr_set_addr(lext, cmd, addr_wk/2); buf_pos += set_data(buf+buf_pos, cmd[0]); buf_pos += set_data(buf+buf_pos, cmd[1]); buf_pos += set_data(buf+buf_pos, cmd[2]); buf_pos += set_data(buf+buf_pos, cmd[3]); } buf_pos += set_data(buf+buf_pos, 0x4C); /* Issue Page Write */ buf_pos += set_data(buf+buf_pos,(addr_wk >> 9) & 0xff); buf_pos += set_data(buf+buf_pos,(addr_wk >> 1) & 0xff); buf_pos += set_data(buf+buf_pos, 0); } #endif if (i >= n_bytes) { buf[buf_pos++] = 0; // sck down } ft245r_send(pgm, buf, buf_pos); put_request(addr_save, buf_pos, 0); //ft245r_sync(pgm); #if 0 fprintf(stderr, "send addr 0x%04x bufsize %d [%02x %02x] page_write %d\n", addr_save,buf_pos, extract_data_out(buf , (0*4 + 3) ), extract_data_out(buf , (1*4 + 3) ), do_page_write); #endif req_count++; if (req_count > REQ_OUTSTANDINGS) do_request(pgm, m); if (do_page_write) { #if defined(USE_INLINE_WRITE_PAGE) while (do_request(pgm, m)) ; usleep(m->max_write_delay); #else int addr_wk = addr_save - (addr_save % m->page_size); int rc; while (do_request(pgm, m)) ; rc = avr_write_page(pgm, p, m, addr_wk); if (rc != 0) { return -2; } #endif req_count = 0; } report_progress(i, n_bytes, NULL); } while (do_request(pgm, m)) ; return i; }