Пример #1
0
void dispatch_host_cmd(void)
{
	u32 length;
	u8 *p = cmd_buffer;
	struct TRANS_BUFFER *tb = &uart_trans_buffer[COM1];
	//struct TRANS_BUFFER *tb = &usb_trans_buffer;

	//if(com1_frame_count < 10) {
	//	return;
	//}
	while (length = get_trans_buffer_cmd(tb,p))
	{
		DBG_CMD("get cmd<<",p,length);
		com1_frame_count = 0;
		delay_us(CMD_WAIT_TIME);
		_dispatch_host_cmd(p, length);
	}
	
	if(com1_frame_count < 5) {
		return;
	}
	
	if ((trans_buffer_out_length(tb) > 0)) {
		length = get_trans_buffer(tb, p, CMD_MAX_LENGTH);
		_dispatch_host_cmd(p, length);
		//PR_DEBUG("get cmd by delay\n");
	}
}
Пример #2
0
void dispatch_host_cmd(void)
{
	u32 length;
	u8 *p = cmd_buffer;

	if(IS_IRQ_FLAG(USBOUT_IRQ_FLAG)) {
		CLEAR_IRQ_FLAG(USBOUT_IRQ_FLAG);
		FrameCount = 0;
		//PR_DEBUG("usb out int\n");
	}
	/* when usb out int occurs here, it's huge chance to get incomplete data>64 bytes*/
	while (length = get_trans_buffer_cmd(&usb_trans_buffer,p))
	{
		DBG_CMD("get cmd<<",p,length);
		delay_us(CMD_WAIT_TIME);
		_dispatch_host_cmd(p, length);
	}

	if(IS_IRQ_FLAG(USBOUT_IRQ_FLAG))
		return;

	if ((trans_buffer_out_length(&usb_trans_buffer) > 0)) {
		delay_ms(5);
		length = get_trans_buffer(&usb_trans_buffer, p, CMD_MAX_LENGTH);
		_dispatch_host_cmd(p, length);
		//PR_DEBUG("get cmd by delay\n");
	}
}
Пример #3
0
static void report_nonce_from_uartrx(int com)
{
	int length;
	u32 nonce;
	struct TRANS_BUFFER *tb = &uart_trans_buffer[com];

	while(trans_buffer_out_length(tb) >= 4) {
		CLEAR_IRQ_FLAG((1 << com));
		get_trans_buffer(tb, (u8*)&nonce, 4);
		PR_DEBUG("COM%d",com+1);
		DBG_CMD(">>>",(u8*)&nonce, 4);
#if defined(USE_STM3210E_EVAL)
		if (COM_USART[com] == BTC_COM1 || COM_USART[com] == BTC_COM2)
			report_btc_nonce(nonce);
		else if (COM_USART[com] == LTC_COM1 || COM_USART[com] == LTC_COM2)
			report_ltc_nonce(nonce);
#else
		if (COM_USART[com] == BTC_COM1)
			report_btc_nonce(nonce);
		else if (COM_USART[com] == LTC_COM1)
			report_ltc_nonce(nonce);		
#endif
	}
	if(IS_IRQ_FLAG((1 << com)))
	{
		delay_us(CMD_WAIT_TIME);
		//PR_DEBUG("get btc report data\n");
		CLEAR_IRQ_FLAG((1 << com));		
		length = get_trans_buffer(&uart_trans_buffer[com], (u8*)&nonce, 4);
		flush_trans_buffer(&uart_trans_buffer[com]);
		if (length < 4)/* invalid nonce */ 
			return;
		PR_DEBUG("COM%d",com+1);
		DBG_CMD(">>>",(u8*)&nonce, 4);		
#if defined(USE_STM3210E_EVAL)
		if (COM_USART[com] == BTC_COM1 || COM_USART[com] == BTC_COM2)
			report_btc_nonce(nonce);
		else if (COM_USART[com] == LTC_COM1 || COM_USART[com] == LTC_COM2)
			report_ltc_nonce(nonce);
#else
		if (COM_USART[com] == BTC_COM1)
			report_btc_nonce(nonce);
		else if (COM_USART[com] == LTC_COM1)
			report_ltc_nonce(nonce);		
#endif
		//led0_revert();
	}
}
Пример #4
0
int trans_buffer_has_cmd(struct TRANS_BUFFER *tb)
{
	int n;
	int length;

	length = trans_buffer_out_length(tb);
	if (length < 5) return 0;

	for(n = 3; n < length - 1; n++)
	{
		if (get_next_n_out(tb,n) == HEADER_55 
			&& get_next_n_out(tb,n+1) == HEADER_AA)
			return n;
	}
	return 0;
}