Switch from stdio to direct TinyUSB CDC, drop cstdio from w6300

This commit is contained in:
Ian Gulliver
2026-04-05 17:03:34 +09:00
parent 579876774e
commit 401008b5a7
5 changed files with 117 additions and 14 deletions

View File

@@ -1,16 +1,28 @@
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/bootrom.h"
#include "pico/unique_id.h"
#include "tusb.h"
#include "wire.h"
#include "w6300.h"
static void send_bytes(const std::vector<uint8_t> &data) {
for (auto b : data) {
putchar(b);
static void usb_write(const uint8_t* data, uint32_t len) {
while (len > 0) {
uint32_t avail = tud_cdc_write_available();
if (avail == 0) {
tud_task();
continue;
}
uint32_t chunk = len < avail ? len : avail;
tud_cdc_write(data, chunk);
tud_cdc_write_flush();
data += chunk;
len -= chunk;
}
stdio_flush();
}
static void send_bytes(const std::vector<uint8_t> &data) {
usb_write(data.data(), data.size());
}
static bool w6300_init() {
@@ -35,20 +47,22 @@ static bool w6300_init() {
}
int main() {
stdio_init_all();
stdio_set_translate_crlf(&stdio_usb, false);
tusb_init();
if (!w6300_init()) {
printf("W6300 init failed\n");
}
static static_vector<uint8_t, 256> rx_buf;
while (true) {
int c = getchar_timeout_us(100000);
if (c == PICO_ERROR_TIMEOUT) continue;
tud_task();
rx_buf.push_back(static_cast<uint8_t>(c));
if (!tud_cdc_available()) continue;
uint8_t byte;
if (tud_cdc_read(&byte, 1) != 1) continue;
rx_buf.push_back(byte);
auto msg = try_decode(rx_buf);
if (!msg) {