コード例 #1
0
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);
}
コード例 #2
0
ファイル: main.c プロジェクト: 0prj/asm3u
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();
	}
}