#include <stdio.h>

#include "pico/stdlib.h"
#include "hardware/pio.h"
#include "hardware/clocks.h"

#include "myapp.pio.h"			// myapp.pio: PIO ASM src name

int	main()
{
//	setup_default_uart();
	stdio_init_all();
	sleep_ms(3000);		// wait serial connection

	// todo	get	free state_machine
	PIO		pio		= pio0;

	uint	addr	= pio_add_program(pio, &pioasm_program);

	int		cmd, len;
	char	buf[1024];
	cmd		= 0;
	buf[0]	= '\0';

	uint	prev_inp	= 0;
	uint	first_inp	= 1;

	/////////////////////////////////////////////////////////////
	// PIN 0	PWM OUT
	/////////////////////////////////////////////////////////////
	pioasm_exec(
		pio,
		0,		// sm
		addr,	// asm

		0,		// outpin base
		0,		// # of outpin

		0,		// inpin base
		0,		// # of inpin

		0,		// sidepin base
		1,		// # of sidepin

//		1.0			// 125MHz
//		4.0			// 31.25MHz
//		10.0		// 12.5MHz
//		12.50		// 10M
//		100.0		// 1.25MHz
		125.0		// 1M
//		1000.0		// 125KHz
//		10000.0		// 12.5KHz
					// (min 1.9kHz)
	);

	printf("init\n");
	sleep_ms(1000);

	pio_sm_put_blocking(pio, 0, (uint32_t)((20000 - 7) / 3));		// total duration
	pio_sm_put_blocking(pio, 0, (uint32_t)((1500 - 3) / 3));		// H duration

	printf("press return\n");
	gets(buf);
	printf("wait cmd\n");

	while (true) {
		gets(buf);
		sscanf(buf, "%d\n", &cmd);
		len	= 1500 + cmd * 10;

		printf("command %d deg (%d us)\n", cmd, len);
		pio_sm_put_blocking(pio, 0, (uint32_t)((len - 3) / 3));		// H duration
	}
}

