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 ed12a97..d8ac4ec 100755 Binary files a/F1:F103/Canon_managing_device/canonusb.bin and b/F1:F103/Canon_managing_device/canonusb.bin differ 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"