Example #1
0
static bool udd_ctrl_interrupt_error(void)
{
	// Underflow only managed for control endpoint
	if (udd_is_underflow_event()) {
		udd_ack_underflow_event();
		if (udd_control_in_underflow()) {
			udd_ctrl_underflow();
		}
		return true;
	}
	// Overflow only managed for control endpoint
	if (udd_is_overflow_event()) {
		udd_ack_overflow_event();
		if (udd_control_out_overflow()) {
			udd_ctrl_overflow();
		}
		return true;
	}
	return false;
}
Example #2
0
static bool udd_ctrl_interrupt(void)
{

	if (!Is_udd_endpoint_interrupt(0))
		return false; // No interrupt events on control endpoint

	// By default disable overflow and underflow interrupt
	udd_disable_nak_in_interrupt(0);
	udd_disable_nak_out_interrupt(0);


	// Search event on control endpoint
	if (Is_udd_setup_received(0)) {
		// SETUP packet received
		udd_ctrl_setup_received();
		return true;
	}
	if (Is_udd_in_send(0) && Is_udd_in_send_interrupt_enabled(0)) {
		// IN packet sent
		udd_ctrl_in_sent();
		return true;
	}
	if (Is_udd_out_received(0)) {
		// OUT packet received
		udd_ctrl_out_received();
		return true;
	}
	if (Is_udd_nak_out(0)) {
		// Overflow on OUT packet
		udd_ack_nak_out(0);
		udd_ctrl_overflow();
		return true;
	}
	if (Is_udd_nak_in(0)) {
		// Underflow on IN packet
		udd_ack_nak_in(0);
		udd_ctrl_underflow();
		return true;
	}
	return false;
}