switched to libco
This commit is contained in:
parent
2683c5c0b5
commit
b2e797d227
|
@ -36,6 +36,7 @@ if(FAMILY STREQUAL "rp2040")
|
|||
target_sources(${PROJECT} PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/main.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/usb_descriptors.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libco/libco.S
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/DAP/Firmware/Source/DAP.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/DAP/Firmware/Source/JTAG_DP.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/DAP/Firmware/Source/DAP_vendor.c
|
||||
|
@ -49,6 +50,7 @@ if(FAMILY STREQUAL "rp2040")
|
|||
# Example include
|
||||
target_include_directories(${PROJECT} PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libco/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/DAP/Firmware/Include/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/bsp/${FAMILY}/
|
||||
|
|
|
@ -197,14 +197,14 @@ void cdc_serprog_task(void) {
|
|||
// bytes seem to be sent one by one, so its probably better to rework
|
||||
// this, a lot
|
||||
if (conn && avail) {
|
||||
printf("rbp=%d\n", bufpos);
|
||||
//printf("rbp=%d\n", bufpos);
|
||||
uint32_t nread = tud_cdc_n_read(CDC_N_SERPROG, &rx_buf[bufpos], sizeof(rx_buf) - bufpos);
|
||||
printf("got %d\n", nread);
|
||||
cdc_uart_task();
|
||||
|
||||
bufpos = 0;
|
||||
do {
|
||||
printf("hbp=%d\n", /*rx_buf[bufpos],*/ bufpos);
|
||||
//printf("hbp=%d\n", /*rx_buf[bufpos],*/ bufpos);
|
||||
cdc_uart_task();
|
||||
uint32_t dec = serprog_handle_cmd(&rx_buf[bufpos], nread);
|
||||
cdc_uart_task();
|
||||
|
@ -218,9 +218,9 @@ void cdc_serprog_task(void) {
|
|||
// so we move the leftover data to the start of the buffer,
|
||||
// and make sure the next call will put the new data right
|
||||
// after it
|
||||
printf("mv %d %d %d ", nread, bufpos, rx_buf[bufpos]);
|
||||
//printf("mv %d %d %d ", nread, bufpos, rx_buf[bufpos]);
|
||||
memmove(rx_buf, &rx_buf[bufpos], nread);
|
||||
printf("%d\n", rx_buf[0]);
|
||||
//printf("%d\n", rx_buf[0]);
|
||||
bufpos = nread;
|
||||
break;
|
||||
}
|
||||
|
|
71
main.c
71
main.c
|
@ -36,12 +36,64 @@
|
|||
#include "protocfg.h"
|
||||
#include "protos.h"
|
||||
|
||||
#include "libco.h"
|
||||
#include "thread.h"
|
||||
|
||||
#ifdef PICO_BOARD
|
||||
#include <pico/binary_info.h>
|
||||
#endif
|
||||
|
||||
static cothread_t mainthread
|
||||
#ifdef DBOARD_HAS_UART
|
||||
, uartthread
|
||||
#endif
|
||||
#ifdef DBOARD_HAS_SERPROG
|
||||
, serprogthread
|
||||
#endif
|
||||
;
|
||||
|
||||
void thread_yield(void) {
|
||||
co_switch(mainthread);
|
||||
}
|
||||
|
||||
#ifdef DBOARD_HAS_UART
|
||||
static void uart_thread_fn(void) {
|
||||
cdc_uart_init();
|
||||
thread_yield();
|
||||
while (1) {
|
||||
cdc_uart_task();
|
||||
thread_yield();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DBOARD_HAS_SERPROG
|
||||
static void serprog_thread_fn(void) {
|
||||
cdc_serprog_init();
|
||||
thread_yield();
|
||||
while (1) {
|
||||
cdc_serprog_task();
|
||||
thread_yield();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DBOARD_HAS_UART
|
||||
static uint8_t uartstack[4096];
|
||||
#endif
|
||||
#ifdef DBOARD_HAS_UART
|
||||
static uint8_t serprogstack[4096];
|
||||
#endif
|
||||
|
||||
extern uint32_t co_active_buffer[64];
|
||||
uint32_t co_active_buffer[64];
|
||||
extern cothread_t co_active_handle;
|
||||
cothread_t co_active_handle;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
mainthread = co_active();
|
||||
|
||||
// TODO: split this out in a bsp-specific file
|
||||
#ifdef PICO_BOARD
|
||||
// use hardcoded values from TinyUSB board.h
|
||||
|
@ -50,10 +102,14 @@ int main(void)
|
|||
board_init();
|
||||
|
||||
#ifdef DBOARD_HAS_UART
|
||||
cdc_uart_init();
|
||||
//cdc_uart_init();
|
||||
uartthread = co_derive(uartstack, sizeof uartstack, uart_thread_fn);
|
||||
co_switch(uartthread); // will call cdc_uart_init() on correct thread
|
||||
#endif
|
||||
#ifdef DBOARD_HAS_SERPROG
|
||||
cdc_serprog_init();
|
||||
//cdc_serprog_init();
|
||||
serprogthread = co_derive(serprogstack, sizeof serprogstack, serprog_thread_fn);
|
||||
co_switch(serprogthread); // will call cdc_serprog_init() on correct thread
|
||||
#endif
|
||||
#ifdef DBOARD_HAS_CMSISDAP
|
||||
DAP_Setup();
|
||||
|
@ -65,12 +121,17 @@ int main(void)
|
|||
{
|
||||
tud_task(); // tinyusb device task
|
||||
#ifdef DBOARD_HAS_UART
|
||||
cdc_uart_task();
|
||||
//cdc_uart_task();
|
||||
co_switch(uartthread);
|
||||
#endif
|
||||
|
||||
tud_task(); // tinyusb device task
|
||||
#ifdef DBOARD_HAS_SERPROG
|
||||
cdc_serprog_task();
|
||||
//cdc_serprog_task();
|
||||
co_switch(serprogthread);
|
||||
#endif
|
||||
sleep_ms(100);
|
||||
|
||||
//printf("hi\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue