diff --git a/F1:F103/shutter/code/Makefile b/F1:F103/shutter/Makefile
similarity index 100%
rename from F1:F103/shutter/code/Makefile
rename to F1:F103/shutter/Makefile
diff --git a/F1:F103/shutter/Readme.md b/F1:F103/shutter/Readme.md
new file mode 100644
index 0000000..f61bfa6
--- /dev/null
+++ b/F1:F103/shutter/Readme.md
@@ -0,0 +1,75 @@
+Shutter control
+===============
+
+Works with bi-stable shutter.
+You can find the device in `/dev/shutterX` (symlink to `/dev/ttyUSBX`).
+
+## Pinout
+
+**PB0** (pullup in) - hall (or reed switch) sensor input (active low) - opened shutter detector
+
+**PB11** (pullup in) - CCD or button input: open at low signal, close at high
+
+**PA3** (ADC in) - shutter voltage (approx 1/12 U)
+
+**PA5** (PP out) - TLE5205 IN2
+
+**PA6** (PP out) - TLE5205 IN1
+
+**PA7** (pullup in) - TLE5205 FB
+
+**PA10** (PP out) - USB pullup (active low)
+
+**PA11**, **PA12** - USB
+
+**PA13**, **PA14** - SWD
+
+## Commands
+
+* '0' - shutter CLO
+* '1' - shutter OPE
+* '2' - shutter HIZ
+* 'A' - get raw ADC values
+* 'C' - close shutter / abort exposition
+* 'E n' - expose for n milliseconds
+* 'O' - open shutter
+* 'R' - software reset
+* 'S' - get shutter state; also hall and ccd inputs state (1 - active)
+* 't' - get MCU temperature (/10degC)
+* 'T' - get Tms
+* 'v' - get Vdd (/100V)
+* 'V' - get shutter voltage (/100V)
+* 'W' - test watchdog
+
+If you will enter wrong long message, will receive its echo back. Any wrong short command will show help list.
+
+### Shutter control
+Commands '0', '1' and '2' should be used only for debugging purposes.
+To open/close shutter use only 'O', 'C' and 'E' commands.
+
+When opening or closing shutter you will first receive an answer: `OK` if command could be done or `ERR` if there's insufficient voltage on capacitor or shutter is absent.
+After opened the message `shutter=opened` will appear. After closing you will receive messages `exptime=xxx` (when `xxx` is approx. exp. time in milliseconds) and `shutter=closed`.
+
+Command 'E' could return `OK`, `ERR` or `ERRNUM`/`I32OVERFLOW` in wrong number format (number could be decimal, 0x.. - hexadecimal, b.. - binary or 0.. - octal).
+
+When exposition starts you will receive message `OK` and `shutter=opened`. After its end you'll got `exptime=...`, `shutter=closed`.
+If shutter can't be closed, you will give a lots of "exp=cantclose" and different error messages until problem be solved. To stop this error messages give command 'O'.
+
+### Different commands
+* 'A' will show raw values for all ADC channels: 0. - capacitor voltage, 1 - MCU temperature, 2 - MCU Vdd. You will give messages like `adcX=val`.
+
+* 't' - `mcut=val`, where val = T*10 degrC.
+
+* 'T' - `tms=val`, val in ms.
+
+* 'v' - `vdd=val`, val in V*100
+
+* 'V' - "voltage=val", val in V*100
+
+* 'S' - several answers:
+ * `shutter=`: `closed`, `opened`, `error`, `process`, `wait` or `exposing` - shutter state
+ * `exptime=...` (only when shutter is opened) - show time since opening
+ * `regstate=`: `open`, `close`, `off` or `hiZ` - TLE5205 outputs state
+ * `fbstate=`: `0` or `1` - TLE5205 FB out state (1 - error)
+ * `hall=`: `0` or `1` - 1 for opened shutter, 0 for closed
+ * `ccd=`: `0` or `1` - 1 for active (closed contacts) state of "CCD" input
diff --git a/F1:F103/shutter/code/adc.c b/F1:F103/shutter/adc.c
similarity index 100%
rename from F1:F103/shutter/code/adc.c
rename to F1:F103/shutter/adc.c
diff --git a/F1:F103/shutter/code/adc.h b/F1:F103/shutter/adc.h
similarity index 100%
rename from F1:F103/shutter/code/adc.h
rename to F1:F103/shutter/adc.h
diff --git a/F1:F103/shutter/code/Readme.md b/F1:F103/shutter/code/Readme.md
deleted file mode 100644
index f1881a9..0000000
--- a/F1:F103/shutter/code/Readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Shutter control
-===============
-
-Works with bi-stable shutter.
-
-Pinout:
-PB0 (pullup in) - hall (or reed switch) sensor input (active low) - opened shutter detector
-PB11 (pullup in) - CCD or button input: open at low signal, close at high
-
-PA3 (ADC in) - shutter voltage (approx 1/12 U)
-PA5 (PP out) - TLE5205 IN2
-PA6 (PP out) - TLE5205 IN1
-PA7 (pullup in) - TLE5205 FB
-PA10 (PP out) - USB pullup (active low)
-PA11,12 - USB
-PA13,14 - SWD
-
-
-Commands:
diff --git a/F1:F103/shutter/code/kicad b/F1:F103/shutter/code/kicad
deleted file mode 120000
index 6e6d4f0..0000000
--- a/F1:F103/shutter/code/kicad
+++ /dev/null
@@ -1 +0,0 @@
-/home/eddy/Docs/SAO/Zeiss-1000/Small_photometer/shutter/kicad/shutter
\ No newline at end of file
diff --git a/F1:F103/shutter/code/shutter.bin b/F1:F103/shutter/code/shutter.bin
deleted file mode 100755
index c66aa66..0000000
Binary files a/F1:F103/shutter/code/shutter.bin and /dev/null differ
diff --git a/F1:F103/shutter/code/version.inc b/F1:F103/shutter/code/version.inc
deleted file mode 100644
index 46f5d70..0000000
--- a/F1:F103/shutter/code/version.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-#define BUILD_NUMBER "70"
-#define BUILD_DATE "2023-09-21"
diff --git a/F1:F103/shutter/code/hardware.c b/F1:F103/shutter/hardware.c
similarity index 100%
rename from F1:F103/shutter/code/hardware.c
rename to F1:F103/shutter/hardware.c
diff --git a/F1:F103/shutter/code/hardware.h b/F1:F103/shutter/hardware.h
similarity index 100%
rename from F1:F103/shutter/code/hardware.h
rename to F1:F103/shutter/hardware.h
diff --git a/F1:F103/shutter/3d.png b/F1:F103/shutter/kicad/3d.png
similarity index 100%
rename from F1:F103/shutter/3d.png
rename to F1:F103/shutter/kicad/3d.png
diff --git a/F1:F103/shutter/fp-info-cache b/F1:F103/shutter/kicad/fp-info-cache
similarity index 100%
rename from F1:F103/shutter/fp-info-cache
rename to F1:F103/shutter/kicad/fp-info-cache
diff --git a/F1:F103/shutter/gerbers/shutter-B_Cu.gbr b/F1:F103/shutter/kicad/gerbers/shutter-B_Cu.gbr
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-B_Cu.gbr
rename to F1:F103/shutter/kicad/gerbers/shutter-B_Cu.gbr
diff --git a/F1:F103/shutter/gerbers/shutter-Edge_Cuts.gbr b/F1:F103/shutter/kicad/gerbers/shutter-Edge_Cuts.gbr
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-Edge_Cuts.gbr
rename to F1:F103/shutter/kicad/gerbers/shutter-Edge_Cuts.gbr
diff --git a/F1:F103/shutter/gerbers/shutter-F_Cu.gbr b/F1:F103/shutter/kicad/gerbers/shutter-F_Cu.gbr
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-F_Cu.gbr
rename to F1:F103/shutter/kicad/gerbers/shutter-F_Cu.gbr
diff --git a/F1:F103/shutter/gerbers/shutter-drl.rpt b/F1:F103/shutter/kicad/gerbers/shutter-drl.rpt
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-drl.rpt
rename to F1:F103/shutter/kicad/gerbers/shutter-drl.rpt
diff --git a/F1:F103/shutter/gerbers/shutter-drl_map.gbr b/F1:F103/shutter/kicad/gerbers/shutter-drl_map.gbr
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-drl_map.gbr
rename to F1:F103/shutter/kicad/gerbers/shutter-drl_map.gbr
diff --git a/F1:F103/shutter/gerbers/shutter-job.gbrjob b/F1:F103/shutter/kicad/gerbers/shutter-job.gbrjob
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter-job.gbrjob
rename to F1:F103/shutter/kicad/gerbers/shutter-job.gbrjob
diff --git a/F1:F103/shutter/gerbers/shutter.drl b/F1:F103/shutter/kicad/gerbers/shutter.drl
similarity index 100%
rename from F1:F103/shutter/gerbers/shutter.drl
rename to F1:F103/shutter/kicad/gerbers/shutter.drl
diff --git a/F1:F103/shutter/kicad/shutter.csv b/F1:F103/shutter/kicad/shutter.csv
new file mode 100644
index 0000000..844c502
--- /dev/null
+++ b/F1:F103/shutter/kicad/shutter.csv
@@ -0,0 +1,38 @@
+"Source:","/home/eddy/Docs/SAO/Zeiss-1000/Small_photometer/shutter/kicad/shutter/shutter.kicad_sch"
+"Date:","Вт 12 сен 2023 17:34:36"
+"Tool:","Eeschema 7.0.5"
+"Generator:","/usr/local/share/kicad/plugins/bom_csv_grouped_by_value.py"
+"Component Count:","44"
+
+"Collated Components:"
+
+"Item","Qty","Reference(s)","Value","LibPart","Footprint","Datasheet","DNP"
+"1","1","C1","2200u, 40V","ALL-rescue:CP1","Capacitor_THT:CP_Radial_D17.0mm_P7.50mm","",""
+"2","1","C2","1u","Device:C","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","~",""
+"3","5","C3, C5, C6, C7, C8","0.1","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","~",""
+"4","1","C4","47u","Device:C_Polarized","Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder","~",""
+"5","2","C9, C10","6","Device:C","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","~",""
+"6","5","D1, D2, D3, D4, D5","1N5819","Device:D_Schottky","Diode_SMD:D_SOD-323_HandSoldering","~",""
+"7","1","DA1","TLE5205","my_elements:TLE5205","Package_TO_SOT_THT:TO-220-7_P2.54x3.8mm_StaggerEven_Lead5.85mm_TabDown","",""
+"8","4","H1, H2, H3, H4","MountingHole","Mechanical:MountingHole","MountingHole:MountingHole_3.2mm_M3","~",""
+"9","1","J1","shutter","Connector:Conn_01x02_Female","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal","~",""
+"10","1","J2","power","Connector:Conn_01x02_Female","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal","~",""
+"11","1","J3","SWD","Connector:Conn_01x06_Female","Connector_PinHeader_1.27mm:PinHeader_1x06_P1.27mm_Vertical","~",""
+"12","1","J4","5v","Connector_Generic:Conn_01x01","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
+"13","1","J5","GND","Connector_Generic:Conn_01x01","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
+"14","1","J6","3v3","Connector_Generic:Conn_01x01","Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical","~",""
+"15","1","J7","USB_B","Connector:USB_B","Connector_USB:USB_B_Lumberg_2411_02_Horizontal"," ~",""
+"16","1","J8","hall","Connector:Conn_01x02_Female","Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical","~",""
+"17","1","J9","ccd","Connector:Conn_01x02_Female","Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical","~",""
+"18","1","Q1","DTA114Y","Transistor_BJT:DTA114Y","Package_TO_SOT_SMD:SOT-323_SC-70_Handsoldering","",""
+"19","1","R1","6.9","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"20","1","R2","56k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"21","3","R3, R5, R6","4k7","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"22","1","R4","300 II","Device:R","Resistor_THT:R_Axial_Power_L20.0mm_W6.4mm_P22.40mm","~",""
+"23","1","R7","10k","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"24","2","R8, R9","22","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"25","1","R10","1k5","Device:R","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","~",""
+"26","1","U1","LM1117-3.3","Regulator_Linear:LM1117-3.3","Package_TO_SOT_SMD:SOT-223-3_TabPin2","http://www.ti.com/lit/ds/symlink/lm1117.pdf",""
+"27","1","U2","STM32F103C6Tx","MCU_ST_STM32F1:STM32F103C6Tx","Package_QFP:LQFP-48_7x7mm_P0.5mm","http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00210843.pdf",""
+"28","1","U3","USBLC6-2SC6","Power_Protection:USBLC6-2SC6","Package_TO_SOT_SMD:SOT-23-6_Handsoldering","http://www2.st.com/resource/en/datasheet/CD00050750.pdf",""
+"29","1","Y1","NX5032GA-8MHz","Device:Crystal","Crystal:Crystal_SMD_5032-2Pin_5.0x3.2mm","~",""
diff --git a/F1:F103/shutter/shutter.kicad_pcb b/F1:F103/shutter/kicad/shutter.kicad_pcb
similarity index 99%
rename from F1:F103/shutter/shutter.kicad_pcb
rename to F1:F103/shutter/kicad/shutter.kicad_pcb
index 25b5f83..bf7ea3e 100644
--- a/F1:F103/shutter/shutter.kicad_pcb
+++ b/F1:F103/shutter/kicad/shutter.kicad_pcb
@@ -53,8 +53,8 @@
)
(pad_to_mask_clearance 0)
(pcbplotparams
- (layerselection 0x0001000_ffffffff)
- (plot_on_all_layers_selection 0x0000000_00000000)
+ (layerselection 0x0000020_7ffffffe)
+ (plot_on_all_layers_selection 0x0001080_00000000)
(disableapertmacros false)
(usegerberextensions false)
(usegerberattributes true)
@@ -80,11 +80,11 @@
(plotinvisibletext false)
(sketchpadsonfab false)
(subtractmaskfromsilk false)
- (outputformat 1)
+ (outputformat 5)
(mirror false)
- (drillshape 0)
+ (drillshape 2)
(scaleselection 1)
- (outputdirectory "gerbers/")
+ (outputdirectory "svgs")
)
)
diff --git a/F1:F103/shutter/shutter.kicad_prl b/F1:F103/shutter/kicad/shutter.kicad_prl
similarity index 97%
rename from F1:F103/shutter/shutter.kicad_prl
rename to F1:F103/shutter/kicad/shutter.kicad_prl
index 06bd56a..1d51924 100644
--- a/F1:F103/shutter/shutter.kicad_prl
+++ b/F1:F103/shutter/kicad/shutter.kicad_prl
@@ -65,7 +65,7 @@
40
],
"visible_layers": "fffffff_ffffffff",
- "zone_display_mode": 0
+ "zone_display_mode": 1
},
"meta": {
"filename": "shutter.kicad_prl",
diff --git a/F1:F103/shutter/shutter.kicad_pro b/F1:F103/shutter/kicad/shutter.kicad_pro
similarity index 100%
rename from F1:F103/shutter/shutter.kicad_pro
rename to F1:F103/shutter/kicad/shutter.kicad_pro
diff --git a/F1:F103/shutter/shutter.kicad_sch b/F1:F103/shutter/kicad/shutter.kicad_sch
similarity index 99%
rename from F1:F103/shutter/shutter.kicad_sch
rename to F1:F103/shutter/kicad/shutter.kicad_sch
index 0bde5d8..8abac2a 100644
--- a/F1:F103/shutter/shutter.kicad_sch
+++ b/F1:F103/shutter/kicad/shutter.kicad_sch
@@ -3920,7 +3920,7 @@
(property "Reference" "R4" (at 51.054 123.9774 90)
(effects (font (size 1.27 1.27)) (justify left))
)
- (property "Value" "300 II" (at 52.451 128.27 90)
+ (property "Value" "150 II" (at 52.451 128.27 90)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Footprint" "Resistor_THT:R_Axial_Power_L20.0mm_W6.4mm_P22.40mm" (at 49.53 127.889 90)
diff --git a/F1:F103/shutter/kicad/shutter.pdf b/F1:F103/shutter/kicad/shutter.pdf
new file mode 100644
index 0000000..af3a47c
Binary files /dev/null and b/F1:F103/shutter/kicad/shutter.pdf differ
diff --git a/F1:F103/shutter/kicad/shutter.xml b/F1:F103/shutter/kicad/shutter.xml
new file mode 100644
index 0000000..35e351b
--- /dev/null
+++ b/F1:F103/shutter/kicad/shutter.xml
@@ -0,0 +1,1105 @@
+
+
+
+ /home/eddy/Docs/SAO/Zeiss-1000/Small_photometer/shutter/kicad/shutter/shutter.kicad_sch
+ Вт 12 сен 2023 17:34:36
+ Eeschema 7.0.5
+
+
+
+
+
+
+ shutter.kicad_sch
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2200u, 40V
+ Capacitor_THT:CP_Radial_D17.0mm_P7.50mm
+
+
+
+
+ 7cafc48e-d805-4dad-9acc-954a0ae1cf67
+
+
+ 1u
+ Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder
+
+
+
+
+
+
+ 20a72a8b-49f7-4dbd-86d8-088c0a093651
+
+
+ 0.1
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ f8ee89a8-d538-45ca-bc61-031426795c3d
+
+
+ 47u
+ Capacitor_Tantalum_SMD:CP_EIA-6032-28_Kemet-C_Pad2.25x2.35mm_HandSolder
+
+
+
+
+
+
+ eaa8f35a-9082-4836-9d53-0c16f77ccf09
+
+
+ 0.1
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ 8ae7c88d-a928-4e73-acd8-44041733f182
+
+
+ 0.1
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ be2976f4-62a1-4517-b2c4-5bf5330ff1b4
+
+
+ 0.1
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ 399d86de-1cb9-447a-a5ce-b3ddf75a8edc
+
+
+ 0.1
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ b1dfd575-70b8-4792-af40-9cfa6f28a6ba
+
+
+ 6
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ d66ecc3c-78a9-4638-a80d-9eb56407e476
+
+
+ 6
+ Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder
+
+
+
+
+
+
+ d2ddc8d7-1a60-451c-bab3-dbe9df581ae9
+
+
+ 1N5819
+ Diode_SMD:D_SOD-323_HandSoldering
+
+
+
+
+
+
+ 3ddcb342-b864-437a-a032-0d9652191485
+
+
+ 1N5819
+ Diode_SMD:D_SOD-323_HandSoldering
+
+
+
+
+
+
+ 60a630f7-a59e-4e9d-82cc-0c1b48429a9e
+
+
+ 1N5819
+ Diode_SMD:D_SOD-323_HandSoldering
+
+
+
+
+
+
+ 37c85700-9297-41a9-9a27-64c9d4149995
+
+
+ 1N5819
+ Diode_SMD:D_SOD-323_HandSoldering
+
+
+
+
+
+
+ 7698fe80-9b6d-44d9-8dca-468e95006009
+
+
+ 1N5819
+ Diode_SMD:D_SOD-323_HandSoldering
+
+
+
+
+
+
+ 69a101ce-200a-4178-9fe5-656aa100d28c
+
+
+ TLE5205
+ Package_TO_SOT_THT:TO-220-7_P2.54x3.8mm_StaggerEven_Lead5.85mm_TabDown
+
+
+
+
+ 97c8a242-cdb4-4863-a99c-45b9a3d670a1
+
+
+ MountingHole
+ MountingHole:MountingHole_3.2mm_M3
+
+
+
+
+
+
+ 11860121-6def-4ab6-aa2f-f26a04c131d6
+
+
+ MountingHole
+ MountingHole:MountingHole_3.2mm_M3
+
+
+
+
+
+
+ 3610868b-e95c-44b4-bf02-081f0985ef75
+
+
+ MountingHole
+ MountingHole:MountingHole_3.2mm_M3
+
+
+
+
+
+
+ b0fd44e4-226f-432f-9e56-49eeb34dc815
+
+
+ MountingHole
+ MountingHole:MountingHole_3.2mm_M3
+
+
+
+
+
+
+ f8faa37e-a805-42e4-a0e4-c0da40c94816
+
+
+ shutter
+ TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal
+
+
+
+
+
+
+ 5bd9f636-efbf-4daf-bfde-a7afb874d687
+
+
+ power
+ TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal
+
+
+
+
+
+
+ ae66468f-e721-4060-96f1-db9d8d781954
+
+
+ SWD
+ Connector_PinHeader_1.27mm:PinHeader_1x06_P1.27mm_Vertical
+
+
+
+
+
+
+ cf4190cb-e894-4cb7-a066-e1fddb54d81d
+
+
+ 5v
+ Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical
+
+
+
+
+
+
+ f510a2d4-5933-4be0-ab8f-369fe764d46e
+
+
+ GND
+ Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical
+
+
+
+
+
+
+ 0e6a2462-6232-4c0c-921f-6a66478b0db9
+
+
+ 3v3
+ Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical
+
+
+
+
+
+
+ 6e902ff7-ed64-4be4-a620-dcbec0005084
+
+
+ USB_B
+ Connector_USB:USB_B_Lumberg_2411_02_Horizontal
+ ~
+
+
+
+
+
+
+ ec0c36b0-9030-4188-a3fd-6445c337e863
+
+
+ hall
+ Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical
+
+
+
+
+
+
+ 2cdf4672-8bc0-4c80-a467-2be0b8fc7083
+
+
+ ccd
+ Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical
+
+
+
+
+
+
+ e91a1ceb-d5ae-4a13-b9ce-026bff51d405
+
+
+ DTA114Y
+ Package_TO_SOT_SMD:SOT-323_SC-70_Handsoldering
+
+
+
+
+
+
+ 7e23f7fd-4944-4efe-b398-4293e78bbe15
+
+
+ 6.9
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ f50757df-fee6-46fb-96ff-c0d6200c9fcf
+
+
+ 56k
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 9ea77273-01ce-4ded-8876-1ca813b38755
+
+
+ 4k7
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 71e9b536-445c-4f6e-b268-0eb5bf33f7b7
+
+
+ 300 II
+ Resistor_THT:R_Axial_Power_L20.0mm_W6.4mm_P22.40mm
+
+
+
+
+
+
+ d8e1f451-5fce-416a-b423-7be37c0c9bfb
+
+
+ 4k7
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 3314803a-6684-4479-a876-1bef9b756677
+
+
+ 4k7
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 980f7aac-c760-4fac-8c67-6077682c43f4
+
+
+ 10k
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 7a2b2697-d23b-461c-a18b-db32fdd2ebce
+
+
+ 22
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ d478ffc1-49d5-4f85-92c3-899e784760e3
+
+
+ 22
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ e1625402-a7a5-40c8-99fe-f8e9d81decf2
+
+
+ 1k5
+ Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder
+
+
+
+
+
+
+ 0dd3bdf9-b3e9-4248-b191-433d2726416c
+
+
+ LM1117-3.3
+ Package_TO_SOT_SMD:SOT-223-3_TabPin2
+ http://www.ti.com/lit/ds/symlink/lm1117.pdf
+
+
+
+
+
+
+ 610c83b0-fe12-4592-b310-23f731d13bc6
+
+
+ STM32F103C6Tx
+ Package_QFP:LQFP-48_7x7mm_P0.5mm
+ http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00210843.pdf
+
+
+
+
+
+
+ 29a25600-08b3-4abd-8f27-6743d84ba2cf
+
+
+ USBLC6-2SC6
+ Package_TO_SOT_SMD:SOT-23-6_Handsoldering
+ http://www2.st.com/resource/en/datasheet/CD00050750.pdf
+
+
+
+
+
+
+ 88f9b783-65fa-4190-83e6-8920b0786838
+
+
+ NX5032GA-8MHz
+ Crystal:Crystal_SMD_5032-2Pin_5.0x3.2mm
+
+
+
+
+
+
+ be73e1b2-57bc-49db-a6c9-a6c6f7b2ed34
+
+
+
+
+
+ CP*
+ SM*
+
+
+ C
+ CP1
+
+
+
+
+
+
+
+ Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)
+ ~
+
+ Connector*:*_1x??_*
+
+
+ J
+ Conn_01x02_Female
+ ~
+
+
+
+
+
+
+
+ Generic connector, single row, 01x06, script generated (kicad-library-utils/schlib/autogen/connector/)
+ ~
+
+ Connector*:*_1x??_*
+
+
+ J
+ Conn_01x06_Female
+ ~
+
+
+
+
+
+
+
+
+
+
+
+ USB Type B connector
+ ~
+
+ USB*
+
+
+ J
+ USB_B
+ ~
+
+
+
+
+
+
+
+
+
+
+ Generic connector, single row, 01x01, script generated (kicad-library-utils/schlib/autogen/connector/)
+ ~
+
+ Connector*:*_1x??_*
+
+
+ J
+ Conn_01x01
+ ~
+
+
+
+
+
+
+ Unpolarized capacitor
+ ~
+
+ C_*
+
+
+ C
+ C
+ ~
+
+
+
+
+
+
+
+ Polarized capacitor
+ ~
+
+ CP_*
+
+
+ C
+ C_Polarized
+ ~
+
+
+
+
+
+
+
+ Two pin crystal
+ ~
+
+ Crystal*
+
+
+ Y
+ Crystal
+ ~
+
+
+
+
+
+
+
+ Schottky diode
+ ~
+
+ TO-???*
+ *_Diode_*
+ *SingleDiode*
+ D_*
+
+
+ D
+ D_Schottky
+ ~
+
+
+
+
+
+
+
+ Resistor
+ ~
+
+ R_*
+
+
+ R
+ R
+ ~
+
+
+
+
+
+
+
+ ARM Cortex-M3 MCU, 32KB flash, 10KB RAM, 72MHz, 2-3.6V, 37 GPIO, LQFP-48
+ http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00210843.pdf
+
+ LQFP*7x7mm*P0.5mm*
+
+
+ U
+ STM32F103C6Tx
+ Package_QFP:LQFP-48_7x7mm_P0.5mm
+ http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00210843.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mounting Hole without connection
+ ~
+
+ MountingHole*
+
+
+ H
+ MountingHole
+ ~
+
+
+
+ Very low capacitance ESD protection diode, 2 data-line, SOT-23-6
+ https://www.st.com/resource/en/datasheet/usblc6-2.pdf
+
+ SOT?23*
+
+
+ U
+ USBLC6-2SC6
+ Package_TO_SOT_SMD:SOT-23-6
+ https://www.st.com/resource/en/datasheet/usblc6-2.pdf
+
+
+
+
+
+
+
+
+
+
+
+ 800mA Low-Dropout Linear Regulator, 3.3V fixed output, TO-220/TO-252/TO-263/SOT-223
+ http://www.ti.com/lit/ds/symlink/lm1117.pdf
+
+ SOT?223*
+ TO?263*
+ TO?252*
+ TO?220*
+
+
+ U
+ LM1117-3.3
+ http://www.ti.com/lit/ds/symlink/lm1117.pdf
+
+
+
+
+
+
+
+
+ Digital PNP Transistor, 10k/47k, SOT-23
+
+ SOT?23*
+ SC?59*
+
+
+ Q
+ DTA114Y
+
+
+
+
+
+
+
+
+
+ TO220*
+ TO-220*
+
+
+ U
+ TLE5205
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /usr/share/kicad/kicad-symbols/Connector.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Connector_Generic.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Device.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/MCU_ST_STM32F1.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Mechanical.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Power_Protection.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Regulator_Linear.kicad_sym
+
+
+ /usr/share/kicad/kicad-symbols/Transistor_BJT.kicad_sym
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/F1:F103/shutter/code/main.c b/F1:F103/shutter/main.c
similarity index 100%
rename from F1:F103/shutter/code/main.c
rename to F1:F103/shutter/main.c
diff --git a/F1:F103/shutter/code/openocd.cfg b/F1:F103/shutter/openocd.cfg
similarity index 100%
rename from F1:F103/shutter/code/openocd.cfg
rename to F1:F103/shutter/openocd.cfg
diff --git a/F1:F103/shutter/code/proto.c b/F1:F103/shutter/proto.c
similarity index 87%
rename from F1:F103/shutter/code/proto.c
rename to F1:F103/shutter/proto.c
index ee85953..f441fc9 100644
--- a/F1:F103/shutter/code/proto.c
+++ b/F1:F103/shutter/proto.c
@@ -21,6 +21,7 @@
#include "proto.h"
#include "shutter.h"
#include "usb.h"
+#include "version.inc"
char *omit_spaces(const char *buf){
while(*buf){
@@ -153,12 +154,13 @@ char *getnum(const char *txt, uint32_t *N){
}
const char* helpmsg =
+ "https://github.com/eddyem/stm32samples/tree/master/F1:F103/shutter build#" BUILD_NUMBER " @ " BUILD_DATE "\n"
"'0' - shutter CLO\n"
"'1' - shutter OPE\n"
"'2' - shutter HIZ\n"
"'A' - get raw ADC values\n"
- "'C' - close shutter\n"
- //"'N' - read number (dec, 0xhex, 0oct, bbin) and show it in decimal\n"
+ "'C' - close shutter / abort exposition\n"
+ "'E n' - expose for n milliseconds\n"
"'O' - open shutter\n"
"'R' - software reset\n"
"'S' - get shutter state; also hall and ccd inputs state (1 - active)\n"
@@ -186,7 +188,7 @@ void bufputchar(char c){
*bptr = 0;
}
-extern uint8_t usbON;
+static const char *OK = "OK", *ERR = "ERR";
const char *parse_cmd(const char *buf){
uint32_t u3;
initbuf();
@@ -213,12 +215,12 @@ const char *parse_cmd(const char *buf){
}
break;
case 'C':
- if(close_shutter()) add2buf("OK");
- else add2buf("ERR");
+ if(close_shutter()) add2buf(OK);
+ else add2buf(ERR);
break;
case 'O':
- if(open_shutter()) add2buf("OK");
- else add2buf("ERR");
+ if(open_shutter()) add2buf(OK);
+ else add2buf(ERR);
break;
case 'R':
USB_sendstr("Soft reset\n");
@@ -258,29 +260,29 @@ const char *parse_cmd(const char *buf){
default:
return helpmsg;
}
- bufputchar('\n');
- return stbuf;
- }
- uint32_t Num = 0;
- char *nxt;
- switch(*buf){ // long messages
- case 'N':
- ++buf;
- nxt = getnum(buf, &Num);
- if(buf == nxt){
- if(Num == 0) return "Wrong number\n";
- return "Integer32 overflow\n";
- }
- add2buf("You give: ");
- add2buf(u2str(Num));
- if(*nxt && *nxt != '\n'){
- add2buf(", the rest of string: ");
- add2buf(nxt);
- }else add2buf("\n");
- break;
- default:
- return buf;
+ }else{ // long messages
+ uint32_t Num = 0;
+ char *nxt;
+ switch(*buf){
+ case 'E':
+ ++buf;
+ nxt = getnum(buf, &Num);
+ if(buf == nxt){
+ if(Num == 0) return "ERRNUM\n";
+ return "I32OVERFLOW\n";
+ }
+ if(shutterstate != SHUTTER_RELAX){
+ add2buf(ERR);
+ break;
+ }
+ if(expose_shutter(Num)) add2buf(OK);
+ else add2buf(ERR);
+ break;
+ default:
+ return buf;
+ }
}
+ bufputchar('\n');
return stbuf;
}
diff --git a/F1:F103/shutter/code/proto.h b/F1:F103/shutter/proto.h
similarity index 100%
rename from F1:F103/shutter/code/proto.h
rename to F1:F103/shutter/proto.h
diff --git a/F1:F103/shutter/code/ringbuffer.c b/F1:F103/shutter/ringbuffer.c
similarity index 100%
rename from F1:F103/shutter/code/ringbuffer.c
rename to F1:F103/shutter/ringbuffer.c
diff --git a/F1:F103/shutter/code/ringbuffer.h b/F1:F103/shutter/ringbuffer.h
similarity index 100%
rename from F1:F103/shutter/code/ringbuffer.h
rename to F1:F103/shutter/ringbuffer.h
diff --git a/F1:F103/shutter/shutter.bin b/F1:F103/shutter/shutter.bin
new file mode 100755
index 0000000..2b23016
Binary files /dev/null and b/F1:F103/shutter/shutter.bin differ
diff --git a/F1:F103/shutter/code/shutter.c b/F1:F103/shutter/shutter.c
similarity index 63%
rename from F1:F103/shutter/code/shutter.c
rename to F1:F103/shutter/shutter.c
index 89fb4e3..ee78e6a 100644
--- a/F1:F103/shutter/code/shutter.c
+++ b/F1:F103/shutter/shutter.c
@@ -27,21 +27,29 @@ static const char *states[SHUTTER_STATE_AMOUNT] = {
[SHUTTER_RELAX] = "relax",
[SHUTTER_PROCESS] = "process",
[SHUTTER_WAIT] = "wait",
+ [SHUTTER_EXPOSE] = "exposing",
};
+static const char *regstates[4] = {"open", "close", "off", "hiZ"};
+
static const char *opcl[2] = {"closed", "opened"};
shutter_state shutterstate = SHUTTER_ERROR;
+static shutter_state nextstate = SHUTTER_RELAX;
-static uint32_t Tstart = 0;
+static uint32_t Tstart = 0, Texp = 0, Topened = 0;
-static int changestate(int open){
- if(open == CHKHALL()) return TRUE; // already opened or closed
+static int changestate(int open, shutter_state nxt){
+ if(open == CHKHALL()){
+ shutterstate = SHUTTER_RELAX;
+ return TRUE; // already opened or closed
+ }
if(getADCvoltage(CHSHTR) < SHTR_WORK_VOLTAGE / SHTRVMUL) return FALSE;
if(shutterstate == SHUTTER_ERROR) return FALSE;
if(open) SHTROPEN();
else SHTRCLOSE();
shutterstate = SHUTTER_PROCESS;
+ nextstate = nxt;
Tstart = Tms;
return TRUE;
}
@@ -51,25 +59,29 @@ static int changestate(int open){
* @return false if can't work due to error (no shutter) or insufficient voltage
*/
int open_shutter(){
- return changestate(1);
+ return changestate(1, SHUTTER_RELAX);
}
int close_shutter(){
- return changestate(0);
+ return changestate(0, SHUTTER_RELAX);
+}
+
+int expose_shutter(uint32_t exptime){
+ if(!changestate(1, SHUTTER_EXPOSE)) return FALSE;
+ Texp = exptime;
+ return TRUE;
}
void process_shutter(){
-#ifdef EBUG
static uint32_t T = 0;
-#endif
uint32_t V = getADCvoltage(CHSHTR)*SHTRVMUL;
switch(shutterstate){
- case SHUTTER_ERROR:
+ case SHUTTER_ERROR: // error state: no shutter?
SHTROFF();
shutterstate = SHUTTER_WAIT;
Tstart = Tms;
break;
- case SHUTTER_PROCESS:
+ case SHUTTER_PROCESS: // process opening or closing
#ifdef EBUG
if(T != Tms){
T = Tms;
@@ -83,15 +95,28 @@ void process_shutter(){
Tstart = Tms;
}
break;
- case SHUTTER_WAIT:
+ case SHUTTER_WAIT: // wait for mechanical work done
if(Tms - Tstart > WAITING_TIME){
SHTRHIZ();
- shutterstate = SHUTTER_RELAX;
+ shutterstate = nextstate;
+ int h = CHKHALL();
+ if(h) Topened = Tms;
+ else{
+ USB_sendstr("exptime=");
+ USB_sendstr(u2str(Tms - Topened - SHUTTER_TIME));
+ USB_putbyte('\n');
+ }
USB_sendstr("shutter=");
- USB_sendstr(opcl[CHKHALL()]);
+ USB_sendstr(opcl[h]);
USB_putbyte('\n');
}
break;
+ case SHUTTER_EXPOSE: // wait for exposition ends to close shutter
+ // now Tstart is time when shutter was opened; wait until Tms - Tstart >= Texp
+ if(Tms - Tstart < Texp || T == Tms) break; // once per 1ms
+ T = Tms;
+ if(!close_shutter()) USB_sendstr("exp=cantclose\n");
+ break;
default:
if(CHKFB()) shutterstate = SHUTTER_ERROR;
break;
@@ -102,11 +127,11 @@ void process_shutter(){
// check button only when can open/close & shutter operations done
if(V >= SHTR_WORK_VOLTAGE && shutterstate == SHUTTER_RELAX){ // shutter state allows to open/close
if(s){ // pressed
- if(!CHKHALL()){ if(open_shutter()){oldbtnstate = s; USB_sendstr(" open, old->1\n");}}
- else{USB_sendstr("pressed when CHKHALL(), old->1\n"); oldbtnstate = s;}
+ if(!CHKHALL()){ if(open_shutter()){oldbtnstate = s; /*USB_sendstr(" open, old->1\n");*/}}
+ else{/*USB_sendstr("pressed when CHKHALL(), old->1\n");*/ oldbtnstate = s;}
}else{ // released
- if(CHKHALL()){ if(close_shutter()){oldbtnstate = s; USB_sendstr(" close, old->0\n");}}
- else{USB_sendstr("released when !CHKHALL(), old->0\n"); oldbtnstate = s;}
+ if(CHKHALL()){ if(close_shutter()){oldbtnstate = s; /*USB_sendstr(" close, old->0\n");*/}}
+ else{/*USB_sendstr("released when !CHKHALL(), old->0\n");*/ oldbtnstate = s;}
}
}
}
@@ -115,8 +140,12 @@ void print_shutter_state(){
add2buf("shutter=");
if(shutterstate != SHUTTER_RELAX) add2buf(states[shutterstate]);
else add2buf(opcl[CHKHALL()]);
+ if(CHKHALL()){
+ add2buf("\nexptime=");
+ add2buf(u2str(Tms - Topened));
+ }
add2buf("\nregstate=");
- bufputchar('0' + SHTRSTATE());
+ add2buf(regstates[SHTRSTATE()]);
add2buf("\nfbstate=");
bufputchar('0' + CHKFB());
bufputchar('\n');
diff --git a/F1:F103/shutter/code/shutter.cflags b/F1:F103/shutter/shutter.cflags
similarity index 100%
rename from F1:F103/shutter/code/shutter.cflags
rename to F1:F103/shutter/shutter.cflags
diff --git a/F1:F103/shutter/code/shutter.config b/F1:F103/shutter/shutter.config
similarity index 100%
rename from F1:F103/shutter/code/shutter.config
rename to F1:F103/shutter/shutter.config
diff --git a/F1:F103/shutter/code/shutter.creator b/F1:F103/shutter/shutter.creator
similarity index 100%
rename from F1:F103/shutter/code/shutter.creator
rename to F1:F103/shutter/shutter.creator
diff --git a/F1:F103/shutter/code/shutter.creator.user b/F1:F103/shutter/shutter.creator.user
similarity index 100%
rename from F1:F103/shutter/code/shutter.creator.user
rename to F1:F103/shutter/shutter.creator.user
diff --git a/F1:F103/shutter/code/shutter.creator.user.7bd84e3 b/F1:F103/shutter/shutter.creator.user.7bd84e3
similarity index 100%
rename from F1:F103/shutter/code/shutter.creator.user.7bd84e3
rename to F1:F103/shutter/shutter.creator.user.7bd84e3
diff --git a/F1:F103/shutter/code/shutter.cxxflags b/F1:F103/shutter/shutter.cxxflags
similarity index 100%
rename from F1:F103/shutter/code/shutter.cxxflags
rename to F1:F103/shutter/shutter.cxxflags
diff --git a/F1:F103/shutter/code/shutter.files b/F1:F103/shutter/shutter.files
similarity index 100%
rename from F1:F103/shutter/code/shutter.files
rename to F1:F103/shutter/shutter.files
diff --git a/F1:F103/shutter/code/shutter.h b/F1:F103/shutter/shutter.h
similarity index 93%
rename from F1:F103/shutter/code/shutter.h
rename to F1:F103/shutter/shutter.h
index 752cbbf..3c4359b 100644
--- a/F1:F103/shutter/code/shutter.h
+++ b/F1:F103/shutter/shutter.h
@@ -18,6 +18,8 @@
#pragma once
+#include
+
// opening/closing time (ms)
#define SHUTTER_TIME (20)
// waiting for getting status time (ms)
@@ -28,6 +30,7 @@ typedef enum{
SHUTTER_RELAX, // powered off
SHUTTER_PROCESS, // opened or closed
SHUTTER_WAIT, // wait in off state before turn to hi-z
+ SHUTTER_EXPOSE, //
SHUTTER_STATE_AMOUNT
} shutter_state;
@@ -36,4 +39,5 @@ extern shutter_state shutterstate;
void process_shutter();
int open_shutter();
int close_shutter();
+int expose_shutter(uint32_t exptime);
void print_shutter_state();
diff --git a/F1:F103/shutter/code/shutter.includes b/F1:F103/shutter/shutter.includes
similarity index 100%
rename from F1:F103/shutter/code/shutter.includes
rename to F1:F103/shutter/shutter.includes
diff --git a/F1:F103/shutter/code/usb.c b/F1:F103/shutter/usb.c
similarity index 100%
rename from F1:F103/shutter/code/usb.c
rename to F1:F103/shutter/usb.c
diff --git a/F1:F103/shutter/code/usb.h b/F1:F103/shutter/usb.h
similarity index 100%
rename from F1:F103/shutter/code/usb.h
rename to F1:F103/shutter/usb.h
diff --git a/F1:F103/shutter/code/usb_lib.c b/F1:F103/shutter/usb_lib.c
similarity index 99%
rename from F1:F103/shutter/code/usb_lib.c
rename to F1:F103/shutter/usb_lib.c
index b74e345..29d3c5a 100644
--- a/F1:F103/shutter/code/usb_lib.c
+++ b/F1:F103/shutter/usb_lib.c
@@ -131,7 +131,7 @@ _USB_LANG_ID_(LD, LANG_US);
_USB_STRING_(SD, u"0.0.1");
_USB_STRING_(MD, u"Prolific Technology Inc.");
_USB_STRING_(PD, u"USB-Serial Controller");
-_USB_STRING_(ID, u"shutter_emulator");
+_USB_STRING_(ID, u"shutter");
static void const *StringDescriptor[iDESCR_AMOUNT] = {
[iLANGUAGE_DESCR] = &LD,
[iMANUFACTURER_DESCR] = &MD,
diff --git a/F1:F103/shutter/code/usb_lib.h b/F1:F103/shutter/usb_lib.h
similarity index 100%
rename from F1:F103/shutter/code/usb_lib.h
rename to F1:F103/shutter/usb_lib.h
diff --git a/F1:F103/shutter/code/usbhw.c b/F1:F103/shutter/usbhw.c
similarity index 100%
rename from F1:F103/shutter/code/usbhw.c
rename to F1:F103/shutter/usbhw.c
diff --git a/F1:F103/shutter/code/usbhw.h b/F1:F103/shutter/usbhw.h
similarity index 100%
rename from F1:F103/shutter/code/usbhw.h
rename to F1:F103/shutter/usbhw.h
diff --git a/F1:F103/shutter/version.inc b/F1:F103/shutter/version.inc
new file mode 100644
index 0000000..65002d8
--- /dev/null
+++ b/F1:F103/shutter/version.inc
@@ -0,0 +1,2 @@
+#define BUILD_NUMBER "80"
+#define BUILD_DATE "2023-09-22"