Exemplo n.º 1
0
/*! \brief Main function. Execution starts here.
 */
int main(void)
{
	irq_initialize_vectors();
	cpu_irq_enable();

	// Initialize the sleep manager
	sleepmgr_init();

	sysclk_init();
	board_init();
	ui_init();
	ui_powerdown();

	// Start USB stack to authorize VBus monitoring
	udc_start();

	// The main loop manages only the power mode
	// because the USB management is done by interrupt
	while (true) {
		sleepmgr_enter_sleep();
		if (main_b_cdc_enable) {
			// Here CPU wakeup at each SOF (1ms)
			for (uint8_t port = 0; port < UDI_CDC_PORT_NB; port++) {
				if (!(main_port_open & (1 << port))) {
					// Port not open
					continue;
				}
				if (!udi_cdc_multi_is_rx_ready(port)) {
					// No data received
					continue;
				}
				int value = udi_cdc_multi_getc(port);
				if (value != 'p') {
					// Ignore this value
					continue;
				}
				udi_cdc_multi_write_buf(port, "PORT", sizeof("PORT")-1);
				udi_cdc_multi_putc(port, port+'0');
				udi_cdc_multi_putc(port, '\n');
				udi_cdc_multi_putc(port, '\r');
			}
		}
	}
}
iram_size_t udi_cdc_write_buf(const void* buf, iram_size_t size)
{
	return udi_cdc_multi_write_buf(0, buf, size);
}