From c93c2ac6ab8554c408d091e39617201babea32b1 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 14 Apr 2026 09:28:06 +0300 Subject: [PATCH] add enable/disable command --- F1:F103/Canon_managing_device/canon.c | 23 ++++++++++++++++++ F1:F103/Canon_managing_device/canon.h | 3 +++ .../canonmanage.creator.user | 2 +- F1:F103/Canon_managing_device/canonusb.bin | Bin 11108 -> 11320 bytes F1:F103/Canon_managing_device/main.c | 1 + F1:F103/Canon_managing_device/proto.c | 11 +++++++++ F1:F103/Canon_managing_device/version.inc | 4 +-- 7 files changed, 41 insertions(+), 3 deletions(-) diff --git a/F1:F103/Canon_managing_device/canon.c b/F1:F103/Canon_managing_device/canon.c index 612825e..08d75cb 100644 --- a/F1:F103/Canon_managing_device/canon.c +++ b/F1:F103/Canon_managing_device/canon.c @@ -172,6 +172,7 @@ void canon_init(){ */ void canon_proc(){ static uint32_t Tconn = 0; + if(state == LENS_DISABLED) return; if(state == LENS_DISCONNECTED){ if(!LENSCONNECTED()){ Tconn = 0; @@ -404,3 +405,25 @@ int canon_getinfo(){ uint16_t canon_getstate(){ return state | (inistate << 8); } + +void canon_disable(){ + if(state == LENS_DISABLED) return; + state = LENS_DISABLED; + LENS_OFF(); + ready = 0; +} + +void canon_enable(){ + if(state != LENS_DISABLED) return; + if(OVERCURRENT()){ + state = LENS_OVERCURRENT; + return; + } + if(!LENSCONNECTED()){ + state = LENS_DISCONNECTED; + return; + } + LENS_ON(); + state = LENS_SLEEPING; + ready = 1; +} diff --git a/F1:F103/Canon_managing_device/canon.h b/F1:F103/Canon_managing_device/canon.h index 49e17e6..6e77faf 100644 --- a/F1:F103/Canon_managing_device/canon.h +++ b/F1:F103/Canon_managing_device/canon.h @@ -92,6 +92,7 @@ typedef enum{ LENS_INITIALIZED, // initializing process LENS_READY, // ready to operate LENS_ERR, // some error occured - reconnect after REINIT_PAUSE + LENS_DISABLED, // powered off by command LENS_S_AMOUNT } lens_state; @@ -109,6 +110,8 @@ typedef enum{ void canon_init(); void canon_proc(); +void canon_disable(); +void canon_enable(); int canon_diaphragm(char command); int canon_focus(int16_t val); int canon_sendcmd(uint8_t cmd); diff --git a/F1:F103/Canon_managing_device/canonmanage.creator.user b/F1:F103/Canon_managing_device/canonmanage.creator.user index d96c512..c13c0ee 100644 --- a/F1:F103/Canon_managing_device/canonmanage.creator.user +++ b/F1:F103/Canon_managing_device/canonmanage.creator.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/F1:F103/Canon_managing_device/canonusb.bin b/F1:F103/Canon_managing_device/canonusb.bin index ed12a97afbf9e8741027aeed29f3371eaccff4d5..d8ac4ecd3451c4d29531c41de791aa5ed9935862 100755 GIT binary patch delta 3754 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 delta 3597 zcmaJ^4Ny~87QXj|kVr*|fdWC=gh&A+64X|z+a&~v1ng2pEmN%x)wZ#t^@r__v$dN* z(uHo-MIUyp=oWu=M=SoKJ4o!(->r4JD_EVaZ{{ySlRTvLQ4>Mcfgw?;>guxB*o z6HY_82RIScn=r{mr?J~6&2hz;h}uDjULQyFxnH|WD>(9WMc`f)(LY}Hc)7;;{)r-v zQjKGw(>gTq`MWHY4z07wZsfc*#(;aK7NbNPIHT54=`;pJMWy2pj%^O6QR^&@%rn=R z<|9^R57SI%GOW@0x?<#ttxW6uqoU->{BmNQlIl#b6>$kP)sgBnaEb^m;uz3MXXO~M z)k>K+1~zMDS{%3miX%98jh1~`yJ=dPJn5(`4(KZ@9owsu%Tw$Z9bY;gb|l-AY^jdP z)m4tlXOry3992}Zxrt9r{G{xYa*dNQh9Vs28h&?J zrS}Rk8n2+FF@^_9y+SOuRT(7ypA zs)M<<(aVC1MDjwsxIX!~y7^&$)c(toVv~Gzp73mdx+46oKX-14i43V~dv9n_^-BDW zl7$f}^Z);^l>VHKgU%~I(tDIDU6h4rh(wpyjnN-Ad*O~m=AI{uBI5;jq)KWdje3b+ z4S$T`zx20&UkN@ve4_vMrR%7RHMk+K6=eV0>V6J~nnS%p%D!H~m2y%i(1{}dj3n{f zLvnt%g=UvmmJE02L9HRw-oFA%k0G3aP<=m21c_OK18#-f{XJi6jm(_gR?F}l51n~l zc*OiU$tlyUo){Z*CELExK?fW17dkTS7o1%x#g*xf3(iZb@a0(<`ifU=A;%n>-fm!d zU5+c!^RaW8iVW&JN#*Ydxb=V(zQpU-8=; z+$EUxP3Sb|?8V(D&1B>tn|8R&i(ROe-PseG*rrfG3YZvK^A=gF7JE7+le}9rU@N$WM_({?F3VzHJyk9qb&g`2809R`%=3 z>2wmSO3z|)TiNw@>s1q`wS0JgiNoe1o z&Rg;+$xxw5w;LJ+vpFWxu4DV=8Su=8eGW5dw3rt{<=@%Q{`mmE81=sdP*P38Q;km2##=XB=UipGJ9Ng zbj1aqtS9I9b9Z!wyicc(F$@e)!?0pdS)%>%Se*-(|hg z9g{(fhlE)Kk-}Tl4#R4E@_jfc;^F3wx)sqFu=ac7T~GS9pfcp@;Bf25gC+v<=i6k^ zKFH)sngxCyupDp#zXaqe%Ld#4xkawUkdRWY9-^j}ANys7o%_e^T-_ymwadD_8==i; zcOh*Dh5KlV?vOA;HaI~}vBW3)WVevimfa$F*wS2)tx z`sCaRroxdetlIyg&87(fkv6{ZGc#7?V80?Qo+@te?*@s`D-|JK@SIslX=k z_m7JF6L4ykPgeWwn3`L49$GgCNZxZ@(S3kHCm3-?kj+b)$&w-AUGW}~om6E}~2G4&L4wJ-aQ%Zs}L1a1EVlS!Kx*En#t<^6&t-mMV-@|S;l}L1$_(SwgzJwGhv3_qMu=&@j$M5X6}sp+pc9g z6$~M5^K%wb_Tbd273f&%8~FdM6=(sr0CBMilrYpn2_cOr{1)Ie@D?EN{t>7bAb=W3 V1f~H6KoubCtO51ruq#ZT{Rio{K2!hz diff --git a/F1:F103/Canon_managing_device/main.c b/F1:F103/Canon_managing_device/main.c index 7eb1469..b147e62 100644 --- a/F1:F103/Canon_managing_device/main.c +++ b/F1:F103/Canon_managing_device/main.c @@ -48,6 +48,7 @@ int main(void){ uint32_t SPIctr = Tms; while(1){ + // TODO: add CAN bus parsing IWDG->KR = IWDG_REFRESH; if(Tms - SPIctr > CANONPROC_INTERVAL){ // not more than once per 10ms SPIctr = Tms; diff --git a/F1:F103/Canon_managing_device/proto.c b/F1:F103/Canon_managing_device/proto.c index bf9b9b8..f088cbb 100644 --- a/F1:F103/Canon_managing_device/proto.c +++ b/F1:F103/Canon_managing_device/proto.c @@ -31,6 +31,8 @@ static const char *OK = "OK", *FAIL = "FAIL"; const char* helpmsg = "https://github.com/eddyem/stm32samples/tree/master/F1-nolib/Canon_managing_device build#" BUILD_NUMBER " @ " BUILD_DATE "\n" + "# - turn off lens power\n" + "* - turn on lens power\n" "0 - move to smallest foc value (e.g. 2.5m)\n" "1 - move to largest foc value (e.g. infinity)\n" "a - move focus to given ABSOLUTE position or get current value (without number)\n" @@ -105,6 +107,7 @@ const char *connmsgs[LENS_S_AMOUNT+1] = { [LENS_INITIALIZED] = "initialized", [LENS_READY] = "ready", [LENS_ERR] = "error", + [LENS_DISABLED] = "turned off", [LENS_S_AMOUNT] = "wrong state" }; const char *inimsgs[INI_S_AMOUNT+1] = { @@ -128,6 +131,14 @@ void parse_cmd(const char *buf){ lastFloodTime= FALSE; if(buf[1] == '\n' || !buf[1]){ // one symbol commands switch(*buf){ + case '*': + canon_enable(); + USB_sendstr(OK); + break; + case '#': + canon_disable(); + USB_sendstr(OK); + break; case 'a': case 'f': errw(canon_focus(-1)); diff --git a/F1:F103/Canon_managing_device/version.inc b/F1:F103/Canon_managing_device/version.inc index 3d4e405..7c07671 100644 --- a/F1:F103/Canon_managing_device/version.inc +++ b/F1:F103/Canon_managing_device/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "114" -#define BUILD_DATE "2025-03-12" +#define BUILD_NUMBER "133" +#define BUILD_DATE "2026-04-14"