From 233eed8b12b1cd24a27a391a4307bbac94b2188a Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 15 Jul 2025 19:52:44 +0300 Subject: [PATCH] add timeout for USB writting on CDC --- .../Socket_fans/kicad/stm32.kicad_prl | 1 - .../Socket_fans/kicad/stm32.kicad_pro | 1 + F1:F103/BISS_C_encoders/encoders.bin | Bin 13972 -> 15628 bytes F1:F103/BISS_C_encoders/encoders.creator.user | 66 +++++++++++++----- F1:F103/BISS_C_encoders/usb_dev.c | 21 +++++- F1:F103/BISS_C_encoders/usb_dev.h | 2 + F1:F103/BISS_C_encoders/version.inc | 4 +- 7 files changed, 73 insertions(+), 22 deletions(-) diff --git a/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_prl b/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_prl index fe8e204..97a1177 100644 --- a/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_prl +++ b/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_prl @@ -41,7 +41,6 @@ 11, 12, 13, - 14, 15, 16, 17, diff --git a/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_pro b/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_pro index 3ab5a58..b0d56a6 100644 --- a/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_pro +++ b/F0:F030,F042,F072/Socket_fans/kicad/stm32.kicad_pro @@ -75,6 +75,7 @@ "footprint_type_mismatch": "ignore", "hole_clearance": "error", "hole_near_hole": "error", + "holes_co_located": "warning", "invalid_outline": "error", "isolated_copper": "warning", "item_on_disabled_layer": "error", diff --git a/F1:F103/BISS_C_encoders/encoders.bin b/F1:F103/BISS_C_encoders/encoders.bin index 97dee9ee77992880486660b4d3fd94b842835f23..4940f074419e43d1013105bce41e8cbdad6652bb 100755 GIT binary patch literal 15628 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 O{qL6;)Z_mA_rC!?lMKiJ literal 13972 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 - + EnvironmentId - {cf63021e-ef53-49b0-b03b-2f2570cdf3b6} + {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} ProjectExplorer.Project.ActiveTarget @@ -40,9 +40,9 @@ 1 0 false - false + true false - 1 + 0 true true 0 @@ -51,10 +51,10 @@ false 1 true - true + false true *.md, *.MD, Makefile - true + false true true @@ -79,7 +79,7 @@ true true Builtin.DefaultTidyAndClazy - 4 + 8 true @@ -92,14 +92,14 @@ ProjectExplorer.Project.Target.0 Desktop + true Desktop Desktop - {91347f2c-5221-46a7-80b1-0a054ca02f79} + {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} 0 0 0 - /home/eddy/Docs/SAO/ELECTRONICS/STM32/F1-srcs/BISS_C_encoders @@ -109,8 +109,8 @@ GenericProjectManager.GenericMakeStep 1 - Сборка - Сборка + Build + Build ProjectExplorer.BuildSteps.Build @@ -122,8 +122,8 @@ GenericProjectManager.GenericMakeStep 1 - Очистка - Очистка + Clean + Clean ProjectExplorer.BuildSteps.Clean 2 @@ -131,15 +131,49 @@ false - По умолчанию + Default GenericProjectManager.GenericBuildConfiguration + 0 + 0 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + true + + 1 1 0 - Развёртывание - Развёртывание + Deploy + Deploy ProjectExplorer.BuildSteps.Deploy 1 diff --git a/F1:F103/BISS_C_encoders/usb_dev.c b/F1:F103/BISS_C_encoders/usb_dev.c index d9bcdfc..aa668a3 100644 --- a/F1:F103/BISS_C_encoders/usb_dev.c +++ b/F1:F103/BISS_C_encoders/usb_dev.c @@ -19,6 +19,7 @@ #include #include "ringbuffer.h" +#include "strfunc.h" // for cmd interface #include "usb_descr.h" #include "usb_dev.h" @@ -42,6 +43,8 @@ #undef DBGs #define DBGs(x) +extern volatile uint32_t Tms; + // inbuf overflow when receiving static volatile uint8_t bufovrfl[bTotNumEndpoints] = {0}; @@ -110,7 +113,7 @@ static void rxtx_handler(){ DBG("rxtx_handler"); DBGs(uhex2str(ifno)); if(ifno > bTotNumEndpoints-1){ - DBG("wront ifno"); + DBG("wrong ifno"); return; } uint16_t epstatus = KEEP_DTOG(USB->EPnR[1+ifno]); @@ -138,6 +141,8 @@ void WEAK linecoding_handler(uint8_t ifno, usb_LineCoding *lc){ lineCoding[ifno] = *lc; DBG("linecoding_handler"); DBGs(uhex2str(ifno)); + CMDWR("Interface "); CMDWR(u2str(ifno)); + CMDWR(" got linecoding with speed "); CMDWRn(u2str(lc->dwDTERate)); } // SET_CONTROL_LINE_STATE @@ -147,6 +152,9 @@ void WEAK clstate_handler(uint8_t ifno, uint16_t val){ DBGs(uhex2str(val)); CDCready[ifno] = val; // CONTROL_DTR | CONTROL_RTS -> interface connected; 0 -> disconnected lastdsz[ifno] = -1; + if(val == 0) CMDWR("dis"); + CMDWR("connected interface "); + CMDWRn(u2str(ifno)); } // SEND_BREAK @@ -155,6 +163,8 @@ void WEAK break_handler(uint8_t ifno){ lastdsz[ifno] = -1; DBG("break_handler()"); DBGs(uhex2str(ifno)); + CMDWR("Disconnected interface "); + CMDWRn(u2str(ifno)); } @@ -172,13 +182,13 @@ void set_configuration(){ } } -// PL2303 CLASS request +// USB CDC CLASS request void usb_class_request(config_pack_t *req, uint8_t *data, uint16_t datalen){ uint8_t recipient = REQUEST_RECIPIENT(req->bmRequestType); uint8_t dev2host = (req->bmRequestType & 0x80) ? 1 : 0; uint8_t ifno = req->wIndex >> 1; if(ifno > bTotNumEndpoints-1 && ifno != 0xff){ - DBG("wront ifno"); + DBG("wrong ifno"); return; } DBG("usb_class_request"); @@ -222,7 +232,12 @@ void usb_class_request(config_pack_t *req, uint8_t *data, uint16_t datalen){ // blocking send full content of ring buffer int USB_sendall(uint8_t ifno){ + uint32_t T0 = Tms; while(lastdsz[ifno] > 0){ + if(Tms - T0 > DISCONN_TMOUT){ + break_handler(ifno); + return FALSE; + } if(!CDCready[ifno]) return FALSE; IWDG->KR = IWDG_REFRESH; } diff --git a/F1:F103/BISS_C_encoders/usb_dev.h b/F1:F103/BISS_C_encoders/usb_dev.h index 7f32ac6..5641e20 100644 --- a/F1:F103/BISS_C_encoders/usb_dev.h +++ b/F1:F103/BISS_C_encoders/usb_dev.h @@ -46,6 +46,8 @@ void break_handler(uint8_t ifno); void clstate_handler(uint8_t ifno, uint16_t val); void linecoding_handler(uint8_t ifno, usb_LineCoding *lc); +// as ugly CDC have no BREAK after disconnected client in non-canonical mode, we should use timeout - more than 2ms +#define DISCONN_TMOUT (2) // sizes of ringbuffers for outgoing and incoming data #define RBOUTSZ (512) diff --git a/F1:F103/BISS_C_encoders/version.inc b/F1:F103/BISS_C_encoders/version.inc index 4e70e46..2f05971 100644 --- a/F1:F103/BISS_C_encoders/version.inc +++ b/F1:F103/BISS_C_encoders/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "108" -#define BUILD_DATE "2025-06-03" +#define BUILD_NUMBER "111" +#define BUILD_DATE "2025-07-15"