void cmd_xmodem(void) { int rcv, fnbr; char *fname, *errorreturn; getargs(&cmdline, 3, " "); if(argc != 3) error("Invalid syntax"); if(toupper(*argv[0]) == 'R') rcv = true; else if(toupper(*argv[0]) == 'S') rcv = false; else error("Invalid syntax"); fname = getCstring(argv[2]); fnbr = FindFreeFileNbr(); if(!fnbr) error("Too many files open"); MMfopen(fname, rcv?"w":"r", fnbr); FileXfr = true; if(rcv) errorreturn = xmodemReceive(fnbr); else errorreturn = xmodemTransmit(fnbr); FileXfr = false; MMfclose(fnbr); if(*errorreturn) error(errorreturn); }
int main(void) { int rx_len; irq_initialize_vectors(); cpu_irq_enable(); unsigned char ch; // Initialize the sleep manager sleepmgr_init(); #if !SAM0 sysclk_init(); board_init(); #else system_init(); #endif configure_console(); printf("\nUSB CDC\n"); printf("CPU:%dHz\n", sysclk_get_cpu_hz()); printf("sysclk_get_peripheral_hz:%dHz\n", sysclk_get_peripheral_hz()); printf("sysclk_get_main_hz:%dHz\n", sysclk_get_main_hz()); ui_init(); ui_powerdown(); // Start USB stack to authorize VBus monitoring udc_start(); port_interrupt_disible(); // The main loop manages only the power mode // because the USB management is done by interrupt unsigned long input_count=0; while (true) { ch = port_inbyte(1); if(! port_in_is_error()) { if('c'== ch) { port_outbyte('C'); xmodemReceive((unsigned char *)0x2000, 0x100000); } else if('x'== ch) { port_outbyte('X'); xmodemTransmit((unsigned char *)0x2000, 0x100000); } else if('u'== ch) { port_outbyte('U'); } else if('m'== ch) { for(int j=0; j<20; j++) { //printf("S 64MB"); port_outbyte('+'); for(int i=0; i <1024*1024/4; i++) { memcpy((void *)(0x60000000), (void *)0x60010000, 1024*4); } //printf("E 64MB "); } } else if('T'== ch) { while(1) { //delay_us(1); rx_len = port_read(test_rx_buf, rx_block_len, 1); //crc16_ccitt(test_rx_buf,rx_block_len); memcpy(&test_rx_buf[rx_block_len], &test_rx_buf[0], rx_block_len); if(rx_len != rx_block_len) break; #if 0 for(int i=0;i<rx_bulk_len; i++) { if('T'!=test_rx_buf[i]) break; } #endif input_count += rx_block_len; if(0==(input_count&(1024-1))) { //port_outbyte('K'); } if(0==(input_count&(1024*1024-1))) { port_outbyte('M'); } } } } else { delay_us(10); } //sleepmgr_enter_sleep(); } }