Copy disabled (too large)
Download .txt
Showing preview only (108,775K chars total). Download the full file to get everything.
Repository: eddyem/stm32samples
Branch: master
Commit: 4614183f38f0
Files: 3605
Total size: 145.7 MB
Directory structure:
gitextract_kgfx0i39/
├── .gitignore
├── F0:F030,F042,F072/
│ ├── 3steppersLB/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── commonproto.c
│ │ ├── commonproto.h
│ │ ├── custom_buttons.c
│ │ ├── custom_buttons.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Paste.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Paste.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ ├── stm32-NPTH-drl_map.gbr
│ │ │ │ ├── stm32-NPTH.drl
│ │ │ │ ├── stm32-PTH-drl_map.gbr
│ │ │ │ ├── stm32-PTH.drl
│ │ │ │ ├── stm32-drl.rpt
│ │ │ │ ├── stm32-job.gbrjob
│ │ │ │ └── stm32.drl
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-cache.kicad_sym
│ │ │ ├── stm32-rescue.kicad_sym
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── steppers.c
│ │ ├── steppers.cflags
│ │ ├── steppers.config
│ │ ├── steppers.creator
│ │ ├── steppers.creator.user
│ │ ├── steppers.cxxflags
│ │ ├── steppers.files
│ │ ├── steppers.h
│ │ ├── steppers.includes
│ │ ├── strfunct.c
│ │ ├── strfunct.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANBUS_SSI/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── can_process.c
│ │ ├── can_process.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANbus4BTA/
│ │ ├── Readme
│ │ └── kicad/
│ │ ├── BOM.ods
│ │ ├── BOM_full.ods
│ │ ├── elements.kicad_sym
│ │ ├── fp-info-cache
│ │ ├── fp-lib-table
│ │ ├── gerbers/
│ │ │ ├── stm32-B_Cu.gbr
│ │ │ ├── stm32-B_Mask.gbr
│ │ │ ├── stm32-B_Paste.gbr
│ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ ├── stm32-F_Cu.gbr
│ │ │ ├── stm32-F_Mask.gbr
│ │ │ ├── stm32-F_Paste.gbr
│ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ ├── stm32-drl_map.gbr
│ │ │ ├── stm32-job.gbrjob
│ │ │ └── stm32.drl
│ │ ├── iso3086.kicad_sym
│ │ ├── my_footprints.pretty/
│ │ │ ├── B0505S-2W.kicad_mod
│ │ │ ├── B0x0xS.kicad_mod
│ │ │ ├── Hole_3mm.kicad_mod
│ │ │ ├── VRB2405.kicad_mod
│ │ │ └── VRB_DCDC.kicad_mod
│ │ ├── optocouple.kicad_sch
│ │ ├── schematic-positions-to-layout.debug
│ │ ├── stm32-cache.kicad_sym
│ │ ├── stm32-rescue.kicad_sym
│ │ ├── stm32.csv
│ │ ├── stm32.kicad_pcb
│ │ ├── stm32.kicad_prl
│ │ ├── stm32.kicad_pro
│ │ ├── stm32.kicad_sch
│ │ ├── stm32.xml
│ │ └── sym-lib-table
│ ├── Chiller/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Chiller_control-rescue.lib
│ │ │ ├── Chiller_control.csv
│ │ │ ├── Chiller_control.kicad_pcb
│ │ │ ├── Chiller_control.kicad_prl
│ │ │ ├── Chiller_control.kicad_pro
│ │ │ ├── Chiller_control.kicad_sch
│ │ │ ├── Chiller_control.net
│ │ │ ├── Chiller_control.pro
│ │ │ ├── Chiller_control.sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── modules.pretty/
│ │ │ │ ├── DB9-F.kicad_mod
│ │ │ │ ├── TO-220-3_Horizontal_TabDown.kicad_mod
│ │ │ │ └── hole_3mm.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mainloop.c
│ │ ├── mainloop.h
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── F0_testbrd/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── MAKE
│ ├── Makefile
│ ├── NUCLEO_SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── main.c
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── PL2303_ringbuffer/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── QuadEncoder/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── Readme.md
│ ├── Servo/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── effects.c
│ │ ├── effects.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Servo_control
│ │ │ ├── Servo_control-rescue.lib
│ │ │ ├── Servo_control.kicad_pcb
│ │ │ ├── Servo_control.kicad_prl
│ │ │ ├── Servo_control.kicad_pro
│ │ │ ├── Servo_control.kicad_sch
│ │ │ ├── Servo_control.net
│ │ │ ├── Servo_control.pro
│ │ │ ├── Servo_control.sch
│ │ │ ├── ch34x.lib
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── modules.pretty/
│ │ │ │ ├── DB9-F.kicad_mod
│ │ │ │ ├── TO-220-3_Horizontal_TabDown.kicad_mod
│ │ │ │ ├── VIA.kicad_mod
│ │ │ │ └── hole_3mm.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mainloop.c
│ │ ├── mainloop.h
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── Snippets/
│ │ ├── Flash_EEPROM/
│ │ │ ├── Readme
│ │ │ ├── flash.c
│ │ │ └── flash.h
│ │ ├── Jump2Boot.c
│ │ ├── Readme.md
│ │ ├── fallthru
│ │ ├── printuhex.c
│ │ └── readint.c
│ ├── Socket_fans/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── acs712.lib
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── TH_via.kicad_mod
│ │ │ ├── pcb/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ ├── stm32-NPTH-drl_map.gbr
│ │ │ │ └── stm32-PTH-drl_map.gbr
│ │ │ ├── stm32
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── knots/
│ │ │ ├── buildk.m
│ │ │ ├── calcT.m
│ │ │ ├── getknots.m
│ │ │ ├── getnewpt.m
│ │ │ ├── linearapprox.m
│ │ │ ├── piecevise.html
│ │ │ └── piecevise_files/
│ │ │ ├── 13303023.jpe
│ │ │ ├── 43568408.jpe
│ │ │ ├── 52273253.jpe
│ │ │ ├── a.css
│ │ │ ├── a.htm
│ │ │ ├── a.js
│ │ │ ├── a_002.css
│ │ │ ├── a_002.js
│ │ │ ├── a_003.css
│ │ │ ├── a_data/
│ │ │ │ └── a.js
│ │ │ └── top100.js
│ │ ├── main.c
│ │ ├── monitor.c
│ │ ├── monitor.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── TM1637/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── TSYS_controller/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TSYS_controller.cflags
│ │ ├── TSYS_controller.config
│ │ ├── TSYS_controller.creator
│ │ ├── TSYS_controller.creator.user
│ │ ├── TSYS_controller.creator.user.4.8-pre1
│ │ ├── TSYS_controller.creator.user.cf63021
│ │ ├── TSYS_controller.cxxflags
│ │ ├── TSYS_controller.files
│ │ ├── TSYS_controller.includes
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── can_process.c
│ │ ├── can_process.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── sensors_manage.c
│ │ ├── sensors_manage.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── USBHID/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── keycodes.c
│ │ ├── keycodes.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── blink/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── blink.geanypro
│ │ └── systick_blink.c
│ ├── deprecated/
│ │ ├── CANbus_stepper/
│ │ │ ├── CANbus_stepper.tgz
│ │ │ ├── TODO
│ │ │ ├── kicad/
│ │ │ │ ├── Readme.md
│ │ │ │ ├── acs712.lib
│ │ │ │ ├── elements.lib
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ │ └── stm32-drl_map.gbr
│ │ │ │ ├── my_footprints.pretty/
│ │ │ │ │ ├── FuseHolder.kicad_mod
│ │ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ │ ├── RJ9-4P4C.kicad_mod
│ │ │ │ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ │ │ │ └── TH_via.kicad_mod
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ ├── stm32.csv
│ │ │ │ ├── stm32.kicad_pcb
│ │ │ │ ├── stm32.kicad_prl
│ │ │ │ ├── stm32.kicad_pro
│ │ │ │ ├── stm32.kicad_sch
│ │ │ │ ├── stm32.net
│ │ │ │ ├── stm32.pro
│ │ │ │ ├── stm32.sch
│ │ │ │ ├── stm32.xml
│ │ │ │ └── sym-lib-table
│ │ │ ├── src/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Readme.md
│ │ │ │ ├── adc.c
│ │ │ │ ├── adc.h
│ │ │ │ ├── can.c
│ │ │ │ ├── can.h
│ │ │ │ ├── can_process.c
│ │ │ │ ├── can_process.h
│ │ │ │ ├── flash.c
│ │ │ │ ├── flash.h
│ │ │ │ ├── hardware.c
│ │ │ │ ├── hardware.h
│ │ │ │ ├── main.c
│ │ │ │ ├── proto.c
│ │ │ │ ├── proto.h
│ │ │ │ ├── spi.c
│ │ │ │ ├── spi.h
│ │ │ │ ├── steppers.c
│ │ │ │ ├── steppers.h
│ │ │ │ ├── usart.c
│ │ │ │ ├── usart.h
│ │ │ │ ├── usb.c
│ │ │ │ ├── usb.h
│ │ │ │ ├── usb_defs.h
│ │ │ │ ├── usb_lib.c
│ │ │ │ └── usb_lib.h
│ │ │ └── src.tgz
│ │ ├── Readme.md
│ │ ├── USB_pl2303_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── canbus/
│ │ │ ├── kicad/
│ │ │ │ ├── acs712.lib
│ │ │ │ ├── bom.ini
│ │ │ │ ├── elements.lib
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── my_footprints.pretty/
│ │ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ │ ├── RJ9-4P4C.kicad_mod
│ │ │ │ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ │ │ │ └── TH_via.kicad_mod
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ ├── stm32.kicad_pcb
│ │ │ │ ├── stm32.kicad_prl
│ │ │ │ ├── stm32.kicad_pro
│ │ │ │ ├── stm32.kicad_sch
│ │ │ │ ├── stm32.net
│ │ │ │ └── sym-lib-table
│ │ │ └── src/
│ │ │ ├── CANbus.geany
│ │ │ ├── Makefile
│ │ │ ├── can.c
│ │ │ ├── can.h
│ │ │ ├── canbus.c.tags
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ └── usart.h
│ │ ├── pl2303/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── usbcan/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── bom.ini
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ └── stm32-drl_map.gbr
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── kicad_new/
│ │ │ ├── bom.ini
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ │ ├── stm32-drl_map.gbr
│ │ │ │ └── stm32.drl
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── htu21d_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── flash_size_reg.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ └── vector.h
│ │ ├── Should_use_common_includes_with_F1
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f01234.ld
│ │ │ ├── stm32f030f.ld
│ │ │ ├── stm32f042k.ld
│ │ │ ├── stm32f042x6.ld
│ │ │ ├── stm32f051x8.ld
│ │ │ ├── stm32f072x8.ld
│ │ │ ├── stm32f072xB.ld
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ └── startup/
│ │ ├── vector.c
│ │ └── vector.c.depr
│ ├── makefile.f0
│ ├── morze/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── morse.c
│ │ ├── morse.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── openocd.cfg
│ ├── tsys01_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_blink/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_blink_dma/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── usbcan_gpio/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── Readmeh.html
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── gpioproto.cpp
│ │ ├── gpioproto.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── hashparser.cpp
│ │ ├── hashparser.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pwm.c
│ │ ├── pwm.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbcangpio.cflags
│ │ ├── usbcangpio.config
│ │ ├── usbcangpio.creator
│ │ ├── usbcangpio.creator.user
│ │ ├── usbcangpio.cxxflags
│ │ ├── usbcangpio.files
│ │ ├── usbcangpio.includes
│ │ └── version.inc
│ ├── usbcan_relay/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── canrelay.cflags
│ │ ├── canrelay.config
│ │ ├── canrelay.creator
│ │ ├── canrelay.creator.user
│ │ ├── canrelay.creator.user.22
│ │ ├── canrelay.creator.user.4.9-pre1
│ │ ├── canrelay.creator.user.7bd84e3
│ │ ├── canrelay.cxxflags
│ │ ├── canrelay.files
│ │ ├── canrelay.includes
│ │ ├── custom_buttons.c
│ │ ├── custom_buttons.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32 (2).csv
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ └── usbcan_ringbuffer/
│ ├── Makefile
│ ├── Readme.md
│ ├── can.c
│ ├── can.h
│ ├── hardware.c
│ ├── hardware.h
│ ├── kicad/
│ │ ├── bom.ini
│ │ ├── elements.lib
│ │ ├── fp-info-cache
│ │ ├── gerbers/
│ │ │ ├── stm32-B_Cu.gbr
│ │ │ ├── stm32-B_Mask.gbr
│ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ ├── stm32-F_Cu.gbr
│ │ │ ├── stm32-F_Mask.gbr
│ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ ├── stm32-drl_map.gbr
│ │ │ └── stm32.drl
│ │ ├── my_footprints.pretty/
│ │ │ ├── B0x0xS.kicad_mod
│ │ │ └── Hole_3mm.kicad_mod
│ │ ├── stm32-rescue.lib
│ │ ├── stm32.kicad_pcb
│ │ ├── stm32.kicad_prl
│ │ ├── stm32.kicad_pro
│ │ └── stm32.kicad_sch
│ ├── main.c
│ ├── openocd.cfg
│ ├── proto.c
│ ├── proto.h
│ ├── ringbuffer.c
│ ├── ringbuffer.h
│ ├── usb_descr.c
│ ├── usb_descr.h
│ ├── usb_dev.c
│ ├── usb_dev.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── usbcanrb.cflags
│ ├── usbcanrb.config
│ ├── usbcanrb.creator
│ ├── usbcanrb.creator.user
│ ├── usbcanrb.cxxflags
│ ├── usbcanrb.files
│ ├── usbcanrb.includes
│ └── version.inc
├── F1:F103/
│ ├── AS3935-lightning/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── as3935.c
│ │ ├── as3935.cflags
│ │ ├── as3935.config
│ │ ├── as3935.creator
│ │ ├── as3935.creator.user
│ │ ├── as3935.cxxflags
│ │ ├── as3935.files
│ │ ├── as3935.h
│ │ ├── as3935.includes
│ │ ├── commproto.cpp
│ │ ├── commproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── BISS_C_encoders/
│ │ ├── 99-myHW.rules
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── bissC.c
│ │ ├── bissC.h
│ │ ├── encoders.cflags
│ │ ├── encoders.config
│ │ ├── encoders.creator
│ │ ├── encoders.creator.user
│ │ ├── encoders.creator.user.7bd84e3
│ │ ├── encoders.creator.user.cf63021
│ │ ├── encoders.cxxflags
│ │ ├── encoders.files
│ │ ├── encoders.includes
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM.csv
│ │ │ ├── elements.kicad_sym
│ │ │ ├── encoder.kicad_pcb
│ │ │ ├── encoder.kicad_prl
│ │ │ ├── encoder.kicad_pro
│ │ │ ├── encoder.kicad_sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── encoder-B_Cu.gbr
│ │ │ │ ├── encoder-B_Mask.gbr
│ │ │ │ ├── encoder-B_Silkscreen.gbr
│ │ │ │ ├── encoder-Edge_Cuts.gbr
│ │ │ │ ├── encoder-F_Cu.gbr
│ │ │ │ ├── encoder-F_Mask.gbr
│ │ │ │ ├── encoder-F_Silkscreen.gbr
│ │ │ │ ├── encoder-drl.rpt
│ │ │ │ ├── encoder-job.gbrjob
│ │ │ │ └── encoder.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── isolated_232.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ ├── QR.kicad_mod
│ │ │ │ └── RJ9-4P4C.kicad_mod
│ │ │ ├── ssi_422.kicad_sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── openocd.cfg_cs32
│ │ ├── openocd.cfg_stm32
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── testDev
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── BMP180/
│ │ ├── BMP180.c
│ │ ├── BMP180.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── BMP280/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dewpoint.c
│ │ ├── dewpoint.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── CAR_CANbus/
│ │ ├── Lamps/
│ │ │ ├── Readme
│ │ │ └── kicad/
│ │ │ ├── cd43.kicad_mod
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── lamps-B_Cu.gbr
│ │ │ │ ├── lamps-B_Mask.gbr
│ │ │ │ ├── lamps-B_Paste.gbr
│ │ │ │ ├── lamps-B_Silkscreen.gbr
│ │ │ │ ├── lamps-Edge_Cuts.gbr
│ │ │ │ ├── lamps-F_Cu.gbr
│ │ │ │ ├── lamps-F_Mask.gbr
│ │ │ │ ├── lamps-F_Paste.gbr
│ │ │ │ ├── lamps-F_Silkscreen.gbr
│ │ │ │ ├── lamps-drl.rpt
│ │ │ │ ├── lamps-drl_map.gbr
│ │ │ │ ├── lamps-job.gbrjob
│ │ │ │ └── lamps.drl
│ │ │ ├── l_pwr.kicad_sch
│ │ │ ├── l_pwrx.kicad_sch
│ │ │ ├── lamps.kicad_pcb
│ │ │ ├── lamps.kicad_prl
│ │ │ ├── lamps.kicad_pro
│ │ │ ├── lamps.kicad_sch
│ │ │ ├── mp1584.kicad_sym
│ │ │ ├── s8205a.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── Readme
│ │ └── WindShield/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── ZXCT1009.kicad_sym
│ │ │ ├── cd43.kicad_mod
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── mp1584.kicad_sym
│ │ │ ├── mp1584.lib
│ │ │ ├── s8205a.kicad_sym
│ │ │ ├── s8205a.lib
│ │ │ ├── sym-lib-table
│ │ │ ├── windshield.kicad_pcb
│ │ │ ├── windshield.kicad_prl
│ │ │ ├── windshield.kicad_pro
│ │ │ └── windshield.kicad_sch
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── version.inc
│ │ ├── windshield.cflags
│ │ ├── windshield.config
│ │ ├── windshield.creator
│ │ ├── windshield.creator.user
│ │ ├── windshield.creator.user.cf63021
│ │ ├── windshield.cxxflags
│ │ ├── windshield.files
│ │ └── windshield.includes
│ ├── Canon_managing_device/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canon.c
│ │ ├── canon.h
│ │ ├── canonmanage.cflags
│ │ ├── canonmanage.config
│ │ ├── canonmanage.creator
│ │ ├── canonmanage.creator.user
│ │ ├── canonmanage.creator.user.7bd84e3
│ │ ├── canonmanage.cxxflags
│ │ ├── canonmanage.files
│ │ ├── canonmanage.includes
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Canon_manage/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── Canon_manage.csv
│ │ │ │ ├── Canon_manage.kicad_pcb
│ │ │ │ ├── Canon_manage.kicad_prl
│ │ │ │ ├── Canon_manage.kicad_pro
│ │ │ │ ├── Canon_manage.kicad_sch
│ │ │ │ ├── Canon_manage.xml
│ │ │ │ ├── TPS2051.kicad_sym
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── Canon_manage-B_Cu.gbr
│ │ │ │ │ ├── Canon_manage-B_Mask.gbr
│ │ │ │ │ ├── Canon_manage-B_Paste.gbr
│ │ │ │ │ ├── Canon_manage-B_Silkscreen.gbr
│ │ │ │ │ ├── Canon_manage-Edge_Cuts.gbr
│ │ │ │ │ ├── Canon_manage-F_Cu.gbr
│ │ │ │ │ ├── Canon_manage-F_Mask.gbr
│ │ │ │ │ ├── Canon_manage-F_Paste.gbr
│ │ │ │ │ ├── Canon_manage-F_Silkscreen.gbr
│ │ │ │ │ ├── Canon_manage-drl.rpt
│ │ │ │ │ ├── Canon_manage-drl_map.gbr
│ │ │ │ │ ├── Canon_manage-job.gbrjob
│ │ │ │ │ └── Canon_manage.drl
│ │ │ │ ├── pins.pretty/
│ │ │ │ │ └── Pin1.5x2mm.kicad_mod
│ │ │ │ └── sym-lib-table
│ │ │ ├── outliers.dxf
│ │ │ └── silk.dxf
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── DHT22_DHT11/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dht.c
│ │ ├── dht.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── DS18/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── ds18.c
│ │ ├── ds18.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── F1_testbrd/
│ │ ├── F1_testbrd.cflags
│ │ ├── F1_testbrd.config
│ │ ├── F1_testbrd.creator
│ │ ├── F1_testbrd.creator.user
│ │ ├── F1_testbrd.cxxflags
│ │ ├── F1_testbrd.files
│ │ ├── F1_testbrd.includes
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── F1_testbrd_deprecated/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── FX3U/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── fx3u.cflags
│ │ ├── fx3u.config
│ │ ├── fx3u.creator
│ │ ├── fx3u.creator.user
│ │ ├── fx3u.creator.user.cf63021
│ │ ├── fx3u.cxxflags
│ │ ├── fx3u.files
│ │ ├── fx3u.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── X_opto.kicad_sch
│ │ │ ├── Y_relay.kicad_sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fx3u_24mr.kicad_pcb
│ │ │ ├── fx3u_24mr.kicad_prl
│ │ │ ├── fx3u_24mr.kicad_pro
│ │ │ └── fx3u_24mr.kicad_sch
│ │ ├── main.c
│ │ ├── modbusproto.c
│ │ ├── modbusproto.h
│ │ ├── modbusrtu.c
│ │ ├── modbusrtu.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── Hall_linear/
│ │ ├── Makefile
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hallinear.cflags
│ │ ├── hallinear.config
│ │ ├── hallinear.creator
│ │ ├── hallinear.creator.user
│ │ ├── hallinear.creator.user.7bd84e3
│ │ ├── hallinear.cxxflags
│ │ ├── hallinear.files
│ │ ├── hallinear.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM
│ │ │ ├── BOM.ods
│ │ │ ├── Hall.kicad_pcb
│ │ │ ├── Hall.kicad_prl
│ │ │ ├── Hall.kicad_pro
│ │ │ ├── Hall.kicad_sch
│ │ │ ├── Hall.step
│ │ │ ├── PCB.dxf
│ │ │ ├── TPS2051.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ └── gerbers/
│ │ │ ├── Hall-B_Cu.gbr
│ │ │ ├── Hall-B_Mask.gbr
│ │ │ ├── Hall-B_Paste.gbr
│ │ │ ├── Hall-B_Silkscreen.gbr
│ │ │ ├── Hall-Edge_Cuts.gbr
│ │ │ ├── Hall-F_Cu.gbr
│ │ │ ├── Hall-F_Mask.gbr
│ │ │ ├── Hall-F_Paste.gbr
│ │ │ ├── Hall-F_Silkscreen.gbr
│ │ │ ├── Hall-drl.rpt
│ │ │ ├── Hall-drl_map.gbr
│ │ │ ├── Hall-job.gbrjob
│ │ │ └── Hall.drl
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── readme
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2C_tiny/
│ │ ├── I2Ctiny.cflags
│ │ ├── I2Ctiny.config
│ │ ├── I2Ctiny.creator
│ │ ├── I2Ctiny.creator.user
│ │ ├── I2Ctiny.cxxflags
│ │ ├── I2Ctiny.files
│ │ ├── I2Ctiny.includes
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2ctiny.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbdev.c
│ │ ├── usbdev.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2Cscan/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.c
│ │ ├── i2cscan.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── LED_Screen/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── font14.h
│ │ ├── font16.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── genlist
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── scrtest/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── font14.h
│ │ │ ├── font16.h
│ │ │ ├── fonts.c
│ │ │ ├── fonts.h
│ │ │ ├── main.c
│ │ │ ├── screen.c
│ │ │ ├── screen.h
│ │ │ └── scrtest
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── MAX7219_screen/
│ │ ├── MAX7219.c
│ │ ├── MAX7219.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Makefile
│ ├── PL2303_rb_strip/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── PL2303_ringbuffer/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── RGB_LED_Screen/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adcrandom.c
│ │ ├── adcrandom.h
│ │ ├── balls.c
│ │ ├── balls.h
│ │ ├── font14.h
│ │ ├── font16.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── getrand
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── screen.c
│ │ ├── screen.c.autosave
│ │ ├── screen.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Readme.md
│ ├── SI7005_HTU21D/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dewpoint.c
│ │ ├── dewpoint.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── htu21d.c
│ │ ├── htu21d.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── si7005.c
│ │ ├── si7005.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── STM32F103C.md
│ ├── SevenCDCs/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Tetris/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adcrandom.c
│ │ ├── adcrandom.h
│ │ ├── arkanoid.c
│ │ ├── arkanoid.h
│ │ ├── balls.c
│ │ ├── balls.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── debug.h
│ │ ├── font14.h
│ │ ├── fontNumb8.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── getrand
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── snake.c
│ │ ├── snake.h
│ │ ├── tetris.c
│ │ ├── tetris.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_HID/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.h
│ │ ├── keycodes.c
│ │ ├── keycodes.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_New_concept/
│ │ ├── USB_NEW_concept_7inone/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── USB_NEW_concept_CDC/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── USB_NEW_concept_HID/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── USB_NEW_concept_PL2303/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── someusb.cflags
│ │ ├── someusb.config
│ │ ├── someusb.creator
│ │ ├── someusb.creator.user
│ │ ├── someusb.cxxflags
│ │ ├── someusb.files
│ │ ├── someusb.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── canUART/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canuart.cflags
│ │ ├── canuart.config
│ │ ├── canuart.creator
│ │ ├── canuart.creator.user
│ │ ├── canuart.cxxflags
│ │ ├── canuart.files
│ │ ├── canuart.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── chronometer_v3/
│ │ ├── Difference
│ │ ├── GPS.c
│ │ ├── GPS.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── Readme_rus.txt
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── font14.h
│ │ ├── fontNumb10.h
│ │ ├── fontNumb16.h
│ │ ├── fontNumb8.h
│ │ ├── font_EMPTY.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── lidar.c
│ │ ├── lidar.h
│ │ ├── main.c
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── stm32F103xB.ld
│ │ ├── str.c
│ │ ├── str.h
│ │ ├── time.c
│ │ ├── time.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── deprecated/
│ │ ├── CDC_ACM/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── MLX90640/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── i2c.c
│ │ │ ├── i2c.h
│ │ │ ├── main.c
│ │ │ ├── mlx90640.c
│ │ │ ├── mlx90640.h
│ │ │ ├── mlx90640_regs.h
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── strfunct.c
│ │ │ ├── strfunct.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ ├── usb_lib.h
│ │ │ └── version.inc
│ │ ├── PL2303/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── Readme.md
│ │ ├── chronometer/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── Readme_rus.txt
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── lidar.c
│ │ │ ├── lidar.h
│ │ │ ├── main.c
│ │ │ ├── stm32F103xB.ld
│ │ │ ├── str.c
│ │ │ ├── str.h
│ │ │ ├── time.c
│ │ │ ├── time.h
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── chronometer_v2/
│ │ │ ├── Difference
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── Readme_rus.txt
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── kicad/
│ │ │ │ ├── Chrono.lib
│ │ │ │ ├── chrono
│ │ │ │ ├── chrono.kicad_pcb
│ │ │ │ ├── chrono.kicad_prl
│ │ │ │ ├── chrono.kicad_pro
│ │ │ │ ├── chrono.kicad_sch
│ │ │ │ ├── chrono.net
│ │ │ │ ├── chrono.pretty/
│ │ │ │ │ └── L80-R.kicad_mod
│ │ │ │ ├── chrono.pro
│ │ │ │ ├── chrono.sch
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── chrono-B_Cu.gbr
│ │ │ │ │ ├── chrono-B_Mask.gbr
│ │ │ │ │ ├── chrono-B_SilkS.gbr
│ │ │ │ │ ├── chrono-Edge_Cuts.gbr
│ │ │ │ │ ├── chrono-F_Cu.gbr
│ │ │ │ │ ├── chrono-F_Mask.gbr
│ │ │ │ │ └── chrono-F_SilkS.gbr
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ └── sym-lib-table
│ │ │ ├── lidar.c
│ │ │ ├── lidar.h
│ │ │ ├── main.c
│ │ │ ├── stm32F103xB.ld
│ │ │ ├── str.c
│ │ │ ├── str.h
│ │ │ ├── time.c
│ │ │ ├── time.h
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── pl2303_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── pl2303_snippet_naked/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ └── vector.h
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f01234.ld
│ │ │ ├── stm32f030f.ld
│ │ │ ├── stm32f042k.ld
│ │ │ ├── stm32f042x6.ld
│ │ │ ├── stm32f051x8.ld
│ │ │ ├── stm32f0728.ld
│ │ │ ├── stm32f072B.ld
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── led_blink/
│ │ ├── Makefile
│ │ ├── README
│ │ └── main.c
│ ├── makefile.f1
│ ├── openocd.cfg
│ ├── pwmdmatest/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── pwmtest/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── shutter/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── UNISTABLE/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── kicad/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── shutter-B_Cu.gbr
│ │ │ │ │ ├── shutter-Edge_Cuts.gbr
│ │ │ │ │ ├── shutter-F_Cu.gbr
│ │ │ │ │ ├── shutter-drl.rpt
│ │ │ │ │ ├── shutter-drl_map.gbr
│ │ │ │ │ ├── shutter-job.gbrjob
│ │ │ │ │ └── shutter.drl
│ │ │ │ ├── qr.kicad_mod
│ │ │ │ ├── shutter-drl.rpt
│ │ │ │ ├── shutter.csv
│ │ │ │ ├── shutter.kicad_pcb
│ │ │ │ ├── shutter.kicad_prl
│ │ │ │ ├── shutter.kicad_pro
│ │ │ │ └── shutter.kicad_sch
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── shutter.c
│ │ │ ├── shutter.cflags
│ │ │ ├── shutter.config
│ │ │ ├── shutter.creator
│ │ │ ├── shutter.creator.user
│ │ │ ├── shutter.creator.user.7bd84e3
│ │ │ ├── shutter.cxxflags
│ │ │ ├── shutter.files
│ │ │ ├── shutter.h
│ │ │ ├── shutter.includes
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_lib.c
│ │ │ ├── usb_lib.h
│ │ │ ├── usbhw.c
│ │ │ ├── usbhw.h
│ │ │ └── version.inc
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── fp-info-cache
│ │ │ ├── gerbers/
│ │ │ │ ├── shutter-B_Cu.gbr
│ │ │ │ ├── shutter-Edge_Cuts.gbr
│ │ │ │ ├── shutter-F_Cu.gbr
│ │ │ │ ├── shutter-drl.rpt
│ │ │ │ ├── shutter-drl_map.gbr
│ │ │ │ ├── shutter-job.gbrjob
│ │ │ │ └── shutter.drl
│ │ │ ├── shutter.csv
│ │ │ ├── shutter.kicad_pcb
│ │ │ ├── shutter.kicad_prl
│ │ │ ├── shutter.kicad_pro
│ │ │ ├── shutter.kicad_sch
│ │ │ ├── shutter.ods
│ │ │ └── shutter.xml
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── shutter.c
│ │ ├── shutter.cflags
│ │ ├── shutter.config
│ │ ├── shutter.creator
│ │ ├── shutter.creator.user
│ │ ├── shutter.creator.user.7bd84e3
│ │ ├── shutter.cxxflags
│ │ ├── shutter.files
│ │ ├── shutter.h
│ │ ├── shutter.includes
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── uart/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ └── ws2815/
│ ├── Makefile
│ ├── Readme
│ ├── hardware.c
│ ├── hardware.h
│ ├── hsv.c
│ ├── hsv.h
│ ├── main.c
│ ├── proto.c
│ ├── proto.h
│ ├── usb.c
│ ├── usb.h
│ ├── usb_defs.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── ws2815.c
│ └── ws2815.h
├── F3:F303/
│ ├── ADC/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adc.c
│ │ ├── adc.cflags
│ │ ├── adc.config
│ │ ├── adc.creator
│ │ ├── adc.creator.user
│ │ ├── adc.cxxflags
│ │ ├── adc.files
│ │ ├── adc.h
│ │ ├── adc.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── BME280/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── bme280.cflags
│ │ ├── bme280.config
│ │ ├── bme280.creator
│ │ ├── bme280.creator.user
│ │ ├── bme280.cxxflags
│ │ ├── bme280.files
│ │ ├── bme280.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANbus4BTA/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canbus4bta.cflags
│ │ ├── canbus4bta.config
│ │ ├── canbus4bta.creator
│ │ ├── canbus4bta.creator.user
│ │ ├── canbus4bta.creator.user.7bd84e3
│ │ ├── canbus4bta.creator.user.cf63021
│ │ ├── canbus4bta.cxxflags
│ │ ├── canbus4bta.files
│ │ ├── canbus4bta.includes
│ │ ├── commonfunctions.c
│ │ ├── commonfunctions.h
│ │ ├── encoder.c
│ │ ├── encoder.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── bom.csv
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Paste.gbr
│ │ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Paste.gbr
│ │ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ │ ├── stm32-drl.rpt
│ │ │ │ ├── stm32-drl_map.gbr
│ │ │ │ ├── stm32-job.gbrjob
│ │ │ │ └── stm32.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ ├── QR.kicad_mod
│ │ │ │ ├── VRB2405.kicad_mod
│ │ │ │ └── VRB_DCDC.kicad_mod
│ │ │ ├── optocouple.kicad_sch
│ │ │ ├── schematic-positions-to-layout.debug
│ │ │ ├── stm32-cache.kicad_sym
│ │ │ ├── stm32-rescue.kicad_sym
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── textfunctions.c
│ │ ├── textfunctions.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── CANusb/
│ │ ├── Makefile
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canusb.cflags
│ │ ├── canusb.config
│ │ ├── canusb.creator
│ │ ├── canusb.creator.user
│ │ ├── canusb.cxxflags
│ │ ├── canusb.files
│ │ ├── canusb.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2C_scan/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.cflags
│ │ ├── i2cscan.config
│ │ ├── i2cscan.creator
│ │ ├── i2cscan.creator.user
│ │ ├── i2cscan.creator.user.7bd84e3
│ │ ├── i2cscan.creator.user.cf63021
│ │ ├── i2cscan.cxxflags
│ │ ├── i2cscan.files
│ │ ├── i2cscan.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── InterfaceBoard/
│ │ ├── Debug.c
│ │ ├── Debug.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM.csv
│ │ │ ├── BOM.ods
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── many485-B_Cu.gbr
│ │ │ │ ├── many485-B_Mask.gbr
│ │ │ │ ├── many485-B_Silkscreen.gbr
│ │ │ │ ├── many485-Edge_Cuts.gbr
│ │ │ │ ├── many485-F_Cu.gbr
│ │ │ │ ├── many485-F_Mask.gbr
│ │ │ │ ├── many485-F_Silkscreen.gbr
│ │ │ │ ├── many485-drl.rpt
│ │ │ │ ├── many485-job.gbrjob
│ │ │ │ └── many485.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── iso485.kicad_sch
│ │ │ ├── isolated_232.kicad_sch
│ │ │ ├── many485.kicad_pcb
│ │ │ ├── many485.kicad_prl
│ │ │ ├── many485.kicad_pro
│ │ │ ├── many485.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── QR.kicad_mod
│ │ │ ├── ssi_422.kicad_sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── multiiface.cflags
│ │ ├── multiiface.config
│ │ ├── multiiface.creator
│ │ ├── multiiface.creator.user
│ │ ├── multiiface.cxxflags
│ │ ├── multiiface.files
│ │ ├── multiiface.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.cflags
│ │ ├── mlx90640.config
│ │ ├── mlx90640.creator
│ │ ├── mlx90640.creator.user
│ │ ├── mlx90640.cxxflags
│ │ ├── mlx90640.files
│ │ ├── mlx90640.h
│ │ ├── mlx90640.includes
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640-allsky/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── STM32F303C.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── commproto.cpp
│ │ ├── commproto.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── ir-allsky.cflags
│ │ ├── ir-allsky.config
│ │ ├── ir-allsky.creator
│ │ ├── ir-allsky.creator.user
│ │ ├── ir-allsky.cxxflags
│ │ ├── ir-allsky.files
│ │ ├── ir-allsky.includes
│ │ ├── kicad/
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── mainboard.kicad_pcb
│ │ │ ├── mainboard.kicad_prl
│ │ │ ├── mainboard.kicad_pro
│ │ │ ├── mainboard.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── S10K30.kicad_mod
│ │ │ │ └── SE83-GDS.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.h
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640multi/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.cflags
│ │ ├── mlx90640.config
│ │ ├── mlx90640.creator
│ │ ├── mlx90640.creator.user
│ │ ├── mlx90640.cxxflags
│ │ ├── mlx90640.files
│ │ ├── mlx90640.h
│ │ ├── mlx90640.includes
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640test/
│ │ ├── Makefile
│ │ ├── alpha.csv
│ │ ├── eeprom.csv
│ │ ├── frame0.csv
│ │ ├── frame1.csv
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kta.csv
│ │ ├── kv.csv
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.h
│ │ ├── mlx90640_regs.h
│ │ ├── mlxtest.cflags
│ │ ├── mlxtest.config
│ │ ├── mlxtest.creator
│ │ ├── mlxtest.creator.user
│ │ ├── mlxtest.cxxflags
│ │ ├── mlxtest.files
│ │ ├── mlxtest.includes
│ │ ├── offset.csv
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── testdata.h
│ │ ├── to_frame0.csv
│ │ ├── to_frame1.csv
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── Multistepper/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── commonproto.c
│ │ ├── commonproto.h
│ │ ├── esprif.conf
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── hashgen/
│ │ │ ├── Readme
│ │ │ ├── hashgen.c
│ │ │ ├── hdr.c
│ │ │ ├── hdr.h
│ │ │ ├── helpcmds.in
│ │ │ ├── mktestdic
│ │ │ ├── run
│ │ │ ├── strfunc.c
│ │ │ ├── strfunc.h
│ │ │ ├── test.c
│ │ │ └── testdic
│ │ ├── kicad/
│ │ │ ├── ADC.kicad_sch
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── BOM_full_last.ods
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── multistepper-B_Cu.gbr
│ │ │ │ ├── multistepper-B_Mask.gbr
│ │ │ │ ├── multistepper-B_Paste.gbr
│ │ │ │ ├── multistepper-B_Silkscreen.gbr
│ │ │ │ ├── multistepper-Edge_Cuts.gbr
│ │ │ │ ├── multistepper-F_Cu.gbr
│ │ │ │ ├── multistepper-F_Mask.gbr
│ │ │ │ ├── multistepper-F_Paste.gbr
│ │ │ │ ├── multistepper-F_Silkscreen.gbr
│ │ │ │ ├── multistepper-Ground_Cu.gbr
│ │ │ │ ├── multistepper-Power_Cu.gbr
│ │ │ │ ├── multistepper-drl.rpt
│ │ │ │ ├── multistepper-drl_map.gbr
│ │ │ │ ├── multistepper-job.gbrjob
│ │ │ │ └── multistepper.drl
│ │ │ ├── mcubase.kicad_sch
│ │ │ ├── motors.kicad_sch
│ │ │ ├── multistepper.csv
│ │ │ ├── multistepper.kicad_pcb
│ │ │ ├── multistepper.kicad_prl
│ │ │ ├── multistepper.kicad_pro
│ │ │ ├── multistepper.kicad_sch
│ │ │ ├── multistepper.xml
│ │ │ ├── power.kicad_sch
│ │ │ ├── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── stepper_M.kicad_sch
│ │ │ ├── stepper_module.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── kicad_old/
│ │ │ ├── ADC.kicad_sch
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── multistepper-B_Cu.gbr
│ │ │ │ ├── multistepper-B_Mask.gbr
│ │ │ │ ├── multistepper-B_Paste.gbr
│ │ │ │ ├── multistepper-B_Silkscreen.gbr
│ │ │ │ ├── multistepper-Edge_Cuts.gbr
│ │ │ │ ├── multistepper-F_Cu.gbr
│ │ │ │ ├── multistepper-F_Mask.gbr
│ │ │ │ ├── multistepper-F_Paste.gbr
│ │ │ │ ├── multistepper-F_Silkscreen.gbr
│ │ │ │ ├── multistepper-Ground_Cu.gbr
│ │ │ │ ├── multistepper-Power_Cu.gbr
│ │ │ │ ├── multistepper-drl_map.gbr
│ │ │ │ ├── multistepper-job.gbrjob
│ │ │ │ └── multistepper.drl
│ │ │ ├── mcubase.kicad_sch
│ │ │ ├── motors.kicad_sch
│ │ │ ├── multistepper.kicad_pcb
│ │ │ ├── multistepper.kicad_prl
│ │ │ ├── multistepper.kicad_pro
│ │ │ ├── multistepper.kicad_sch
│ │ │ ├── multistepper.xml
│ │ │ ├── power.kicad_sch
│ │ │ ├── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── stepper_M.kicad_sch
│ │ │ ├── stepper_module.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── multistepper.cflags
│ │ ├── multistepper.config
│ │ ├── multistepper.creator
│ │ ├── multistepper.creator.user
│ │ ├── multistepper.creator.user.7bd84e3
│ │ ├── multistepper.cxxflags
│ │ ├── multistepper.files
│ │ ├── multistepper.includes
│ │ ├── openocd.cfg
│ │ ├── pdnuart.c
│ │ ├── pdnuart.c.dma
│ │ ├── pdnuart.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── steppers.c
│ │ ├── steppers.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── stty
│ │ ├── tmc2209.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── NitrogenFlooding/
│ │ ├── ADUvsR
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── font14.h
│ │ ├── fontNumb8.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── ili9341.c
│ │ ├── ili9341.h
│ │ ├── indication.c
│ │ ├── indication.h
│ │ ├── kicad/
│ │ │ ├── nitrogen/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── BOM_need.ods
│ │ │ │ ├── MCU.kicad_sch
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── nitrogen-B_Cu.gbr
│ │ │ │ │ ├── nitrogen-B_Mask.gbr
│ │ │ │ │ ├── nitrogen-B_Paste.gbr
│ │ │ │ │ ├── nitrogen-B_Silkscreen.gbr
│ │ │ │ │ ├── nitrogen-Edge_Cuts.gbr
│ │ │ │ │ ├── nitrogen-F_Cu.gbr
│ │ │ │ │ ├── nitrogen-F_Mask.gbr
│ │ │ │ │ ├── nitrogen-F_Paste.gbr
│ │ │ │ │ ├── nitrogen-F_Silkscreen.gbr
│ │ │ │ │ ├── nitrogen-GND_Cu.gbr
│ │ │ │ │ ├── nitrogen-Mixed_Cu.gbr
│ │ │ │ │ ├── nitrogen-drl_map.gbr
│ │ │ │ │ ├── nitrogen-job.gbrjob
│ │ │ │ │ └── nitrogen.drl
│ │ │ │ ├── nitrogen.csv
│ │ │ │ ├── nitrogen.kicad_pcb
│ │ │ │ ├── nitrogen.kicad_prl
│ │ │ │ ├── nitrogen.kicad_pro
│ │ │ │ ├── nitrogen.kicad_sch
│ │ │ │ ├── nitrogen.xml
│ │ │ │ ├── power.kicad_sch
│ │ │ │ └── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── pt1000.m
│ │ │ └── sensors/
│ │ │ ├── Heaters.dxf
│ │ │ ├── J8.pretty/
│ │ │ │ └── avia8.kicad_mod
│ │ │ ├── Sensors.dxf
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── heaters.kicad_pcb
│ │ │ ├── heaters.kicad_prl
│ │ │ ├── heaters.kicad_pro
│ │ │ ├── heaters.kicad_sch
│ │ │ ├── heaters_gerber/
│ │ │ │ ├── heaters-B_Cu.gbr
│ │ │ │ ├── heaters-B_Mask.gbr
│ │ │ │ ├── heaters-B_Paste.gbr
│ │ │ │ ├── heaters-B_Silkscreen.gbr
│ │ │ │ ├── heaters-Edge_Cuts.gbr
│ │ │ │ ├── heaters-F_Cu.gbr
│ │ │ │ ├── heaters-F_Mask.gbr
│ │ │ │ ├── heaters-F_Paste.gbr
│ │ │ │ ├── heaters-F_Silkscreen.gbr
│ │ │ │ ├── heaters-drl_map.gbr
│ │ │ │ ├── heaters-job.gbrjob
│ │ │ │ └── heaters.drl
│ │ │ ├── sensors.kicad_pcb
│ │ │ ├── sensors.kicad_prl
│ │ │ ├── sensors.kicad_pro
│ │ │ ├── sensors.kicad_sch
│ │ │ └── sensors_gerber/
│ │ │ ├── sensors-B_Cu.gbr
│ │ │ ├── sensors-B_Mask.gbr
│ │ │ ├── sensors-B_Paste.gbr
│ │ │ ├── sensors-B_Silkscreen.gbr
│ │ │ ├── sensors-Edge_Cuts.gbr
│ │ │ ├── sensors-F_Cu.gbr
│ │ │ ├── sensors-F_Mask.gbr
│ │ │ ├── sensors-F_Paste.gbr
│ │ │ ├── sensors-F_Silkscreen.gbr
│ │ │ ├── sensors-drl_map.gbr
│ │ │ ├── sensors-job.gbrjob
│ │ │ └── sensors.drl
│ │ ├── main.c
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── nitrogen.cflags
│ │ ├── nitrogen.config
│ │ ├── nitrogen.creator
│ │ ├── nitrogen.creator.user
│ │ ├── nitrogen.creator.user.cf63021
│ │ ├── nitrogen.cxxflags
│ │ ├── nitrogen.files
│ │ ├── nitrogen.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── PL2303/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.creator.user.7bd84e3
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── Readme.md
│ ├── STM32F303C.md
│ ├── Seven_CDCs/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── multiiface.cflags
│ │ ├── multiiface.config
│ │ ├── multiiface.creator
│ │ ├── multiiface.creator.user
│ │ ├── multiiface.cxxflags
│ │ ├── multiiface.files
│ │ ├── multiiface.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── Seven_CDCs.deprecated/
│ │ ├── 7CDCs.cflags
│ │ ├── 7CDCs.config
│ │ ├── 7CDCs.creator
│ │ ├── 7CDCs.creator.user
│ │ ├── 7CDCs.creator.user.7bd84e3
│ │ ├── 7CDCs.cxxflags
│ │ ├── 7CDCs.files
│ │ ├── 7CDCs.includes
│ │ ├── Makefile
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── cmdproto.c
│ │ ├── cmdproto.h
│ │ ├── debug.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── USB_template/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ ├── usbtemplate.cflags
│ │ ├── usbtemplate.config
│ │ ├── usbtemplate.creator
│ │ ├── usbtemplate.creator.user
│ │ ├── usbtemplate.cxxflags
│ │ ├── usbtemplate.files
│ │ ├── usbtemplate.includes
│ │ └── version.inc
│ ├── USB_template_CDC/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbtemplate.cflags
│ │ ├── usbtemplate.config
│ │ ├── usbtemplate.creator
│ │ ├── usbtemplate.creator.user
│ │ ├── usbtemplate.cxxflags
│ │ ├── usbtemplate.files
│ │ ├── usbtemplate.includes
│ │ └── version.inc
│ ├── blink/
│ │ ├── Makefile
│ │ └── blink.c
│ ├── floatPrintf/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usart1.cflags
│ │ ├── usart1.config
│ │ ├── usart1.creator
│ │ ├── usart1.creator.user
│ │ ├── usart1.cxxflags
│ │ ├── usart1.files
│ │ └── usart1.includes
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ ├── stm32f3.h
│ │ │ ├── stm32f302xc.h
│ │ │ ├── stm32f303x8.h
│ │ │ ├── stm32f303xc.h
│ │ │ ├── stm32f303xe.h
│ │ │ └── vector.h
│ │ ├── Makefile
│ │ ├── cm/
│ │ │ ├── arm_math.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ ├── core_sc300.h
│ │ │ └── mpu_armv7.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ ├── stm32f103xG.ld
│ │ │ ├── stm32f3.ld
│ │ │ ├── stm32f302xB.ld
│ │ │ ├── stm32f303xB.ld
│ │ │ ├── stm32f303xC.ld
│ │ │ └── stm32f303xD.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── makefile.f3
│ ├── usart1/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── usart1fullDMA/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ └── usarts/
│ ├── Makefile
│ ├── hardware.c
│ ├── hardware.h
│ ├── main.c
│ ├── usart.c
│ └── usart.h
├── F4:F401/
│ ├── blink/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── blink.c
│ │ └── openocd.cfg
│ └── inc/
│ ├── Fx/
│ │ ├── common_macros.h
│ │ ├── stm32f4.h
│ │ ├── stm32f407xx.h
│ │ └── vector.h
│ ├── cm/
│ │ ├── cmsis_compiler.h
│ │ ├── cmsis_gcc.h
│ │ ├── cmsis_version.h
│ │ ├── core_cm4.h
│ │ └── mpu_armv7.h
│ ├── ld/
│ │ ├── devices.data
│ │ ├── stm32f4.ld
│ │ └── stm32f407xg.ld
│ └── startup/
│ └── vector.c
├── G0:G070,G0B1/
│ ├── RTC/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── rtc.c
│ │ ├── rtc.cflags
│ │ ├── rtc.config
│ │ ├── rtc.creator
│ │ ├── rtc.creator.user
│ │ ├── rtc.cxxflags
│ │ ├── rtc.files
│ │ ├── rtc.h
│ │ ├── rtc.includes
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── blink/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── blink.cflags
│ │ ├── blink.config
│ │ ├── blink.creator
│ │ ├── blink.creator.user
│ │ ├── blink.cxxflags
│ │ ├── blink.files
│ │ ├── blink.includes
│ │ ├── openocd.cfg
│ │ └── systick_blink.c
│ ├── flash/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── flash.c
│ │ ├── flash.cflags
│ │ ├── flash.config
│ │ ├── flash.creator
│ │ ├── flash.creator.user
│ │ ├── flash.cxxflags
│ │ ├── flash.files
│ │ ├── flash.h
│ │ ├── flash.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── g0b1/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── dbg.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── test.cflags
│ │ ├── test.config
│ │ ├── test.creator
│ │ ├── test.creator.user
│ │ ├── test.cxxflags
│ │ ├── test.files
│ │ ├── test.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── i2c/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.cflags
│ │ ├── i2cscan.config
│ │ ├── i2cscan.creator
│ │ ├── i2cscan.creator.user
│ │ ├── i2cscan.cxxflags
│ │ ├── i2cscan.files
│ │ ├── i2cscan.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── flash_size_reg.h
│ │ │ ├── stm32g0.h
│ │ │ ├── stm32g030xx.h
│ │ │ ├── stm32g031xx.h
│ │ │ ├── stm32g041xx.h
│ │ │ ├── stm32g050xx.h
│ │ │ ├── stm32g051xx.h
│ │ │ ├── stm32g061xx.h
│ │ │ ├── stm32g070xx.h
│ │ │ ├── stm32g071xx.h
│ │ │ ├── stm32g081xx.h
│ │ │ ├── stm32g0b0xx.h
│ │ │ ├── stm32g0b1xx.h
│ │ │ ├── stm32g0c1xx.h
│ │ │ ├── stm32g0xx.h
│ │ │ └── vector.h
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32.ld
│ │ │ ├── stm32g070xb.ld
│ │ │ └── stm32g0b1xb.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── makefile.g0
│ └── usart/
│ ├── Makefile
│ ├── Makefile.old
│ ├── README
│ ├── main.c
│ ├── openocd.cfg
│ ├── usart.c
│ ├── usart.cflags
│ ├── usart.config
│ ├── usart.creator
│ ├── usart.creator.user
│ ├── usart.cxxflags
│ ├── usart.files
│ ├── usart.h
│ └── usart.includes
├── Readme.md
├── TODO
├── deprecated/
│ ├── F0/
│ │ ├── Readme.md
│ │ ├── blink/
│ │ │ ├── Makefile
│ │ │ ├── ld/
│ │ │ │ └── stm32f042k.ld
│ │ │ ├── stm32f0.h
│ │ │ └── systick_blink.c
│ │ └── uart/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── ld/
│ │ │ └── stm32f042k.ld
│ │ ├── main.c
│ │ ├── uart.geanypro
│ │ ├── usart.c
│ │ └── usart.h
│ ├── F1/
│ │ ├── 1_wire/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── onewire.c
│ │ │ ├── onewire.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── 2.8TFT/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── dmagpio.c
│ │ │ ├── dmagpio.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── lcd.c
│ │ │ ├── lcd.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── registers.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── DMA_GPIO/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── dmagpio.c
│ │ │ ├── dmagpio.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPIO_TIM/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── timgpio.c
│ │ │ ├── timgpio.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPS/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.geany
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPS+ultrasonic/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── Jeep_generator/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── timer.c
│ │ │ ├── timer.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── Readme.md
│ │ ├── Timelapse_keyboard/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── kicad/
│ │ │ │ ├── LEDs.cmp
│ │ │ │ ├── LEDs.net
│ │ │ │ ├── LEDs.sch
│ │ │ │ ├── diff_schematics.kicad_pcb
│ │ │ │ ├── diff_schematics.pro
│ │ │ │ └── my_modules.mod
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── Timelapse_keyboard_only_lasers/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── USBCDC_template/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── canon_lens/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── spi.c
│ │ │ ├── spi.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── client-term/
│ │ │ ├── Makefile
│ │ │ └── client.c
│ │ ├── distance_meters/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sharp.c
│ │ │ ├── sharp.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── hid_mouse_keyboard/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ └── usbhid.c
│ │ ├── keyboard_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── ocm.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── matrix_keyboard/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── matrixkbd.c
│ │ │ └── matrixkbd.h
│ │ ├── nokia5110/
│ │ │ ├── Makefile
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── font.c
│ │ │ ├── font.h
│ │ │ ├── hw_init.c
│ │ │ ├── hw_init.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── pcd8544.c
│ │ │ ├── pcd8544.h
│ │ │ ├── spi.c
│ │ │ ├── spi.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── simple_cdc/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── stepper_motion/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── client-p2/
│ │ │ │ ├── Makefile
│ │ │ │ ├── bta_shdata.h
│ │ │ │ ├── cmdlnopts.c
│ │ │ │ ├── cmdlnopts.h
│ │ │ │ ├── main.c
│ │ │ │ ├── parseargs.c
│ │ │ │ └── parseargs.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── steppers.c
│ │ │ ├── steppers.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ └── ultrasonic/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── cdcacm.c
│ │ ├── cdcacm.h
│ │ ├── hardware_ini.c
│ │ ├── hardware_ini.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ ├── main.c
│ │ ├── main.h
│ │ ├── sharp.c
│ │ ├── sharp.h
│ │ ├── sync.c
│ │ ├── sync.h
│ │ ├── ultrasonic.c
│ │ ├── ultrasonic.geany
│ │ ├── ultrasonic.h
│ │ ├── user_proto.c
│ │ └── user_proto.h
│ └── README
├── libopencm3.ori.tgz
├── makefile.stm32
├── snippets/
│ ├── USB_CDC_ringbuffer/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── dbg.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── test.cflags
│ │ ├── test.config
│ │ ├── test.creator
│ │ ├── test.creator.user
│ │ ├── test.cxxflags
│ │ ├── test.files
│ │ ├── test.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── factorize.c
│ ├── factorize2.c
│ ├── strfunc.c
│ ├── strfunc.h
│ └── usb_pl2303/
│ ├── Readme
│ ├── ringbuffer.c
│ ├── ringbuffer.h
│ ├── usb.c
│ ├── usb.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── usbhw.c
│ └── usbhw.h
└── testboard/
├── F0_F1-LQFP48_testboard/
│ ├── elements.lib
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── my_footprints.pretty/
│ │ ├── Hole_3mm.kicad_mod
│ │ ├── Potentiometer.kicad_mod
│ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ └── TH_via.kicad_mod
│ ├── stm32-rescue.lib
│ ├── stm32.bom
│ ├── stm32.kicad_pcb
│ ├── stm32.net
│ ├── stm32.pro
│ ├── stm32.sch
│ └── sym-lib-table
└── F0_F1_F3-LQFP48_testboard/
├── elements.lib
├── fp-info-cache
├── fp-lib-table
├── my_footprints.pretty/
│ ├── Hole_3mm.kicad_mod
│ ├── Potentiometer.kicad_mod
│ ├── SMD_conn_4x2.5mm.kicad_mod
│ └── TH_via.kicad_mod
├── stm32-rescue.lib
├── stm32.bom
├── stm32.kicad_pcb
├── stm32.kicad_prl
├── stm32.kicad_pro
├── stm32.kicad_sch
├── stm32.net
├── stm32.pro
├── stm32.sch
└── sym-lib-table
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*~
*.bak
*.bck
*-cache.lib
*.kicad_pcb-bak
*.dcm
*.pho
*.zip
*/mk/*
.hg*
.dropbox.attr
*.sublime-project
*.sublime-workspace
*.bk
*-bak
.qtcreator
.clang-format
================================================
FILE: F0:F030,F042,F072/3steppersLB/Makefile
================================================
BINARY := steppers
# MCU code
MCU := F072xB
# change this linking script depending on particular MCU model,
LDSCRIPT := stm32f072B.ld
include ../makefile.f0
include ../../makefile.stm32
================================================
FILE: F0:F030,F042,F072/3steppersLB/Makefile.old
================================================
BINARY = steppers
BOOTPORT ?= /dev/ttyUSB0
BOOTSPEED ?= 57600
# MCU FAMILY
FAMILY ?= F0
# MCU code
MCU ?= F072xB
#DEFS += -DEBUG
# change this linking script depending on particular MCU model,
# for example, if you have STM32F103VBT6, you should write:
LDSCRIPT ?= stm32f072B.ld
# autoincremental version & build date
VERSION_FILE = version.inc
NEXTVER := $(shell expr $$(awk '/#define BUILD_NUMBER/' $(VERSION_FILE) | tr -cd "[0-9]") + 1)
BUILDDATE := $(shell date +%Y-%m-%d)
INDEPENDENT_HEADERS=
FP_FLAGS ?= -msoft-float
ASM_FLAGS = -mthumb -mcpu=cortex-m0 -march=armv6-m -mtune=cortex-m0
ARCH_FLAGS = $(ASM_FLAGS) $(FP_FLAGS)
###############################################################################
# Executables
OPREFIX ?= /opt/bin/arm-none-eabi
#PREFIX ?= /usr/x86_64-pc-linux-gnu/arm-none-eabi/gcc-bin/7.3.0/arm-none-eabi
PREFIX ?= $(OPREFIX)
RM := rm -f
RMDIR := rmdir
CC := $(PREFIX)-gcc
LD := $(PREFIX)-gcc
AR := $(PREFIX)-ar
AS := $(PREFIX)-as
OBJCOPY := $(OPREFIX)-objcopy
OBJDUMP := $(OPREFIX)-objdump
GDB := $(OPREFIX)-gdb
STFLASH := $(shell which st-flash)
STBOOT := $(shell which stm32flash)
DFUUTIL := $(shell which dfu-util)
###############################################################################
# Source files
OBJDIR = mk
LDSCRIPT ?= $(BINARY).ld
SRC := $(wildcard *.c)
OBJS := $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
STARTUP = $(OBJDIR)/startup.o
OBJS += $(STARTUP)
DEPS := $(OBJS:.o=.d)
INC_DIR ?= ../inc
INCLUDE := -I$(INC_DIR)/Fx -I$(INC_DIR)/cm
LIB_DIR := $(INC_DIR)/ld
###############################################################################
# C flags
CFLAGS += -O2 -g -MD -D__thumb2__=1
CFLAGS += -Wall -Werror -Wextra -Wshadow -Wimplicit-function-declaration
CFLAGS += -Wredundant-decls $(INCLUDE)
# -Wmissing-prototypes -Wstrict-prototypes
CFLAGS += -fno-common -ffunction-sections -fdata-sections -flto
###############################################################################
# Linker flags
LDFLAGS += --static -nostartfiles -nostdlib
LDFLAGS += -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -flto
LDFLAGS += -L$(LIB_DIR)
LDFLAGS += -T$(LDSCRIPT)
LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map
###############################################################################
# Used libraries
LDLIBS += -Wl,--start-group -lc -lgcc -Wl,--end-group
LDLIBS += $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
DEFS += -DSTM32$(FAMILY) -DSTM32$(MCU)
#.SUFFIXES: .elf .bin .hex .srec .list .map .images
#.SECONDEXPANSION:
#.SECONDARY:
ELF := $(OBJDIR)/$(BINARY).elf
LIST := $(OBJDIR)/$(BINARY).list
BIN := $(BINARY).bin
HEX := $(BINARY).hex
all: bin list
elf: $(ELF)
bin: $(BIN)
hex: $(HEX)
list: $(LIST)
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
$(OBJDIR):
mkdir $(OBJDIR)
$(STARTUP): $(INC_DIR)/startup/vector.c
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $<
$(VERSION_FILE): *.[ch]
@echo " Generate version: $(NEXTVER) for date $(BUILDDATE)"
@sed -i "s/#define BUILD_NUMBER.*/#define BUILD_NUMBER \"$(NEXTVER)\"/" $(VERSION_FILE)
@sed -i "s/#define BUILD_DATE.*/#define BUILD_DATE \"$(BUILDDATE)\"/" $(VERSION_FILE)
$(OBJDIR)/strfunct.o: strfunct.c $(VERSION_FILE)
$(OBJDIR)/%.o: %.c
# @make $(VERSION_FILE)
@echo " CC $<"
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $<
%.s: %.c
@echo " ASM $<"
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -S -o $(OBJDIR)/$@ -c $<
$(BIN): $(ELF)
@echo " OBJCOPY $(BIN)"
$(OBJCOPY) -Obinary $(ELF) $(BIN)
$(HEX): $(ELF)
@echo " OBJCOPY $(HEX)"
$(OBJCOPY) -Oihex $(ELF) $(HEX)
$(LIST): $(ELF)
@echo " OBJDUMP $(LIST)"
$(OBJDUMP) -S $(ELF) > $(LIST)
$(ELF): $(OBJDIR) $(OBJS)
@echo " LD $(ELF)"
$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(ELF)
clean:
@echo " CLEAN"
$(RM) $(OBJS) $(DEPS) $(ELF) $(HEX) $(LIST) $(OBJDIR)/*.map $(OBJDIR)/*.d $(OBJDIR)/*.s
@rmdir $(OBJDIR) 2>/dev/null || true
dfuboot: $(BIN)
@echo " LOAD $(BIN) THROUGH DFU"
$(DFUUTIL) -a0 -R -D $(BIN) -s 0x08000000
flash: $(BIN)
@echo " FLASH $(BIN)"
$(STFLASH) write $(BIN) 0x8000000
boot: $(BIN)
@echo " LOAD $(BIN) through bootloader"
$(STBOOT) -b$(BOOTSPEED) $(BOOTPORT) -w $(BIN)
.PHONY: clean dfuboot flash boot
================================================
FILE: F0:F030,F042,F072/3steppersLB/Readme.md
================================================
Loopback control of three stepper motors
========================================
# Pinout
- **PA0** Enc2a (motor2 encoder)
- **PA1** Enc2b
- **PA2** CLK1 (motor1 clock)
- **PA3** ADC1 (ADC1 in, 0-3.3V)
- **PA4** CLK2 (motor2 clock)
- **PA5** ADC2 (ADC2 in, 0-3.3V)
- **PA6** CLK3 (motor3 clock)
- **PA7** PWM (opendrain PWM, up to 12V)
- **PA8** Enc1a (motor1 encoder)
- **PA9** Enc1b
- **PA10** BTN1 (user button 1)
- **PA11** USBDM
- **PA12** USBDP
- **PA13** BTN2 (user button 2)
- **PA14** BTN3 (user button 3)
- **PA15** BTN4 (user button 4)
- **PB0** ~EN1 (motor1 not enable)
- **PB1** DIR1 (motor1 direction)
- **PB2** ~EN2 (motor2 not enable)
- **PB3** Buzzer (external buzzer or other non-inductive opendrain load up to 12V)
- **PB4** Enc3a (motor3 encoder)
- **PB5** Enc3b
- **PB6** I2C SCL (external I2C bus, have internal pullups of 4.7kOhm to +3.3V)
- **PB7** I2C SDA
- **PB8** CAN Rx (external CAN bus, with local galvanic isolation
- **PB9** CAN Tx
- **PB10** DIR2 (motor2 direction)
- **PB11** ~EN3 (motor3 not enable)
- **PB12** DIR3 (motor3 direction)
- **PB13** Ext0 (3 external outputs: 5V, up to 20mA)
- **PB14** Ext1
- **PB15** Ext2
- **PC13** ESW1 (motor1 zero limit switch)
- **PC14** ESW2 (motor2 zero limit switch)
- **PC15** ESW3 (motor3 zero limit switch)
- **PF0** Relay (10A 250VAC, 10A 30VDC)
# Connectors
## ADC inputs connector, J1
1. ADC1 (up to 3.3V)
2. ADC2 (up to 3.3V)
3. GND
## Encoders connectors, J2-J4
1. GND
2. Encoder B phase
3. Encoder A phase
4. +5V (through resistor 22Ohm)
## I2C connector, J5
1. +3.3V
2. SCL
3. SDA
4. GND
## PWM connector, J6
1. +3.3V
2. +5V
3. PWM GND (opendrain)
## CAN bus connector, J7
1. CANL (low signal)
2. CANGND (common - not need for short lines)
3. CANH (high signal)
## External buttons connector (WARNING! NO ESD PROTECTION!), J8
1. Button 1
2. Button 2
3. Button 3
4. Button 4
5. GND
## External Hall sensors connector (zero limit switches), J9
1. +3.3V (through resistor 47Ohm)
2. Motor1 limit switch
3. Motor2 limit switch
4. Motor3 limit switch
5. GND
## Relay connector, J10
1. Normally opened
2. Common
3. Normally closed
## 24V input power connector, J12
1. GND
2. +24V DC
## 24V motors power connector, J13
1. GND
2. +24V DC to motors' coils (reverse protected)
## Stepper motors control signals connectors, J14-J16
1. CLK (step signal)
2. DIR (rotation direction)
3. ~EN (not enable)
4. GND
## External 5V logic outputs connector (up to 20mA per each channel), J17
1. Ext0
2. Ext1
3. Ext2
4. GND
## External buzzer (or other load) connector (opendrain, up to 12V), J18
1. power (depending on JP1 jumper): 3.3V or 5.0V
2. GND (opendrain)
# Control points
- **TP1** 5V
- **TP2** 3.3V
- **TP3** NRST
- **TP4** GND
# Firmware download
Activate "Jump to DFU" menu entry through USB protocol. Flash MCU by `dfu-util`.
# USB protocol
https://github.com/eddyem/stm32samples/tree/master/F0-nolib/3steppersLB build#138 @ 2021-12-02
Common commands format is cmd[ N[ = val]]
where N is command argument (0..127), val is its value
Different commands:
adc - get ADC values
button - get buttons state (return time of last event & ERRCODE == buttonstate)
buzzer - change buzzer state (1/0)
esw - get end switches state (without number - all, by bytes)
ext - external outputs (without number - all, by bytes; value= 0-off, 1-on, other-toggle)
mcut - get MCU T
mcuvdd - get MCU Vdd
ping - echo given command back
pwm - pwm value
relay - change relay state (1/0)
reset - reset MCU
time - get time from start
Confuguration:
accel - set/get accel/decel (steps/s^2)
encrev - set/get max encoder's pulses per revolution
encstepmax - maximal encoder ticks per step
encstepmin - minimal encoder ticks per step
eswreact - end-switches reaction
maxspeed - set/get max speed (steps per sec)
maxsteps - set/get max steps (from zero)
microsteps - set/get microsteps settings
minspeed - set/get min speed (steps per sec)
motflags - set/get motorN flags
saveconf - save current configuration
speedlimit - get limiting speed for current microsteps
Motors' commands:
abspos - set/get position (in steps)
emerg - emergency stop all motors
emstop - emergency stop motor (right now)
encpos - set/get encoder's position
gotoz - find zero position & refresh counters
motreinit - re-init motors after configuration changed
relpos - set relative steps, get remaining
relslow - set relative steps @ lowest speed
setpos - set/get absolute position (in steps)
state - get motor state
stop - smooth motor stopping
USB-only commands:
canid - get/set CAN ID
canspeed - CAN bus speed
delignlist - delete ignore list
dfu - activate DFU mode
dumperr - dump error codes
dumpcmd - dump command codes
dumpconf - dump current configuration
eraseflash - erase flash data storage
filter - add/modify filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]
getctr - get TIM1/2/3 counters
ignbuf - print ignore buffer
ignore - add ID to ignore list (max 10 IDs)
listfilters - list all active filters
pause - pause IN packets displaying
resume - resume IN packets displaying
send - send data over CAN: send ID byte0 .. byteN
wd - check watchdog
# CAN bus protocol
bytes descr
0 Lcmd - command code
1 Hcmd
2 par - command paremeter (steper, ADC channel number etc)
3 err - error code (only in answer)
4 Ldata - optional data in int32_t
5
6
7 Hdata
dumperr
Error codes:
0 - all OK
1 - wrong parameter's value
2 - wrong setter of parameter
3 - bad message length
4 - unknown command
5 - temporary can't run given command
dumpcmd
Commands list:
1 - echo given command back
2 - change relay state (1/0)
3 - change buzzer state (1/0)
4 - get ADC values
5 - get buttons state
6 - get end switches state
7 - get MCU T
8 - get MCU Vdd
9 - reset MCU
10 - get time from start
11 - pwm value
12 - external outputs
13 - save current configuration
14 - minimal encoder ticks per step
15 - maximal encoder ticks per step
16 - set/get microsteps settings
17 - set/get accel/decel (steps/s^2)
18 - set/get max speed (steps per sec)
19 - set/get min speed (steps per sec)
20 - get limiting speed for current microsteps
21 - set/get max steps (from zero)
22 - set/get max encoder's pulses per revolution
23 - set/get motorN flags
24 - end-switches reaction
25 - re-init motors after configuration changed
26 - move to/get absolute position (in steps)
27 - set relative steps, get remaining
28 - set relative steps @ lowest speed
29 - emergency stop motor (right now)
30 - smooth motor stopping
31 - emergency stop all motors
32 - find zero position & refresh counters
33 - get motor state
34 - set/get encoder's position
35 - set/get absolute position (in steps)
dumpconf
userconf_addr=0x08006000// address from which userconf started
userconf_idx=5 // "index of stored conf"
userconf_sz=68 // "magick number"
canspeed=100 // default CAN speed
canid=170 // identifier (0xaa)
microsteps0=32 // microsteps amount per step
accel0=1500 // acceleration/deceleration (steps/s^2)
maxspeed0=1501 // max motor speed (steps per second)
minspeed0=20 // min motor speed (steps per second)
maxsteps0=500000 // maximal amount of steps
encperrev0=4000 // encoders' counts per revolution
encperstepmin0=17 // min amount of encoder ticks per one step
encperstepmax0=23 // max amount of encoder ticks per one step
motflags0=0x2f // motor's flags
eswreaction0=0 // end-switches reaction (esw_react)
microsteps1=32
accel1=1500
maxspeed1=2000
minspeed1=20
maxsteps1=500000
encperrev1=4000
encperstepmin1=17
encperstepmax1=23
motflags1=0x2f
eswreaction1=0
microsteps2=32
accel2=1500
maxspeed2=2500
minspeed2=20
maxsteps2=500000
encperrev2=4000
encperstepmin2=17
encperstepmax2=23
motflags2=0x2f
eswreaction2=0
Motor flags:
bit0 - reversing motor rotation
bit1 - reversing encoder rotation
bit2 - have encoder
bit3 - clear power @ stop (don't hold motor when stopped)
bit4 - inverse end-switches (Work @ high level when this flag activated)
bit5 - keep current position (as servo motor)
Stepper states:
STP_RELAX, // 0 - no moving
STP_ACCEL, // 1 - start moving with acceleration
STP_MOVE, // 2 - moving with constant speed
STP_MVSLOW, // 3 - moving with slowest constant speed (end of moving)
STP_DECEL, // 4 - moving with deceleration
STP_STALL, // 5 - stalled
STP_ERR // 6 - wrong/error state
ESW reaction:
ESW_IGNORE, // 0 - don't stop @ end-switch
ESW_ANYSTOP, // 1 - stop @ esw in any moving direction
ESW_STOPMINUS, // 2 - stop only in negative moving
================================================
FILE: F0:F030,F042,F072/3steppersLB/adc.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "adc.h"
/**
* @brief ADC_array - array for ADC channels with median filtering:
* 0 & 1 - external channels
* 2 - internal Tsens
* 3 - Vref
*/
static uint16_t ADC_array[NUMBER_OF_ADC_CHANNELS*9];
void adc_setup(){
uint16_t ctr = 0; // 0xfff0 - more than 1.3ms
ADC1->CR &= ~ADC_CR_ADEN;
DMA1_Channel1->CCR &= ~DMA_CCR_EN;
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // Enable the peripheral clock of the ADC
RCC->CR2 |= RCC_CR2_HSI14ON; // Start HSI14 RC oscillator
while ((RCC->CR2 & RCC_CR2_HSI14RDY) == 0 && ++ctr < 0xfff0){}; // Wait HSI14 is ready
// calibration
if(ADC1->CR & ADC_CR_ADEN){ // Ensure that ADEN = 0
ADC1->CR &= (uint32_t)(~ADC_CR_ADEN); // Clear ADEN
}
ADC1->CR |= ADC_CR_ADCAL; // Launch the calibration by setting ADCAL
ctr = 0; // ADC calibration time is 5.9us
while(ADC1->CR & ADC_CR_ADCAL && ++ctr < 0xfff0); // Wait until ADCAL=0
// enable ADC
ctr = 0;
do{
ADC1->CR |= ADC_CR_ADEN;
}while((ADC1->ISR & ADC_ISR_ADRDY) == 0 && ++ctr < 0xfff0);
// configure ADC
ADC1->CFGR1 |= ADC_CFGR1_CONT; // Select the continuous mode
// channels 3,5,16 and 17
ADC1->CHSELR = ADC_CHSELR_CHSEL3 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL16 | ADC_CHSELR_CHSEL17;
ADC1->SMPR |= ADC_SMPR_SMP; // Select a sampling mode of 111 i.e. 239.5 ADC clk to be greater than 17.1us
ADC->CCR |= ADC_CCR_TSEN | ADC_CCR_VREFEN; // Wake-up the VREFINT and Temperature sensor
// configure DMA for ADC
RCC->AHBENR |= RCC_AHBENR_DMA1EN; // Enable the peripheral clock on DMA
ADC1->CFGR1 |= ADC_CFGR1_DMAEN | ADC_CFGR1_DMACFG; // Enable DMA transfer on ADC and circular mode
DMA1_Channel1->CPAR = (uint32_t) (&(ADC1->DR)); // Configure the peripheral data register address
DMA1_Channel1->CMAR = (uint32_t)(ADC_array); // Configure the memory address
DMA1_Channel1->CNDTR = NUMBER_OF_ADC_CHANNELS * 9; // Configure the number of DMA tranfer to be performs on DMA channel 1
DMA1_Channel1->CCR |= DMA_CCR_MINC | DMA_CCR_MSIZE_0 | DMA_CCR_PSIZE_0 | DMA_CCR_CIRC; // Configure increment, size, interrupts and circular mode
DMA1_Channel1->CCR |= DMA_CCR_EN; // Enable DMA Channel 1
ADC1->CR |= ADC_CR_ADSTART; // start the ADC conversions
}
/**
* @brief getADCval - calculate median value for `nch` channel
* @param nch - number of channel
* @return
*/
uint16_t getADCval(int nch){
int i, addr = nch;
#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); }
#define PIX_SWAP(a,b) {register uint16_t temp=(a);(a)=(b);(b)=temp; }
uint16_t p[9];
for(i = 0; i < 9; ++i, addr += NUMBER_OF_ADC_CHANNELS) // first we should prepare array for optmed
p[i] = ADC_array[addr];
PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;
PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[4]) ; PIX_SORT(p[6], p[7]) ;
PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;
PIX_SORT(p[0], p[3]) ; PIX_SORT(p[5], p[8]) ; PIX_SORT(p[4], p[7]) ;
PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ;
PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ;
PIX_SORT(p[4], p[2]) ;
return p[4];
#undef PIX_SORT
#undef PIX_SWAP
}
// return MCU temperature (degrees of celsius * 10)
int32_t getMCUtemp(){
int32_t ADval = getADCval(2);
int32_t temperature = (int32_t) *TEMP30_CAL_ADDR - ADval;
temperature *= (int32_t)(1100 - 300);
temperature /= (int32_t)(*TEMP30_CAL_ADDR - *TEMP110_CAL_ADDR);
temperature += 300;
return(temperature);
}
// return Vdd * 100 (V)
uint32_t getVdd(){
uint32_t vdd = ((uint32_t) *VREFINT_CAL_ADDR) * (uint32_t)330; // 3.3V
vdd /= getADCval(3);
return vdd;
}
================================================
FILE: F0:F030,F042,F072/3steppersLB/adc.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ADC_H
#define ADC_H
#include "stm32f0.h"
// 2 external & 2 internal
#define NUMBER_OF_ADC_CHANNELS (4)
void adc_setup();
int32_t getMCUtemp();
uint32_t getVdd();
uint16_t getADCval(int nch);
int16_t getNTC(int nch);
#endif // ADC_H
================================================
FILE: F0:F030,F042,F072/3steppersLB/buttons.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "buttons.h"
#include "hardware.h"
typedef struct{
keyevent event; // current key event
int16_t counter; // press/release counter
uint32_t lastTms; // time of last event change
} keybase;
static keybase allkeys[BTNSNO] = {0}; // array for buttons' states
uint32_t lastUnsleep = 0; // last keys activity time
void process_keys(){
static uint32_t lastT = 0;
if(Tms == lastT) return;
uint16_t d = (uint16_t)(Tms - lastT);
lastT = Tms;
for(int i = 0; i < BTNSNO; ++i){
keybase *k = &allkeys[i];
keyevent e = k->event;
if(BTN_state(i)){ // key is in pressed state
switch(e){
case EVT_NONE: // just pressed
case EVT_RELEASE:
if((k->counter += d) > PRESSTHRESHOLD){
k->event = EVT_PRESS;
}
break;
case EVT_PRESS: // hold
if((k->counter += d)> HOLDTHRESHOLD){
k->event = EVT_HOLD;
}
break;
default:
break;
}
}else{ // released
if(e == EVT_PRESS || e == EVT_HOLD){ // released
if(k->counter > PRESSTHRESHOLD) k->counter = PRESSTHRESHOLD;
else if((k->counter -= d) < 0){
k->event = EVT_RELEASE; // button released
}
}
}
if(e != k->event){
k->lastTms = Tms;
lastUnsleep = Tms;
}
}
}
/**
* @brief keystate - curent key state
* @param k - key number
* @param T - last event changing time
* @return key event
*/
keyevent keystate(uint8_t k, uint32_t *T){
if(k >= BTNSNO) return EVT_NONE;
keyevent evt = allkeys[k].event;
// change state `release` to `none` after 1st check
if(evt == EVT_RELEASE) allkeys[k].event = EVT_NONE;
if(T) *T = allkeys[k].lastTms;
return evt;
}
// getter of keyevent for allkeys[]
keyevent keyevt(uint8_t k){
if(k >= BTNSNO) return EVT_NONE;
return allkeys[k].event;
}
================================================
FILE: F0:F030,F042,F072/3steppersLB/buttons.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef BUTTONS_H__
#include <stm32f0.h>
// threshold in ms for press/hold
#define PRESSTHRESHOLD (9)
#define HOLDTHRESHOLD (199)
// events
typedef enum{
EVT_NONE, // no events with given key
EVT_PRESS, // pressed (hold more than PRESSTHRESHOLD ms)
EVT_HOLD, // hold more than HOLDTHRESHOLD ms
EVT_RELEASE // released after press or hold state
} keyevent;
extern uint32_t lastUnsleep; // last keys activity time
void process_keys();
keyevent keystate(uint8_t k, uint32_t *T);
keyevent keyevt(uint8_t k);
#define BUTTONS_H__
#endif // BUTTONS_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/can.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "can.h"
#include "commonproto.h"
#include "flash.h"
#include "hardware.h"
#include "strfunct.h"
#include <string.h> // memcpy
// circular buffer for received messages
static CAN_message messages[CAN_INMESSAGE_SIZE];
static uint8_t first_free_idx = 0; // index of first empty cell
static int8_t first_nonfree_idx = -1; // index of first data cell
static uint16_t oldspeed = DEFAULT_CAN_SPEED; // speed of last init
#ifdef EBUG
static uint32_t last_err_code = 0;
#endif
static CAN_status can_status = CAN_STOP;
static void can_process_fifo(uint8_t fifo_num);
static void parseCANcommand(CAN_message *msg);
CAN_status CAN_get_status(){
CAN_status st = can_status;
if(st == CAN_FIFO_OVERRUN) can_status = CAN_READY;
return st;
}
// push next message into buffer; return 1 if buffer overfull
static int CAN_messagebuf_push(CAN_message *msg){
//DBG("Try to push\n");
if(first_free_idx == first_nonfree_idx) return 1; // no free space
if(first_nonfree_idx < 0) first_nonfree_idx = 0; // first message in empty buffer
memcpy(&messages[first_free_idx++], msg, sizeof(CAN_message));
// need to roll?
if(first_free_idx == CAN_INMESSAGE_SIZE) first_free_idx = 0;
return 0;
}
// pop message from buffer
CAN_message *CAN_messagebuf_pop(){
if(first_nonfree_idx < 0) return NULL;
#ifdef EBUG
//DBG("read from idx "); printu(first_nonfree_idx); NL();
#endif
CAN_message *msg = &messages[first_nonfree_idx++];
if(first_nonfree_idx == CAN_INMESSAGE_SIZE) first_nonfree_idx = 0;
if(first_nonfree_idx == first_free_idx){ // buffer is empty - refresh it
first_nonfree_idx = -1;
first_free_idx = 0;
}
return msg;
}
void CAN_reinit(uint16_t speed){
CAN->TSR |= CAN_TSR_ABRQ0 | CAN_TSR_ABRQ1 | CAN_TSR_ABRQ2;
RCC->APB1RSTR |= RCC_APB1RSTR_CANRST;
RCC->APB1RSTR &= ~RCC_APB1RSTR_CANRST;
CAN_setup(speed);
}
/*
Can filtering: FSCx=0 (CAN->FS1R) -> 16-bit identifiers
MASK: FBMx=0 (CAN->FM1R), two filters (n in FR1 and n+1 in FR2)
ID: CAN->sFilterRegister[x].FRn[0..15]
MASK: CAN->sFilterRegister[x].FRn[16..31]
FR bits: STID[10:0] RTR IDE EXID[17:15]
LIST: FBMx=1, four filters (n&n+1 in FR1, n+2&n+3 in FR2)
IDn: CAN->sFilterRegister[x].FRn[0..15]
IDn+1: CAN->sFilterRegister[x].FRn[16..31]
*/
/*
Can timing: main freq - APB (PLL=48MHz)
segment = 1sync + TBS1 + TBS2, sample point is between TBS1 and TBS2,
so if TBS1=4 and TBS2=3, sum=8, bit sampling freq is 48/8 = 6MHz
-> to get 100kbps we need prescaler=60
250kbps - 24
500kbps - 12
1MBps - 6
*/
// speed - in kbps
void CAN_setup(uint16_t speed){
if(speed == 0) speed = oldspeed;
else if(speed < 50) speed = 50;
else if(speed > 3000) speed = 3000;
oldspeed = speed;
uint32_t tmout = 16000000;
// Configure GPIO: PB8 - CAN_Rx, PB9 - CAN_Tx
/* (1) Select AF mode (10) on PB8 and PB9 */
/* (2) AF4 for CAN signals */
GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODER8 | GPIO_MODER_MODER9))
| (GPIO_MODER_MODER8_AF | GPIO_MODER_MODER9_AF); /* (1) */
GPIOB->AFR[1] = (GPIOB->AFR[1] &~ (GPIO_AFRH_AFRH0 | GPIO_AFRH_AFRH1))\
| (4 << (0 * 4)) | (4 << (1 * 4)); /* (2) */
/* Enable the peripheral clock CAN */
RCC->APB1ENR |= RCC_APB1ENR_CANEN;
// Configure CAN
CAN->MCR |= CAN_MCR_INRQ; // Enter CAN init mode to write the configuration
while((CAN->MSR & CAN_MSR_INAK) != CAN_MSR_INAK){
if(--tmout == 0) break;
}
CAN->MCR &=~ CAN_MCR_SLEEP;
CAN->MCR |= CAN_MCR_ABOM; // allow automatically bus-off
CAN->BTR = 2 << 20 | 3 << 16 | (6000/speed - 1); // speed
CAN->MCR &=~ CAN_MCR_INRQ;
tmout = 16000000;
while((CAN->MSR & CAN_MSR_INAK) == CAN_MSR_INAK){ // Wait the init mode leaving
if(--tmout == 0) break;
}
// accept self ID at filter 0, ALL other at filters 1 and 2
CAN->FMR = CAN_FMR_FINIT;
CAN->FA1R = CAN_FA1R_FACT0 | CAN_FA1R_FACT1 | CAN_FA1R_FACT2;
CAN->FM1R = CAN_FM1R_FBM0; // identifier mode for bank#0, mask mode for #1 and #2
// set to 1 all needed bits of CAN->FFA1R to switch given filters to FIFO1
CAN->sFilterRegister[0].FR1 = the_conf.CANID << 5; // self ID
CAN->sFilterRegister[1].FR1 = (1<<21)|(1<<5); // all odd IDs
CAN->sFilterRegister[2].FR1 = (1<<21); // all even IDs
CAN->FFA1R = 2; // filter 1 for FIFO1, filters 0&2 - for FIFO0
CAN->FMR &=~ CAN_FMR_FINIT; // end of filters init
CAN->IER |= CAN_IER_ERRIE | CAN_IER_FOVIE0 | CAN_IER_FOVIE1;
/* Configure IT */
NVIC_SetPriority(CEC_CAN_IRQn, 0);
NVIC_EnableIRQ(CEC_CAN_IRQn);
can_status = CAN_READY;
}
void can_proc(){
#ifdef EBUG
if(last_err_code){
DBG("Error, ESR=");
printu(last_err_code);
NL();
last_err_code = 0;
}
#endif
// check for messages in FIFO0 & FIFO1
if(CAN->RF0R & CAN_RF0R_FMP0){
can_process_fifo(0);
}
if(CAN->RF1R & CAN_RF1R_FMP1){
can_process_fifo(1);
}
if(CAN->ESR & (CAN_ESR_BOFF | CAN_ESR_EPVF | CAN_ESR_EWGF)){ // much errors - restart CAN BUS
SEND("\nToo much errors, restarting CAN!\n");
SEND("Receive error counter: ");
printu((CAN->ESR & CAN_ESR_REC)>>24);
SEND("\nTransmit error counter: ");
printu((CAN->ESR & CAN_ESR_TEC)>>16);
SEND("\nLast error code: ");
int lec = (CAN->ESR & CAN_ESR_LEC) >> 4;
const char *errmsg = "No";
switch(lec){
case 1: errmsg = "Stuff"; break;
case 2: errmsg = "Form"; break;
case 3: errmsg = "Ack"; break;
case 4: errmsg = "Bit recessive"; break;
case 5: errmsg = "Bit dominant"; break;
case 6: errmsg = "CRC"; break;
case 7: errmsg = "(set by software)"; break;
}
SEND(errmsg); SEND(" error\n");
if(CAN->ESR & CAN_ESR_BOFF) SEND("Bus off");
if(CAN->ESR & CAN_ESR_EPVF) SEND("Passive error limit");
if(CAN->ESR & CAN_ESR_EWGF) SEND("Error counter limit");
NL();
// request abort for all mailboxes
CAN->TSR |= CAN_TSR_ABRQ0 | CAN_TSR_ABRQ1 | CAN_TSR_ABRQ2;
// reset CAN bus
RCC->APB1RSTR |= RCC_APB1RSTR_CANRST;
RCC->APB1RSTR &= ~RCC_APB1RSTR_CANRST;
CAN_setup(0);
}
}
CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){
uint8_t mailbox = 0;
// check first free mailbox
if(CAN->TSR & (CAN_TSR_TME)){
mailbox = (CAN->TSR & CAN_TSR_CODE) >> 24;
}else{ // no free mailboxes
//SEND("No free mailboxes"); NL();
return CAN_BUSY;
}
#ifdef EBUG
DBG("Send data"); SEND("Len="); printu(len);
SEND(", tagid="); printuhex(target_id);
SEND(", data=");
for(int i = 0; i < len; ++i){
SEND(" "); printuhex(msg[i]);
}
NL();
#endif
CAN_TxMailBox_TypeDef *box = &CAN->sTxMailBox[mailbox];
uint32_t lb = 0, hb = 0;
switch(len){
case 8:
hb |= (uint32_t)msg[7] << 24;
__attribute__((fallthrough));
case 7:
hb |= (uint32_t)msg[6] << 16;
__attribute__((fallthrough));
case 6:
hb |= (uint32_t)msg[5] << 8;
__attribute__((fallthrough));
case 5:
hb |= (uint32_t)msg[4];
__attribute__((fallthrough));
case 4:
lb |= (uint32_t)msg[3] << 24;
__attribute__((fallthrough));
case 3:
lb |= (uint32_t)msg[2] << 16;
__attribute__((fallthrough));
case 2:
lb |= (uint32_t)msg[1] << 8;
__attribute__((fallthrough));
default:
lb |= (uint32_t)msg[0];
}
box->TDLR = lb;
box->TDHR = hb;
box->TDTR = len;
box->TIR = (target_id & 0x7FF) << 21 | CAN_TI0R_TXRQ;
return CAN_OK;
}
static void can_process_fifo(uint8_t fifo_num){
if(fifo_num > 1) return;
CAN_FIFOMailBox_TypeDef *box = &CAN->sFIFOMailBox[fifo_num];
volatile uint32_t *RFxR = (fifo_num) ? &CAN->RF1R : &CAN->RF0R;
// read all
while(*RFxR & CAN_RF0R_FMP0){ // amount of messages pending
// CAN_RDTxR: (16-31) - timestamp, (8-15) - filter match index, (0-3) - data length
CAN_message msg;
uint8_t *dat = msg.data;
{ // set all data to 0
uint32_t *dptr = (uint32_t*)msg.data;
dptr[0] = dptr[1] = 0;
}
uint8_t len = box->RDTR & 0x0f;
msg.length = len;
msg.ID = box->RIR >> 21;
//msg.filterNo = (box->RDTR >> 8) & 0xff;
//msg.fifoNum = fifo_num;
if(len){ // message can be without data
uint32_t hb = box->RDHR, lb = box->RDLR;
switch(len){
case 8:
dat[7] = hb>>24;
__attribute__((fallthrough));
case 7:
dat[6] = (hb>>16) & 0xff;
__attribute__((fallthrough));
case 6:
dat[5] = (hb>>8) & 0xff;
__attribute__((fallthrough));
case 5:
dat[4] = hb & 0xff;
__attribute__((fallthrough));
case 4:
dat[3] = lb>>24;
__attribute__((fallthrough));
case 3:
dat[2] = (lb>>16) & 0xff;
__attribute__((fallthrough));
case 2:
dat[1] = (lb>>8) & 0xff;
__attribute__((fallthrough));
case 1:
dat[0] = lb & 0xff;
}
}
if(msg.ID == the_conf.CANID) parseCANcommand(&msg);
if(CAN_messagebuf_push(&msg)) return; // error: buffer is full, try later
*RFxR |= CAN_RF0R_RFOM0; // release fifo for access to next message
}
//if(*RFxR & CAN_RF0R_FULL0) *RFxR &= ~CAN_RF0R_FULL0;
*RFxR = 0; // clear FOVR & FULL
}
static void formerr(CAN_message *msg, errcodes err){
if(msg->length < 4) msg->length = 4;
msg->data[3] = (uint8_t)err;
}
/**
* @brief parseCANcommand - parser
* @param msg - incoming message @ my CANID
* FORMAT:
* 0 1 2 3 4 5 6 7
* [CMD][PAR][errcode][VALUE]
* CMD - uint16_t, PAR - uint8_t, errcode - one of CAN_errcodes, VALUE - int32_t
* `errcode` of incoming message doesn't matter
*/
TRUE_INLINE void parseCANcommand(CAN_message *msg){
int N = 1000;
// we don't check msg here as it cannot be NULL
#ifdef EBUG
DBG("Get data");
for(int i = 0; i < msg->length; ++i){
printuhex(msg->data[i]); bufputchar(' ');
}
newline();
#endif
if(msg->length == 0) goto sendmessage; // PING
uint16_t Index = *(uint16_t*)msg->data;
#ifdef EBUG
SEND("Index = "); printu(Index); newline();
#endif
if(Index >= CMD_AMOUNT){
formerr(msg, ERR_BADCMD);
goto sendmessage;
}
msg->data[3] = ERR_OK;
uint8_t par = msg->data[2];
if(par & 0x80){
formerr(msg, ERR_BADPAR);
goto sendmessage;
}
int32_t *val = (int32_t *)(&msg->data[4]);
if(msg->length == 8) par |= 0x80;
else if(msg->length == 2) par = CANMESG_NOPAR; // no parameter
else if(msg->length != 3){ // wrong length
formerr(msg, ERR_WRONGLEN);
goto sendmessage;
}
#ifdef EBUG
SEND("Run command\n");
#endif
errcodes ec = cmdlist[Index](par, val);
if(ec != ERR_OK){
formerr(msg, ec);
}else{
msg->length = 8;
}
sendmessage:
while(CAN_BUSY == can_send(msg->data, msg->length, the_conf.CANID))
if(--N == 0) break;
}
void cec_can_isr(){
if(CAN->RF0R & CAN_RF0R_FOVR0){ // FIFO overrun
CAN->RF0R &= ~CAN_RF0R_FOVR0;
can_status = CAN_FIFO_OVERRUN;
}
if(CAN->RF1R & CAN_RF1R_FOVR1){
CAN->RF1R &= ~CAN_RF1R_FOVR1;
can_status = CAN_FIFO_OVERRUN;
}
if(CAN->MSR & CAN_MSR_ERRI){ // Error
CAN->MSR &= ~CAN_MSR_ERRI;
// request abort for problem mailbox
if(CAN->TSR & CAN_TSR_TERR0) CAN->TSR |= CAN_TSR_ABRQ0;
if(CAN->TSR & CAN_TSR_TERR1) CAN->TSR |= CAN_TSR_ABRQ1;
if(CAN->TSR & CAN_TSR_TERR2) CAN->TSR |= CAN_TSR_ABRQ2;
#ifdef EBUG
last_err_code = CAN->ESR;
#endif
}
}
================================================
FILE: F0:F030,F042,F072/3steppersLB/can.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef __CAN_H__
#define __CAN_H__
#include "flash.h"
#include "hardware.h"
// CAN ID mask (11 bits)
#define CANIDMASK (0x7ff)
// amount of filter banks in STM32F0
#define STM32F0FBANKNO (28)
// incoming message buffer size
#define CAN_INMESSAGE_SIZE (8)
// CAN message
typedef struct{
uint8_t data[8]; // up to 8 bytes of data
uint8_t length; // data length
uint16_t ID; // ID of receiver
} CAN_message;
typedef enum{
CAN_STOP,
CAN_READY,
CAN_BUSY,
CAN_OK,
CAN_FIFO_OVERRUN
} CAN_status;
CAN_status CAN_get_status();
void CAN_reinit(uint16_t speed);
void CAN_setup(uint16_t speed);
CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id);
void can_proc();
CAN_message *CAN_messagebuf_pop();
#endif // __CAN_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/commonproto.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "adc.h"
#include "buttons.h"
#include "can.h"
#include "commonproto.h"
#include "flash.h"
#include "hardware.h"
#include "steppers.h"
#ifdef EBUG
#include "strfunct.h"
#endif
#define NOPARCHK() do{uint8_t n = PARBASE(par); if(n != CANMESG_NOPAR) return ERR_BADPAR;}while(0)
#define CHECKN(val, par) do{val = PARBASE(par); \
if(val > MOTORSNO-1) return ERR_BADPAR;}while(0)
/******* All functions from cmdlist[i].function *******/
static errcodes pingparser(uint8_t _U_ par, int32_t _U_ *val){
return ERR_OK; // just echo all input data over CAN (or return OK to USB)
}
static errcodes relayparser(uint8_t par, int32_t *val){
NOPARCHK();
if(ISSETTER(par)){
if(*val) ON(RELAY);
else OFF(RELAY);
}
*val = CHK(RELAY);
return ERR_OK;
}
static errcodes buzzerparser(uint8_t par, int32_t *val){
NOPARCHK();
if(ISSETTER(par)){
if(*val) ON(BUZZER);
else OFF(BUZZER);
}
*val = CHK(BUZZER);
return ERR_OK;
}
static errcodes adcparser(uint8_t par, int32_t *val){
uint8_t n = PARBASE(par);
if(n > NUMBER_OF_ADC_CHANNELS-1) return ERR_BADPAR;
*val = (int32_t) getADCval(n);
return ERR_OK;
}
// NON-STANDARD COMMAND!!!!!!!
// errcode == keystate, value = last time!!!!
static errcodes buttonsparser(uint8_t par, int32_t *val){
uint8_t n = PARBASE(par);
if(n > BTNSNO-1){
*val = CANMESG_NOPAR; // the only chance to understand error
return ERR_BADPAR;
}
return (uint8_t) keystate(n, (uint32_t*)val);
}
// if N > amount of esw, return all (by bytes)
static errcodes eswparser(uint8_t par, int32_t *val){
#if ESWNO > 4
#error "change the code!!!"
#endif
uint8_t n = PARBASE(par);
if(n == CANMESG_NOPAR){ // all
*val = 0;
uint8_t *arr = (uint8_t*)val;
for(int i = 0; i < ESWNO; ++i)
*arr++ = ESW_state(i);
return ERR_OK;
}else if(n > ESWNO - 1) return ERR_BADPAR;
*val = (int32_t)ESW_state(n);
return ERR_OK;
}
static errcodes mcutparser(uint8_t _U_ par, int32_t *val){
NOPARCHK();
*val = getMCUtemp();
return ERR_OK;
}
static errcodes mcuvddparser(uint8_t _U_ par, int32_t *val){
NOPARCHK();
*val = getVdd();
return ERR_OK;
}
static errcodes resetparser(uint8_t _U_ par, int32_t _U_ *val){
NOPARCHK();
NVIC_SystemReset();
return ERR_OK;
}
static errcodes timeparser(uint8_t _U_ par, int32_t *val){
NOPARCHK();
*val = Tms;
return ERR_OK;
}
static errcodes pwmparser(uint8_t par, int32_t *val){
NOPARCHK();
#if PWMCHMAX != 0
#error "change the code!!!"
#endif
if(ISSETTER(par)){
if(*val < 0 || *val > PWMMAX) return ERR_BADVAL;
PWMset((uint32_t)*val);
}
*val = (int32_t) PWMget();
return ERR_OK;
}
TRUE_INLINE void setextpar(uint8_t val, uint8_t i){
switch(val){
case 0:
EXT_CLEAR(i);
break;
case 1:
EXT_SET(i);
break;
default:
EXT_TOGGLE(i);
}
}
// if `par` is absent, set/get all values in subsequent bytes
// 1 - external signal high, 0 - low
// commands: 0 - reset, 1 - set, !!!!other - toggle!!!!
static errcodes extparser(uint8_t par, int32_t *val){
#if EXTNO > 4
#error "change the code!!!"
#endif
uint8_t n = PARBASE(par);
#ifdef EBUG
SEND("par="); printu(par);
SEND(", n="); bufputchar('0'+n); newline();
#endif
if(n == CANMESG_NOPAR){ // all
#ifdef EBUG
SEND("ALL\n");
#endif
uint8_t *arr = (uint8_t*)val;
if(ISSETTER(par)){
for(int i = 0; i < EXTNO; ++i)
setextpar(arr[i], i);
}
for(int i = 0; i < EXTNO; ++i){
arr[i] = EXT_CHK(i);
}
return ERR_OK;
}else if(n > EXTNO-1) return ERR_BADPAR;
if(ISSETTER(par))
setextpar((uint8_t)*val, n);
*val = (int32_t) EXT_CHK(n);
return ERR_OK;
}
/******************* START of config parsers *******************/
static errcodes ustepsparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
#if MICROSTEPSMAX > 512
#error "Change the code anywhere!"
#endif
uint16_t m = (uint16_t)*val;
if(m < 1 || m > MICROSTEPSMAX) return ERR_BADVAL;
// find most significant bit
if(m != 1<<MSB(m)) return ERR_BADVAL;
if(the_conf.maxspd[n] * m > PCLK/(MOTORTIM_PSC+1)/(MOTORTIM_ARRMIN+1)) return ERR_BADVAL;
the_conf.microsteps[n] = m;
update_stepper(n);
}
*val = the_conf.microsteps[n];
return ERR_OK;
}
static errcodes encstepsminparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val < 1 || *val > MAXENCTICKSPERSTEP - 1) return ERR_BADVAL;
the_conf.encperstepmin[n] = *val;
}
*val = the_conf.encperstepmin[n];
return ERR_OK;
}
static errcodes encstepsmaxparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val < 1 || *val > MAXENCTICKSPERSTEP) return ERR_BADVAL;
the_conf.encperstepmax[n] = *val;
}
*val = the_conf.encperstepmax[n];
return ERR_OK;
}
static errcodes accparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val/the_conf.microsteps[n] > ACCELMAXSTEPS || *val < 1) return ERR_BADVAL;
the_conf.accel[n] = *val;
update_stepper(n);
}
*val = the_conf.accel[n];
return ERR_OK;
}
// calculate ARR value for given speed, return nearest possible speed
static uint16_t getSPD(uint8_t n, int32_t speed){
uint32_t ARR = PCLK/(MOTORTIM_PSC+1) / the_conf.microsteps[n] / speed - 1;
if(ARR < MOTORTIM_ARRMIN) ARR = MOTORTIM_ARRMIN;
else if(ARR > 0xffff) ARR = 0xffff;
speed = PCLK/(MOTORTIM_PSC+1) / the_conf.microsteps[n] / (ARR + 1);
if(speed > 0xffff) speed = 0xffff;
return (uint16_t)speed;
}
static errcodes maxspdparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val <= the_conf.minspd[n]) return ERR_BADVAL;
the_conf.maxspd[n] = getSPD(n, *val);
update_stepper(n);
}
*val = the_conf.maxspd[n];
return ERR_OK;
}
static errcodes minspdparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val >= the_conf.maxspd[n]) return ERR_BADVAL;
the_conf.minspd[n] = getSPD(n, *val);
update_stepper(n);
}
*val = the_conf.minspd[n];
return ERR_OK;
}
static errcodes spdlimparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
*val = getSPD(n, 0xffff);
return ERR_OK;
}
static errcodes maxstepsparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val < 1) return ERR_BADVAL;
the_conf.maxsteps[n] = *val;
}
*val = the_conf.maxsteps[n];
return ERR_OK;
}
static errcodes encrevparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val < 1 || *val > MAXENCREV) return ERR_BADVAL;
the_conf.encrev[n] = *val;
update_stepper(n);
}
*val = the_conf.encrev[n];
return ERR_OK;
}
static errcodes motflagsparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
the_conf.motflags[n] = *((motflags_t*)val);
update_stepper(n);
}
*(motflags_t*)val = the_conf.motflags[n];
return ERR_OK;
}
// setter of GLOBAL reaction, getter of LOCAL!
static errcodes eswreactparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)){
if(*val < 0 || *val > ESW_AMOUNT-1) return ERR_BADVAL;
the_conf.ESW_reaction[n] = *val;
update_stepper(n);
}
// *val = the_conf.ESW_reaction[n];
*val = geteswreact(n);
return ERR_OK;
}
static errcodes saveconfparser(uint8_t _U_ par, int32_t _U_ *val){
NOPARCHK();
if(store_userconf()) return ERR_CANTRUN;
return ERR_OK;
}
/******************* END of config parsers *******************/
/******************* START of motors' parsers *******************/
static errcodes reinitmparser(uint8_t _U_ par, int32_t _U_ *val){
NOPARCHK();
init_steppers();
return ERR_OK;
}
static errcodes emstopparser(uint8_t par, int32_t _U_ *val){
uint8_t n; CHECKN(n, par);
emstopmotor(n);
return ERR_OK;
}
static errcodes emstopallparser(uint8_t _U_ par, int32_t _U_ *val){
NOPARCHK();
for(int i = 0; i < MOTORSNO; ++i)
emstopmotor(i);
return ERR_OK;
}
static errcodes stopparser(uint8_t par, int32_t _U_ *val){
uint8_t n; CHECKN(n, par);
stopmotor(n);
return ERR_OK;
}
static errcodes curposparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)) return motor_absmove(n, *val);
return getpos(n, val);
}
static errcodes relstepsparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)) return motor_relmove(n, *val);
return getremainsteps(n, val);
}
static errcodes relslowparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
if(ISSETTER(par)) return motor_relslow(n, *val);
return getremainsteps(n, val);
}
static errcodes motstateparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
*val = getmotstate(n);
return ERR_OK;
}
static errcodes encposparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
errcodes ret = ERR_OK;
if(ISSETTER(par)){
if(!setencpos(n, *val)) ret = ERR_CANTRUN;
}
*val = encoder_position(n);
return ret;
}
static errcodes setposparser(uint8_t par, int32_t *val){
uint8_t n; CHECKN(n, par);
errcodes ret = ERR_OK;
if(ISSETTER(par)){
ret = setmotpos(n, *val);
}
getpos(n, val);
return ret;
}
static errcodes gotozeroparser(uint8_t par, _U_ int32_t *val){
uint8_t n; CHECKN(n, par);
return motor_goto0(n);
}
/******************* END of motors' parsers *******************/
/*
static errcodes parser(uint8_t _U_ par, int32_t _U_ *val){
return ERR_OK;
}
*/
const fpointer cmdlist[CMD_AMOUNT] = {
// different commands
[CMD_PING] = pingparser,
[CMD_RELAY] = relayparser,
[CMD_BUZZER] = buzzerparser,
[CMD_ADC] = adcparser,
[CMD_BUTTONS] = buttonsparser,
[CMD_ESWSTATE] = eswparser,
[CMD_MCUT] = mcutparser,
[CMD_MCUVDD] = mcuvddparser,
[CMD_RESET] = resetparser,
[CMD_TIMEFROMSTART] = timeparser,
[CMD_PWM] = pwmparser,
[CMD_EXT] = extparser,
// configuration
[CMD_SAVECONF] = saveconfparser,
[CMD_ENCSTEPMIN] = encstepsminparser,
[CMD_ENCSTEPMAX] = encstepsmaxparser,
[CMD_MICROSTEPS] = ustepsparser,
[CMD_ACCEL] = accparser,
[CMD_MAXSPEED] = maxspdparser,
[CMD_MINSPEED] = minspdparser,
[CMD_SPEEDLIMIT] = spdlimparser,
[CMD_MAXSTEPS] = maxstepsparser,
[CMD_ENCREV] = encrevparser,
[CMD_MOTFLAGS] = motflagsparser,
[CMD_ESWREACT] = eswreactparser,
// motor's commands
[CMD_ABSPOS] = curposparser,
[CMD_RELPOS] = relstepsparser,
[CMD_RELSLOW] = relslowparser,
[CMD_EMERGSTOP] = emstopparser,
[CMD_EMERGSTOPALL] = emstopallparser,
[CMD_STOP] = stopparser,
[CMD_REINITMOTORS] = reinitmparser,
[CMD_MOTORSTATE] = motstateparser,
[CMD_ENCPOS] = encposparser,
[CMD_SETPOS] = setposparser,
[CMD_GOTOZERO] = gotozeroparser,
};
================================================
FILE: F0:F030,F042,F072/3steppersLB/commonproto.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef COMMONPROTO_H__
#define COMMONPROTO_H__
#include <stm32f0.h>
#include "can.h"
#ifndef _U_
#define _U_ __attribute__((unused))
#endif
// message have no parameter
#define CANMESG_NOPAR (127)
// message is setter (have value)
#define ISSETTER(x) ((x & 0x80) ? 1 : 0)
// base value of parameter (even if it is a setter)
#define PARBASE(x) (x & 0x7f)
// error codes for answer message
typedef enum{
ERR_OK, // 0 - all OK
ERR_BADPAR, // 1 - parameter's value is wrong
ERR_BADVAL, // 2 - wrong parameter's value
ERR_WRONGLEN, // 3 - wrong message length
ERR_BADCMD, // 4 - unknown command
ERR_CANTRUN, // 5 - can't run given command due to bad parameters or other
} errcodes;
// pointer to function for command execution, both should be non-NULL for common cases
// if(par &0x80) it is setter, if not - getter
// if par == 0x127 it means absense of parameter!!!
// @return CANERR_OK (0) if OK or error code
typedef errcodes (*fpointer)(uint8_t par, int32_t *val);
enum{
CMD_NONE // omit zero
,CMD_PING // ping device
,CMD_RELAY // relay on/off
,CMD_BUZZER // buzzer on/off
,CMD_ADC // ADC ch#
,CMD_BUTTONS // buttons
,CMD_ESWSTATE // end-switches state
,CMD_MCUT // MCU temperature
,CMD_MCUVDD // MCU Vdd
,CMD_RESET // software reset
,CMD_TIMEFROMSTART // get time from start
,CMD_PWM // PWM value
,CMD_EXT // value on EXTx outputs
,CMD_SAVECONF // save configuration
,CMD_ENCSTEPMIN // min ticks of encoder per one step
,CMD_ENCSTEPMAX // max ticks of encoder per one step
,CMD_MICROSTEPS // get/set microsteps
,CMD_ACCEL // set/get acceleration/deceleration
,CMD_MAXSPEED // set/get maximal speed
,CMD_MINSPEED // set/get minimal speed
,CMD_SPEEDLIMIT // get limit of speed for current microsteps settings
,CMD_MAXSTEPS // max steps (-max..+max)
,CMD_ENCREV // encoder's pulses per revolution
,CMD_MOTFLAGS // motor flags
,CMD_ESWREACT // ESW reaction flags
,CMD_REINITMOTORS // re-init motors after configuration changing
,CMD_ABSPOS // current position (set/get)
,CMD_RELPOS // set relative steps or get steps left
,CMD_RELSLOW // change relative position at lowest speed
,CMD_EMERGSTOP // stop moving NOW
,CMD_STOP // smooth motor stop
,CMD_EMERGSTOPALL // emergency stop for all motors
,CMD_GOTOZERO // go to zero's ESW
,CMD_MOTORSTATE // motor state
,CMD_ENCPOS // position of encoder (independing on settings)
,CMD_SETPOS // set motor position
//,CMD_STOPDECEL
//,CMD_FINDZERO
// should be the last:
,CMD_AMOUNT // amount of common commands
};
extern const fpointer cmdlist[CMD_AMOUNT];
#endif // COMMONPROTO_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/custom_buttons.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// custom standalone buttons reaction
#include <stm32f0.h>
#include "buttons.h"
#include "custom_buttons.h"
#include "hardware.h"
#include "steppers.h"
#include "strfunct.h"
/**
* @brief custom_buttons_process - check four buttons and if find hold:
* 0..2 - move motor i by +maxsteps while hold
* 3 (or pressed) - switch moving direction to -
* if pressed:
* 0..2 - stop motor i (if moving) or move by +10 steps
*/
void custom_buttons_process(){
static uint32_t lastT = 0;
static keyevent lastevent[3] = {EVT_NONE, EVT_NONE, EVT_NONE};
if(lastUnsleep == lastT) return; // no buttons activity
lastT = lastUnsleep;
int32_t dir = 1;
if(keyevt(3) == EVT_HOLD || keyevt(3) == EVT_PRESS) dir = -1; // button 3: change direction to `-`
for(int i = 0; i < 3; ++i){
keyevent e = keyevt(i);
if(e == EVT_RELEASE){ // move by 10 steps or emergency stop @ release after shot press
if(lastevent[i] == EVT_PRESS){
if(getmotstate(i) == STP_RELAX) motor_relslow(i, dir*10);
else emstopmotor(i);
}else stopmotor(i); // stop motor when key was released after long hold
}else if(e == EVT_HOLD){ // move by `maxsteps` steps
if(getmotstate(i) == STP_RELAX){
if(ERR_OK != motor_absmove(i, dir*the_conf.maxsteps[i])){
// here we can do BEEP
#ifdef EBUG
SEND("can't move\n");
#endif
}
}
}
lastevent[i] = e;
}
}
/*
* check buttons, on long press of button:
* 1 - switch relay
* 2 - switch buzzer
* 3 - work with PWM out 0 (when btn3 pressed, btn1 increased & btn2 decreased PWM width)
* press once btn2/3 to change PWM @1, hold to change @25 (repeat as many times as need)
*
void custom_buttons_process(){
static uint32_t lastT = 0;
static uint8_t pwmval = 127;
static uint8_t trig = 0; // == 1 if given btn3 was off
if(lastUnsleep == lastT) return; // no buttons activity
lastT = lastUnsleep;
if(keyevt(3) == EVT_HOLD){ // PWM
if(keyevt(2) == EVT_HOLD){ // decrease PWM by 25
if(pwmval > 25) pwmval -= 25;
else pwmval = 0;
}else if(keyevt(2) == EVT_PRESS){ // decrease PWM by 1
if(pwmval > 0) --pwmval;
}else if(keyevt(1) == EVT_HOLD){ // increase PWM by 25
if(pwmval < 230) pwmval += 25;
else pwmval = 255;
}else if(keyevt(1) == EVT_PRESS){
if(pwmval < 254) ++pwmval;
}
if(trig == 0){ // first hold after release
if(TIM1->CCR1) TIM1->CCR1 = 0; // turn off if was ON
else{
TIM1->CCR1 = pwmval;
trig = 1;
}
}else TIM1->CCR1 = pwmval;
return;
}else trig = 0;
if(keyevt(1) == EVT_HOLD){ // relay
TGL(RELAY);
}
if(keyevt(2) == EVT_HOLD){ // buzzer
TGL(BUZZER);
}
}
*/
================================================
FILE: F0:F030,F042,F072/3steppersLB/custom_buttons.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef CUSTOM_BUTTONS_H__
#define CUSTOM_BUTTONS_H__
void custom_buttons_process();
#endif // CUSTOM_BUTTONS_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/flash.c
================================================
/*
* geany_encoding=koi8-r
* flash.c
*
* Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*/
#include <stm32f0.h>
#include <string.h> // memcpy
#include "flash.h"
#include "steppers.h"
#include "strfunct.h"
extern const uint32_t __varsstart, _BLOCKSIZE;
static const uint32_t blocksize = (uint32_t)&_BLOCKSIZE;
// max amount of Config records stored (will be recalculate in flashstorage_init()
static uint32_t maxCnum = 1024 / sizeof(user_conf); // can't use blocksize here
#define DEFMF {.haveencoder = 1, .donthold = 1, .eswinv = 1, .keeppos = 1}
#define USERCONF_INITIALIZER { \
.userconf_sz = sizeof(user_conf) \
,.CANspeed = 100 \
,.CANID = 0xaa \
,.microsteps = {32, 32, 32} \
,.accel = {500, 500, 500} \
,.maxspd = {2000, 2000, 2000} \
,.minspd = {20, 20, 20} \
,.maxsteps = {500000, 500000, 500000} \
,.encrev = {4000,4000,4000} \
,.encperstepmin = {17,17,17} \
,.encperstepmax = {23,23,23} \
,.motflags = {DEFMF,DEFMF,DEFMF} \
,.ESW_reaction = {ESW_IGNORE, ESW_IGNORE, ESW_IGNORE} \
}
static int erase_flash(const void*, const void*);
static int write2flash(const void*, const void*, uint32_t);
// don't write `static` here, or get error:
// 'memcpy' forming offset 8 is out of the bounds [0, 4] of object '__varsstart' with type 'uint32_t'
const user_conf *Flash_Data = (const user_conf *)(&__varsstart);
user_conf the_conf = USERCONF_INITIALIZER;
static int currentconfidx = -1; // index of current configuration
/**
* @brief binarySearch - binary search in flash for last non-empty cell
* any struct searched should have its sizeof() @ the first field!!!
* @param l - left index
* @param r - right index (should be @1 less than last index!)
* @param start - starting address
* @param stor_size - size of structure to search
* @return index of non-empty cell or -1
*/
static int binarySearch(int r, const uint8_t *start, int stor_size){
int l = 0;
while(r >= l){
int mid = l + (r - l) / 2;
const uint8_t *s = start + mid * stor_size;
if(*((const uint16_t*)s) == stor_size){
if(*((const uint16_t*)(s + stor_size)) == 0xffff){ // next is free
return mid;
}else{ // element is to the right
l = mid + 1;
}
}else{ // element is to the left
r = mid - 1;
}
}
return -1; // not found
}
/**
* @brief flashstorage_init - initialization of user conf storage
* run in once @ start
*/
void flashstorage_init(){
if(FLASH_SIZE > 0 && FLASH_SIZE < 20000){
uint32_t flsz = FLASH_SIZE * blocksize; // size in bytes
flsz -= (uint32_t)(&__varsstart) - FLASH_BASE;
maxCnum = flsz / sizeof(user_conf);
}
// -1 if there's no data at all & flash is clear; maxnum-1 if flash is full
currentconfidx = binarySearch((int)maxCnum-2, (const uint8_t*)Flash_Data, sizeof(user_conf));
if(currentconfidx > -1){
memcpy(&the_conf, &Flash_Data[currentconfidx], sizeof(user_conf));
}
}
// store new configuration
// @return 0 if all OK
int store_userconf(){
// maxnum - 3 means that there always should be at least one empty record after last data
// for binarySearch() checking that there's nothing more after it!
if(currentconfidx > (int)maxCnum - 3){ // there's no more place
currentconfidx = 0;
if(erase_flash(Flash_Data, NULL)) return 1;
}else ++currentconfidx; // take next data position (0 - within first run after firmware flashing)
return write2flash((const void*)&Flash_Data[currentconfidx], &the_conf, sizeof(the_conf));
}
static int write2flash(const void *start, const void *wrdata, uint32_t stor_size){
int ret = 0;
if (FLASH->CR & FLASH_CR_LOCK){ // unloch flash
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}
while (FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR; // clear all flags
FLASH->CR |= FLASH_CR_PG;
const uint16_t *data = (const uint16_t*) wrdata;
volatile uint16_t *address = (volatile uint16_t*) start;
uint32_t i, count = (stor_size + 1) / 2;
for (i = 0; i < count; ++i){
IWDG->KR = IWDG_REFRESH;
*(volatile uint16_t*)(address + i) = data[i];
while (FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
if(FLASH->SR & FLASH_SR_PGERR){
SEND("Prog err\n");
ret = 1; // program error - meet not 0xffff
break;
}
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR;
}
FLASH->CR &= ~(FLASH_CR_PG);
return ret;
}
/**
* @brief erase_flash - erase N pages of flash memory
* @param start - first address
* @param end - last address (or NULL if need to erase all flash remaining)
* @return 0 if succeed
*/
static int erase_flash(const void *start, const void *end){
int ret = 0;
uint32_t nblocks = 1, flsz = 0;
if(!end){ // erase all remaining
if(FLASH_SIZE > 0 && FLASH_SIZE < 20000){
flsz = FLASH_SIZE * blocksize; // size in bytes
flsz -= (uint32_t)start - FLASH_BASE;
}
}else{ // erase a part
flsz = (uint32_t)end - (uint32_t)start;
}
nblocks = flsz / blocksize;
if(nblocks == 0 || nblocks >= FLASH_SIZE) return 1;
if((FLASH->CR & FLASH_CR_LOCK) != 0){
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
}
while(FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP | FLASH_SR_PGERR | FLASH_SR_WRPRTERR;
FLASH->CR |= FLASH_CR_PER;
for(uint32_t i = 0; i < nblocks; ++i){
SEND("Erase block #"); printu(i); newline();
FLASH->AR = (uint32_t)Flash_Data + i * blocksize;
FLASH->CR |= FLASH_CR_STRT;
while(FLASH->SR & FLASH_SR_BSY) IWDG->KR = IWDG_REFRESH;
FLASH->SR = FLASH_SR_EOP;
if(FLASH->SR & FLASH_SR_WRPRTERR){
ret = 1;
FLASH->SR = FLASH_SR_WRPRTERR;
break;
}
}
FLASH->CR &= ~FLASH_CR_PER;
return ret;
}
void dump_userconf(_U_ char *txt){
#ifdef EBUG
SEND("flashsize="); printu(FLASH_SIZE); bufputchar('*');
printu(blocksize); bufputchar('='); printu(FLASH_SIZE*blocksize);
newline();
#endif
SEND("userconf_addr="); printuhex((uint32_t)Flash_Data);
SEND("\nuserconf_idx="); printi(currentconfidx);
SEND("\nuserconf_sz="); printu(the_conf.userconf_sz);
SEND("\ncanspeed="); printu(the_conf.CANspeed);
SEND("\ncanid="); printu(the_conf.CANID);
// motors' data
for(int i = 0; i < MOTORSNO; ++i){
char cur = '0' + i;
#define PROPNAME(nm) do{newline(); SEND(nm); bufputchar(cur); bufputchar('=');}while(0)
PROPNAME("microsteps");
printu(the_conf.microsteps[i]);
PROPNAME("accel");
printu(the_conf.accel[i]);
PROPNAME("maxspeed");
printu(the_conf.maxspd[i]);
PROPNAME("minspeed");
printu(the_conf.minspd[i]);
PROPNAME("maxsteps");
printu(the_conf.maxsteps[i]);
PROPNAME("encperrev");
printu(the_conf.encrev[i]);
PROPNAME("encperstepmin");
printu(the_conf.encperstepmin[i]);
PROPNAME("encperstepmax");
printu(the_conf.encperstepmax[i]);
PROPNAME("motflags");
printuhex(*((uint8_t*)&the_conf.motflags[i]));
PROPNAME("eswreaction");
printu(the_conf.ESW_reaction[i]);
#undef PROPNAME
}
NL();
}
int erase_storage(){
return erase_flash(Flash_Data, NULL);
}
================================================
FILE: F0:F030,F042,F072/3steppersLB/flash.h
================================================
/*
* flash.h
*
* Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
*/
#pragma once
#ifndef __FLASH_H__
#define __FLASH_H__
#include "hardware.h"
#ifndef _U_
#define _U_ __attribute__((unused))
#endif
// limiting values
#define MICROSTEPSMAX (512)
// (STEPS per second^2)
#define ACCELMAXSTEPS (1000)
// max encoder steps per rev
#define MAXENCREV (100000)
// register with flash size (in blocks)
#ifndef FLASH_SIZE_REG
#define FLASH_SIZE_REG ((uint32_t)0x1FFFF7CC)
#endif
#define FLASH_SIZE *((uint16_t*)FLASH_SIZE_REG)
// motor flags
typedef struct{
uint8_t reverse : 1; // bit0 - reversing motor rotation
uint8_t encreverse : 1; // bit1 - reversing encoder rotation TODO: configure encoder's timer to downcounting
uint8_t haveencoder : 1; // bit2 - have encoder
uint8_t donthold : 1; // bit3 - clear power @ stop (don't hold motor when stopped)
uint8_t eswinv : 1; // bit4 - inverse end-switches
uint8_t keeppos : 1; // bit5 - keep current position (as servo motor)
} motflags_t;
/*
* struct to save user configurations
*/
typedef struct __attribute__((packed, aligned(4))){
uint16_t userconf_sz; // "magick number"
uint16_t CANspeed; // default CAN speed
uint16_t CANID; // identifier
uint16_t microsteps[MOTORSNO]; // microsteps amount per step
uint16_t accel[MOTORSNO]; // acceleration/deceleration (steps/s^2)
uint16_t maxspd[MOTORSNO]; // max motor speed (steps per second)
uint16_t minspd[MOTORSNO]; // min motor speed (steps per second)
uint32_t maxsteps[MOTORSNO]; // maximal amount of steps
uint16_t encrev[MOTORSNO]; // encoders' counts per revolution
uint16_t encperstepmin[MOTORSNO]; // min amount of encoder ticks per one step
uint16_t encperstepmax[MOTORSNO]; // max amount of encoder ticks per one step
motflags_t motflags[MOTORSNO]; // motor's flags
uint8_t ESW_reaction[MOTORSNO]; // end-switches reaction (esw_react)
} user_conf;
extern user_conf the_conf; // global user config (read from FLASH to RAM)
// data from ld-file: start address of storage
void flashstorage_init();
int store_userconf();
void dump_userconf(_U_ char *txt);
int erase_storage();
#endif // __FLASH_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/hardware.c
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "hardware.h"
#include "can.h"
#include "steppers.h"
#include "strfunct.h"
// Buttons: PA10, PA13, PA14, PA15, pullup (0 active)
volatile GPIO_TypeDef *BTNports[BTNSNO] = {GPIOA, GPIOA, GPIOA, GPIOA};
const uint32_t BTNpins[BTNSNO] = {1<<10, 1<<13, 1<<14, 1<<15};
// Limit switches: PC13, PC14, PC15, pullup (0 active)
volatile GPIO_TypeDef *ESWports[ESWNO] = {GPIOC, GPIOC, GPIOC};
const uint32_t ESWpins[ESWNO] = {1<<13, 1<<14, 1<<15};
// external GPIO
volatile GPIO_TypeDef *EXTports[EXTNO] = {GPIOB, GPIOB, GPIOB};
const uint32_t EXTpins[EXTNO] = {1<<13, 1<<14, 1<<15};
// motors: DIR/EN
volatile GPIO_TypeDef *ENports[MOTORSNO] = {GPIOB, GPIOB, GPIOB};
const uint32_t ENpins[MOTORSNO] = {1<<0, 1<<2, 1<<11};
volatile GPIO_TypeDef *DIRports[MOTORSNO] = {GPIOB, GPIOB, GPIOB};
const uint32_t DIRpins[MOTORSNO] = {1<<1, 1<<10, 1<<12};
// timers for motors
volatile TIM_TypeDef *mottimers[MOTORSNO] = {TIM15, TIM14, TIM16};
// timers for encoders
volatile TIM_TypeDef *enctimers[MOTORSNO] = {TIM1, TIM2, TIM3};
void gpio_setup(void){
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOFEN;
GPIOA->MODER = GPIO_MODER_MODER0_AF | GPIO_MODER_MODER1_AF | GPIO_MODER_MODER2_AF | GPIO_MODER_MODER3_AI |
GPIO_MODER_MODER4_AF | GPIO_MODER_MODER5_AI | GPIO_MODER_MODER6_AF | GPIO_MODER_MODER7_AF |
GPIO_MODER_MODER8_AF | GPIO_MODER_MODER9_AF;
GPIOA->PUPDR = GPIO_PUPDR10_PU | GPIO_PUPDR13_PU | GPIO_PUPDR14_PU | GPIO_PUPDR15_PU;
GPIOA->AFR[0] = (2 << (0*4)) | (2 << (1*4)) | (0 << (2*4)) | (4 << (4*4)) | (5 << (6*4)) | (5 << (7*4));
GPIOA->AFR[1] = (2 << (0*4)) | (2 << (1*4));
pin_set(GPIOB, (1<<0) | (1<<2) | (1<<11)); // turn off motors @ start
GPIOB->MODER = GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O | GPIO_MODER_MODER2_O | GPIO_MODER_MODER3_O |
GPIO_MODER_MODER4_AF | GPIO_MODER_MODER5_AF | GPIO_MODER_MODER6_AF | GPIO_MODER_MODER7_AF |
GPIO_MODER_MODER10_O | GPIO_MODER_MODER11_O | GPIO_MODER_MODER12_O | GPIO_MODER_MODER13_O |
GPIO_MODER_MODER14_O | GPIO_MODER_MODER15_O ;
GPIOB->AFR[0] = (1 << (4*4)) | (1 << (5*4)) | (1 << (6*4)) | (1 << (7*4));
GPIOC->PUPDR = GPIO_PUPDR13_PU | GPIO_PUPDR14_PU | GPIO_PUPDR15_PU;
GPIOF->MODER = GPIO_MODER_MODER0_O;
}
void iwdg_setup(){
uint32_t tmout = 16000000;
/* Enable the peripheral clock RTC */
/* (1) Enable the LSI (40kHz) */
/* (2) Wait while it is not ready */
RCC->CSR |= RCC_CSR_LSION; /* (1) */
while((RCC->CSR & RCC_CSR_LSIRDY) != RCC_CSR_LSIRDY){if(--tmout == 0) break;} /* (2) */
/* Configure IWDG */
/* (1) Activate IWDG (not needed if done in option bytes) */
/* (2) Enable write access to IWDG registers */
/* (3) Set prescaler by 64 (1.6ms for each tick) */
/* (4) Set reload value to have a rollover each 2s */
/* (5) Check if flags are reset */
/* (6) Refresh counter */
IWDG->KR = IWDG_START; /* (1) */
IWDG->KR = IWDG_WRITE_ACCESS; /* (2) */
IWDG->PR = IWDG_PR_PR_1; /* (3) */
IWDG->RLR = 1250; /* (4) */
tmout = 16000000;
while(IWDG->SR){if(--tmout == 0) break;} /* (5) */
IWDG->KR = IWDG_REFRESH; /* (6) */
}
static IRQn_Type motirqs[MOTORSNO] = {TIM15_IRQn, TIM14_IRQn, TIM16_IRQn};
// motor's PWM
static void setup_mpwm(int i){
volatile TIM_TypeDef *TIM = mottimers[i];
TIM->CR1 = TIM_CR1_ARPE; // buffered ARR
TIM->PSC = MOTORTIM_PSC; // 16MHz
// PWM mode 1 (active -> inactive)
TIM->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
#if MOTORTIM_ARRMIN < 5
#error "change the code!"
#endif
TIM->CCR1 = MOTORTIM_ARRMIN - 3; // ~10us for pulse duration
TIM->ARR = 0xffff;
// TIM->EGR = TIM_EGR_UG; // generate update to refresh ARR
TIM->BDTR |= TIM_BDTR_MOE; // enable main output
TIM->CCER = TIM_CCER_CC1E; // turn it on, active high
TIM->DIER = TIM_DIER_CC1IE; // allow CC interrupt (we should count steps)
NVIC_EnableIRQ(motirqs[i]);
}
static IRQn_Type encirqs[MOTORSNO] = {TIM1_BRK_UP_TRG_COM_IRQn, TIM2_IRQn, TIM3_IRQn};
static void setup_enc(int i){
volatile TIM_TypeDef *TIM = enctimers[i];
/* (1) Configure TI1FP1 on TI1 (CC1S = 01)
configure TI1FP2 on TI2 (CC2S = 01)
filters sampling = fDTS/8, N=6 */
/* (2) Configure TI1FP1 and TI1FP2 non inverted (CC1P = CC2P = 0, reset value) */
/* (3) Configure both inputs are active on both rising and falling edges
(SMS = 011), set external trigger filter to f_DTS/8, N=6 (ETF=1000) */
/* (4) Enable the counter by writing CEN=1 in the TIMx_CR1 register,
set tDTS=4*tCK_INT. */
TIM->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0 | TIM_CCMR1_IC1F_3 | TIM_CCMR1_IC2F_3; /* (1)*/
//TIMx->CCER &= (uint16_t)(~(TIM_CCER_CC21 | TIM_CCER_CC2P); /* (2) */
TIM->SMCR = TIM_SMCR_ETF_3 | TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1; /* (3) */
// enable update interrupt
TIM->DIER = TIM_DIER_UIE;
// generate interrupt each revolution
TIM->ARR = the_conf.encrev[i];
// enable timer
TIM->CR1 = TIM_CR1_CKD_1 | TIM_CR1_CEN; /* (4) */
NVIC_EnableIRQ(encirqs[i]);
}
// timers 14,15,16,17 - PWM@ch1, 1,2,3 - encoders @ ch1/2
void timers_setup(){
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN | RCC_APB1ENR_TIM14EN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN | RCC_APB2ENR_TIM15EN | RCC_APB2ENR_TIM16EN | RCC_APB2ENR_TIM17EN; // enable clocking
// setup PWM @ TIM17 - single PWM channel
// PWM mode 1 (active -> inactive)
TIM17->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
TIM17->PSC = 5; // 8MHz for 31kHz PWM
TIM17->ARR = 254; // ARR for 8-bit PWM
TIM17->CCR1 = 0; // level=0
TIM17->BDTR |= TIM_BDTR_MOE; // enable main output
TIM17->CCER = TIM_CCER_CC1E; // enable PWM output
TIM17->CR1 = TIM_CR1_CEN; // enable timer
for(int i = 0; i < MOTORSNO; ++i)
setup_mpwm(i);
for(int i = 0; i < MOTORSNO; ++i){
if(the_conf.motflags[i].haveencoder){ // motor have the encoder
setup_enc(i);
}
}
}
// pause in milliseconds for some purposes
void pause_ms(uint32_t pause){
uint32_t Tnxt = Tms + pause;
while(Tms < Tnxt) nop();
}
#ifndef STM32F072xB
#warning "Only F072 can jump to bootloader"
#endif
void Jump2Boot(){ // for STM32F072
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFFC800;
// reset systick
SysTick->CTRL = 0;
// reset clocks
RCC->APB1RSTR = RCC_APB1RSTR_CECRST | RCC_APB1RSTR_DACRST | RCC_APB1RSTR_PWRRST | RCC_APB1RSTR_CRSRST |
RCC_APB1RSTR_CANRST | RCC_APB1RSTR_USBRST | RCC_APB1RSTR_I2C2RST | RCC_APB1RSTR_I2C1RST |
RCC_APB1RSTR_USART4RST | RCC_APB1RSTR_USART3RST | RCC_APB1RSTR_USART2RST | RCC_APB1RSTR_SPI2RST |
RCC_APB1RSTR_WWDGRST | RCC_APB1RSTR_TIM14RST | RCC_APB1RSTR_TIM7RST | RCC_APB1RSTR_TIM6RST |
RCC_APB1RSTR_TIM3RST | RCC_APB1RSTR_TIM2RST;
RCC->APB2RSTR = RCC_APB2RSTR_DBGMCURST | RCC_APB2RSTR_TIM17RST | RCC_APB2RSTR_TIM16RST | RCC_APB2RSTR_TIM15RST |
RCC_APB2RSTR_USART1RST | RCC_APB2RSTR_SPI1RST | RCC_APB2RSTR_TIM1RST | RCC_APB2RSTR_ADCRST | RCC_APB2RSTR_SYSCFGRST;
RCC->AHBRSTR = 0;
RCC->APB1RSTR = 0;
RCC->APB2RSTR = 0;
// Enable the SYSCFG peripheral.
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
// remap memory to 0 (only for STM32F0)
SYSCFG->CFGR1 = 0x01; __DSB(); __ISB();
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
// set main stack pointer
__set_MSP(*((uint32_t *)addr));
// jump to bootloader
SysMemBootJump();
}
// calculate MSB position of value `val`
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
static const uint8_t bval[] = {0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3};
uint8_t MSB(uint16_t val){
register uint8_t r = 0;
if(val & 0xff00){r += 8; val >>= 8;}
if(val & 0x00f0){r += 4; val >>= 4;}
return ((uint8_t)r + bval[val]);
}
// state 1 - pressed, 0 - released (pin active is zero)
uint8_t ESW_state(uint8_t x){
uint8_t val = ((ESWports[x]->IDR & ESWpins[x]) ? 0 : 1);
if(the_conf.motflags[x].eswinv) val = !val;
return val;
}
void tim14_isr(){
//TIM14->CR1 &= ~TIM_CR1_CEN;
addmicrostep(1);
TIM14->SR = 0;
}
void tim15_isr(){
//TIM15->CR1 &= ~TIM_CR1_CEN;
addmicrostep(0);
TIM15->SR = 0;
}
void tim16_isr(){
//TIM16->CR1 &= ~TIM_CR1_CEN;
addmicrostep(2);
TIM16->SR = 0;
}
void tim1_brk_up_trg_com_isr(){
encoders_UPD(0);
}
void tim2_isr(){
encoders_UPD(1);
}
void tim3_isr(){
encoders_UPD(2);
}
================================================
FILE: F0:F030,F042,F072/3steppersLB/hardware.h
================================================
/*
* This file is part of the 3steppers project.
* Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
#include <stm32f0.h>
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
// PCLK frequency
#ifndef PCLK
#define PCLK (48000000)
#endif
// motors' timer PSC = PCLK/Tfreq - 1, Tfreq=16MHz
#define MOTORTIM_PSC (2)
// minimal ARR value - 99 for 5000 steps per second @ 32 microsteps/step
#define MOTORTIM_ARRMIN (99)
// default CAN bus speed in kbaud
#define DEFAULT_CAN_SPEED (250)
#define CONCAT(a,b) a ## b
#define STR_HELPER(s) #s
#define STR(s) STR_HELPER(s)
/** Pinout:
---- Motors' encoders ---------------
PA0 Enc2a (motor2 encoder) - TIM2CH1/2 [AF2]
PA1 Enc2b [AF2]
PA8 Enc1a (motor1 encoder) - TIM1CH1/2 [AF2]
PA9 Enc1b [AF2]
PB4 Enc3a (motor3 encoder) - TIM3CH1/2 [AF1]
PB5 Enc3b [AF1]
---- Motors' clocks + PWM -----------
PA2 CLK1 (motor1 clock) - TIM15CH1 [AF0]
PA4 CLK2 (motor2 clock) - TIM14CH1 [AF4]
PA6 CLK3 (motor3 clock) - TIM16CH1 [AF5]
PA7 PWM (opendrain PWM, up to 12V) - TIM17CH1 [AF5]
---- GPIO out (push-pull) -----------
PB0 ~EN1 (motor1 not enable)
PB1 DIR1 (motor1 direction)
PB2 ~EN2 (motor2 not enable)
PB3 Buzzer (external buzzer or other non-inductive opendrain load up to 12V)
PB10 DIR2 (motor2 direction)
PB11 ~EN3 (motor3 not enable)
PB12 DIR3 (motor3 direction)
PB13 Ext0 (3 external outputs: 5V, up to 20mA)
PB14 Ext1
PB15 Ext2
PF0 Relay (10A 250VAC, 10A 30VDC)
---- GPIO in -----------------------
PA10 BTN1 (user button 1) - pullup
PA13 BTN2 (user button 2) - pullup
PA14 BTN3 (user button 3) - pullup
PA15 BTN4 (user button 4) - pullup
PC13 ESW1 (motor1 zero limit switch) - pulldown
PC14 ESW2 (motor2 zero limit switch) - pulldown
PC15 ESW3 (motor3 zero limit switch) - pulldown
---- ADC ----------------------------
PA3 ADC1 (ADC1 in, 0-3.3V) [ADC3]
PA5 ADC2 (ADC2 in, 0-3.3V) [ADC5]
---- USB ----------------------------
PA11 USBDM
PA12 USBDP
---- I2C ----------------------------
PB6 I2C SCL (external I2C bus, have internal pullups of 4.7kOhm to +3.3V) - I2C1 [AF1]
PB7 I2C SDA [AF1]
---- CAN ----------------------------
PB8 CAN Rx (external CAN bus, with local galvanic isolation) [AF4]
PB9 CAN Tx [AF4]
COMMON setup:
PORT FN AFR[1]idx
PA0 AF2
PA1 AF2
PA2 AF0
PA3 AI
PA4 AF4
PA5 AI
PA6 AF5
PA7 AF5
PA8 AF2 0
PA9 AF2 1
PA10 PU
PA11 USB
PA12 USB
PA13 PU
PA14 PU
PA15 PU
PB0 PP
PB1 PP
PB2 PP
PB3 PP
PB4 AF1
PB5 AF1
PB6 AF1
PB7 AF1
PB8 CAN
PB9 CAN
PB10 PP
PB11 PP
PB12 PP
PB13 PP
PB14 PP
PB15 PP
PC13 PD
PC14 PD
PC15 PD
PF0 PP
**/
// buzzer
#define BUZZERport (GPIOB)
#define BUZZERpin (1<<3)
// relay
#define RELAYport (GPIOF)
#define RELAYpin (1<<0)
// ON(RELAY), OFF(BUZZER) etc
#define ON(x) do{pin_set(CONCAT(x, port), CONCAT(x, pin));}while(0)
#define OFF(x) do{pin_clear(CONCAT(x, port), CONCAT(x, pin));}while(0)
#define TGL(x) do{pin_toggle(CONCAT(x, port), CONCAT(x, pin));}while(0)
#define CHK(x) (pin_read(CONCAT(x, port), CONCAT(x, pin)))
// max value of PWM
#define PWMMAX (255)
// max index of PWM channels
#define PWMCHMAX (0)
#define PWMset(val) do{TIM17->CCR1 = val;}while(0)
#define PWMget() (TIM17->CCR1)
// extpins amount
#define EXTNO (3)
extern volatile GPIO_TypeDef *EXTports[EXTNO];
extern const uint32_t EXTpins[EXTNO];
#define EXT_SET(x) do{ pin_set(EXTports[x], EXTpins[x]); }while(0)
#define EXT_CLEAR(x) do{ pin_clear(EXTports[x], EXTpins[x]); }while(0)
#define EXT_TOGGLE(x) do{ pin_toggle(EXTports[x], EXTpins[x]); }while(0)
#define EXT_CHK(x) (pin_read(EXTports[x], EXTpins[x]))
// Buttons amount
#define BTNSNO (4)
// Buttons ports & pins
extern volatile GPIO_TypeDef *BTNports[BTNSNO];
extern const uint32_t BTNpins[BTNSNO];
// state 1 - pressed, 0 - released (pin active is zero)
#define BTN_state(x) ((BTNports[x]->IDR & BTNpins[x]) ? 0 : 1)
// Limit switches
#define ESWNO (3)
// ESW ports & pins
extern volatile GPIO_TypeDef *ESWports[ESWNO];
extern const uint32_t ESWpins[ESWNO];
// motors
#define MOTORSNO (3)
extern volatile GPIO_TypeDef *ENports[MOTORSNO];
extern const uint32_t ENpins[MOTORSNO];
#define MOTOR_EN(x) do{ pin_clear(ENports[x], ENpins[x]); }while(0)
#define MOTOR_DIS(x) do{ pin_set(ENports[x], ENpins[x]); }while(0)
extern volatile GPIO_TypeDef *DIRports[MOTORSNO];
extern const uint32_t DIRpins[MOTORSNO];
#define MOTOR_CW(x) do{ pin_set(DIRports[x], DIRpins[x]); }while(0)
#define MOTOR_CCW(x) do{ pin_clear(DIRports[x], DIRpins[x]); }while(0)
// interval of velocity checking (10ms)
#define MOTCHKINTERVAL (10)
// maximal ticks of encoder per step
#define MAXENCTICKSPERSTEP (100)
// amount of full steps per revolution
#define STEPSPERREV (200)
extern volatile uint32_t Tms;
// timers of motors
extern volatile TIM_TypeDef *mottimers[];
// timers for encoders
extern volatile TIM_TypeDef *enctimers[];
uint8_t ESW_state(uint8_t x);
void gpio_setup();
void iwdg_setup();
void timers_setup();
void pause_ms(uint32_t pause);
void Jump2Boot();
uint8_t MSB(uint16_t val);
#endif // __HARDWARE_H__
================================================
FILE: F0:F030,F042,F072/3steppersLB/kicad/elements.kicad_sym
================================================
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "74HC4051" (pin_names (offset 0.254)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "74HC4051" (id 1) (at 0 -3.81 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "TTL MUX8" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Multiplexer 8 to 1" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SO16 TSSOP16 SSOP16 DHVQFN16" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "74HC4051_0_1"
(rectangle (start -10.16 11.43) (end 10.16 -11.43)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "74HC4051_1_1"
(pin bidirectional line (at 17.78 -1.27 180) (length 7.62)
(name "Y4" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin input line (at -17.78 6.35 0) (length 7.62)
(name "S1" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin input line (at -17.78 8.89 0) (length 7.62)
(name "S0" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 1.27 180) (length 7.62)
(name "Y3" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 8.89 180) (length 7.62)
(name "Y0" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 6.35 180) (length 7.62)
(name "Y1" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 3.81 180) (length 7.62)
(name "Y2" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -17.78 -2.54 0) (length 7.62)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "16" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 -6.35 180) (length 7.62)
(name "Y6" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 0 -19.05 90) (length 7.62)
(name "Z" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 -8.89 180) (length 7.62)
(name "Y7" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin bidirectional line (at 17.78 -3.81 180) (length 7.62)
(name "Y5" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin input inverted (at -17.78 -8.89 0) (length 7.62)
(name "~{E}" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -17.78 0 0) (length 7.62)
(name "VEE" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -17.78 -5.08 0) (length 7.62)
(name "GND" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin input line (at -17.78 3.81 0) (length 7.62)
(name "S2" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "B0x0xS-1W" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "Q?" (id 0) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "B0x0xS-1W" (id 1) (at 0 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "my_footprints:B0x0xS" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "isolated DC-DC" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "b0x0xs" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "B0x0xS-1W_0_1"
(rectangle (start -5.08 5.08) (end 5.08 -5.08)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "B0x0xS-1W_1_1"
(pin power_in line (at -10.16 -2.54 0) (length 5.08)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -10.16 2.54 0) (length 5.08)
(name "Vin" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin power_out line (at 10.16 -2.54 180) (length 5.08)
(name "0V" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin power_out line (at 10.16 2.54 180) (length 5.08)
(name "+Vo" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "B0305S" (extends "B0x0xS-1W")
(property "Reference" "Q?" (id 0) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "B0305S" (id 1) (at 0 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "my_footprints:B0x0xS" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "isolated DC-DC" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "b0x0xs" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "B0505S" (extends "B0x0xS-1W")
(property "Reference" "Q?" (id 0) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "B0505S" (id 1) (at 0 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "my_footprints:B0x0xS" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "isolated DC-DC" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "b0x0xs" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "CD4050" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 0 -10.16 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "CD4050" (id 1) (at 0 10.16 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "Package_SO:SOIC-16_3.9x9.9mm_P1.27mm" (id 2) (at 0 -1.27 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 -1.27 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "CD4050_0_1"
(rectangle (start -5.08 8.89) (end 5.08 -8.89)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "CD4050_1_1"
(pin power_in line (at 10.16 -7.62 180) (length 5.08)
(name "Vcc" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 0 180) (length 5.08)
(name "O4" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 -2.54 0) (length 5.08)
(name "I5" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 -2.54 180) (length 5.08)
(name "O5" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 -5.08 0) (length 5.08)
(name "I6" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 -5.08 180) (length 5.08)
(name "O6" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 7.62 180) (length 5.08)
(name "O1" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 7.62 0) (length 5.08)
(name "I1" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 5.08 180) (length 5.08)
(name "O2" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 5.08 0) (length 5.08)
(name "I2" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin output line (at 10.16 2.54 180) (length 5.08)
(name "O3" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 2.54 0) (length 5.08)
(name "I3" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -10.16 -7.62 0) (length 5.08)
(name "GND" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin input line (at -10.16 0 0) (length 5.08)
(name "I4" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "D_Schottky_x2_ACom_AKK" (pin_names (offset 0.762) hide) (in_bom yes) (on_board yes)
(property "Reference" "D" (id 0) (at 1.27 -2.54 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "D_Schottky_x2_ACom_AKK" (id 1) (at 0 2.54 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "diode" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Dual schottky diode, common anode" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "D_Schottky_x2_ACom_AKK_0_1"
(polyline
(pts
(xy -3.556 0)
(xy 3.81 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 0)
(xy 0 -2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 3.81 -1.27)
(xy 3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 1.27)
(xy -4.318 1.27)
(xy -4.318 1.016)
(xy -4.318 1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -1.27)
(xy 4.318 -1.27)
(xy 4.318 -1.016)
(xy 4.318 -1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 3.302 1.27)
(xy 3.302 1.016)
(xy 3.302 1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.302 -1.016)
(xy -3.302 -1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -1.27 -1.27)
(xy -3.81 0)
(xy -1.27 1.27)
(xy -1.27 -1.27)
(xy -1.27 -1.27)
(xy -1.27 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 1.27 1.27)
(xy 3.81 0)
(xy 1.27 -1.27)
(xy 1.27 1.27)
(xy 1.27 1.27)
(xy 1.27 1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(pin passive line (at 0 -5.08 90) (length 2.54)
(name "A" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -7.62 0 0) (length 3.81)
(name "K" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 7.62 0 180) (length 3.81)
(name "K" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "IRF9310" (pin_names (offset 0) hide) (in_bom yes) (on_board yes)
(property "Reference" "Q" (id 0) (at 5.08 1.27 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Value" "IRF9310" (id 1) (at 5.08 -1.27 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Footprint" "Package_SO:SO-8_3.9x4.9mm_P1.27mm" (id 2) (at 5.08 2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "transistor PMOS P-MOS P-MOSFET" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "P-MOSFET transistor, gate/drain/source, drain connected to mounting plane" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "IRF9310_0_1"
(polyline
(pts
(xy 0.0508 0)
(xy 0.254 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 -1.778)
(xy 2.54 -1.778)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 -1.27)
(xy 0.762 -2.286)
)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 0)
(xy 2.54 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 0.508)
(xy 0.762 -0.508)
)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 1.778)
(xy 2.54 1.778)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.762 2.286)
(xy 0.762 1.27)
)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 2.54 -1.778)
(xy 2.54 -2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 2.54 -1.778)
(xy 2.54 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 2.54 2.54)
(xy 2.54 1.778)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0.254 1.905)
(xy 0.254 -1.905)
(xy 0.254 -1.905)
)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 2.286 0)
(xy 1.27 -0.381)
(xy 1.27 0.381)
(xy 2.286 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type outline))
)
(polyline
(pts
(xy 2.54 -1.778)
(xy 3.302 -1.778)
(xy 3.302 1.778)
(xy 2.54 1.778)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 2.794 -0.508)
(xy 2.921 -0.381)
(xy 3.683 -0.381)
(xy 3.81 -0.254)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.302 -0.381)
(xy 2.921 0.254)
(xy 3.683 0.254)
(xy 3.302 -0.381)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 1.651 0) (radius 2.8194)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 2.54 -1.778) (radius 0.2794)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type outline))
)
(circle (center 2.54 1.778) (radius 0.2794)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type outline))
)
)
(symbol "IRF9310_1_1"
(pin passive line (at 2.54 -5.08 90) (length 2.54) hide
(name "S" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 -5.08 90) (length 2.54) hide
(name "S" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 -5.08 90) (length 2.54)
(name "S" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin input line (at -5.08 0 0) (length 5.08)
(name "G" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 5.08 270) (length 2.54)
(name "D" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 5.08 270) (length 2.54) hide
(name "D" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 5.08 270) (length 2.54) hide
(name "D" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 2.54 5.08 270) (length 2.54) hide
(name "D" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "LM1117-ADJ" (pin_names (offset 0.762)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 2.54 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "LM1117-ADJ" (id 1) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "linear regulator ldo adjustable positive" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "800mA Low-Dropout Linear Regulator, adjustable output" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT-223* TO-263* TO-252*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "LM1117-ADJ_0_1"
(rectangle (start -5.08 -5.08) (end 5.08 5.08)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type background))
)
)
(symbol "LM1117-ADJ_1_1"
(pin power_in line (at 0 -7.62 90) (length 2.54)
(name "GND/ADJ" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_out line (at 7.62 0 180) (length 2.54)
(name "VO" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -7.62 0 0) (length 2.54)
(name "VI" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "LM1117-1.8" (extends "LM1117-ADJ")
(property "Reference" "U" (id 0) (at 2.54 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "LM1117-1.8" (id 1) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "linear regulator ldo fixed positive" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "800mA Low-Dropout Linear Regulator, 1.8V fixed output" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT-223* TO-263* TO-252*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "LM1117-2.5" (extends "LM1117-ADJ")
(property "Reference" "U" (id 0) (at 2.54 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "LM1117-2.5" (id 1) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "linear regulator ldo fixed positive" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "800mA Low-Dropout Linear Regulator, 2.5V fixed output" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT-223* TO-263* TO-252*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "LM1117-3.3" (extends "LM1117-ADJ")
(property "Reference" "U" (id 0) (at 2.54 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "LM1117-3.3" (id 1) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "linear regulator ldo fixed positive" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "800mA Low-Dropout Linear Regulator, 3.3V fixed output" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT-223* TO-263* TO-252*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "LM1117-5.0" (extends "LM1117-ADJ")
(property "Reference" "U" (id 0) (at 2.54 -6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "LM1117-5.0" (id 1) (at 0 6.35 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "http://www.ti.com/lit/ds/symlink/lm1117.pdf" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "linear regulator ldo fixed positive" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "800mA Low-Dropout Linear Regulator, 5.0V fixed output" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT-223* TO-263* TO-252*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
)
(symbol "PESD1CAN" (pin_names (offset 0.762) hide) (in_bom yes) (on_board yes)
(property "Reference" "D" (id 0) (at 0 -8.89 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "PESD1CAN" (id 1) (at 1.27 3.81 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "diode" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "CAN bus ESD protection" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SOT23" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "PESD1CAN_0_1"
(rectangle (start -5.08 2.54) (end 7.62 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.556 -5.08)
(xy 3.81 -5.08)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.556 0)
(xy 3.81 0)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 -3.81)
(xy -3.81 -6.35)
(xy -3.81 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -3.81)
(xy 3.81 -6.35)
(xy 3.81 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 3.81 -1.27)
(xy 3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 -3.81)
(xy -4.318 -3.81)
(xy -4.318 -4.064)
(xy -4.318 -4.064)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.81 1.27)
(xy -4.318 1.27)
(xy -4.318 1.016)
(xy -4.318 1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -6.35)
(xy 4.318 -6.35)
(xy 4.318 -6.096)
(xy 4.318 -6.096)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -3.81)
(xy 3.302 -3.81)
(xy 3.302 -4.064)
(xy 3.302 -4.064)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -1.27)
(xy 4.318 -1.27)
(xy 4.318 -1.016)
(xy 4.318 -1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 0)
(xy 6.35 0)
(xy 6.35 -5.08)
(xy 3.81 -5.08)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 3.302 1.27)
(xy 3.302 1.016)
(xy 3.302 1.016)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.302 -6.096)
(xy -3.302 -6.35)
(xy -3.81 -6.35)
(xy -3.81 -6.35)
(xy -3.81 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -3.302 -1.016)
(xy -3.302 -1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
(xy -3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -1.27 -6.35)
(xy -3.81 -5.08)
(xy -1.27 -3.81)
(xy -1.27 -6.35)
(xy -1.27 -6.35)
(xy -1.27 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -1.27 -1.27)
(xy -3.81 0)
(xy -1.27 1.27)
(xy -1.27 -1.27)
(xy -1.27 -1.27)
(xy -1.27 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 1.27 -3.81)
(xy 3.81 -5.08)
(xy 1.27 -6.35)
(xy 1.27 -3.81)
(xy 1.27 -3.81)
(xy 1.27 -3.81)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 1.27 1.27)
(xy 3.81 0)
(xy 1.27 -1.27)
(xy 1.27 1.27)
(xy 1.27 1.27)
(xy 1.27 1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(pin passive line (at -7.62 0 0) (length 3.81)
(name "K" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -7.62 -5.08 0) (length 3.81)
(name "K" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 10.16 -2.54 180) (length 3.81)
(name "O" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "TPS2051" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 0 -7.62 0)
(effects (font (size 1.524 1.524)))
)
(property "Value" "TPS2051" (id 1) (at 0 7.62 0)
(effects (font (size 1.524 1.524)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.524 1.524)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.524 1.524)) hide)
)
(symbol "TPS2051_0_1"
(rectangle (start -6.35 6.35) (end 6.35 -6.35)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "TPS2051_1_1"
(pin power_in line (at -11.43 3.81 0) (length 5.08)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -11.43 1.27 0) (length 5.08)
(name "IN" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -11.43 -1.27 0) (length 5.08)
(name "IN" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin input line (at -11.43 -3.81 0) (length 5.08)
(name "EN" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin output line (at 11.43 -3.81 180) (length 5.08)
(name "~{OC}" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 11.43 -1.27 180) (length 5.08)
(name "OUT" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 11.43 1.27 180) (length 5.08)
(name "OUT" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin power_out line (at 11.43 3.81 180) (length 5.08)
(name "OUT" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "USB6B1" (pin_names (offset 0.762) hide) (in_bom yes) (on_board yes)
(property "Reference" "D" (id 0) (at 0 -11.43 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "USB6B1" (id 1) (at 0 10.16 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 5.08 -2.54 90)
(effects (font (size 1.27 1.27)))
)
(property "Datasheet" "" (id 3) (at 5.08 -2.54 90)
(effects (font (size 1.27 1.27)))
)
(property "ki_keywords" "diode" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "USB bus ESD protection" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "SO8" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "USB6B1_0_1"
(rectangle (start -7.62 -2.54) (end 7.62 -2.54)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -7.62 7.62) (end 7.62 7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -5.08 -3.81) (end -2.54 -3.81)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -5.08 6.35) (end -2.54 6.35)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center -3.81 -7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center -3.81 2.54) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -3.81 7.62) (end -3.81 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center -3.81 7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 -3.81) (end 1.27 -3.81)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 6.35) (end 1.27 6.35)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 0 -7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 0 -2.54) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 6.35 1.27)
(xy 6.35 1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 1.27)
(xy 3.81 0.762)
(xy 4.064 0.762)
(xy 4.064 0.762)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 6.35 1.27)
(xy 6.35 1.778)
(xy 6.096 1.778)
(xy 6.096 1.778)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -6.35 8.89)
(xy 7.62 8.89)
(xy 7.62 -8.89)
(xy -6.35 -8.89)
(xy -6.35 8.89)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -5.08 -6.35)
(xy -3.81 -3.81)
(xy -2.54 -6.35)
(xy -5.08 -6.35)
(xy -5.08 -6.35)
(xy -5.08 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -5.08 3.81)
(xy -3.81 6.35)
(xy -2.54 3.81)
(xy -5.08 3.81)
(xy -5.08 3.81)
(xy -5.08 3.81)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -1.27 -6.35)
(xy 0 -3.81)
(xy 1.27 -6.35)
(xy -1.27 -6.35)
(xy -1.27 -6.35)
(xy -1.27 -6.35)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy -1.27 3.81)
(xy 0 6.35)
(xy 1.27 3.81)
(xy -1.27 3.81)
(xy -1.27 3.81)
(xy -1.27 3.81)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 3.81 -1.27)
(xy 5.08 1.27)
(xy 6.35 -1.27)
(xy 3.81 -1.27)
(xy 3.81 -1.27)
(xy 3.81 -1.27)
)
(stroke (width 0.2032) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start 0 7.62) (end 0 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 0 7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 5.08 -7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start 5.08 7.62) (end 5.08 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 5.08 7.62) (radius 0.1778)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start 7.62 -7.62) (end -7.62 -7.62)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start 7.62 2.54) (end -7.62 2.54)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "USB6B1_1_1"
(pin passive line (at -12.7 7.62 0) (length 5.08)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -12.7 2.54 0) (length 5.08)
(name "I/O1" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -12.7 -2.54 0) (length 5.08)
(name "I/O2" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -12.7 -7.62 0) (length 5.08)
(name "GND" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 12.7 -7.62 180) (length 5.08)
(name "GND" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 12.7 -2.54 180) (length 5.08)
(name "I/O2" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 12.7 2.54 180) (length 5.08)
(name "I/O1" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 12.7 7.62 180) (length 5.08)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
)
)
)
================================================
FILE: F0:F030,F042,F072/3steppersLB/kicad/fp-info-cache
================================================
32493563391627
Jumper
SolderJumper-2_P1.3mm_Bridged2Bar_Pad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged with 2 copper strips
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Bridged2Bar_RoundedPad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, bridged with 2 copper strips
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged with 1 copper strip
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, bridged with 1 copper strip
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, open
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open
solder jumper open
0
2
2
Jumper
SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm Triangular Pads, 0.3mm gap, open
solder jumper open
0
2
2
Jumper
SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm Pads, 0.3mm gap, pads 1-2 Bridged2Bar with 2 copper strip
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged2Bar12_Pad1.0x1.5mm_NumberLabels
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, pads 1-2 Bridged2Bar with 2 copper strip, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, pads 1-2 Bridged2Bar with 2 copper strip
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mm_NumberLabels
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, pads 1-2 Bridged2Bar with 2 copper strip, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm Pads, 0.3mm gap, pads 1-2 bridged with 1 copper strip
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mm_NumberLabels
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, pads 1-2 bridged with 1 copper strip, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, pads 1-2 bridged with 1 copper strip
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm_NumberLabels
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, pads 1-2 bridged with 1 copper strip, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm Pads, 0.3mm gap, open
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mm_NumberLabels
SMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, open, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, open
solder jumper open
0
3
3
Jumper
SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabels
SMD Solder 3-pad Jumper, 1x1.5mm rounded Pads, 0.3mm gap, open, labeled with numbers
solder jumper open
0
3
3
Jumper
SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mm
SMD Solder Jumper, 1x1.5mm Triangular Pads, 0.3mm gap, open
solder jumper open
0
5
3
Jumper
SolderJumper-3_P2.0mm_Open_TrianglePad1.0x1.5mm_NumberLabels
SMD Solder Jumper, 1x1.5mm Triangular Pads, 0.3mm gap, open, labeled with numbers
solder jumper open
0
5
3
================================================
FILE: F0:F030,F042,F072/3steppersLB/kicad/fp-lib-table
================================================
(fp_lib_table
(lib (name my_footprints)(type KiCad)(uri ${KIPRJMOD}/my_footprints.pretty)(options "")(descr ""))
)
================================================
FILE: F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-B_Cu.gbr
================================================
%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%
%TF.CreationDate,2021-10-03T18:13:03+03:00*%
%TF.ProjectId,stm32,73746d33-322e-46b6-9963-61645f706362,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L2,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 5.1.10) date 2021-10-03 18:13:03*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,ComponentPad*%
%ADD10C,1.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD11R,1.600000X1.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD12R,2.600000X2.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD13O,2.600000X2.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD14C,2.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD15C,2.500000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD16C,3.000000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD17O,1.600000X1.600000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD18R,1.700000X1.700000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD19O,1.200000X1.750000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD20O,1.750000X1.200000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD21R,1.800000X1.800000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD22O,1.800000X1.800000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD23C,5.000000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD24C,1.500000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD25C,1.700000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD26C,3.500000*%
%TD*%
%TA.AperFunction,ComponentPad*%
%ADD27C,2.000000*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD28C,1.200000*%
%TD*%
%TA.AperFunction,ViaPad*%
%ADD29C,0.800000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD30C,0.500000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD31C,2.000000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD32C,0.300000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD33C,0.200000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD34C,1.000000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD35C,0.254000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD36C,0.100000*%
%TD*%
G04 APERTURE END LIST*
%TO.P,C2,1*%
%TO.N,/ADC2*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X94549800Y-116556800D02*
X94549800Y-116081800D01*
G75*
G02*
X94787300Y-115844300I237500J0D01*
G01*
X95362300Y-115844300D01*
G75*
G02*
X95599800Y-116081800I0J-237500D01*
G01*
X95599800Y-116556800D01*
G75*
G02*
X95362300Y-116794300I-237500J0D01*
G01*
X94787300Y-116794300D01*
G75*
G02*
X94549800Y-116556800I0J237500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,C2,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X96299800Y-116556800D02*
X96299800Y-116081800D01*
G75*
G02*
X96537300Y-115844300I237500J0D01*
G01*
X97112300Y-115844300D01*
G75*
G02*
X97349800Y-116081800I0J-237500D01*
G01*
X97349800Y-116556800D01*
G75*
G02*
X97112300Y-116794300I-237500J0D01*
G01*
X96537300Y-116794300D01*
G75*
G02*
X96299800Y-116556800I0J237500D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,C3,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X90570600Y-116081800D02*
X90570600Y-116556800D01*
G75*
G02*
X90333100Y-116794300I-237500J0D01*
G01*
X89758100Y-116794300D01*
G75*
G02*
X89520600Y-116556800I0J237500D01*
G01*
X89520600Y-116081800D01*
G75*
G02*
X89758100Y-115844300I237500J0D01*
G01*
X90333100Y-115844300D01*
G75*
G02*
X90570600Y-116081800I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,C3,1*%
%TO.N,/ADC1*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X92320600Y-116081800D02*
X92320600Y-116556800D01*
G75*
G02*
X92083100Y-116794300I-237500J0D01*
G01*
X91508100Y-116794300D01*
G75*
G02*
X91270600Y-116556800I0J237500D01*
G01*
X91270600Y-116081800D01*
G75*
G02*
X91508100Y-115844300I237500J0D01*
G01*
X92083100Y-115844300D01*
G75*
G02*
X92320600Y-116081800I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D10*
%TO.P,C10,2*%
%TO.N,GND*%
X150190200Y-116733200D03*
D11*
%TO.P,C10,1*%
%TO.N,Net-(C10-Pad1)*%
X150190200Y-113233200D03*
%TD*%
%TO.P,C13,1*%
%TO.N,+5V*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X84414801Y-108348400D02*
X82564799Y-108348400D01*
G75*
G02*
X82314800Y-108098401I0J249999D01*
G01*
X82314800Y-106348399D01*
G75*
G02*
X82564799Y-106098400I249999J0D01*
G01*
X84414801Y-106098400D01*
G75*
G02*
X84664800Y-106348399I0J-249999D01*
G01*
X84664800Y-108098401D01*
G75*
G02*
X84414801Y-108348400I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,C13,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X84414801Y-103248400D02*
X82564799Y-103248400D01*
G75*
G02*
X82314800Y-102998401I0J249999D01*
G01*
X82314800Y-101248399D01*
G75*
G02*
X82564799Y-100998400I249999J0D01*
G01*
X84414801Y-100998400D01*
G75*
G02*
X84664800Y-101248399I0J-249999D01*
G01*
X84664800Y-102998401D01*
G75*
G02*
X84414801Y-103248400I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,C14,1*%
%TO.N,+5V*%
X140817600Y-99212400D03*
D10*
%TO.P,C14,2*%
%TO.N,GND*%
X140817600Y-95712400D03*
%TD*%
%TO.P,D1,1*%
%TO.N,/I2C1_SCL*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X103819000Y-78529601D02*
X103819000Y-77629599D01*
G75*
G02*
X104068999Y-77379600I249999J0D01*
G01*
X104719001Y-77379600D01*
G75*
G02*
X104969000Y-77629599I0J-249999D01*
G01*
X104969000Y-78529601D01*
G75*
G02*
X104719001Y-78779600I-249999J0D01*
G01*
X104068999Y-78779600D01*
G75*
G02*
X103819000Y-78529601I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,D1,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X105869000Y-78529601D02*
X105869000Y-77629599D01*
G75*
G02*
X106118999Y-77379600I249999J0D01*
G01*
X106769001Y-77379600D01*
G75*
G02*
X107019000Y-77629599I0J-249999D01*
G01*
X107019000Y-78529601D01*
G75*
G02*
X106769001Y-78779600I-249999J0D01*
G01*
X106118999Y-78779600D01*
G75*
G02*
X105869000Y-78529601I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,D3,1*%
%TO.N,/I2C1_SDA*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X103819000Y-82263401D02*
X103819000Y-81363399D01*
G75*
G02*
X104068999Y-81113400I249999J0D01*
G01*
X104719001Y-81113400D01*
G75*
G02*
X104969000Y-81363399I0J-249999D01*
G01*
X104969000Y-82263401D01*
G75*
G02*
X104719001Y-82513400I-249999J0D01*
G01*
X104068999Y-82513400D01*
G75*
G02*
X103819000Y-82263401I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,D3,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X105869000Y-82263401D02*
X105869000Y-81363399D01*
G75*
G02*
X106118999Y-81113400I249999J0D01*
G01*
X106769001Y-81113400D01*
G75*
G02*
X107019000Y-81363399I0J-249999D01*
G01*
X107019000Y-82263401D01*
G75*
G02*
X106769001Y-82513400I-249999J0D01*
G01*
X106118999Y-82513400D01*
G75*
G02*
X105869000Y-82263401I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,D4,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X96554600Y-114800801D02*
X96554600Y-113900799D01*
G75*
G02*
X96804599Y-113650800I249999J0D01*
G01*
X97454601Y-113650800D01*
G75*
G02*
X97704600Y-113900799I0J-249999D01*
G01*
X97704600Y-114800801D01*
G75*
G02*
X97454601Y-115050800I-249999J0D01*
G01*
X96804599Y-115050800D01*
G75*
G02*
X96554600Y-114800801I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,D4,1*%
%TO.N,/ADC2*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X94504600Y-114800801D02*
X94504600Y-113900799D01*
G75*
G02*
X94754599Y-113650800I249999J0D01*
G01*
X95404601Y-113650800D01*
G75*
G02*
X95654600Y-113900799I0J-249999D01*
G01*
X95654600Y-114800801D01*
G75*
G02*
X95404601Y-115050800I-249999J0D01*
G01*
X94754599Y-115050800D01*
G75*
G02*
X94504600Y-114800801I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,D6,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X90338600Y-113900799D02*
X90338600Y-114800801D01*
G75*
G02*
X90088601Y-115050800I-249999J0D01*
G01*
X89438599Y-115050800D01*
G75*
G02*
X89188600Y-114800801I0J249999D01*
G01*
X89188600Y-113900799D01*
G75*
G02*
X89438599Y-113650800I249999J0D01*
G01*
X90088601Y-113650800D01*
G75*
G02*
X90338600Y-113900799I0J-249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,D6,1*%
%TO.N,/ADC1*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X92388600Y-113900799D02*
X92388600Y-114800801D01*
G75*
G02*
X92138601Y-115050800I-249999J0D01*
G01*
X91488599Y-115050800D01*
G75*
G02*
X91238600Y-114800801I0J249999D01*
G01*
X91238600Y-113900799D01*
G75*
G02*
X91488599Y-113650800I249999J0D01*
G01*
X92138601Y-113650800D01*
G75*
G02*
X92388600Y-113900799I0J-249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D12*
%TO.P,D12,1*%
%TO.N,Net-(D12-Pad1)*%
X141097000Y-113106200D03*
D13*
%TO.P,D12,2*%
%TO.N,GND*%
X137287000Y-113106200D03*
%TD*%
D12*
%TO.P,J12,1*%
%TO.N,GND*%
X148767800Y-132994400D03*
D14*
%TO.P,J12,2*%
%TO.N,Net-(J12-Pad2)*%
X143767800Y-132994400D03*
%TD*%
D12*
%TO.P,J10,1*%
%TO.N,Net-(J10-Pad1)*%
X80861900Y-133057700D03*
D14*
%TO.P,J10,2*%
%TO.N,Net-(J10-Pad2)*%
X75861900Y-133057700D03*
%TO.P,J10,3*%
%TO.N,Net-(J10-Pad3)*%
X70861900Y-133057700D03*
%TD*%
%TO.P,J7,3*%
%TO.N,/CANH*%
X73101200Y-77782400D03*
%TO.P,J7,2*%
%TO.N,Earth*%
X73101200Y-82782400D03*
D12*
%TO.P,J7,1*%
%TO.N,/CANL*%
X73101200Y-87782400D03*
%TD*%
D15*
%TO.P,K1,2*%
%TO.N,Net-(D10-Pad2)*%
X76509600Y-108858600D03*
D16*
%TO.P,K1,3*%
%TO.N,Net-(J10-Pad1)*%
X76509600Y-121058600D03*
%TO.P,K1,4*%
%TO.N,Net-(J10-Pad3)*%
X64459600Y-121108600D03*
D15*
%TO.P,K1,5*%
%TO.N,+5V*%
X64509600Y-108858600D03*
D16*
%TO.P,K1,1*%
%TO.N,Net-(J10-Pad2)*%
X70459600Y-106908600D03*
%TD*%
%TO.P,R17,1*%
%TO.N,Net-(R17-Pad1)*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X108525300Y-96071200D02*
X109000300Y-96071200D01*
G75*
G02*
X109237800Y-96308700I0J-237500D01*
G01*
X109237800Y-96883700D01*
G75*
G02*
X109000300Y-97121200I-237500J0D01*
G01*
X108525300Y-97121200D01*
G75*
G02*
X108287800Y-96883700I0J237500D01*
G01*
X108287800Y-96308700D01*
G75*
G02*
X108525300Y-96071200I237500J0D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,R17,2*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X108525300Y-97821200D02*
X109000300Y-97821200D01*
G75*
G02*
X109237800Y-98058700I0J-237500D01*
G01*
X109237800Y-98633700D01*
G75*
G02*
X109000300Y-98871200I-237500J0D01*
G01*
X108525300Y-98871200D01*
G75*
G02*
X108287800Y-98633700I0J237500D01*
G01*
X108287800Y-98058700D01*
G75*
G02*
X108525300Y-97821200I237500J0D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,R3,2*%
%TO.N,+3V3*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X100908400Y-77842100D02*
X100908400Y-78317100D01*
G75*
G02*
X100670900Y-78554600I-237500J0D01*
G01*
X100095900Y-78554600D01*
G75*
G02*
X99858400Y-78317100I0J237500D01*
G01*
X99858400Y-77842100D01*
G75*
G02*
X100095900Y-77604600I237500J0D01*
G01*
X100670900Y-77604600D01*
G75*
G02*
X100908400Y-77842100I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,R3,1*%
%TO.N,/I2C1_SCL*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X102658400Y-77842100D02*
X102658400Y-78317100D01*
G75*
G02*
X102420900Y-78554600I-237500J0D01*
G01*
X101845900Y-78554600D01*
G75*
G02*
X101608400Y-78317100I0J237500D01*
G01*
X101608400Y-77842100D01*
G75*
G02*
X101845900Y-77604600I237500J0D01*
G01*
X102420900Y-77604600D01*
G75*
G02*
X102658400Y-77842100I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,R13,1*%
%TO.N,/I2C1_SDA*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X102658400Y-81296500D02*
X102658400Y-81771500D01*
G75*
G02*
X102420900Y-82009000I-237500J0D01*
G01*
X101845900Y-82009000D01*
G75*
G02*
X101608400Y-81771500I0J237500D01*
G01*
X101608400Y-81296500D01*
G75*
G02*
X101845900Y-81059000I237500J0D01*
G01*
X102420900Y-81059000D01*
G75*
G02*
X102658400Y-81296500I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,R13,2*%
%TO.N,+3V3*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X100908400Y-81296500D02*
X100908400Y-81771500D01*
G75*
G02*
X100670900Y-82009000I-237500J0D01*
G01*
X100095900Y-82009000D01*
G75*
G02*
X99858400Y-81771500I0J237500D01*
G01*
X99858400Y-81296500D01*
G75*
G02*
X100095900Y-81059000I237500J0D01*
G01*
X100670900Y-81059000D01*
G75*
G02*
X100908400Y-81296500I0J-237500D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D11*
%TO.P,SW1,1*%
%TO.N,Net-(R19-Pad1)*%
X81686400Y-80137000D03*
D17*
%TO.P,SW1,2*%
%TO.N,/CANL*%
X81686400Y-87757000D03*
%TD*%
D18*
%TO.P,TP1,1*%
%TO.N,+5V*%
X122809000Y-99644200D03*
%TD*%
%TO.P,TP2,1*%
%TO.N,+3V3*%
X126568200Y-119811800D03*
%TD*%
%TO.P,U1,1*%
%TO.N,+5V*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X97444800Y-78780700D02*
X97444800Y-79105700D01*
G75*
G02*
X97282300Y-79268200I-162500J0D01*
G01*
X95257300Y-79268200D01*
G75*
G02*
X95094800Y-79105700I0J162500D01*
G01*
X95094800Y-78780700D01*
G75*
G02*
X95257300Y-78618200I162500J0D01*
G01*
X97282300Y-78618200D01*
G75*
G02*
X97444800Y-78780700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,2*%
%TO.N,/CAN_Rx*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X97444800Y-81320700D02*
X97444800Y-81645700D01*
G75*
G02*
X97282300Y-81808200I-162500J0D01*
G01*
X95257300Y-81808200D01*
G75*
G02*
X95094800Y-81645700I0J162500D01*
G01*
X95094800Y-81320700D01*
G75*
G02*
X95257300Y-81158200I162500J0D01*
G01*
X97282300Y-81158200D01*
G75*
G02*
X97444800Y-81320700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,3*%
%TO.N,/CAN_Tx*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X97444800Y-83860700D02*
X97444800Y-84185700D01*
G75*
G02*
X97282300Y-84348200I-162500J0D01*
G01*
X95257300Y-84348200D01*
G75*
G02*
X95094800Y-84185700I0J162500D01*
G01*
X95094800Y-83860700D01*
G75*
G02*
X95257300Y-83698200I162500J0D01*
G01*
X97282300Y-83698200D01*
G75*
G02*
X97444800Y-83860700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,4*%
%TO.N,GND*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X97444800Y-86400700D02*
X97444800Y-86725700D01*
G75*
G02*
X97282300Y-86888200I-162500J0D01*
G01*
X95257300Y-86888200D01*
G75*
G02*
X95094800Y-86725700I0J162500D01*
G01*
X95094800Y-86400700D01*
G75*
G02*
X95257300Y-86238200I162500J0D01*
G01*
X97282300Y-86238200D01*
G75*
G02*
X97444800Y-86400700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,5*%
%TO.N,Earth*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X88394800Y-86400700D02*
X88394800Y-86725700D01*
G75*
G02*
X88232300Y-86888200I-162500J0D01*
G01*
X86207300Y-86888200D01*
G75*
G02*
X86044800Y-86725700I0J162500D01*
G01*
X86044800Y-86400700D01*
G75*
G02*
X86207300Y-86238200I162500J0D01*
G01*
X88232300Y-86238200D01*
G75*
G02*
X88394800Y-86400700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,6*%
%TO.N,/CANL*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X88394800Y-83860700D02*
X88394800Y-84185700D01*
G75*
G02*
X88232300Y-84348200I-162500J0D01*
G01*
X86207300Y-84348200D01*
G75*
G02*
X86044800Y-84185700I0J162500D01*
G01*
X86044800Y-83860700D01*
G75*
G02*
X86207300Y-83698200I162500J0D01*
G01*
X88232300Y-83698200D01*
G75*
G02*
X88394800Y-83860700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,7*%
%TO.N,/CANH*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X88394800Y-81320700D02*
X88394800Y-81645700D01*
G75*
G02*
X88232300Y-81808200I-162500J0D01*
G01*
X86207300Y-81808200D01*
G75*
G02*
X86044800Y-81645700I0J162500D01*
G01*
X86044800Y-81320700D01*
G75*
G02*
X86207300Y-81158200I162500J0D01*
G01*
X88232300Y-81158200D01*
G75*
G02*
X88394800Y-81320700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,U1,8*%
%TO.N,Net-(C4-Pad1)*%
%TA.AperFunction,SMDPad,CuDef*%
G36*
G01*
X88394800Y-78780700D02*
X88394800Y-79105700D01*
G75*
G02*
X88232300Y-79268200I-162500J0D01*
G01*
X86207300Y-79268200D01*
G75*
G02*
X86044800Y-79105700I0J162500D01*
G01*
X86044800Y-78780700D01*
G75*
G02*
X86207300Y-78618200I162500J0D01*
G01*
X88232300Y-78618200D01*
G75*
G02*
X88394800Y-78780700I0J-162500D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D19*
%TO.P,J1,3*%
%TO.N,GND*%
X95503500Y-120827800D03*
%TO.P,J1,2*%
%TO.N,Net-(J1-Pad2)*%
X93503500Y-120827800D03*
%TO.P,J1,1*%
%TO.N,Net-(J1-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X90903500Y-121452801D02*
X90903500Y-120202799D01*
G75*
G02*
X91153499Y-119952800I249999J0D01*
G01*
X91853501Y-119952800D01*
G75*
G02*
X92103500Y-120202799I0J-249999D01*
G01*
X92103500Y-121452801D01*
G75*
G02*
X91853501Y-121702800I-249999J0D01*
G01*
X91153499Y-121702800D01*
G75*
G02*
X90903500Y-121452801I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,J2,4*%
%TO.N,Net-(J2-Pad4)*%
X149408400Y-74510900D03*
%TO.P,J2,3*%
%TO.N,Net-(J2-Pad3)*%
X147408400Y-74510900D03*
%TO.P,J2,2*%
%TO.N,Net-(J2-Pad2)*%
X145408400Y-74510900D03*
%TO.P,J2,1*%
%TO.N,GND*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X142808400Y-75135901D02*
X142808400Y-73885899D01*
G75*
G02*
X143058399Y-73635900I249999J0D01*
G01*
X143758401Y-73635900D01*
G75*
G02*
X144008400Y-73885899I0J-249999D01*
G01*
X144008400Y-75135901D01*
G75*
G02*
X143758401Y-75385900I-249999J0D01*
G01*
X143058399Y-75385900D01*
G75*
G02*
X142808400Y-75135901I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,J3,1*%
%TO.N,GND*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X130406850Y-75135901D02*
X130406850Y-73885899D01*
G75*
G02*
X130656849Y-73635900I249999J0D01*
G01*
X131356851Y-73635900D01*
G75*
G02*
X131606850Y-73885899I0J-249999D01*
G01*
X131606850Y-75135901D01*
G75*
G02*
X131356851Y-75385900I-249999J0D01*
G01*
X130656849Y-75385900D01*
G75*
G02*
X130406850Y-75135901I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,J3,2*%
%TO.N,Net-(J3-Pad2)*%
X133006850Y-74510900D03*
%TO.P,J3,3*%
%TO.N,Net-(J3-Pad3)*%
X135006850Y-74510900D03*
%TO.P,J3,4*%
%TO.N,Net-(J3-Pad4)*%
X137006850Y-74510900D03*
%TD*%
%TO.P,J4,1*%
%TO.N,GND*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X118005300Y-75135901D02*
X118005300Y-73885899D01*
G75*
G02*
X118255299Y-73635900I249999J0D01*
G01*
X118955301Y-73635900D01*
G75*
G02*
X119205300Y-73885899I0J-249999D01*
G01*
X119205300Y-75135901D01*
G75*
G02*
X118955301Y-75385900I-249999J0D01*
G01*
X118255299Y-75385900D01*
G75*
G02*
X118005300Y-75135901I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,J4,2*%
%TO.N,Net-(J4-Pad2)*%
X120605300Y-74510900D03*
%TO.P,J4,3*%
%TO.N,Net-(J4-Pad3)*%
X122605300Y-74510900D03*
%TO.P,J4,4*%
%TO.N,Net-(J4-Pad4)*%
X124605300Y-74510900D03*
%TD*%
%TO.P,J5,1*%
%TO.N,+3V3*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X99806200Y-75123201D02*
X99806200Y-73873199D01*
G75*
G02*
X100056199Y-73623200I249999J0D01*
G01*
X100756201Y-73623200D01*
G75*
G02*
X101006200Y-73873199I0J-249999D01*
G01*
X101006200Y-75123201D01*
G75*
G02*
X100756201Y-75373200I-249999J0D01*
G01*
X100056199Y-75373200D01*
G75*
G02*
X99806200Y-75123201I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,J5,2*%
%TO.N,Net-(J5-Pad2)*%
X102406200Y-74498200D03*
%TO.P,J5,3*%
%TO.N,Net-(J5-Pad3)*%
X104406200Y-74498200D03*
%TO.P,J5,4*%
%TO.N,GND*%
X106406200Y-74498200D03*
%TD*%
%TO.P,J6,1*%
%TO.N,+3V3*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X121891500Y-136578501D02*
X121891500Y-135328499D01*
G75*
G02*
X122141499Y-135078500I249999J0D01*
G01*
X122841501Y-135078500D01*
G75*
G02*
X123091500Y-135328499I0J-249999D01*
G01*
X123091500Y-136578501D01*
G75*
G02*
X122841501Y-136828500I-249999J0D01*
G01*
X122141499Y-136828500D01*
G75*
G02*
X121891500Y-136578501I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,J6,2*%
%TO.N,+5V*%
X124491500Y-135953500D03*
%TO.P,J6,3*%
%TO.N,/G1*%
X126491500Y-135953500D03*
%TD*%
%TO.P,J8,1*%
%TO.N,Net-(J8-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X127180900Y-83106099D02*
X127180900Y-84356101D01*
G75*
G02*
X126930901Y-84606100I-249999J0D01*
G01*
X126230899Y-84606100D01*
G75*
G02*
X125980900Y-84356101I0J249999D01*
G01*
X125980900Y-83106099D01*
G75*
G02*
X126230899Y-82856100I249999J0D01*
G01*
X126930901Y-82856100D01*
G75*
G02*
X127180900Y-83106099I0J-249999D01*
G01*
G37*
%TD.AperFunction*%
%TO.P,J8,2*%
%TO.N,Net-(J8-Pad2)*%
X124580900Y-83731100D03*
%TO.P,J8,3*%
%TO.N,Net-(J8-Pad3)*%
X122580900Y-83731100D03*
%TO.P,J8,4*%
%TO.N,Net-(J8-Pad4)*%
X120580900Y-83731100D03*
%TO.P,J8,5*%
%TO.N,GND*%
X118580900Y-83731100D03*
%TD*%
%TO.P,J9,5*%
%TO.N,GND*%
X96507700Y-110607100D03*
%TO.P,J9,4*%
%TO.N,Net-(J9-Pad4)*%
X94507700Y-110607100D03*
%TO.P,J9,3*%
%TO.N,Net-(J9-Pad3)*%
X92507700Y-110607100D03*
%TO.P,J9,2*%
%TO.N,Net-(J9-Pad2)*%
X90507700Y-110607100D03*
%TO.P,J9,1*%
%TO.N,Net-(J9-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X87907700Y-111232101D02*
X87907700Y-109982099D01*
G75*
G02*
X88157699Y-109732100I249999J0D01*
G01*
X88857701Y-109732100D01*
G75*
G02*
X89107700Y-109982099I0J-249999D01*
G01*
X89107700Y-111232101D01*
G75*
G02*
X88857701Y-111482100I-249999J0D01*
G01*
X88157699Y-111482100D01*
G75*
G02*
X87907700Y-111232101I0J249999D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D12*
%TO.P,J13,1*%
%TO.N,GND*%
X137414000Y-132994400D03*
D14*
%TO.P,J13,2*%
%TO.N,Net-(C10-Pad1)*%
X132414000Y-132994400D03*
%TD*%
%TO.P,J14,1*%
%TO.N,Net-(J14-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X91658601Y-136286800D02*
X90408599Y-136286800D01*
G75*
G02*
X90158600Y-136036801I0J249999D01*
G01*
X90158600Y-135336799D01*
G75*
G02*
X90408599Y-135086800I249999J0D01*
G01*
X91658601Y-135086800D01*
G75*
G02*
X91908600Y-135336799I0J-249999D01*
G01*
X91908600Y-136036801D01*
G75*
G02*
X91658601Y-136286800I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
D20*
%TO.P,J14,2*%
%TO.N,Net-(J14-Pad2)*%
X91033600Y-133686800D03*
%TO.P,J14,3*%
%TO.N,Net-(J14-Pad3)*%
X91033600Y-131686800D03*
%TO.P,J14,4*%
%TO.N,GND*%
X91033600Y-129686800D03*
%TD*%
%TO.P,J15,4*%
%TO.N,GND*%
X99356333Y-129686800D03*
%TO.P,J15,3*%
%TO.N,Net-(J15-Pad3)*%
X99356333Y-131686800D03*
%TO.P,J15,2*%
%TO.N,Net-(J15-Pad2)*%
X99356333Y-133686800D03*
%TO.P,J15,1*%
%TO.N,Net-(J15-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X99981334Y-136286800D02*
X98731332Y-136286800D01*
G75*
G02*
X98481333Y-136036801I0J249999D01*
G01*
X98481333Y-135336799D01*
G75*
G02*
X98731332Y-135086800I249999J0D01*
G01*
X99981334Y-135086800D01*
G75*
G02*
X100231333Y-135336799I0J-249999D01*
G01*
X100231333Y-136036801D01*
G75*
G02*
X99981334Y-136286800I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,J16,4*%
%TO.N,GND*%
X107679066Y-129686800D03*
%TO.P,J16,3*%
%TO.N,Net-(J16-Pad3)*%
X107679066Y-131686800D03*
%TO.P,J16,2*%
%TO.N,Net-(J16-Pad2)*%
X107679066Y-133686800D03*
%TO.P,J16,1*%
%TO.N,Net-(J16-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X108304067Y-136286800D02*
X107054065Y-136286800D01*
G75*
G02*
X106804066Y-136036801I0J249999D01*
G01*
X106804066Y-135336799D01*
G75*
G02*
X107054065Y-135086800I249999J0D01*
G01*
X108304067Y-135086800D01*
G75*
G02*
X108554066Y-135336799I0J-249999D01*
G01*
X108554066Y-136036801D01*
G75*
G02*
X108304067Y-136286800I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
%TO.P,J17,4*%
%TO.N,GND*%
X116001800Y-129686800D03*
%TO.P,J17,3*%
%TO.N,Net-(J17-Pad3)*%
X116001800Y-131686800D03*
%TO.P,J17,2*%
%TO.N,Net-(J17-Pad2)*%
X116001800Y-133686800D03*
%TO.P,J17,1*%
%TO.N,Net-(J17-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X116626801Y-136286800D02*
X115376799Y-136286800D01*
G75*
G02*
X115126800Y-136036801I0J249999D01*
G01*
X115126800Y-135336799D01*
G75*
G02*
X115376799Y-135086800I249999J0D01*
G01*
X116626801Y-135086800D01*
G75*
G02*
X116876800Y-135336799I0J-249999D01*
G01*
X116876800Y-136036801D01*
G75*
G02*
X116626801Y-136286800I-249999J0D01*
G01*
G37*
%TD.AperFunction*%
%TD*%
D18*
%TO.P,TP3,1*%
%TO.N,Net-(TP3-Pad1)*%
X100914200Y-102793800D03*
%TD*%
%TO.P,TP4,1*%
%TO.N,GND*%
X134569200Y-95707200D03*
%TD*%
D21*
%TO.P,U3,1*%
%TO.N,Net-(C10-Pad1)*%
X150215600Y-108095200D03*
D22*
%TO.P,U3,2*%
%TO.N,Net-(D12-Pad1)*%
X146515600Y-106395200D03*
%TO.P,U3,3*%
%TO.N,GND*%
X150215600Y-104695200D03*
%TO.P,U3,4*%
%TO.N,+5V*%
X146515600Y-102995200D03*
%TO.P,U3,5*%
%TO.N,GND*%
X150215600Y-101295200D03*
%TD*%
D23*
%TO.P,P1,1*%
%TO.N,N/C*%
X65024000Y-74041000D03*
%TD*%
%TO.P,P2,1*%
%TO.N,N/C*%
X155000000Y-133000000D03*
%TD*%
%TO.P,P6,1*%
%TO.N,N/C*%
X65000000Y-133000000D03*
%TD*%
%TO.P,P7,1*%
%TO.N,N/C*%
X155000000Y-74000000D03*
%TD*%
D24*
%TO.P,Q1,1*%
%TO.N,GND*%
X95427800Y-76276200D03*
%TO.P,Q1,2*%
%TO.N,+5V*%
X92887800Y-76276200D03*
%TO.P,Q1,3*%
%TO.N,Earth*%
X90347800Y-76276200D03*
%TO.P,Q1,4*%
%TO.N,Net-(C4-Pad1)*%
X87807800Y-76276200D03*
%TD*%
D18*
%TO.P,J11,1*%
%TO.N,Net-(D9-Pad1)*%
X151000000Y-89000000D03*
D25*
%TO.P,J11,2*%
%TO.N,Net-(D9-Pad2)*%
X151000000Y-86500000D03*
%TO.P,J11,3*%
%TO.N,Net-(D9-Pad3)*%
X153000000Y-86500000D03*
%TO.P,J11,4*%
%TO.N,GND*%
X153000000Y-89000000D03*
D26*
%TO.P,J11,5*%
X155710000Y-93770000D03*
X155710000Y-81730000D03*
%TD*%
D11*
%TO.P,C16,1*%
%TO.N,Net-(C10-Pad1)*%
X133146800Y-122351800D03*
D10*
%TO.P,C16,2*%
%TO.N,GND*%
X136646800Y-122351800D03*
%TD*%
D27*
%TO.P,L1,1*%
%TO.N,+5V*%
X128150600Y-105765600D03*
%TO.P,L1,2*%
%TO.N,Net-(D12-Pad1)*%
X138150600Y-105765600D03*
%TD*%
%TO.P,J18,1*%
%TO.N,Net-(J18-Pad1)*%
%TA.AperFunction,ComponentPad*%
G36*
G01*
X110887200Y-75123201D02*
X110887200Y-73873199D01*
G75*
G02*
X111137199Y-73623200I249999J0D01*
G01*
X111837201Y-73623200D01*
G75*
G02*
X112087200Y-73873199I0J-249999D01*
G01*
X112087200Y-75123201D01*
G75*
G02*
X111837201Y-75373200I-249999J0D01*
G01*
X111137199Y-75373200D01*
G75*
G02*
X110887200Y-75123201I0J249999D01*
G01*
G37*
%TD.AperFunction*%
D19*
%TO.P,J18,2*%
%TO.N,Net-(J18-Pad2)*%
X113487200Y-74498200D03*
%TD*%
D28*
%TO.N,GND*%
X99339400Y-98552000D03*
D29*
X102743000Y-120904000D03*
X115951000Y-121996200D03*
X119735600Y-134772400D03*
D28*
X96507700Y-104888900D03*
X99872800Y-86537800D03*
X106451400Y-83616800D03*
D29*
X109016800Y-100406200D03*
D28*
X93040200Y-96164400D03*
X81762600Y-96240600D03*
%TO.N,+5V*%
X117576600Y-111937800D03*
X117551200Y-105791000D03*
X99212400Y-107238800D03*
%TO.N,+3V3*%
X97002600Y-99822000D03*
X88569800Y-99822000D03*
X114731800Y-71831200D03*
X103124000Y-99923600D03*
D29*
X110299500Y-95669100D03*
D28*
X108381800Y-77978000D03*
X108407200Y-74676000D03*
D29*
%TO.N,/ADC2*%
X95097600Y-117729000D03*
X101904800Y-112014000D03*
X104254300Y-106921300D03*
%TO.N,/ADC1*%
X93395800Y-114350800D03*
X100342700Y-112026700D03*
X104089200Y-105460800D03*
D28*
%TO.N,Net-(C10-Pad1)*%
X149174200Y-120650000D03*
X141782800Y-123418600D03*
X141732000Y-120650000D03*
X149174200Y-123037600D03*
X141757400Y-122021600D03*
D29*
%TO.N,/I2C1_SCL*%
X102285800Y-80162400D03*
X102514400Y-83413600D03*
X106823800Y-87578553D03*
%TO.N,/I2C1_SDA*%
X104394000Y-80187800D03*
X107873800Y-88747600D03*
%TO.N,/BTN1*%
X111683800Y-96951800D03*
X117525800Y-90525600D03*
%TO.N,/BTN2*%
X111709200Y-95707200D03*
X116636800Y-89712800D03*
D28*
%TO.N,/CANL*%
X84391500Y-87185500D03*
%TO.N,/CANH*%
X84404200Y-78435200D03*
D29*
%TO.N,/Relay*%
X98120200Y-94640400D03*
X107340400Y-97053400D03*
%TO.N,/PWM*%
X119634000Y-130708400D03*
X108966000Y-104394000D03*
%TO.N,/CLK1*%
X105333800Y-102209600D03*
X105664000Y-119557800D03*
%TO.N,/DIR1*%
X107619800Y-114452400D03*
X107619800Y-106832400D03*
%TO.N,/~EN1*%
X105879900Y-114084100D03*
X105892600Y-106349800D03*
%TO.N,/CLK2*%
X108127800Y-120827800D03*
X106705400Y-103936800D03*
%TO.N,/DIR2*%
X111125000Y-117678200D03*
X110617000Y-107289600D03*
%TO.N,/~EN2*%
X111150400Y-114477800D03*
X109575600Y-107086400D03*
%TO.N,/CAN_Rx*%
X106553000Y-88747600D03*
%TO.N,/CAN_Tx*%
X106527600Y-89966800D03*
%TO.N,/Ext0*%
X119583200Y-120827800D03*
X116357400Y-100863400D03*
%TO.N,/Ext1*%
X117383031Y-100828369D03*
X122961400Y-118313200D03*
%TO.N,/Ext2*%
X118592600Y-100838000D03*
X122910600Y-114477800D03*
%TO.N,/CLK3*%
X113969800Y-120497600D03*
X108051600Y-104876600D03*
%TO.N,/DIR3*%
X114350800Y-117068600D03*
X115163600Y-103124000D03*
%TO.N,/~EN3*%
X113385600Y-114477800D03*
X111607600Y-106934000D03*
%TO.N,/Enc2b*%
X128168400Y-87376000D03*
X112141000Y-99288600D03*
%TO.N,/Enc2a*%
X129463800Y-86741000D03*
X111328200Y-98374200D03*
D28*
%TO.N,Net-(J12-Pad2)*%
X143738600Y-128930400D03*
X149352000Y-125984000D03*
X143789400Y-130479800D03*
X149326600Y-127482600D03*
X147294600Y-128930400D03*
X145872200Y-128930400D03*
X148920200Y-128930400D03*
D29*
%TO.N,/Enc1a*%
X131724400Y-85877400D03*
X117043200Y-97891600D03*
%TO.N,/Enc1b*%
X130632200Y-85902800D03*
X115824000Y-97891600D03*
%TO.N,/Enc3a*%
X111150400Y-90373200D03*
X113639600Y-80137000D03*
%TO.N,/Enc3b*%
X110972600Y-89204800D03*
X113614200Y-78638400D03*
%TO.N,Net-(R17-Pad1)*%
X108762800Y-95250000D03*
%TO.N,Net-(R30-Pad2)*%
X134035800Y-88569800D03*
X119659400Y-97332800D03*
%TO.N,Net-(R31-Pad2)*%
X119888000Y-95834200D03*
X133794500Y-87033100D03*
%TO.N,Net-(TP3-Pad1)*%
X107315000Y-98196400D03*
%TD*%
D30*
%TO.N,GND*%
X89763600Y-116037300D02*
X90045600Y-116319300D01*
X89763600Y-114350800D02*
X89763600Y-116037300D01*
X97129600Y-116014500D02*
X96824800Y-116319300D01*
X97129600Y-114350800D02*
X97129600Y-116014500D01*
X96824800Y-119506500D02*
X95503500Y-120827800D01*
D31*
X137414000Y-123119000D02*
X136646800Y-122351800D01*
X137414000Y-132994400D02*
X137414000Y-123119000D01*
X137414000Y-132994400D02*
X137414000Y-134315200D01*
X137414000Y-134315200D02*
X139700000Y-136601200D01*
X139700000Y-136601200D02*
X147650200Y-136601200D01*
X148767800Y-135483600D02*
X148767800Y-132994400D01*
X147650200Y-136601200D02*
X148767800Y-135483600D01*
D30*
X106406200Y-78041800D02*
X106444000Y-78079600D01*
X106444000Y-78079600D02*
X106444000Y-81813400D01*
X118605300Y-83706700D02*
X118580900Y-83731100D01*
X118605300Y-74510900D02*
X118605300Y-83706700D01*
D31*
X150215600Y-104695200D02*
X150215600Y-101295200D01*
X150215600Y-101295200D02*
X150215600Y-98704400D01*
X147223600Y-95712400D02*
X140817600Y-95712400D01*
X150215600Y-98704400D02*
X147223600Y-95712400D01*
D30*
X97129600Y-111229000D02*
X96507700Y-110607100D01*
X97129600Y-114350800D02*
X97129600Y-111229000D01*
X96507700Y-103364900D02*
X96507700Y-103161700D01*
X99339400Y-100330000D02*
X99339400Y-98552000D01*
X96507700Y-103161700D02*
X99339400Y-100330000D01*
X96507700Y-104888900D02*
X96507700Y-103364900D01*
D32*
X99356333Y-129686800D02*
X107679066Y-129686800D01*
X95503500Y-129478500D02*
X95295200Y-129686800D01*
X95503500Y-120827800D02*
X95503500Y-129478500D01*
X95295200Y-129686800D02*
X99356333Y-129686800D01*
X91033600Y-129686800D02*
X95295200Y-129686800D01*
X102666800Y-120827800D02*
X102743000Y-120904000D01*
X95503500Y-120827800D02*
X102666800Y-120827800D01*
X102743000Y-120904000D02*
X103835200Y-121996200D01*
X103835200Y-121996200D02*
X115951000Y-121996200D01*
D30*
X96824800Y-116319300D02*
X96824800Y-118618000D01*
X96824800Y-118618000D02*
X96824800Y-119506500D01*
X95503500Y-122022100D02*
X95503500Y-120827800D01*
X94691200Y-122834400D02*
X95503500Y-122022100D01*
X90246200Y-122834400D02*
X94691200Y-122834400D01*
X90045600Y-122633800D02*
X90246200Y-122834400D01*
X90045600Y-116319300D02*
X90045600Y-122633800D01*
D32*
X119735600Y-134772400D02*
X119735600Y-135915400D01*
X119735600Y-135915400D02*
X118389400Y-137261600D01*
X118389400Y-137261600D02*
X114223800Y-137261600D01*
X113238800Y-136276600D02*
X113238800Y-129686800D01*
X114223800Y-137261600D02*
X113238800Y-136276600D01*
X113238800Y-129686800D02*
X107679066Y-129686800D01*
X116001800Y-129686800D02*
X113238800Y-129686800D01*
X143408400Y-74510900D02*
X143408400Y-77673200D01*
X147465200Y-81730000D02*
X155710000Y-81730000D01*
X143408400Y-77673200D02*
X147465200Y-81730000D01*
D30*
X131006850Y-74510900D02*
X131006850Y-73488550D01*
X131006850Y-73488550D02*
X132029200Y-72466200D01*
X141363700Y-72466200D02*
X143408400Y-74510900D01*
X132029200Y-72466200D02*
X141363700Y-72466200D01*
X132029200Y-72466200D02*
X119278400Y-72466200D01*
X118605300Y-73139300D02*
X118605300Y-74510900D01*
X119278400Y-72466200D02*
X118605300Y-73139300D01*
X116936000Y-76180200D02*
X118605300Y-74510900D01*
X106406200Y-76180200D02*
X116936000Y-76180200D01*
X106406200Y-74498200D02*
X106406200Y-76180200D01*
X106406200Y-76180200D02*
X106406200Y-78041800D01*
X99847400Y-86563200D02*
X99872800Y-86537800D01*
X96269800Y-86563200D02*
X99847400Y-86563200D01*
X106444000Y-83609400D02*
X106451400Y-83616800D01*
X106444000Y-81813400D02*
X106444000Y-83609400D01*
D32*
X91528500Y-104888900D02*
X96507700Y-104888900D01*
X96269800Y-91715600D02*
X96269800Y-86563200D01*
X83489800Y-102123400D02*
X83489800Y-100711000D01*
X85420200Y-98780600D02*
X91528500Y-104888900D01*
X83489800Y-100711000D02*
X85420200Y-98780600D01*
D30*
X134574400Y-95712400D02*
X134569200Y-95707200D01*
X140817600Y-95712400D02*
X134574400Y-95712400D01*
D31*
X150190200Y-116733200D02*
X140152000Y-116733200D01*
X140152000Y-116733200D02*
X139750800Y-116332000D01*
X139750800Y-116332000D02*
X137693400Y-116332000D01*
X137287000Y-115925600D02*
X137287000Y-113106200D01*
X137693400Y-116332000D02*
X137287000Y-115925600D01*
D32*
X108762800Y-100152200D02*
X109016800Y-100406200D01*
X108762800Y-98346200D02*
X108762800Y-100152200D01*
X93040200Y-94945200D02*
X93154500Y-94830900D01*
D30*
X93040200Y-96164400D02*
X93040200Y-94945200D01*
D32*
X93154500Y-94830900D02*
X96269800Y-91715600D01*
X102705300Y-104888900D02*
X96507700Y-104888900D01*
X103047800Y-102057200D02*
X103047800Y-104546400D01*
X102057200Y-101066600D02*
X103047800Y-102057200D01*
X103047800Y-104546400D02*
X102705300Y-104888900D01*
X102733998Y-98907600D02*
X102057200Y-99584398D01*
X104673400Y-98907600D02*
X102733998Y-98907600D01*
X106172000Y-100406200D02*
X104673400Y-98907600D01*
X102057200Y-99584398D02*
X102057200Y-101066600D01*
X109016800Y-100406200D02*
X106172000Y-100406200D01*
D33*
X92964000Y-96240600D02*
X93040200Y-96164400D01*
X81762600Y-96240600D02*
X92964000Y-96240600D01*
X82880200Y-96240600D02*
X85420200Y-98780600D01*
X81762600Y-96240600D02*
X82880200Y-96240600D01*
D30*
%TO.N,+5V*%
X92887800Y-76276200D02*
X92887800Y-77901800D01*
X93929200Y-78943200D02*
X96269800Y-78943200D01*
X92887800Y-77901800D02*
X93929200Y-78943200D01*
D31*
X144600400Y-102995200D02*
X140817600Y-99212400D01*
X146515600Y-102995200D02*
X144600400Y-102995200D01*
X140817600Y-99212400D02*
X133959600Y-99212400D01*
X133959600Y-99212400D02*
X128447800Y-104724200D01*
X128447800Y-105468400D02*
X128150600Y-105765600D01*
X128447800Y-104724200D02*
X128447800Y-105468400D01*
D34*
X124491500Y-135953500D02*
X124491500Y-126054100D01*
X124491500Y-126054100D02*
X129641600Y-120904000D01*
X129641600Y-120904000D02*
X129641600Y-114071400D01*
X128150600Y-112580400D02*
X128150600Y-105765600D01*
X129641600Y-114071400D02*
X128150600Y-112580400D01*
X117551200Y-111912400D02*
X117576600Y-111937800D01*
X117551200Y-105791000D02*
X117551200Y-111912400D01*
X99197000Y-107223400D02*
X99212400Y-107238800D01*
X83489800Y-107223400D02*
X99197000Y-107223400D01*
X80213200Y-104292400D02*
X80213200Y-105714800D01*
X81721800Y-107223400D02*
X83489800Y-107223400D01*
X80213200Y-105714800D02*
X81721800Y-107223400D01*
X78879700Y-102958900D02*
X78981300Y-103060500D01*
X78981300Y-103060500D02*
X80213200Y-104292400D01*
X78879700Y-101638100D02*
X78879700Y-102958900D01*
X92887800Y-92608400D02*
X92887800Y-87198200D01*
X91008200Y-94488000D02*
X92887800Y-92608400D01*
X78879700Y-96481900D02*
X80873600Y-94488000D01*
X92887800Y-87198200D02*
X92887800Y-76276200D01*
X80873600Y-94488000D02*
X91008200Y-94488000D01*
X78879700Y-101638100D02*
X78879700Y-96481900D01*
X78816200Y-101574600D02*
X78879700Y-101638100D01*
X76123800Y-101574600D02*
X78816200Y-101574600D01*
X76107200Y-101558000D02*
X76123800Y-101574600D01*
X64507200Y-105426600D02*
X68375800Y-101558000D01*
X64507200Y-108856200D02*
X64507200Y-105426600D01*
X68375800Y-101558000D02*
X76107200Y-101558000D01*
X64509600Y-108858600D02*
X64507200Y-108856200D01*
D30*
%TO.N,+3V3*%
X97002600Y-99822000D02*
X88569800Y-99822000D01*
X100406200Y-72644000D02*
X100406200Y-74498200D01*
X101219000Y-71831200D02*
X100406200Y-72644000D01*
X100406200Y-78056800D02*
X100383400Y-78079600D01*
X100406200Y-74498200D02*
X100406200Y-78056800D01*
X100383400Y-81534000D02*
X100383400Y-78079600D01*
D34*
X122491500Y-123888500D02*
X126568200Y-119811800D01*
X122491500Y-135953500D02*
X122491500Y-123888500D01*
D30*
X110299500Y-95669100D02*
X110299500Y-91782900D01*
X110299500Y-91782900D02*
X109016800Y-90500200D01*
X109016800Y-90500200D02*
X109016800Y-86131400D01*
X108381800Y-85496400D02*
X108381800Y-77978000D01*
X109016800Y-86131400D02*
X108381800Y-85496400D01*
X108407200Y-74676000D02*
X108407200Y-71831200D01*
X108407200Y-71831200D02*
X101219000Y-71831200D01*
X114731800Y-71831200D02*
X108407200Y-71831200D01*
D32*
X110299500Y-100926900D02*
X110299500Y-95669100D01*
X109982000Y-101244400D02*
X110299500Y-100926900D01*
X105587800Y-101244400D02*
X109982000Y-101244400D01*
X104267000Y-99923600D02*
X105587800Y-101244400D01*
X103124000Y-99923600D02*
X104267000Y-99923600D01*
D30*
%TO.N,Earth*%
X78511400Y-86258400D02*
X78511400Y-88798400D01*
X87219800Y-86563200D02*
X87219800Y-87430600D01*
X79400400Y-89687400D02*
X78511400Y-88798400D01*
D32*
X87219800Y-87430600D02*
X87219800Y-87481400D01*
X85013800Y-89687400D02*
X79400400Y-89687400D01*
X87219800Y-87481400D02*
X85013800Y-89687400D01*
D34*
X87219800Y-86563200D02*
X87219800Y-88319600D01*
X87219800Y-88319600D02*
X85572600Y-89966800D01*
X85572600Y-89966800D02*
X79730600Y-89966800D01*
X78486000Y-88722200D02*
X78486000Y-82727800D01*
X79730600Y-89966800D02*
X78486000Y-88722200D01*
X73155800Y-82727800D02*
X73101200Y-82782400D01*
X78486000Y-82727800D02*
X73155800Y-82727800D01*
X90347800Y-76276200D02*
X90347800Y-74625200D01*
X90347800Y-74625200D02*
X89281000Y-73558400D01*
X89281000Y-73558400D02*
X81280000Y-73558400D01*
X78486000Y-76352400D02*
X78486000Y-82727800D01*
X81280000Y-73558400D02*
X78486000Y-76352400D01*
D30*
%TO.N,/ADC2*%
X95079600Y-116314500D02*
X95074800Y-116319300D01*
X95079600Y-114350800D02*
X95079600Y-116314500D01*
X95097600Y-116342100D02*
X95074800Y-116319300D01*
X95097600Y-117729000D02*
X95097600Y-116342100D01*
X101904800Y-111252000D02*
X101904800Y-110896400D01*
X101904800Y-112014000D02*
X101904800Y-111252000D01*
X101904800Y-109270800D02*
X101904800Y-112014000D01*
X104254300Y-106921300D02*
X101904800Y-109270800D01*
%TO.N,/ADC1*%
X91813600Y-116301300D02*
X91795600Y-116319300D01*
X91813600Y-114350800D02*
X91813600Y-116301300D01*
X91813600Y-114350800D02*
X93395800Y-114350800D01*
X104089200Y-105460800D02*
X100342700Y-109207300D01*
X100342700Y-109207300D02*
X100342700Y-112026700D01*
D31*
%TO.N,Net-(C10-Pad1)*%
X132414000Y-123084600D02*
X133146800Y-122351800D01*
X132414000Y-132994400D02*
X132414000Y-123084600D01*
X140589000Y-120650000D02*
X138912600Y-118973600D01*
X138912600Y-118973600D02*
X134416800Y-118973600D01*
X133146800Y-120243600D02*
X133146800Y-122351800D01*
X134416800Y-118973600D02*
X133146800Y-120243600D01*
X150190200Y-108120600D02*
X150215600Y-108095200D01*
X150190200Y-113233200D02*
X150190200Y-108120600D01*
X141732000Y-120650000D02*
X140589000Y-120650000D01*
X149174200Y-120650000D02*
X141732000Y-120650000D01*
D34*
X149174200Y-123037600D02*
X149174200Y-120650000D01*
X141732000Y-123367800D02*
X141782800Y-123418600D01*
X141732000Y-122047000D02*
X141757400Y-122021600D01*
X141732000Y-120650000D02*
X141732000Y-122047000D01*
X141732000Y-122047000D02*
X141732000Y-123367800D01*
D31*
X150190200Y-113233200D02*
X151028400Y-113233200D01*
X151028400Y-113233200D02*
X153238200Y-115443000D01*
X153238200Y-115443000D02*
X153238200Y-118846600D01*
X151434800Y-120650000D02*
X149174200Y-120650000D01*
X153238200Y-118846600D02*
X151434800Y-120650000D01*
D30*
%TO.N,/I2C1_SCL*%
X102133400Y-80010000D02*
X102285800Y-80162400D01*
X102133400Y-78079600D02*
X102133400Y-80010000D01*
X104394000Y-78079600D02*
X102133400Y-78079600D01*
X106679353Y-87578553D02*
X106823800Y-87578553D01*
X102514400Y-83413600D02*
X106679353Y-87578553D01*
%TO.N,/I2C1_SDA*%
X104114600Y-81534000D02*
X104394000Y-81813400D01*
X102133400Y-81534000D02*
X104114600Y-81534000D01*
X104394000Y-81813400D02*
X104394000Y-80187800D01*
X107873800Y-88061800D02*
X107873800Y-88747600D01*
X107873800Y-86766400D02*
X107873800Y-88061800D01*
X104394000Y-83286600D02*
X107873800Y-86766400D01*
X104394000Y-81813400D02*
X104394000Y-83286600D01*
D32*
%TO.N,/BTN1*%
X117525800Y-90525600D02*
X117525800Y-91414600D01*
X111988600Y-96951800D02*
X111683800Y-96951800D01*
X117525800Y-91414600D02*
X111988600Y-96951800D01*
%TO.N,/BTN2*%
X111709200Y-95707200D02*
X112293400Y-95707200D01*
X116636800Y-91363800D02*
X116636800Y-89712800D01*
X112293400Y-95707200D02*
X116636800Y-91363800D01*
D31*
%TO.N,Net-(J10-Pad2)*%
X75861900Y-133057700D02*
X75861900Y-128820900D01*
X70459600Y-123418600D02*
X70459600Y-106908600D01*
X75861900Y-128820900D02*
X70459600Y-123418600D01*
D34*
%TO.N,/CANL*%
X87219800Y-84023200D02*
X85166200Y-84023200D01*
X84391500Y-84797900D02*
X84391500Y-87185500D01*
X85166200Y-84023200D02*
X84391500Y-84797900D01*
%TO.N,/CANH*%
X87219800Y-81483200D02*
X85369400Y-81483200D01*
X84404200Y-80518000D02*
X84404200Y-78435200D01*
X85369400Y-81483200D02*
X84404200Y-80518000D01*
D30*
%TO.N,/Relay*%
X104927400Y-94640400D02*
X107340400Y-97053400D01*
X98120200Y-94640400D02*
X104927400Y-94640400D01*
D32*
%TO.N,/PWM*%
X119634000Y-130683000D02*
X119634000Y-130708400D01*
X108966000Y-104394000D02*
X108966000Y-105156000D01*
X112395000Y-106527600D02*
X112395000Y-111963200D01*
X108966000Y-105156000D02*
X109829600Y-106019600D01*
X117043200Y-118541800D02*
X117043200Y-128092200D01*
X109829600Y-106019600D02*
X111887000Y-106019600D01*
X111887000Y-106019600D02*
X112395000Y-106527600D01*
X114274600Y-115747800D02*
X113576100Y-116446300D01*
X117043200Y-128092200D02*
X119634000Y-130683000D01*
X114274600Y-113842800D02*
X114274600Y-115747800D01*
X112395000Y-111963200D02*
X114274600Y-113842800D01*
X113576100Y-116446300D02*
X113576100Y-117894100D01*
X113919000Y-118237000D02*
X116738400Y-118237000D01*
X113576100Y-117894100D02*
X113919000Y-118237000D01*
X116738400Y-118237000D02*
X117043200Y-118541800D01*
%TO.N,/CLK1*%
X105067100Y-102476300D02*
X105333800Y-102209600D01*
X105067100Y-118960900D02*
X105067100Y-102476300D01*
X105664000Y-119557800D02*
X105067100Y-118960900D01*
%TO.N,/DIR1*%
X107619800Y-114452400D02*
X107619800Y-106832400D01*
%TO.N,/~EN1*%
X105879900Y-106362500D02*
X105892600Y-106349800D01*
X105879900Y-114084100D02*
X105879900Y-106362500D01*
%TO.N,/CLK2*%
X107721400Y-115976400D02*
X107721400Y-120421400D01*
X107721400Y-120421400D02*
X108127800Y-120827800D01*
X106705400Y-114960400D02*
X107721400Y-115976400D01*
X106705400Y-103936800D02*
X106705400Y-114960400D01*
%TO.N,/DIR2*%
X111900401Y-115302599D02*
X111125000Y-116078000D01*
X111125000Y-116078000D02*
X111125000Y-117678200D01*
X111900401Y-113602201D02*
X111900401Y-115302599D01*
X110617000Y-112318800D02*
X111900401Y-113602201D01*
X110617000Y-107289600D02*
X110617000Y-112318800D01*
%TO.N,/~EN2*%
X109575600Y-112903000D02*
X111150400Y-114477800D01*
X109575600Y-107086400D02*
X109575600Y-112903000D01*
D30*
%TO.N,/CAN_Rx*%
X106070400Y-88747600D02*
X106553000Y-88747600D01*
X101066600Y-83743800D02*
X106070400Y-88747600D01*
X99822000Y-83743800D02*
X101066600Y-83743800D01*
X97561400Y-81483200D02*
X99822000Y-83743800D01*
X96269800Y-81483200D02*
X97561400Y-81483200D01*
%TO.N,/CAN_Tx*%
X100761800Y-84785200D02*
X105943400Y-89966800D01*
X98831400Y-84785200D02*
X100761800Y-84785200D01*
X105943400Y-89966800D02*
X106527600Y-89966800D01*
X98069400Y-84023200D02*
X98831400Y-84785200D01*
X96269800Y-84023200D02*
X98069400Y-84023200D01*
D32*
%TO.N,/Ext0*%
X120269000Y-104775000D02*
X116357400Y-100863400D01*
X121462800Y-105968800D02*
X120269000Y-104775000D01*
X121462800Y-118110000D02*
X121462800Y-105968800D01*
X119583200Y-119989600D02*
X121462800Y-118110000D01*
X119583200Y-120827800D02*
X119583200Y-119989600D01*
%TO.N,/Ext1*%
X122097800Y-117449600D02*
X122961400Y-118313200D01*
X122097800Y-105543138D02*
X122097800Y-117449600D01*
X117383031Y-100828369D02*
X122097800Y-105543138D01*
%TO.N,/Ext2*%
X122910600Y-105156000D02*
X118592600Y-100838000D01*
X122910600Y-114477800D02*
X122910600Y-105156000D01*
%TO.N,/CLK3*%
X108051600Y-105156000D02*
X108051600Y-104876600D01*
X108521500Y-105625900D02*
X108051600Y-105156000D01*
X108521500Y-119341900D02*
X108521500Y-105625900D01*
X109677200Y-120497600D02*
X108521500Y-119341900D01*
X113969800Y-120497600D02*
X109677200Y-120497600D01*
%TO.N,/DIR3*%
X114350800Y-117068600D02*
X115163600Y-116255800D01*
X115163600Y-116255800D02*
X115163600Y-103124000D01*
%TO.N,/~EN3*%
X113385600Y-113919000D02*
X113385600Y-114477800D01*
X111607600Y-112141000D02*
X113385600Y-113919000D01*
X111607600Y-106934000D02*
X111607600Y-112141000D01*
D34*
%TO.N,Net-(C4-Pad1)*%
X87219800Y-76864200D02*
X87807800Y-76276200D01*
X87219800Y-78943200D02*
X87219800Y-76864200D01*
D30*
%TO.N,/Enc2b*%
X122758200Y-87376000D02*
X128168400Y-87376000D01*
X113474500Y-96659700D02*
X122758200Y-87376000D01*
X113474500Y-98894900D02*
X113474500Y-96659700D01*
X113080800Y-99288600D02*
X113474500Y-98894900D01*
X112141000Y-99288600D02*
X113080800Y-99288600D01*
%TO.N,/Enc2a*%
X128701800Y-88519000D02*
X129463800Y-87757000D01*
X123012200Y-88519000D02*
X128701800Y-88519000D01*
X114427000Y-99466400D02*
X114427000Y-97104200D01*
X113665000Y-100228400D02*
X114427000Y-99466400D01*
X111822798Y-100228400D02*
X113665000Y-100228400D01*
X111252000Y-99657602D02*
X111822798Y-100228400D01*
X114427000Y-97104200D02*
X123012200Y-88519000D01*
X111252000Y-99060000D02*
X111252000Y-99657602D01*
X129463800Y-87757000D02*
X129463800Y-86741000D01*
X111328200Y-98983800D02*
X111252000Y-99060000D01*
X111328200Y-98374200D02*
X111328200Y-98983800D01*
D31*
%TO.N,Net-(D12-Pad1)*%
X138780200Y-106395200D02*
X138150600Y-105765600D01*
X146515600Y-106395200D02*
X138780200Y-106395200D01*
X141097000Y-111813800D02*
X146515600Y-106395200D01*
X141097000Y-113106200D02*
X141097000Y-111813800D01*
%TO.N,Net-(J10-Pad1)*%
X80861900Y-133057700D02*
X80861900Y-128182100D01*
X76509600Y-123829800D02*
X76509600Y-121058600D01*
X80861900Y-128182100D02*
X76509600Y-123829800D01*
%TO.N,Net-(J10-Pad3)*%
X70861900Y-133057700D02*
X70861900Y-129866100D01*
X64459600Y-123463800D02*
X64459600Y-121108600D01*
X70861900Y-129866100D02*
X64459600Y-123463800D01*
%TO.N,Net-(J12-Pad2)*%
X143767800Y-128959600D02*
X143738600Y-128930400D01*
X143767800Y-132994400D02*
X143767800Y-128959600D01*
X143738600Y-128930400D02*
X143738600Y-126644400D01*
X144399000Y-125984000D02*
X149352000Y-125984000D01*
X143738600Y-126644400D02*
X144399000Y-125984000D01*
D34*
X149352000Y-127457200D02*
X149326600Y-127482600D01*
X149352000Y-125984000D02*
X149352000Y-127457200D01*
D31*
X143738600Y-128930400D02*
X145872200Y-128930400D01*
X147294600Y-128930400D02*
X145872200Y-128930400D01*
X148920200Y-128930400D02*
X147294600Y-128930400D01*
D30*
%TO.N,/Enc1a*%
X117043200Y-97256600D02*
X117043200Y-97891600D01*
X123850400Y-90449400D02*
X117043200Y-97256600D01*
X129692400Y-90449400D02*
X123850400Y-90449400D01*
X131724400Y-88417400D02*
X129692400Y-90449400D01*
X131724400Y-85877400D02*
X131724400Y-88417400D01*
%TO.N,/Enc1b*%
X130632200Y-85902800D02*
X130632200Y-87909400D01*
X130632200Y-87909400D02*
X129108200Y-89433400D01*
X129108200Y-89433400D02*
X123418600Y-89433400D01*
X123418600Y-89433400D02*
X119126000Y-93726000D01*
X115824000Y-97028000D02*
X115824000Y-97891600D01*
X119126000Y-93726000D02*
X115824000Y-97028000D01*
%TO.N,/Enc3a*%
X113639600Y-80137000D02*
X112268000Y-81508600D01*
X112268000Y-81508600D02*
X112268000Y-89281000D01*
X111175800Y-90373200D02*
X111150400Y-90373200D01*
X112268000Y-89281000D02*
X111175800Y-90373200D01*
%TO.N,/Enc3b*%
X113614200Y-78638400D02*
X111353600Y-80899000D01*
X111353600Y-88823800D02*
X110972600Y-89204800D01*
X111353600Y-80899000D02*
X111353600Y-88823800D01*
D33*
%TO.N,Net-(R17-Pad1)*%
X108762800Y-95250000D02*
X108762800Y-96596200D01*
D30*
%TO.N,Net-(R30-Pad2)*%
X130225800Y-92379800D02*
X134035800Y-88569800D01*
X124841000Y-92379800D02*
X130225800Y-92379800D01*
X119888000Y-97332800D02*
X124841000Y-92379800D01*
X119659400Y-97332800D02*
X119888000Y-97332800D01*
%TO.N,Net-(R31-Pad2)*%
X132867400Y-88569800D02*
X132867400Y-87960200D01*
X130022600Y-91414600D02*
X132867400Y-88569800D01*
X124307600Y-91414600D02*
X130022600Y-91414600D01*
X132867400Y-87960200D02*
X133794500Y-87033100D01*
X119888000Y-95834200D02*
X124307600Y-91414600D01*
%TO.N,Net-(TP3-Pad1)*%
X107315000Y-98196400D02*
X102336600Y-98196400D01*
X100914200Y-99618800D02*
X100914200Y-102793800D01*
X102336600Y-98196400D02*
X100914200Y-99618800D01*
%TD*%
D35*
%TO.N,GND*%
X157790001Y-72543509D02*
X157778201Y-72515021D01*
X157435114Y-72001554D01*
X156998446Y-71564886D01*
X156484979Y-71221799D01*
X155914446Y-70985476D01*
X155308771Y-70865000D01*
X154691229Y-70865000D01*
X154085554Y-70985476D01*
X153515021Y-71221799D01*
X153001554Y-71564886D01*
X152564886Y-72001554D01*
X152221799Y-72515021D01*
X151985476Y-73085554D01*
X151865000Y-73691229D01*
X151865000Y-74308771D01*
X151985476Y-74914446D01*
X152221799Y-75484979D01*
X152564886Y-75998446D01*
X153001554Y-76435114D01*
X153515021Y-76778201D01*
X154085554Y-77014524D01*
X154691229Y-77135000D01*
X155308771Y-77135000D01*
X155914446Y-77014524D01*
X156484979Y-76778201D01*
X156998446Y-76435114D01*
X157435114Y-75998446D01*
X157778201Y-75484979D01*
X157790001Y-75456492D01*
X157790001Y-80555602D01*
X157720766Y-80426073D01*
X157379609Y-80239997D01*
X155889605Y-81730000D01*
X157379609Y-83220003D01*
X157720766Y-83033927D01*
X157790001Y-82900001D01*
X157790001Y-92595602D01*
X157720766Y-92466073D01*
X157379609Y-92279997D01*
X155889605Y-93770000D01*
X157379609Y-95260003D01*
X157720766Y-95073927D01*
X157790001Y-94940001D01*
X157790000Y-131543506D01*
X157778201Y-131515021D01*
X157435114Y-131001554D01*
X156998446Y-130564886D01*
X156484979Y-130221799D01*
X155914446Y-129985476D01*
X155308771Y-129865000D01*
X154691229Y-129865000D01*
X154085554Y-129985476D01*
X153515021Y-130221799D01*
X153001554Y-130564886D01*
X152564886Y-131001554D01*
X152221799Y-131515021D01*
X151985476Y-132085554D01*
X151865000Y-132691229D01*
X151865000Y-133308771D01*
X151985476Y-133914446D01*
X152221799Y-134484979D01*
X152564886Y-134998446D01*
X153001554Y-135435114D01*
X153515021Y-135778201D01*
X154085554Y-136014524D01*
X154691229Y-136135000D01*
X155308771Y-136135000D01*
X155914446Y-136014524D01*
X156484979Y-135778201D01*
X156998446Y-135435114D01*
X157435114Y-134998446D01*
X157778201Y-134484979D01*
X157790000Y-134456494D01*
X157790000Y-137790000D01*
X84127000Y-137790000D01*
X84127000Y-137083127D01*
X84159128Y-137023020D01*
X84199727Y-136889184D01*
X84213435Y-136750000D01*
X84210000Y-136715123D01*
X84210000Y-131686800D01*
X89517625Y-131686800D01*
X89541470Y-131928902D01*
X89612089Y-132161701D01*
X89726767Y-132376249D01*
X89881098Y-132564302D01*
X90030362Y-132686800D01*
X89881098Y-132809298D01*
X89726767Y-132997351D01*
X89612089Y-133211899D01*
X89541470Y-133444698D01*
X89517625Y-133686800D01*
X89541470Y-133928902D01*
X89612089Y-134161701D01*
X89726767Y-134376249D01*
X89881098Y-134564302D01*
X89919711Y-134595991D01*
X89915213Y-134598395D01*
X89780638Y-134708838D01*
X89670195Y-134843413D01*
X89588128Y-134996949D01*
X89537592Y-135163545D01*
X89520528Y-135336799D01*
X89520528Y-136036801D01*
X89537592Y-136210055D01*
X89588128Y-136376651D01*
X89670195Y-136530187D01*
X89780638Y-136664762D01*
X89915213Y-136775205D01*
X90068749Y-136857272D01*
X90235345Y-136907808D01*
X90408599Y-136924872D01*
X91658601Y-136924872D01*
X91831855Y-136907808D01*
X91998451Y-136857272D01*
X92151987Y-136775205D01*
X92286562Y-136664762D01*
X92397005Y-136530187D01*
X92479072Y-136376651D01*
X92529608Y-136210055D01*
X92546672Y-136036801D01*
X92546672Y-135336799D01*
X92529608Y-135163545D01*
X92479072Y-134996949D01*
X92397005Y-134843413D01*
X92286562Y-134708838D01*
X92151987Y-134598395D01*
X92147489Y-134595991D01*
X92186102Y-134564302D01*
X92340433Y-134376249D01*
X92455111Y-134161701D01*
X92525730Y-133928902D01*
X92549575Y-133686800D01*
X92525730Y-133444698D01*
X92455111Y-133211899D01*
X92340433Y-132997351D01*
X92186102Y-132809298D01*
X92036838Y-132686800D01*
X92186102Y-132564302D01*
X92340433Y-132376249D01*
X92455111Y-132161701D01*
X92525730Y-131928902D01*
X92549575Y-131686800D01*
X97840358Y-131686800D01*
X97864203Y-131928902D01*
X97934822Y-132161701D01*
X98049500Y-132376249D01*
X98203831Y-132564302D01*
X98353095Y-132686800D01*
X98203831Y-132809298D01*
X98049500Y-132997351D01*
X97934822Y-133211899D01*
X97864203Y-133444698D01*
X97840358Y-133686800D01*
X97864203Y-133928902D01*
X97934822Y-134161701D01*
X98049500Y-134376249D01*
X98203831Y-134564302D01*
X98242444Y-134595991D01*
X98237946Y-134598395D01*
X98103371Y-134708838D01*
X97992928Y-134843413D01*
X97910861Y-134996949D01*
X97860325Y-135163545D01*
X97843261Y-135336799D01*
X97843261Y-136036801D01*
X97860325Y-136210055D01*
X97910861Y-136376651D01*
X97992928Y-136530187D01*
X98103371Y-136664762D01*
X98237946Y-136775205D01*
X98391482Y-136857272D01*
X98558078Y-136907808D01*
X98731332Y-136924872D01*
X99981334Y-136924872D01*
X100154588Y-136907808D01*
X100321184Y-136857272D01*
X100474720Y-136775205D01*
X100609295Y-136664762D01*
X100719738Y-136530187D01*
X100801805Y-136376651D01*
X100852341Y-136210055D01*
X100869405Y-136036801D01*
X100869405Y-135336799D01*
X100852341Y-135163545D01*
X100801805Y-134996949D01*
X100719738Y-134843413D01*
X100609295Y-134708838D01*
X100474720Y-134598395D01*
X100470222Y-134595991D01*
X100508835Y-134564302D01*
X100663166Y-134376249D01*
X100777844Y-134161701D01*
X100848463Y-133928902D01*
X100872308Y-133686800D01*
X100848463Y-133444698D01*
X100777844Y-133211899D01*
X100663166Y-132997351D01*
X100508835Y-132809298D01*
X100359571Y-132686800D01*
X100508835Y-132564302D01*
X100663166Y-132376249D01*
X100777844Y-132161701D01*
X100848463Y-131928902D01*
X100872308Y-131686800D01*
X106163091Y-131686800D01*
X106186936Y-131928902D01*
X106257555Y-132161701D01*
X106372233Y-132376249D01*
X106526564Y-132564302D01*
X106675828Y-132686800D01*
X106526564Y-132809298D01*
X106372233Y-132997351D01*
X106257555Y-133211899D01*
X106186936Y-133444698D01*
X106163091Y-133686800D01*
X106186936Y-133928902D01*
X106257555Y-134161701D01*
X106372233Y-134376249D01*
X106526564Y-134564302D01*
X106565177Y-134595991D01*
X106560679Y-134598395D01*
X106426104Y-134708838D01*
X106315661Y-134843413D01*
X106233594Y-134996949D01*
X106183058Y-135163545D01*
X106165994Y-135336799D01*
X106165994Y-136036801D01*
X106183058Y-136210055D01*
X106233594Y-136376651D01*
X106315661Y-136530187D01*
X106426104Y-136664762D01*
X106560679Y-136775205D01*
X106714215Y-136857272D01*
X106880811Y-136907808D01*
X107054065Y-136924872D01*
X108304067Y-136924872D01*
X108477321Y-136907808D01*
X108643917Y-136857272D01*
X108797453Y-136775205D01*
X108932028Y-136664762D01*
X109042471Y-136530187D01*
X109124538Y-136376651D01*
X109175074Y-136210055D01*
X109192138Y-136036801D01*
X109192138Y-135336799D01*
X109175074Y-135163545D01*
X109124538Y-134996949D01*
X109042471Y-134843413D01*
X108932028Y-134708838D01*
X108797453Y-134598395D01*
X108792955Y-134595991D01*
X108831568Y-134564302D01*
X108985899Y-134376249D01*
X109100577Y-134161701D01*
X109171196Y-133928902D01*
X109195041Y-133686800D01*
X109171196Y-133444698D01*
X109100577Y-133211899D01*
X108985899Y-132997351D01*
X108831568Y-132809298D01*
X108682304Y-132686800D01*
X108831568Y-132564302D01*
X108985899Y-132376249D01*
X109100577Y-132161701D01*
X109171196Y-131928902D01*
X109195041Y-131686800D01*
X114485825Y-131686800D01*
X114509670Y-131928902D01*
X114580289Y-132161701D01*
X114694967Y-132376249D01*
X114849298Y-132564302D01*
X114998562Y-132686800D01*
X114849298Y-132809298D01*
X114694967Y-132997351D01*
X114580289Y-133211899D01*
X114509670Y-133444698D01*
X114485825Y-133686800D01*
X114509670Y-133928902D01*
X114580289Y-134161701D01*
X114694967Y-134376249D01*
X114849298Y-134564302D01*
X114887911Y-134595991D01*
X114883413Y-134598395D01*
X114748838Y-134708838D01*
X114638395Y-134843413D01*
X114556328Y-134996949D01*
X114505792Y-135163545D01*
X114488728Y-135336799D01*
X114488728Y-136036801D01*
X114505792Y-136210055D01*
X114556328Y-136376651D01*
X114638395Y-136530187D01*
X114748838Y-136664762D01*
X114883413Y-136775205D01*
X115036949Y-136857272D01*
X115203545Y-136907808D01*
X115376799Y-136924872D01*
X116626801Y-136924872D01*
X116800055Y-136907808D01*
X116966651Y-136857272D01*
X117120187Y-136775205D01*
X117254762Y-136664762D01*
X117365205Y-136530187D01*
X117447272Y-136376651D01*
X117497808Y-136210055D01*
X117514872Y-136036801D01*
X117514872Y-135336799D01*
X117514055Y-135328499D01*
X121253428Y-135328499D01*
X121253428Y-136578501D01*
X121270492Y-136751755D01*
X121321028Y-136918351D01*
X121403095Y-137071887D01*
X121513538Y-137206462D01*
X121648113Y-137316905D01*
X121801649Y-137398972D01*
X121968245Y-137449508D01*
X122141499Y-137466572D01*
X122841501Y-137466572D01*
X123014755Y-137449508D01*
X123181351Y-137398972D01*
X123334887Y-137316905D01*
X123469462Y-137206462D01*
X123579905Y-137071887D01*
X123582310Y-137067388D01*
X123613999Y-137106002D01*
X123802052Y-137260333D01*
X124016600Y-137375011D01*
X124249399Y-137445630D01*
X124491500Y-137469475D01*
X124733602Y-137445630D01*
X124966401Y-137375011D01*
X125180949Y-137260333D01*
X125369002Y-137106002D01*
X125491501Y-136956737D01*
X125613999Y-137106002D01*
X125802052Y-137260333D01*
X126016600Y-137375011D01*
X126249399Y-137445630D01*
X126491500Y-137469475D01*
X126733602Y-137445630D01*
X126966401Y-137375011D01*
X127180949Y-137260333D01*
X127369002Y-137106002D01*
X127523333Y-136917949D01*
X127638011Y-136703400D01*
X127708630Y-136470601D01*
X127726500Y-136289164D01*
X127726500Y-135617835D01*
X127708630Y-135436398D01*
X127638011Y-135203599D01*
X127523333Y-134989051D01*
X127369002Y-134800998D01*
X127180948Y-134646667D01*
X126966400Y-134531989D01*
X126733601Y-134461370D01*
X126491500Y-134437525D01*
X126249398Y-134461370D01*
X126016599Y-134531989D01*
X125802051Y-134646667D01*
X125626500Y-134790738D01*
X125626500Y-132803819D01*
X130479000Y-132803819D01*
X130479000Y-133184981D01*
X130553361Y-133558819D01*
X130699225Y-133910966D01*
X130910987Y-134227891D01*
X131180509Y-134497413D01*
X131497434Y-134709175D01*
X131849581Y-134855039D01*
X132223419Y-134929400D01*
X132604581Y-134929400D01*
X132978419Y-134855039D01*
X133330566Y-134709175D01*
X133647491Y-134497413D01*
X133850504Y-134294400D01*
X135475928Y-134294400D01*
X135488188Y-134418882D01*
X135524498Y-134538580D01*
X135583463Y-134648894D01*
X135662815Y-134745585D01*
X135759506Y-134824937D01*
X135869820Y-134883902D01*
X135989518Y-134920212D01*
X136114000Y-134932472D01*
X137128250Y-134929400D01*
X137287000Y-134770650D01*
X137287000Y-133121400D01*
X137541000Y-133121400D01*
X137541000Y-134770650D01*
X137699750Y-134929400D01*
X138714000Y-134932472D01*
X138838482Y-134920212D01*
X138958180Y-134883902D01*
X139068494Y-134824937D01*
X139165185Y-134745585D01*
X139244537Y-134648894D01*
X139303502Y-134538580D01*
X139339812Y-134418882D01*
X139352072Y-134294400D01*
X139349000Y-133280150D01*
X139190250Y-133121400D01*
X137541000Y-133121400D01*
X137287000Y-133121400D01*
X135637750Y-133121400D01*
X135479000Y-133280150D01*
X135475928Y-134294400D01*
X133850504Y-134294400D01*
X133917013Y-134227891D01*
X134128775Y-133910966D01*
X134274639Y-133558819D01*
X134349000Y-133184981D01*
X134349000Y-132803819D01*
X134274639Y-132429981D01*
X134128775Y-132077834D01*
X134049000Y-131958442D01*
X134049000Y-131694400D01*
X135475928Y-131694400D01*
X135479000Y-132708650D01*
X135637750Y-132867400D01*
X137287000Y-132867400D01*
X137287000Y-131218150D01*
X137541000Y-131218150D01*
X137541000Y-132867400D01*
X139190250Y-132867400D01*
X139253831Y-132803819D01*
X141832800Y-132803819D01*
X141832800Y-133184981D01*
X141907161Y-133558819D01*
X142053025Y-133910966D01*
X142264787Y-134227891D01*
X142534309Y-134497413D01*
X142851234Y-134709175D01*
X143203381Y-134855039D01*
X143577219Y-134929400D01*
X143958381Y-134929400D01*
X144332219Y-134855039D01*
X144684366Y-134709175D01*
X145001291Y-134497413D01*
X145204304Y-134294400D01*
X146829728Y-134294400D01*
X146841988Y-134418882D01*
X146878298Y-134538580D01*
X146937263Y-134648894D01*
X147016615Y-134745585D01*
X147113306Y-134824937D01*
X147223620Y-134883902D01*
X147343318Y-134920212D01*
X147467800Y-134932472D01*
X148482050Y-134929400D01*
X148640800Y-134770650D01*
X148640800Y-133121400D01*
X148894800Y-133121400D01*
X148894800Y-134770650D01*
X149053550Y-134929400D01*
X150067800Y-134932472D01*
X150192282Y-134920212D01*
X150311980Y-134883902D01*
X150422294Y-134824937D01*
X150518985Y-134745585D01*
X150598337Y-134648894D01*
X150657302Y-134538580D01*
X150693612Y-134418882D01*
X150705872Y-134294400D01*
X150702800Y-133280150D01*
X150544050Y-133121400D01*
X148894800Y-133121400D01*
X148640800Y-133121400D01*
X146991550Y-133121400D01*
X146832800Y-133280150D01*
X146829728Y-134294400D01*
X145204304Y-134294400D01*
X145270813Y-134227891D01*
X145482575Y-133910966D01*
X145628439Y-133558819D01*
X145702800Y-133184981D01*
X145702800Y-132803819D01*
X145628439Y-132429981D01*
X145482575Y-132077834D01*
X145402800Y-131958442D01*
X145402800Y-131694400D01*
X146829728Y-131694400D01*
X146832800Y-132708650D01*
X146991550Y-132867400D01*
X148640800Y-132867400D01*
X148640800Y-131218150D01*
X148894800Y-131218150D01*
X148894800Y-132867400D01*
X150544050Y-132867400D01*
X150702800Y-132708650D01*
X150705872Y-131694400D01*
X150693612Y-131569918D01*
X150657302Y-131450220D01*
X150598337Y-131339906D01*
X150518985Y-131243215D01*
X150422294Y-131163863D01*
X150311980Y-131104898D01*
X150192282Y-131068588D01*
X150067800Y-131056328D01*
X149053550Y-131059400D01*
X148894800Y-131218150D01*
X148640800Y-131218150D01*
X148482050Y-131059400D01*
X147467800Y-131056328D01*
X147343318Y-131068588D01*
X147223620Y-131104898D01*
X147113306Y-131163863D01*
X147016615Y-131243215D01*
X146937263Y-131339906D01*
X146878298Y-131450220D01*
X146841988Y-131569918D01*
X146829728Y-131694400D01*
X145402800Y-131694400D01*
X145402800Y-130565400D01*
X149000522Y-130565400D01*
X149240716Y-130541743D01*
X149548915Y-130448252D01*
X149832952Y-130296431D01*
X150081914Y-130092114D01*
X150286231Y-129843152D01*
X150438052Y-129559115D01*
X150531543Y-129250916D01*
X150563111Y-128930400D01*
X150531543Y-128609884D01*
X150438052Y-128301685D01*
X150360977Y-128157487D01*
X150421043Y-128067592D01*
X150514140Y-127842836D01*
X150561600Y-127604237D01*
X150561600Y-127360963D01*
X150517795Y-127140741D01*
X150718031Y-126896752D01*
X150869852Y-126612715D01*
X150963343Y-126304516D01*
X150994911Y-125984000D01*
X150963343Y-125663484D01*
X150869852Y-125355285D01*
X150718031Y-125071248D01*
X150513714Y-124822286D01*
X150264752Y-124617969D01*
X149980715Y-124466148D01*
X149672516Y-124372657D01*
X149432322Y-124349000D01*
X144479322Y-124349000D01*
X144399000Y-124341089D01*
X144078483Y-124372657D01*
X143917549Y-124421476D01*
X143770285Y-124466148D01*
X143486248Y-124617969D01*
X143237286Y-124822286D01*
X143186079Y-124884682D01*
X142639281Y-125431480D01*
X142576887Y-125482686D01*
X142461108Y-125623764D01*
X142372570Y-125731648D01*
X142220748Y-126015686D01*
X142127258Y-126323884D01*
X142095689Y-126644400D01*
X142103601Y-126724729D01*
X142103600Y-128850077D01*
X142095689Y-128930400D01*
X142127257Y-129250916D01*
X142132801Y-129269192D01*
X142132800Y-131958442D01*
X142053025Y-132077834D01*
X141907161Y-132429981D01*
X141832800Y-132803819D01*
X139253831Y-132803819D01*
X139349000Y-132708650D01*
X139352072Y-131694400D01*
X139339812Y-131569918D01*
X139303502Y-131450220D01*
X139244537Y-131339906D01*
X139165185Y-131243215D01*
X139068494Y-131163863D01*
X138958180Y-131104898D01*
X138838482Y-131068588D01*
X138714000Y-131056328D01*
X137699750Y-131059400D01*
X137541000Y-131218150D01*
X137287000Y-131218150D01*
X137128250Y-131059400D01*
X136114000Y-131056328D01*
X135989518Y-131068588D01*
X135869820Y-131104898D01*
X135759506Y-131163863D01*
X135662815Y-131243215D01*
X135583463Y-131339906D01*
X135524498Y-131450220D01*
X135488188Y-131569918D01*
X135475928Y-131694400D01*
X134049000Y-131694400D01*
X134049000Y-123779807D01*
X134071282Y-123777612D01*
X134190980Y-123741302D01*
X134301294Y-123682337D01*
X134397985Y-123602985D01*
X134477337Y-123506294D01*
X134536302Y-123395980D01*
X134551917Y-123344502D01*
X135833703Y-123344502D01*
X135905286Y-123588471D01*
X136160796Y-123709371D01*
X136434984Y-123778100D01*
X136717312Y-123792017D01*
X136996930Y-123750587D01*
X137263092Y-123655403D01*
X137388314Y-123588471D01*
X137459897Y-123344502D01*
X136646800Y-122531405D01*
X135833703Y-123344502D01*
X134551917Y-123344502D01*
X134572612Y-123276282D01*
X134584872Y-123151800D01*
X134584872Y-123129773D01*
X134664652Y-122980515D01*
X134679565Y-122931354D01*
X134758143Y-122672317D01*
X134782766Y-122422312D01*
X135206583Y-122422312D01*
X135248013Y-122701930D01*
X135343197Y-122968092D01*
X135410129Y-123093314D01*
X135654098Y-123164897D01*
X136467195Y-122351800D01*
X136826405Y-122351800D01*
X137639502Y-123164897D01*
X137883471Y-123093314D01*
X138004371Y-122837804D01*
X138073100Y-122563616D01*
X138087017Y-122281288D01*
X138045587Y-122001670D01*
X137950403Y-121735508D01*
X137883471Y-121610286D01*
X137639502Y-121538703D01*
X136826405Y-122351800D01*
X136467195Y-122351800D01*
X135654098Y-121538703D01*
X135410129Y-121610286D01*
X135289229Y-121865796D01*
X135220500Y-122139984D01*
X135206583Y-122422312D01*
X134782766Y-122422312D01*
X134789711Y-122351800D01*
X134781800Y-122271478D01*
X134781800Y-121359098D01*
X135833703Y-121359098D01*
X136646800Y-122172195D01*
X137459897Y-121359098D01*
X137388314Y-121115129D01*
X137132804Y-120994229D01*
X136858616Y-120925500D01*
X136576288Y-120911583D01*
X136296670Y-120953013D01*
X136030508Y-121048197D01*
X135905286Y-121115129D01*
X135833703Y-121359098D01*
X134781800Y-121359098D01*
X134781800Y-120920838D01*
X135094039Y-120608600D01*
X138235361Y-120608600D01*
X139376084Y-121749324D01*
X139427286Y-121811714D01*
X139676248Y-122016031D01*
X139898137Y-122134633D01*
X139960285Y-122167852D01*
X140268483Y-122261343D01*
X140551436Y-122289211D01*
X140569860Y-122381836D01*
X140597000Y-122447358D01*
X140597000Y-123054163D01*
X140595260Y-123058364D01*
X140547800Y-123296963D01*
X140547800Y-123540237D01*
X140595260Y-123778836D01*
X140688357Y-124003592D01*
X140823513Y-124205867D01*
X140995533Y-124377887D01*
X141197808Y-124513043D01*
X141422564Y-124606140D01*
X141661163Y-124653600D01*
X141904437Y-124653600D01*
X142143036Y-124606140D01*
X142367792Y-124513043D01*
X142570067Y-124377887D01*
X142742087Y-124205867D01*
X142877243Y-124003592D01*
X142970340Y-123778836D01*
X143017800Y-123540237D01*
X143017800Y-123296963D01*
X142970340Y-123058364D01*
X142877243Y-122833608D01*
X142867000Y-122818278D01*
X142867000Y-122570000D01*
X142944940Y-122381836D01*
X142964202Y-122285000D01*
X148039200Y-122285000D01*
X148039200Y-122550521D01*
X147986660Y-122677364D01*
X147939200Y-122915963D01*
X147939200Y-123159237D01*
X147986660Y-123397836D01*
X148079757Y-123622592D01*
X148214913Y-123824867D01*
X148386933Y-123996887D01*
X148589208Y-124132043D01*
X148813964Y-124225140D01*
X149052563Y-124272600D01*
X149295837Y-124272600D01*
X149534436Y-124225140D01*
X149759192Y-124132043D01*
X149961467Y-123996887D01*
X150133487Y-123824867D01*
X150268643Y-123622592D01*
X150361740Y-123397836D01*
X150409200Y-123159237D01*
X150409200Y-122915963D01*
X150361740Y-122677364D01*
X150309200Y-122550521D01*
X150309200Y-122285000D01*
X151354481Y-122285000D01*
X151434800Y-122292911D01*
X151515119Y-122285000D01*
X151515122Y-122285000D01*
X151755316Y-122261343D01*
X152063515Y-122167852D01*
X152347552Y-122016031D01*
X152596514Y-121811714D01*
X152647724Y-121749314D01*
X154337524Y-120059516D01*
X154399914Y-120008314D01*
X154604231Y-119759352D01*
X154756052Y-119475315D01*
X154804549Y-119315441D01*
X154849543Y-119167117D01*
X154881111Y-118846600D01*
X154873200Y-118766278D01*
X154873200Y-115523319D01*
X154881111Y-115442999D01*
X154871560Y-115346026D01*
X154849543Y-115122484D01*
X154756052Y-114814285D01*
X154604231Y-114530248D01*
X154399914Y-114281286D01*
X154337520Y-114230081D01*
X152241325Y-112133887D01*
X152190114Y-112071486D01*
X151941152Y-111867169D01*
X151825200Y-111805191D01*
X151825200Y-108421459D01*
X151826942Y-108415716D01*
X151858511Y-108095201D01*
X151826942Y-107774684D01*
X151753672Y-107533143D01*
X151753672Y-107195200D01*
X151741412Y-107070718D01*
X151705102Y-106951020D01*
X151646137Y-106840706D01*
X151566785Y-106744015D01*
X151470094Y-106664663D01*
X151359780Y-106605698D01*
X151240082Y-106569388D01*
X151115600Y-106557128D01*
X1507
gitextract_kgfx0i39/
├── .gitignore
├── F0:F030,F042,F072/
│ ├── 3steppersLB/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── commonproto.c
│ │ ├── commonproto.h
│ │ ├── custom_buttons.c
│ │ ├── custom_buttons.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Paste.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Paste.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ ├── stm32-NPTH-drl_map.gbr
│ │ │ │ ├── stm32-NPTH.drl
│ │ │ │ ├── stm32-PTH-drl_map.gbr
│ │ │ │ ├── stm32-PTH.drl
│ │ │ │ ├── stm32-drl.rpt
│ │ │ │ ├── stm32-job.gbrjob
│ │ │ │ └── stm32.drl
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-cache.kicad_sym
│ │ │ ├── stm32-rescue.kicad_sym
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── steppers.c
│ │ ├── steppers.cflags
│ │ ├── steppers.config
│ │ ├── steppers.creator
│ │ ├── steppers.creator.user
│ │ ├── steppers.cxxflags
│ │ ├── steppers.files
│ │ ├── steppers.h
│ │ ├── steppers.includes
│ │ ├── strfunct.c
│ │ ├── strfunct.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANBUS_SSI/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── can_process.c
│ │ ├── can_process.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANbus4BTA/
│ │ ├── Readme
│ │ └── kicad/
│ │ ├── BOM.ods
│ │ ├── BOM_full.ods
│ │ ├── elements.kicad_sym
│ │ ├── fp-info-cache
│ │ ├── fp-lib-table
│ │ ├── gerbers/
│ │ │ ├── stm32-B_Cu.gbr
│ │ │ ├── stm32-B_Mask.gbr
│ │ │ ├── stm32-B_Paste.gbr
│ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ ├── stm32-F_Cu.gbr
│ │ │ ├── stm32-F_Mask.gbr
│ │ │ ├── stm32-F_Paste.gbr
│ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ ├── stm32-drl_map.gbr
│ │ │ ├── stm32-job.gbrjob
│ │ │ └── stm32.drl
│ │ ├── iso3086.kicad_sym
│ │ ├── my_footprints.pretty/
│ │ │ ├── B0505S-2W.kicad_mod
│ │ │ ├── B0x0xS.kicad_mod
│ │ │ ├── Hole_3mm.kicad_mod
│ │ │ ├── VRB2405.kicad_mod
│ │ │ └── VRB_DCDC.kicad_mod
│ │ ├── optocouple.kicad_sch
│ │ ├── schematic-positions-to-layout.debug
│ │ ├── stm32-cache.kicad_sym
│ │ ├── stm32-rescue.kicad_sym
│ │ ├── stm32.csv
│ │ ├── stm32.kicad_pcb
│ │ ├── stm32.kicad_prl
│ │ ├── stm32.kicad_pro
│ │ ├── stm32.kicad_sch
│ │ ├── stm32.xml
│ │ └── sym-lib-table
│ ├── Chiller/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Chiller_control-rescue.lib
│ │ │ ├── Chiller_control.csv
│ │ │ ├── Chiller_control.kicad_pcb
│ │ │ ├── Chiller_control.kicad_prl
│ │ │ ├── Chiller_control.kicad_pro
│ │ │ ├── Chiller_control.kicad_sch
│ │ │ ├── Chiller_control.net
│ │ │ ├── Chiller_control.pro
│ │ │ ├── Chiller_control.sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── modules.pretty/
│ │ │ │ ├── DB9-F.kicad_mod
│ │ │ │ ├── TO-220-3_Horizontal_TabDown.kicad_mod
│ │ │ │ └── hole_3mm.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mainloop.c
│ │ ├── mainloop.h
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── F0_testbrd/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── MAKE
│ ├── Makefile
│ ├── NUCLEO_SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── main.c
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── PL2303_ringbuffer/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── QuadEncoder/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── Readme.md
│ ├── Servo/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── effects.c
│ │ ├── effects.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Servo_control
│ │ │ ├── Servo_control-rescue.lib
│ │ │ ├── Servo_control.kicad_pcb
│ │ │ ├── Servo_control.kicad_prl
│ │ │ ├── Servo_control.kicad_pro
│ │ │ ├── Servo_control.kicad_sch
│ │ │ ├── Servo_control.net
│ │ │ ├── Servo_control.pro
│ │ │ ├── Servo_control.sch
│ │ │ ├── ch34x.lib
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── modules.pretty/
│ │ │ │ ├── DB9-F.kicad_mod
│ │ │ │ ├── TO-220-3_Horizontal_TabDown.kicad_mod
│ │ │ │ ├── VIA.kicad_mod
│ │ │ │ └── hole_3mm.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mainloop.c
│ │ ├── mainloop.h
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── Snippets/
│ │ ├── Flash_EEPROM/
│ │ │ ├── Readme
│ │ │ ├── flash.c
│ │ │ └── flash.h
│ │ ├── Jump2Boot.c
│ │ ├── Readme.md
│ │ ├── fallthru
│ │ ├── printuhex.c
│ │ └── readint.c
│ ├── Socket_fans/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── acs712.lib
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── TH_via.kicad_mod
│ │ │ ├── pcb/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ ├── stm32-NPTH-drl_map.gbr
│ │ │ │ └── stm32-PTH-drl_map.gbr
│ │ │ ├── stm32
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── knots/
│ │ │ ├── buildk.m
│ │ │ ├── calcT.m
│ │ │ ├── getknots.m
│ │ │ ├── getnewpt.m
│ │ │ ├── linearapprox.m
│ │ │ ├── piecevise.html
│ │ │ └── piecevise_files/
│ │ │ ├── 13303023.jpe
│ │ │ ├── 43568408.jpe
│ │ │ ├── 52273253.jpe
│ │ │ ├── a.css
│ │ │ ├── a.htm
│ │ │ ├── a.js
│ │ │ ├── a_002.css
│ │ │ ├── a_002.js
│ │ │ ├── a_003.css
│ │ │ ├── a_data/
│ │ │ │ └── a.js
│ │ │ └── top100.js
│ │ ├── main.c
│ │ ├── monitor.c
│ │ ├── monitor.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── TM1637/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── protocol.c
│ │ ├── protocol.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── TSYS_controller/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TSYS_controller.cflags
│ │ ├── TSYS_controller.config
│ │ ├── TSYS_controller.creator
│ │ ├── TSYS_controller.creator.user
│ │ ├── TSYS_controller.creator.user.4.8-pre1
│ │ ├── TSYS_controller.creator.user.cf63021
│ │ ├── TSYS_controller.cxxflags
│ │ ├── TSYS_controller.files
│ │ ├── TSYS_controller.includes
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── can_process.c
│ │ ├── can_process.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── sensors_manage.c
│ │ ├── sensors_manage.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── USBHID/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── keycodes.c
│ │ ├── keycodes.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── blink/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── blink.geanypro
│ │ └── systick_blink.c
│ ├── deprecated/
│ │ ├── CANbus_stepper/
│ │ │ ├── CANbus_stepper.tgz
│ │ │ ├── TODO
│ │ │ ├── kicad/
│ │ │ │ ├── Readme.md
│ │ │ │ ├── acs712.lib
│ │ │ │ ├── elements.lib
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ │ └── stm32-drl_map.gbr
│ │ │ │ ├── my_footprints.pretty/
│ │ │ │ │ ├── FuseHolder.kicad_mod
│ │ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ │ ├── RJ9-4P4C.kicad_mod
│ │ │ │ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ │ │ │ └── TH_via.kicad_mod
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ ├── stm32.csv
│ │ │ │ ├── stm32.kicad_pcb
│ │ │ │ ├── stm32.kicad_prl
│ │ │ │ ├── stm32.kicad_pro
│ │ │ │ ├── stm32.kicad_sch
│ │ │ │ ├── stm32.net
│ │ │ │ ├── stm32.pro
│ │ │ │ ├── stm32.sch
│ │ │ │ ├── stm32.xml
│ │ │ │ └── sym-lib-table
│ │ │ ├── src/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Readme.md
│ │ │ │ ├── adc.c
│ │ │ │ ├── adc.h
│ │ │ │ ├── can.c
│ │ │ │ ├── can.h
│ │ │ │ ├── can_process.c
│ │ │ │ ├── can_process.h
│ │ │ │ ├── flash.c
│ │ │ │ ├── flash.h
│ │ │ │ ├── hardware.c
│ │ │ │ ├── hardware.h
│ │ │ │ ├── main.c
│ │ │ │ ├── proto.c
│ │ │ │ ├── proto.h
│ │ │ │ ├── spi.c
│ │ │ │ ├── spi.h
│ │ │ │ ├── steppers.c
│ │ │ │ ├── steppers.h
│ │ │ │ ├── usart.c
│ │ │ │ ├── usart.h
│ │ │ │ ├── usb.c
│ │ │ │ ├── usb.h
│ │ │ │ ├── usb_defs.h
│ │ │ │ ├── usb_lib.c
│ │ │ │ └── usb_lib.h
│ │ │ └── src.tgz
│ │ ├── Readme.md
│ │ ├── USB_pl2303_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── canbus/
│ │ │ ├── kicad/
│ │ │ │ ├── acs712.lib
│ │ │ │ ├── bom.ini
│ │ │ │ ├── elements.lib
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── my_footprints.pretty/
│ │ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ │ ├── RJ9-4P4C.kicad_mod
│ │ │ │ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ │ │ │ └── TH_via.kicad_mod
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ ├── stm32.kicad_pcb
│ │ │ │ ├── stm32.kicad_prl
│ │ │ │ ├── stm32.kicad_pro
│ │ │ │ ├── stm32.kicad_sch
│ │ │ │ ├── stm32.net
│ │ │ │ └── sym-lib-table
│ │ │ └── src/
│ │ │ ├── CANbus.geany
│ │ │ ├── Makefile
│ │ │ ├── can.c
│ │ │ ├── can.h
│ │ │ ├── canbus.c.tags
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ └── usart.h
│ │ ├── pl2303/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── usbcan/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── bom.ini
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_SilkS.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_SilkS.gbr
│ │ │ │ └── stm32-drl_map.gbr
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── kicad_new/
│ │ │ ├── bom.ini
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ │ ├── stm32-drl_map.gbr
│ │ │ │ └── stm32.drl
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── htu21d_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── flash_size_reg.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ └── vector.h
│ │ ├── Should_use_common_includes_with_F1
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f01234.ld
│ │ │ ├── stm32f030f.ld
│ │ │ ├── stm32f042k.ld
│ │ │ ├── stm32f042x6.ld
│ │ │ ├── stm32f051x8.ld
│ │ │ ├── stm32f072x8.ld
│ │ │ ├── stm32f072xB.ld
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ └── startup/
│ │ ├── vector.c
│ │ └── vector.c.depr
│ ├── makefile.f0
│ ├── morze/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── morse.c
│ │ ├── morse.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── openocd.cfg
│ ├── tsys01_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_blink/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_blink_dma/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── uart_nucleo/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── usbcan_gpio/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── Readmeh.html
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── gpioproto.cpp
│ │ ├── gpioproto.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── hashparser.cpp
│ │ ├── hashparser.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pwm.c
│ │ ├── pwm.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbcangpio.cflags
│ │ ├── usbcangpio.config
│ │ ├── usbcangpio.creator
│ │ ├── usbcangpio.creator.user
│ │ ├── usbcangpio.cxxflags
│ │ ├── usbcangpio.files
│ │ ├── usbcangpio.includes
│ │ └── version.inc
│ ├── usbcan_relay/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── canrelay.cflags
│ │ ├── canrelay.config
│ │ ├── canrelay.creator
│ │ ├── canrelay.creator.user
│ │ ├── canrelay.creator.user.22
│ │ ├── canrelay.creator.user.4.9-pre1
│ │ ├── canrelay.creator.user.7bd84e3
│ │ ├── canrelay.cxxflags
│ │ ├── canrelay.files
│ │ ├── canrelay.includes
│ │ ├── custom_buttons.c
│ │ ├── custom_buttons.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── elements.lib
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ └── Hole_3mm.kicad_mod
│ │ │ ├── stm32 (2).csv
│ │ │ ├── stm32-rescue.lib
│ │ │ ├── stm32.csv
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.net
│ │ │ ├── stm32.pro
│ │ │ ├── stm32.sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ └── usbcan_ringbuffer/
│ ├── Makefile
│ ├── Readme.md
│ ├── can.c
│ ├── can.h
│ ├── hardware.c
│ ├── hardware.h
│ ├── kicad/
│ │ ├── bom.ini
│ │ ├── elements.lib
│ │ ├── fp-info-cache
│ │ ├── gerbers/
│ │ │ ├── stm32-B_Cu.gbr
│ │ │ ├── stm32-B_Mask.gbr
│ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ ├── stm32-F_Cu.gbr
│ │ │ ├── stm32-F_Mask.gbr
│ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ ├── stm32-drl_map.gbr
│ │ │ └── stm32.drl
│ │ ├── my_footprints.pretty/
│ │ │ ├── B0x0xS.kicad_mod
│ │ │ └── Hole_3mm.kicad_mod
│ │ ├── stm32-rescue.lib
│ │ ├── stm32.kicad_pcb
│ │ ├── stm32.kicad_prl
│ │ ├── stm32.kicad_pro
│ │ └── stm32.kicad_sch
│ ├── main.c
│ ├── openocd.cfg
│ ├── proto.c
│ ├── proto.h
│ ├── ringbuffer.c
│ ├── ringbuffer.h
│ ├── usb_descr.c
│ ├── usb_descr.h
│ ├── usb_dev.c
│ ├── usb_dev.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── usbcanrb.cflags
│ ├── usbcanrb.config
│ ├── usbcanrb.creator
│ ├── usbcanrb.creator.user
│ ├── usbcanrb.cxxflags
│ ├── usbcanrb.files
│ ├── usbcanrb.includes
│ └── version.inc
├── F1:F103/
│ ├── AS3935-lightning/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── as3935.c
│ │ ├── as3935.cflags
│ │ ├── as3935.config
│ │ ├── as3935.creator
│ │ ├── as3935.creator.user
│ │ ├── as3935.cxxflags
│ │ ├── as3935.files
│ │ ├── as3935.h
│ │ ├── as3935.includes
│ │ ├── commproto.cpp
│ │ ├── commproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── BISS_C_encoders/
│ │ ├── 99-myHW.rules
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── bissC.c
│ │ ├── bissC.h
│ │ ├── encoders.cflags
│ │ ├── encoders.config
│ │ ├── encoders.creator
│ │ ├── encoders.creator.user
│ │ ├── encoders.creator.user.7bd84e3
│ │ ├── encoders.creator.user.cf63021
│ │ ├── encoders.cxxflags
│ │ ├── encoders.files
│ │ ├── encoders.includes
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM.csv
│ │ │ ├── elements.kicad_sym
│ │ │ ├── encoder.kicad_pcb
│ │ │ ├── encoder.kicad_prl
│ │ │ ├── encoder.kicad_pro
│ │ │ ├── encoder.kicad_sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── encoder-B_Cu.gbr
│ │ │ │ ├── encoder-B_Mask.gbr
│ │ │ │ ├── encoder-B_Silkscreen.gbr
│ │ │ │ ├── encoder-Edge_Cuts.gbr
│ │ │ │ ├── encoder-F_Cu.gbr
│ │ │ │ ├── encoder-F_Mask.gbr
│ │ │ │ ├── encoder-F_Silkscreen.gbr
│ │ │ │ ├── encoder-drl.rpt
│ │ │ │ ├── encoder-job.gbrjob
│ │ │ │ └── encoder.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── isolated_232.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ ├── QR.kicad_mod
│ │ │ │ └── RJ9-4P4C.kicad_mod
│ │ │ ├── ssi_422.kicad_sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── openocd.cfg_cs32
│ │ ├── openocd.cfg_stm32
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── testDev
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── BMP180/
│ │ ├── BMP180.c
│ │ ├── BMP180.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── BMP280/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dewpoint.c
│ │ ├── dewpoint.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── CAR_CANbus/
│ │ ├── Lamps/
│ │ │ ├── Readme
│ │ │ └── kicad/
│ │ │ ├── cd43.kicad_mod
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── lamps-B_Cu.gbr
│ │ │ │ ├── lamps-B_Mask.gbr
│ │ │ │ ├── lamps-B_Paste.gbr
│ │ │ │ ├── lamps-B_Silkscreen.gbr
│ │ │ │ ├── lamps-Edge_Cuts.gbr
│ │ │ │ ├── lamps-F_Cu.gbr
│ │ │ │ ├── lamps-F_Mask.gbr
│ │ │ │ ├── lamps-F_Paste.gbr
│ │ │ │ ├── lamps-F_Silkscreen.gbr
│ │ │ │ ├── lamps-drl.rpt
│ │ │ │ ├── lamps-drl_map.gbr
│ │ │ │ ├── lamps-job.gbrjob
│ │ │ │ └── lamps.drl
│ │ │ ├── l_pwr.kicad_sch
│ │ │ ├── l_pwrx.kicad_sch
│ │ │ ├── lamps.kicad_pcb
│ │ │ ├── lamps.kicad_prl
│ │ │ ├── lamps.kicad_pro
│ │ │ ├── lamps.kicad_sch
│ │ │ ├── mp1584.kicad_sym
│ │ │ ├── s8205a.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── Readme
│ │ └── WindShield/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── ZXCT1009.kicad_sym
│ │ │ ├── cd43.kicad_mod
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── mp1584.kicad_sym
│ │ │ ├── mp1584.lib
│ │ │ ├── s8205a.kicad_sym
│ │ │ ├── s8205a.lib
│ │ │ ├── sym-lib-table
│ │ │ ├── windshield.kicad_pcb
│ │ │ ├── windshield.kicad_prl
│ │ │ ├── windshield.kicad_pro
│ │ │ └── windshield.kicad_sch
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── version.inc
│ │ ├── windshield.cflags
│ │ ├── windshield.config
│ │ ├── windshield.creator
│ │ ├── windshield.creator.user
│ │ ├── windshield.creator.user.cf63021
│ │ ├── windshield.cxxflags
│ │ ├── windshield.files
│ │ └── windshield.includes
│ ├── Canon_managing_device/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canon.c
│ │ ├── canon.h
│ │ ├── canonmanage.cflags
│ │ ├── canonmanage.config
│ │ ├── canonmanage.creator
│ │ ├── canonmanage.creator.user
│ │ ├── canonmanage.creator.user.7bd84e3
│ │ ├── canonmanage.cxxflags
│ │ ├── canonmanage.files
│ │ ├── canonmanage.includes
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── Canon_manage/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── Canon_manage.csv
│ │ │ │ ├── Canon_manage.kicad_pcb
│ │ │ │ ├── Canon_manage.kicad_prl
│ │ │ │ ├── Canon_manage.kicad_pro
│ │ │ │ ├── Canon_manage.kicad_sch
│ │ │ │ ├── Canon_manage.xml
│ │ │ │ ├── TPS2051.kicad_sym
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── Canon_manage-B_Cu.gbr
│ │ │ │ │ ├── Canon_manage-B_Mask.gbr
│ │ │ │ │ ├── Canon_manage-B_Paste.gbr
│ │ │ │ │ ├── Canon_manage-B_Silkscreen.gbr
│ │ │ │ │ ├── Canon_manage-Edge_Cuts.gbr
│ │ │ │ │ ├── Canon_manage-F_Cu.gbr
│ │ │ │ │ ├── Canon_manage-F_Mask.gbr
│ │ │ │ │ ├── Canon_manage-F_Paste.gbr
│ │ │ │ │ ├── Canon_manage-F_Silkscreen.gbr
│ │ │ │ │ ├── Canon_manage-drl.rpt
│ │ │ │ │ ├── Canon_manage-drl_map.gbr
│ │ │ │ │ ├── Canon_manage-job.gbrjob
│ │ │ │ │ └── Canon_manage.drl
│ │ │ │ ├── pins.pretty/
│ │ │ │ │ └── Pin1.5x2mm.kicad_mod
│ │ │ │ └── sym-lib-table
│ │ │ ├── outliers.dxf
│ │ │ └── silk.dxf
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── DHT22_DHT11/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dht.c
│ │ ├── dht.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── DS18/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── ds18.c
│ │ ├── ds18.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── F1_testbrd/
│ │ ├── F1_testbrd.cflags
│ │ ├── F1_testbrd.config
│ │ ├── F1_testbrd.creator
│ │ ├── F1_testbrd.creator.user
│ │ ├── F1_testbrd.cxxflags
│ │ ├── F1_testbrd.files
│ │ ├── F1_testbrd.includes
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── F1_testbrd_deprecated/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── FX3U/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── fx3u.cflags
│ │ ├── fx3u.config
│ │ ├── fx3u.creator
│ │ ├── fx3u.creator.user
│ │ ├── fx3u.creator.user.cf63021
│ │ ├── fx3u.cxxflags
│ │ ├── fx3u.files
│ │ ├── fx3u.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── X_opto.kicad_sch
│ │ │ ├── Y_relay.kicad_sch
│ │ │ ├── fp-info-cache
│ │ │ ├── fx3u_24mr.kicad_pcb
│ │ │ ├── fx3u_24mr.kicad_prl
│ │ │ ├── fx3u_24mr.kicad_pro
│ │ │ └── fx3u_24mr.kicad_sch
│ │ ├── main.c
│ │ ├── modbusproto.c
│ │ ├── modbusproto.h
│ │ ├── modbusrtu.c
│ │ ├── modbusrtu.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── Hall_linear/
│ │ ├── Makefile
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hallinear.cflags
│ │ ├── hallinear.config
│ │ ├── hallinear.creator
│ │ ├── hallinear.creator.user
│ │ ├── hallinear.creator.user.7bd84e3
│ │ ├── hallinear.cxxflags
│ │ ├── hallinear.files
│ │ ├── hallinear.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM
│ │ │ ├── BOM.ods
│ │ │ ├── Hall.kicad_pcb
│ │ │ ├── Hall.kicad_prl
│ │ │ ├── Hall.kicad_pro
│ │ │ ├── Hall.kicad_sch
│ │ │ ├── Hall.step
│ │ │ ├── PCB.dxf
│ │ │ ├── TPS2051.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ └── gerbers/
│ │ │ ├── Hall-B_Cu.gbr
│ │ │ ├── Hall-B_Mask.gbr
│ │ │ ├── Hall-B_Paste.gbr
│ │ │ ├── Hall-B_Silkscreen.gbr
│ │ │ ├── Hall-Edge_Cuts.gbr
│ │ │ ├── Hall-F_Cu.gbr
│ │ │ ├── Hall-F_Mask.gbr
│ │ │ ├── Hall-F_Paste.gbr
│ │ │ ├── Hall-F_Silkscreen.gbr
│ │ │ ├── Hall-drl.rpt
│ │ │ ├── Hall-drl_map.gbr
│ │ │ ├── Hall-job.gbrjob
│ │ │ └── Hall.drl
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── readme
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2C_tiny/
│ │ ├── I2Ctiny.cflags
│ │ ├── I2Ctiny.config
│ │ ├── I2Ctiny.creator
│ │ ├── I2Ctiny.creator.user
│ │ ├── I2Ctiny.cxxflags
│ │ ├── I2Ctiny.files
│ │ ├── I2Ctiny.includes
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2ctiny.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbdev.c
│ │ ├── usbdev.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2Cscan/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.c
│ │ ├── i2cscan.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── LED_Screen/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── font14.h
│ │ ├── font16.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── genlist
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── scrtest/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── font14.h
│ │ │ ├── font16.h
│ │ │ ├── fonts.c
│ │ │ ├── fonts.h
│ │ │ ├── main.c
│ │ │ ├── screen.c
│ │ │ ├── screen.h
│ │ │ └── scrtest
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── MAX7219_screen/
│ │ ├── MAX7219.c
│ │ ├── MAX7219.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Makefile
│ ├── PL2303_rb_strip/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── PL2303_ringbuffer/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── RGB_LED_Screen/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adcrandom.c
│ │ ├── adcrandom.h
│ │ ├── balls.c
│ │ ├── balls.h
│ │ ├── font14.h
│ │ ├── font16.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── getrand
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── screen.c
│ │ ├── screen.c.autosave
│ │ ├── screen.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Readme.md
│ ├── SI7005_HTU21D/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── dewpoint.c
│ │ ├── dewpoint.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── htu21d.c
│ │ ├── htu21d.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── si7005.c
│ │ ├── si7005.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── STM32F103C.md
│ ├── SevenCDCs/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── Tetris/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adcrandom.c
│ │ ├── adcrandom.h
│ │ ├── arkanoid.c
│ │ ├── arkanoid.h
│ │ ├── balls.c
│ │ ├── balls.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── debug.h
│ │ ├── font14.h
│ │ ├── fontNumb8.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── getrand
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── snake.c
│ │ ├── snake.h
│ │ ├── tetris.c
│ │ ├── tetris.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_HID/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.h
│ │ ├── keycodes.c
│ │ ├── keycodes.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_New_concept/
│ │ ├── USB_NEW_concept_7inone/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── USB_NEW_concept_CDC/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── USB_NEW_concept_HID/
│ │ │ ├── Makefile
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── someusb.cflags
│ │ │ ├── someusb.config
│ │ │ ├── someusb.creator
│ │ │ ├── someusb.creator.user
│ │ │ ├── someusb.cxxflags
│ │ │ ├── someusb.files
│ │ │ ├── someusb.includes
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb_descr.c
│ │ │ ├── usb_descr.h
│ │ │ ├── usb_dev.c
│ │ │ ├── usb_dev.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── USB_NEW_concept_PL2303/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── someusb.cflags
│ │ ├── someusb.config
│ │ ├── someusb.creator
│ │ ├── someusb.creator.user
│ │ ├── someusb.cxxflags
│ │ ├── someusb.files
│ │ ├── someusb.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── USB_SPI/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── canUART/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canuart.cflags
│ │ ├── canuart.config
│ │ ├── canuart.creator
│ │ ├── canuart.creator.user
│ │ ├── canuart.cxxflags
│ │ ├── canuart.files
│ │ ├── canuart.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── chronometer_v3/
│ │ ├── Difference
│ │ ├── GPS.c
│ │ ├── GPS.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── Readme_rus.txt
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── font14.h
│ │ ├── fontNumb10.h
│ │ ├── fontNumb16.h
│ │ ├── fontNumb8.h
│ │ ├── font_EMPTY.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── lidar.c
│ │ ├── lidar.h
│ │ ├── main.c
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── stm32F103xB.ld
│ │ ├── str.c
│ │ ├── str.h
│ │ ├── time.c
│ │ ├── time.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── deprecated/
│ │ ├── CDC_ACM/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── MLX90640/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── i2c.c
│ │ │ ├── i2c.h
│ │ │ ├── main.c
│ │ │ ├── mlx90640.c
│ │ │ ├── mlx90640.h
│ │ │ ├── mlx90640_regs.h
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── strfunct.c
│ │ │ ├── strfunct.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ ├── usb_lib.h
│ │ │ └── version.inc
│ │ ├── PL2303/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── Readme.md
│ │ ├── chronometer/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── Readme_rus.txt
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── lidar.c
│ │ │ ├── lidar.h
│ │ │ ├── main.c
│ │ │ ├── stm32F103xB.ld
│ │ │ ├── str.c
│ │ │ ├── str.h
│ │ │ ├── time.c
│ │ │ ├── time.h
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── chronometer_v2/
│ │ │ ├── Difference
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── Readme_rus.txt
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── kicad/
│ │ │ │ ├── Chrono.lib
│ │ │ │ ├── chrono
│ │ │ │ ├── chrono.kicad_pcb
│ │ │ │ ├── chrono.kicad_prl
│ │ │ │ ├── chrono.kicad_pro
│ │ │ │ ├── chrono.kicad_sch
│ │ │ │ ├── chrono.net
│ │ │ │ ├── chrono.pretty/
│ │ │ │ │ └── L80-R.kicad_mod
│ │ │ │ ├── chrono.pro
│ │ │ │ ├── chrono.sch
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── chrono-B_Cu.gbr
│ │ │ │ │ ├── chrono-B_Mask.gbr
│ │ │ │ │ ├── chrono-B_SilkS.gbr
│ │ │ │ │ ├── chrono-Edge_Cuts.gbr
│ │ │ │ │ ├── chrono-F_Cu.gbr
│ │ │ │ │ ├── chrono-F_Mask.gbr
│ │ │ │ │ └── chrono-F_SilkS.gbr
│ │ │ │ ├── stm32-rescue.lib
│ │ │ │ └── sym-lib-table
│ │ │ ├── lidar.c
│ │ │ ├── lidar.h
│ │ │ ├── main.c
│ │ │ ├── stm32F103xB.ld
│ │ │ ├── str.c
│ │ │ ├── str.h
│ │ │ ├── time.c
│ │ │ ├── time.h
│ │ │ ├── usart.c
│ │ │ ├── usart.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ ├── pl2303_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── main.c
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_defs.h
│ │ │ ├── usb_lib.c
│ │ │ └── usb_lib.h
│ │ └── pl2303_snippet_naked/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ └── vector.h
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f01234.ld
│ │ │ ├── stm32f030f.ld
│ │ │ ├── stm32f042k.ld
│ │ │ ├── stm32f042x6.ld
│ │ │ ├── stm32f051x8.ld
│ │ │ ├── stm32f0728.ld
│ │ │ ├── stm32f072B.ld
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── led_blink/
│ │ ├── Makefile
│ │ ├── README
│ │ └── main.c
│ ├── makefile.f1
│ ├── openocd.cfg
│ ├── pwmdmatest/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── pwmtest/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_defs.h
│ │ ├── usb_lib.c
│ │ └── usb_lib.h
│ ├── shutter/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── UNISTABLE/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── flash.c
│ │ │ ├── flash.h
│ │ │ ├── hardware.c
│ │ │ ├── hardware.h
│ │ │ ├── kicad/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── shutter-B_Cu.gbr
│ │ │ │ │ ├── shutter-Edge_Cuts.gbr
│ │ │ │ │ ├── shutter-F_Cu.gbr
│ │ │ │ │ ├── shutter-drl.rpt
│ │ │ │ │ ├── shutter-drl_map.gbr
│ │ │ │ │ ├── shutter-job.gbrjob
│ │ │ │ │ └── shutter.drl
│ │ │ │ ├── qr.kicad_mod
│ │ │ │ ├── shutter-drl.rpt
│ │ │ │ ├── shutter.csv
│ │ │ │ ├── shutter.kicad_pcb
│ │ │ │ ├── shutter.kicad_prl
│ │ │ │ ├── shutter.kicad_pro
│ │ │ │ └── shutter.kicad_sch
│ │ │ ├── main.c
│ │ │ ├── openocd.cfg
│ │ │ ├── proto.c
│ │ │ ├── proto.h
│ │ │ ├── ringbuffer.c
│ │ │ ├── ringbuffer.h
│ │ │ ├── shutter.c
│ │ │ ├── shutter.cflags
│ │ │ ├── shutter.config
│ │ │ ├── shutter.creator
│ │ │ ├── shutter.creator.user
│ │ │ ├── shutter.creator.user.7bd84e3
│ │ │ ├── shutter.cxxflags
│ │ │ ├── shutter.files
│ │ │ ├── shutter.h
│ │ │ ├── shutter.includes
│ │ │ ├── usb.c
│ │ │ ├── usb.h
│ │ │ ├── usb_lib.c
│ │ │ ├── usb_lib.h
│ │ │ ├── usbhw.c
│ │ │ ├── usbhw.h
│ │ │ └── version.inc
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── fp-info-cache
│ │ │ ├── gerbers/
│ │ │ │ ├── shutter-B_Cu.gbr
│ │ │ │ ├── shutter-Edge_Cuts.gbr
│ │ │ │ ├── shutter-F_Cu.gbr
│ │ │ │ ├── shutter-drl.rpt
│ │ │ │ ├── shutter-drl_map.gbr
│ │ │ │ ├── shutter-job.gbrjob
│ │ │ │ └── shutter.drl
│ │ │ ├── shutter.csv
│ │ │ ├── shutter.kicad_pcb
│ │ │ ├── shutter.kicad_prl
│ │ │ ├── shutter.kicad_pro
│ │ │ ├── shutter.kicad_sch
│ │ │ ├── shutter.ods
│ │ │ └── shutter.xml
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── shutter.c
│ │ ├── shutter.cflags
│ │ ├── shutter.config
│ │ ├── shutter.creator
│ │ ├── shutter.creator.user
│ │ ├── shutter.creator.user.7bd84e3
│ │ ├── shutter.cxxflags
│ │ ├── shutter.files
│ │ ├── shutter.h
│ │ ├── shutter.includes
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── uart/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ └── ws2815/
│ ├── Makefile
│ ├── Readme
│ ├── hardware.c
│ ├── hardware.h
│ ├── hsv.c
│ ├── hsv.h
│ ├── main.c
│ ├── proto.c
│ ├── proto.h
│ ├── usb.c
│ ├── usb.h
│ ├── usb_defs.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── ws2815.c
│ └── ws2815.h
├── F3:F303/
│ ├── ADC/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── adc.c
│ │ ├── adc.cflags
│ │ ├── adc.config
│ │ ├── adc.creator
│ │ ├── adc.creator.user
│ │ ├── adc.cxxflags
│ │ ├── adc.files
│ │ ├── adc.h
│ │ ├── adc.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── BME280/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── bme280.cflags
│ │ ├── bme280.config
│ │ ├── bme280.creator
│ │ ├── bme280.creator.user
│ │ ├── bme280.cxxflags
│ │ ├── bme280.files
│ │ ├── bme280.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── CANbus4BTA/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canbus4bta.cflags
│ │ ├── canbus4bta.config
│ │ ├── canbus4bta.creator
│ │ ├── canbus4bta.creator.user
│ │ ├── canbus4bta.creator.user.7bd84e3
│ │ ├── canbus4bta.creator.user.cf63021
│ │ ├── canbus4bta.cxxflags
│ │ ├── canbus4bta.files
│ │ ├── canbus4bta.includes
│ │ ├── commonfunctions.c
│ │ ├── commonfunctions.h
│ │ ├── encoder.c
│ │ ├── encoder.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── bom.csv
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── stm32-B_Cu.gbr
│ │ │ │ ├── stm32-B_Mask.gbr
│ │ │ │ ├── stm32-B_Paste.gbr
│ │ │ │ ├── stm32-B_Silkscreen.gbr
│ │ │ │ ├── stm32-Edge_Cuts.gbr
│ │ │ │ ├── stm32-F_Cu.gbr
│ │ │ │ ├── stm32-F_Mask.gbr
│ │ │ │ ├── stm32-F_Paste.gbr
│ │ │ │ ├── stm32-F_Silkscreen.gbr
│ │ │ │ ├── stm32-drl.rpt
│ │ │ │ ├── stm32-drl_map.gbr
│ │ │ │ ├── stm32-job.gbrjob
│ │ │ │ └── stm32.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ ├── QR.kicad_mod
│ │ │ │ ├── VRB2405.kicad_mod
│ │ │ │ └── VRB_DCDC.kicad_mod
│ │ │ ├── optocouple.kicad_sch
│ │ │ ├── schematic-positions-to-layout.debug
│ │ │ ├── stm32-cache.kicad_sym
│ │ │ ├── stm32-rescue.kicad_sym
│ │ │ ├── stm32.kicad_pcb
│ │ │ ├── stm32.kicad_prl
│ │ │ ├── stm32.kicad_pro
│ │ │ ├── stm32.kicad_sch
│ │ │ ├── stm32.xml
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── textfunctions.c
│ │ ├── textfunctions.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── CANusb/
│ │ ├── Makefile
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canusb.cflags
│ │ ├── canusb.config
│ │ ├── canusb.creator
│ │ ├── canusb.creator.user
│ │ ├── canusb.cxxflags
│ │ ├── canusb.files
│ │ ├── canusb.includes
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── I2C_scan/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.cflags
│ │ ├── i2cscan.config
│ │ ├── i2cscan.creator
│ │ ├── i2cscan.creator.user
│ │ ├── i2cscan.creator.user.7bd84e3
│ │ ├── i2cscan.creator.user.cf63021
│ │ ├── i2cscan.cxxflags
│ │ ├── i2cscan.files
│ │ ├── i2cscan.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── InterfaceBoard/
│ │ ├── Debug.c
│ │ ├── Debug.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kicad/
│ │ │ ├── BOM.csv
│ │ │ ├── BOM.ods
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── many485-B_Cu.gbr
│ │ │ │ ├── many485-B_Mask.gbr
│ │ │ │ ├── many485-B_Silkscreen.gbr
│ │ │ │ ├── many485-Edge_Cuts.gbr
│ │ │ │ ├── many485-F_Cu.gbr
│ │ │ │ ├── many485-F_Mask.gbr
│ │ │ │ ├── many485-F_Silkscreen.gbr
│ │ │ │ ├── many485-drl.rpt
│ │ │ │ ├── many485-job.gbrjob
│ │ │ │ └── many485.drl
│ │ │ ├── iso3086.kicad_sym
│ │ │ ├── iso485.kicad_sch
│ │ │ ├── isolated_232.kicad_sch
│ │ │ ├── many485.kicad_pcb
│ │ │ ├── many485.kicad_prl
│ │ │ ├── many485.kicad_pro
│ │ │ ├── many485.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0505S-2W.kicad_mod
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── QR.kicad_mod
│ │ │ ├── ssi_422.kicad_sch
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── multiiface.cflags
│ │ ├── multiiface.config
│ │ ├── multiiface.creator
│ │ ├── multiiface.creator.user
│ │ ├── multiiface.cxxflags
│ │ ├── multiiface.files
│ │ ├── multiiface.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.cflags
│ │ ├── mlx90640.config
│ │ ├── mlx90640.creator
│ │ ├── mlx90640.creator.user
│ │ ├── mlx90640.cxxflags
│ │ ├── mlx90640.files
│ │ ├── mlx90640.h
│ │ ├── mlx90640.includes
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640-allsky/
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── STM32F303C.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── commproto.cpp
│ │ ├── commproto.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── ir-allsky.cflags
│ │ ├── ir-allsky.config
│ │ ├── ir-allsky.creator
│ │ ├── ir-allsky.creator.user
│ │ ├── ir-allsky.cxxflags
│ │ ├── ir-allsky.files
│ │ ├── ir-allsky.includes
│ │ ├── kicad/
│ │ │ ├── elements.kicad_sym
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── mainboard.kicad_pcb
│ │ │ ├── mainboard.kicad_prl
│ │ │ ├── mainboard.kicad_pro
│ │ │ ├── mainboard.kicad_sch
│ │ │ ├── my_footprints.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── S10K30.kicad_mod
│ │ │ │ └── SE83-GDS.kicad_mod
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.h
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640multi/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.cflags
│ │ ├── mlx90640.config
│ │ ├── mlx90640.creator
│ │ ├── mlx90640.creator.user
│ │ ├── mlx90640.cxxflags
│ │ ├── mlx90640.files
│ │ ├── mlx90640.h
│ │ ├── mlx90640.includes
│ │ ├── mlx90640_regs.h
│ │ ├── mlxproc.c
│ │ ├── mlxproc.h
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── MLX90640test/
│ │ ├── Makefile
│ │ ├── alpha.csv
│ │ ├── eeprom.csv
│ │ ├── frame0.csv
│ │ ├── frame1.csv
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── kta.csv
│ │ ├── kv.csv
│ │ ├── main.c
│ │ ├── mlx90640.c
│ │ ├── mlx90640.h
│ │ ├── mlx90640_regs.h
│ │ ├── mlxtest.cflags
│ │ ├── mlxtest.config
│ │ ├── mlxtest.creator
│ │ ├── mlxtest.creator.user
│ │ ├── mlxtest.cxxflags
│ │ ├── mlxtest.files
│ │ ├── mlxtest.includes
│ │ ├── offset.csv
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── testdata.h
│ │ ├── to_frame0.csv
│ │ ├── to_frame1.csv
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── Multistepper/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── TODO
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── commonproto.c
│ │ ├── commonproto.h
│ │ ├── esprif.conf
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── hashgen/
│ │ │ ├── Readme
│ │ │ ├── hashgen.c
│ │ │ ├── hdr.c
│ │ │ ├── hdr.h
│ │ │ ├── helpcmds.in
│ │ │ ├── mktestdic
│ │ │ ├── run
│ │ │ ├── strfunc.c
│ │ │ ├── strfunc.h
│ │ │ ├── test.c
│ │ │ └── testdic
│ │ ├── kicad/
│ │ │ ├── ADC.kicad_sch
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── BOM_full_last.ods
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── multistepper-B_Cu.gbr
│ │ │ │ ├── multistepper-B_Mask.gbr
│ │ │ │ ├── multistepper-B_Paste.gbr
│ │ │ │ ├── multistepper-B_Silkscreen.gbr
│ │ │ │ ├── multistepper-Edge_Cuts.gbr
│ │ │ │ ├── multistepper-F_Cu.gbr
│ │ │ │ ├── multistepper-F_Mask.gbr
│ │ │ │ ├── multistepper-F_Paste.gbr
│ │ │ │ ├── multistepper-F_Silkscreen.gbr
│ │ │ │ ├── multistepper-Ground_Cu.gbr
│ │ │ │ ├── multistepper-Power_Cu.gbr
│ │ │ │ ├── multistepper-drl.rpt
│ │ │ │ ├── multistepper-drl_map.gbr
│ │ │ │ ├── multistepper-job.gbrjob
│ │ │ │ └── multistepper.drl
│ │ │ ├── mcubase.kicad_sch
│ │ │ ├── motors.kicad_sch
│ │ │ ├── multistepper.csv
│ │ │ ├── multistepper.kicad_pcb
│ │ │ ├── multistepper.kicad_prl
│ │ │ ├── multistepper.kicad_pro
│ │ │ ├── multistepper.kicad_sch
│ │ │ ├── multistepper.xml
│ │ │ ├── power.kicad_sch
│ │ │ ├── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── stepper_M.kicad_sch
│ │ │ ├── stepper_module.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── kicad_old/
│ │ │ ├── ADC.kicad_sch
│ │ │ ├── BOM_ali.ods
│ │ │ ├── BOM_full.ods
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── gerbers/
│ │ │ │ ├── multistepper-B_Cu.gbr
│ │ │ │ ├── multistepper-B_Mask.gbr
│ │ │ │ ├── multistepper-B_Paste.gbr
│ │ │ │ ├── multistepper-B_Silkscreen.gbr
│ │ │ │ ├── multistepper-Edge_Cuts.gbr
│ │ │ │ ├── multistepper-F_Cu.gbr
│ │ │ │ ├── multistepper-F_Mask.gbr
│ │ │ │ ├── multistepper-F_Paste.gbr
│ │ │ │ ├── multistepper-F_Silkscreen.gbr
│ │ │ │ ├── multistepper-Ground_Cu.gbr
│ │ │ │ ├── multistepper-Power_Cu.gbr
│ │ │ │ ├── multistepper-drl_map.gbr
│ │ │ │ ├── multistepper-job.gbrjob
│ │ │ │ └── multistepper.drl
│ │ │ ├── mcubase.kicad_sch
│ │ │ ├── motors.kicad_sch
│ │ │ ├── multistepper.kicad_pcb
│ │ │ ├── multistepper.kicad_prl
│ │ │ ├── multistepper.kicad_pro
│ │ │ ├── multistepper.kicad_sch
│ │ │ ├── multistepper.xml
│ │ │ ├── power.kicad_sch
│ │ │ ├── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── stepper_M.kicad_sch
│ │ │ ├── stepper_module.kicad_sym
│ │ │ └── sym-lib-table
│ │ ├── main.c
│ │ ├── multistepper.cflags
│ │ ├── multistepper.config
│ │ ├── multistepper.creator
│ │ ├── multistepper.creator.user
│ │ ├── multistepper.creator.user.7bd84e3
│ │ ├── multistepper.cxxflags
│ │ ├── multistepper.files
│ │ ├── multistepper.includes
│ │ ├── openocd.cfg
│ │ ├── pdnuart.c
│ │ ├── pdnuart.c.dma
│ │ ├── pdnuart.h
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── steppers.c
│ │ ├── steppers.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── stty
│ │ ├── tmc2209.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── NitrogenFlooding/
│ │ ├── ADUvsR
│ │ ├── BMP280.c
│ │ ├── BMP280.h
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── adc.c
│ │ ├── adc.h
│ │ ├── buttons.c
│ │ ├── buttons.h
│ │ ├── font14.h
│ │ ├── fontNumb8.h
│ │ ├── fonts.c
│ │ ├── fonts.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── ili9341.c
│ │ ├── ili9341.h
│ │ ├── indication.c
│ │ ├── indication.h
│ │ ├── kicad/
│ │ │ ├── nitrogen/
│ │ │ │ ├── BOM.ods
│ │ │ │ ├── BOM_need.ods
│ │ │ │ ├── MCU.kicad_sch
│ │ │ │ ├── fp-info-cache
│ │ │ │ ├── fp-lib-table
│ │ │ │ ├── gerbers/
│ │ │ │ │ ├── nitrogen-B_Cu.gbr
│ │ │ │ │ ├── nitrogen-B_Mask.gbr
│ │ │ │ │ ├── nitrogen-B_Paste.gbr
│ │ │ │ │ ├── nitrogen-B_Silkscreen.gbr
│ │ │ │ │ ├── nitrogen-Edge_Cuts.gbr
│ │ │ │ │ ├── nitrogen-F_Cu.gbr
│ │ │ │ │ ├── nitrogen-F_Mask.gbr
│ │ │ │ │ ├── nitrogen-F_Paste.gbr
│ │ │ │ │ ├── nitrogen-F_Silkscreen.gbr
│ │ │ │ │ ├── nitrogen-GND_Cu.gbr
│ │ │ │ │ ├── nitrogen-Mixed_Cu.gbr
│ │ │ │ │ ├── nitrogen-drl_map.gbr
│ │ │ │ │ ├── nitrogen-job.gbrjob
│ │ │ │ │ └── nitrogen.drl
│ │ │ │ ├── nitrogen.csv
│ │ │ │ ├── nitrogen.kicad_pcb
│ │ │ │ ├── nitrogen.kicad_prl
│ │ │ │ ├── nitrogen.kicad_pro
│ │ │ │ ├── nitrogen.kicad_sch
│ │ │ │ ├── nitrogen.xml
│ │ │ │ ├── power.kicad_sch
│ │ │ │ └── stepper.pretty/
│ │ │ │ ├── B0x0xS.kicad_mod
│ │ │ │ ├── Hole_3mm.kicad_mod
│ │ │ │ └── stepper_module.kicad_mod
│ │ │ ├── pt1000.m
│ │ │ └── sensors/
│ │ │ ├── Heaters.dxf
│ │ │ ├── J8.pretty/
│ │ │ │ └── avia8.kicad_mod
│ │ │ ├── Sensors.dxf
│ │ │ ├── fp-info-cache
│ │ │ ├── fp-lib-table
│ │ │ ├── heaters.kicad_pcb
│ │ │ ├── heaters.kicad_prl
│ │ │ ├── heaters.kicad_pro
│ │ │ ├── heaters.kicad_sch
│ │ │ ├── heaters_gerber/
│ │ │ │ ├── heaters-B_Cu.gbr
│ │ │ │ ├── heaters-B_Mask.gbr
│ │ │ │ ├── heaters-B_Paste.gbr
│ │ │ │ ├── heaters-B_Silkscreen.gbr
│ │ │ │ ├── heaters-Edge_Cuts.gbr
│ │ │ │ ├── heaters-F_Cu.gbr
│ │ │ │ ├── heaters-F_Mask.gbr
│ │ │ │ ├── heaters-F_Paste.gbr
│ │ │ │ ├── heaters-F_Silkscreen.gbr
│ │ │ │ ├── heaters-drl_map.gbr
│ │ │ │ ├── heaters-job.gbrjob
│ │ │ │ └── heaters.drl
│ │ │ ├── sensors.kicad_pcb
│ │ │ ├── sensors.kicad_prl
│ │ │ ├── sensors.kicad_pro
│ │ │ ├── sensors.kicad_sch
│ │ │ └── sensors_gerber/
│ │ │ ├── sensors-B_Cu.gbr
│ │ │ ├── sensors-B_Mask.gbr
│ │ │ ├── sensors-B_Paste.gbr
│ │ │ ├── sensors-B_Silkscreen.gbr
│ │ │ ├── sensors-Edge_Cuts.gbr
│ │ │ ├── sensors-F_Cu.gbr
│ │ │ ├── sensors-F_Mask.gbr
│ │ │ ├── sensors-F_Paste.gbr
│ │ │ ├── sensors-F_Silkscreen.gbr
│ │ │ ├── sensors-drl_map.gbr
│ │ │ ├── sensors-job.gbrjob
│ │ │ └── sensors.drl
│ │ ├── main.c
│ │ ├── menu.c
│ │ ├── menu.h
│ │ ├── nitrogen.cflags
│ │ ├── nitrogen.config
│ │ ├── nitrogen.creator
│ │ ├── nitrogen.creator.user
│ │ ├── nitrogen.creator.user.cf63021
│ │ ├── nitrogen.cxxflags
│ │ ├── nitrogen.files
│ │ ├── nitrogen.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── screen.c
│ │ ├── screen.h
│ │ ├── spi.c
│ │ ├── spi.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── PL2303/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── pl2303.cflags
│ │ ├── pl2303.config
│ │ ├── pl2303.creator
│ │ ├── pl2303.creator.user
│ │ ├── pl2303.creator.user.7bd84e3
│ │ ├── pl2303.cxxflags
│ │ ├── pl2303.files
│ │ ├── pl2303.includes
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── Readme.md
│ ├── STM32F303C.md
│ ├── Seven_CDCs/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── multiiface.cflags
│ │ ├── multiiface.config
│ │ ├── multiiface.creator
│ │ ├── multiiface.creator.user
│ │ ├── multiiface.cxxflags
│ │ ├── multiiface.files
│ │ ├── multiiface.includes
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── Seven_CDCs.deprecated/
│ │ ├── 7CDCs.cflags
│ │ ├── 7CDCs.config
│ │ ├── 7CDCs.creator
│ │ ├── 7CDCs.creator.user
│ │ ├── 7CDCs.creator.user.7bd84e3
│ │ ├── 7CDCs.cxxflags
│ │ ├── 7CDCs.files
│ │ ├── 7CDCs.includes
│ │ ├── Makefile
│ │ ├── can.c
│ │ ├── can.h
│ │ ├── canproto.c
│ │ ├── canproto.h
│ │ ├── cmdproto.c
│ │ ├── cmdproto.h
│ │ ├── debug.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ └── version.inc
│ ├── USB_template/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb.c
│ │ ├── usb.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbhw.c
│ │ ├── usbhw.h
│ │ ├── usbtemplate.cflags
│ │ ├── usbtemplate.config
│ │ ├── usbtemplate.creator
│ │ ├── usbtemplate.creator.user
│ │ ├── usbtemplate.cxxflags
│ │ ├── usbtemplate.files
│ │ ├── usbtemplate.includes
│ │ └── version.inc
│ ├── USB_template_CDC/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ ├── usbtemplate.cflags
│ │ ├── usbtemplate.config
│ │ ├── usbtemplate.creator
│ │ ├── usbtemplate.creator.user
│ │ ├── usbtemplate.cxxflags
│ │ ├── usbtemplate.files
│ │ ├── usbtemplate.includes
│ │ └── version.inc
│ ├── blink/
│ │ ├── Makefile
│ │ └── blink.c
│ ├── floatPrintf/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usart1.cflags
│ │ ├── usart1.config
│ │ ├── usart1.creator
│ │ ├── usart1.creator.user
│ │ ├── usart1.cxxflags
│ │ ├── usart1.files
│ │ └── usart1.includes
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── stm32f0.h
│ │ │ ├── stm32f030x6.h
│ │ │ ├── stm32f030x8.h
│ │ │ ├── stm32f030xc.h
│ │ │ ├── stm32f031x6.h
│ │ │ ├── stm32f038xx.h
│ │ │ ├── stm32f042x6.h
│ │ │ ├── stm32f048xx.h
│ │ │ ├── stm32f051x8.h
│ │ │ ├── stm32f058xx.h
│ │ │ ├── stm32f070x6.h
│ │ │ ├── stm32f070xb.h
│ │ │ ├── stm32f071xb.h
│ │ │ ├── stm32f072xb.h
│ │ │ ├── stm32f078xx.h
│ │ │ ├── stm32f091xc.h
│ │ │ ├── stm32f098xx.h
│ │ │ ├── stm32f0xx.h
│ │ │ ├── stm32f1.h
│ │ │ ├── stm32f10x.h
│ │ │ ├── stm32f3.h
│ │ │ ├── stm32f302xc.h
│ │ │ ├── stm32f303x8.h
│ │ │ ├── stm32f303xc.h
│ │ │ ├── stm32f303xe.h
│ │ │ └── vector.h
│ │ ├── Makefile
│ │ ├── cm/
│ │ │ ├── arm_math.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ ├── core_sc300.h
│ │ │ └── mpu_armv7.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ ├── stm32f103xG.ld
│ │ │ ├── stm32f3.ld
│ │ │ ├── stm32f302xB.ld
│ │ │ ├── stm32f303xB.ld
│ │ │ ├── stm32f303xC.ld
│ │ │ └── stm32f303xD.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── makefile.f3
│ ├── usart1/
│ │ ├── Makefile
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ ├── usart1fullDMA/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── usart.c
│ │ └── usart.h
│ └── usarts/
│ ├── Makefile
│ ├── hardware.c
│ ├── hardware.h
│ ├── main.c
│ ├── usart.c
│ └── usart.h
├── F4:F401/
│ ├── blink/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── blink.c
│ │ └── openocd.cfg
│ └── inc/
│ ├── Fx/
│ │ ├── common_macros.h
│ │ ├── stm32f4.h
│ │ ├── stm32f407xx.h
│ │ └── vector.h
│ ├── cm/
│ │ ├── cmsis_compiler.h
│ │ ├── cmsis_gcc.h
│ │ ├── cmsis_version.h
│ │ ├── core_cm4.h
│ │ └── mpu_armv7.h
│ ├── ld/
│ │ ├── devices.data
│ │ ├── stm32f4.ld
│ │ └── stm32f407xg.ld
│ └── startup/
│ └── vector.c
├── G0:G070,G0B1/
│ ├── RTC/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── rtc.c
│ │ ├── rtc.cflags
│ │ ├── rtc.config
│ │ ├── rtc.creator
│ │ ├── rtc.creator.user
│ │ ├── rtc.cxxflags
│ │ ├── rtc.files
│ │ ├── rtc.h
│ │ ├── rtc.includes
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── blink/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── blink.cflags
│ │ ├── blink.config
│ │ ├── blink.creator
│ │ ├── blink.creator.user
│ │ ├── blink.cxxflags
│ │ ├── blink.files
│ │ ├── blink.includes
│ │ ├── openocd.cfg
│ │ └── systick_blink.c
│ ├── flash/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── flash.c
│ │ ├── flash.cflags
│ │ ├── flash.config
│ │ ├── flash.creator
│ │ ├── flash.creator.user
│ │ ├── flash.cxxflags
│ │ ├── flash.files
│ │ ├── flash.h
│ │ ├── flash.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ └── usart.h
│ ├── g0b1/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── dbg.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── test.cflags
│ │ ├── test.config
│ │ ├── test.creator
│ │ ├── test.creator.user
│ │ ├── test.cxxflags
│ │ ├── test.files
│ │ ├── test.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── i2c/
│ │ ├── Makefile
│ │ ├── Makefile.old
│ │ ├── README
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── i2cscan.cflags
│ │ ├── i2cscan.config
│ │ ├── i2cscan.creator
│ │ ├── i2cscan.creator.user
│ │ ├── i2cscan.cxxflags
│ │ ├── i2cscan.files
│ │ ├── i2cscan.includes
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── proto.c
│ │ ├── proto.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── usart.c
│ │ ├── usart.h
│ │ └── version.inc
│ ├── inc/
│ │ ├── Fx/
│ │ │ ├── common_macros.h
│ │ │ ├── flash_size_reg.h
│ │ │ ├── stm32g0.h
│ │ │ ├── stm32g030xx.h
│ │ │ ├── stm32g031xx.h
│ │ │ ├── stm32g041xx.h
│ │ │ ├── stm32g050xx.h
│ │ │ ├── stm32g051xx.h
│ │ │ ├── stm32g061xx.h
│ │ │ ├── stm32g070xx.h
│ │ │ ├── stm32g071xx.h
│ │ │ ├── stm32g081xx.h
│ │ │ ├── stm32g0b0xx.h
│ │ │ ├── stm32g0b1xx.h
│ │ │ ├── stm32g0c1xx.h
│ │ │ ├── stm32g0xx.h
│ │ │ └── vector.h
│ │ ├── cm/
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_cmFunc.h
│ │ │ ├── core_cmInstr.h
│ │ │ ├── core_cmSimd.h
│ │ │ ├── core_sc000.h
│ │ │ └── core_sc300.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32.ld
│ │ │ ├── stm32g070xb.ld
│ │ │ └── stm32g0b1xb.ld
│ │ └── startup/
│ │ └── vector.c
│ ├── makefile.g0
│ └── usart/
│ ├── Makefile
│ ├── Makefile.old
│ ├── README
│ ├── main.c
│ ├── openocd.cfg
│ ├── usart.c
│ ├── usart.cflags
│ ├── usart.config
│ ├── usart.creator
│ ├── usart.creator.user
│ ├── usart.cxxflags
│ ├── usart.files
│ ├── usart.h
│ └── usart.includes
├── Readme.md
├── TODO
├── deprecated/
│ ├── F0/
│ │ ├── Readme.md
│ │ ├── blink/
│ │ │ ├── Makefile
│ │ │ ├── ld/
│ │ │ │ └── stm32f042k.ld
│ │ │ ├── stm32f0.h
│ │ │ └── systick_blink.c
│ │ └── uart/
│ │ ├── Makefile
│ │ ├── Readme
│ │ ├── ld/
│ │ │ └── stm32f042k.ld
│ │ ├── main.c
│ │ ├── uart.geanypro
│ │ ├── usart.c
│ │ └── usart.h
│ ├── F1/
│ │ ├── 1_wire/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── onewire.c
│ │ │ ├── onewire.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── 2.8TFT/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── dmagpio.c
│ │ │ ├── dmagpio.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── lcd.c
│ │ │ ├── lcd.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── registers.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── DMA_GPIO/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── dmagpio.c
│ │ │ ├── dmagpio.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPIO_TIM/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── timgpio.c
│ │ │ ├── timgpio.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPS/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.geany
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── GPS+ultrasonic/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── Jeep_generator/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── timer.c
│ │ │ ├── timer.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── Readme.md
│ │ ├── Timelapse_keyboard/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── kicad/
│ │ │ │ ├── LEDs.cmp
│ │ │ │ ├── LEDs.net
│ │ │ │ ├── LEDs.sch
│ │ │ │ ├── diff_schematics.kicad_pcb
│ │ │ │ ├── diff_schematics.pro
│ │ │ │ └── my_modules.mod
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── Timelapse_keyboard_only_lasers/
│ │ │ ├── GPS.c
│ │ │ ├── GPS.h
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── adc.c
│ │ │ ├── adc.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── uart.c
│ │ │ ├── uart.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── USBCDC_template/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── canon_lens/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── spi.c
│ │ │ ├── spi.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── client-term/
│ │ │ ├── Makefile
│ │ │ └── client.c
│ │ ├── distance_meters/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sharp.c
│ │ │ ├── sharp.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── ultrasonic.c
│ │ │ ├── ultrasonic.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── hid_mouse_keyboard/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ └── usbhid.c
│ │ ├── keyboard_snippet/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── ocm.h
│ │ │ ├── usbkeybrd.c
│ │ │ └── usbkeybrd.h
│ │ ├── matrix_keyboard/
│ │ │ ├── Makefile
│ │ │ ├── Readme.md
│ │ │ ├── keycodes.c
│ │ │ ├── keycodes.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── matrixkbd.c
│ │ │ └── matrixkbd.h
│ │ ├── nokia5110/
│ │ │ ├── Makefile
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── font.c
│ │ │ ├── font.h
│ │ │ ├── hw_init.c
│ │ │ ├── hw_init.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── pcd8544.c
│ │ │ ├── pcd8544.h
│ │ │ ├── spi.c
│ │ │ ├── spi.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── simple_cdc/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ ├── stepper_motion/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── cdcacm.c
│ │ │ ├── cdcacm.h
│ │ │ ├── client-p2/
│ │ │ │ ├── Makefile
│ │ │ │ ├── bta_shdata.h
│ │ │ │ ├── cmdlnopts.c
│ │ │ │ ├── cmdlnopts.h
│ │ │ │ ├── main.c
│ │ │ │ ├── parseargs.c
│ │ │ │ └── parseargs.h
│ │ │ ├── hardware_ini.c
│ │ │ ├── hardware_ini.h
│ │ │ ├── ld/
│ │ │ │ ├── devices.data
│ │ │ │ ├── stm32f103x4.ld
│ │ │ │ ├── stm32f103x6.ld
│ │ │ │ ├── stm32f103x8.ld
│ │ │ │ ├── stm32f103xB.ld
│ │ │ │ ├── stm32f103xC.ld
│ │ │ │ ├── stm32f103xD.ld
│ │ │ │ ├── stm32f103xE.ld
│ │ │ │ ├── stm32f103xF.ld
│ │ │ │ └── stm32f103xG.ld
│ │ │ ├── main.c
│ │ │ ├── main.h
│ │ │ ├── steppers.c
│ │ │ ├── steppers.h
│ │ │ ├── sync.c
│ │ │ ├── sync.h
│ │ │ ├── user_proto.c
│ │ │ └── user_proto.h
│ │ └── ultrasonic/
│ │ ├── Makefile
│ │ ├── Readme.md
│ │ ├── cdcacm.c
│ │ ├── cdcacm.h
│ │ ├── hardware_ini.c
│ │ ├── hardware_ini.h
│ │ ├── ld/
│ │ │ ├── devices.data
│ │ │ ├── stm32f103x4.ld
│ │ │ ├── stm32f103x6.ld
│ │ │ ├── stm32f103x8.ld
│ │ │ ├── stm32f103xB.ld
│ │ │ ├── stm32f103xC.ld
│ │ │ ├── stm32f103xD.ld
│ │ │ ├── stm32f103xE.ld
│ │ │ ├── stm32f103xF.ld
│ │ │ └── stm32f103xG.ld
│ │ ├── main.c
│ │ ├── main.h
│ │ ├── sharp.c
│ │ ├── sharp.h
│ │ ├── sync.c
│ │ ├── sync.h
│ │ ├── ultrasonic.c
│ │ ├── ultrasonic.geany
│ │ ├── ultrasonic.h
│ │ ├── user_proto.c
│ │ └── user_proto.h
│ └── README
├── libopencm3.ori.tgz
├── makefile.stm32
├── snippets/
│ ├── USB_CDC_ringbuffer/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── dbg.h
│ │ ├── hardware.c
│ │ ├── hardware.h
│ │ ├── main.c
│ │ ├── openocd.cfg
│ │ ├── ringbuffer.c
│ │ ├── ringbuffer.h
│ │ ├── strfunc.c
│ │ ├── strfunc.h
│ │ ├── test.cflags
│ │ ├── test.config
│ │ ├── test.creator
│ │ ├── test.creator.user
│ │ ├── test.cxxflags
│ │ ├── test.files
│ │ ├── test.includes
│ │ ├── usart.c
│ │ ├── usart.h
│ │ ├── usb_descr.c
│ │ ├── usb_descr.h
│ │ ├── usb_dev.c
│ │ ├── usb_dev.h
│ │ ├── usb_lib.c
│ │ ├── usb_lib.h
│ │ └── version.inc
│ ├── factorize.c
│ ├── factorize2.c
│ ├── strfunc.c
│ ├── strfunc.h
│ └── usb_pl2303/
│ ├── Readme
│ ├── ringbuffer.c
│ ├── ringbuffer.h
│ ├── usb.c
│ ├── usb.h
│ ├── usb_lib.c
│ ├── usb_lib.h
│ ├── usbhw.c
│ └── usbhw.h
└── testboard/
├── F0_F1-LQFP48_testboard/
│ ├── elements.lib
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── my_footprints.pretty/
│ │ ├── Hole_3mm.kicad_mod
│ │ ├── Potentiometer.kicad_mod
│ │ ├── SMD_conn_4x2.5mm.kicad_mod
│ │ └── TH_via.kicad_mod
│ ├── stm32-rescue.lib
│ ├── stm32.bom
│ ├── stm32.kicad_pcb
│ ├── stm32.net
│ ├── stm32.pro
│ ├── stm32.sch
│ └── sym-lib-table
└── F0_F1_F3-LQFP48_testboard/
├── elements.lib
├── fp-info-cache
├── fp-lib-table
├── my_footprints.pretty/
│ ├── Hole_3mm.kicad_mod
│ ├── Potentiometer.kicad_mod
│ ├── SMD_conn_4x2.5mm.kicad_mod
│ └── TH_via.kicad_mod
├── stm32-rescue.lib
├── stm32.bom
├── stm32.kicad_pcb
├── stm32.kicad_prl
├── stm32.kicad_pro
├── stm32.kicad_sch
├── stm32.net
├── stm32.pro
├── stm32.sch
└── sym-lib-table
Showing preview only (689K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8772 symbols across 1016 files)
FILE: F0:F030,F042,F072/3steppersLB/adc.c
function adc_setup (line 29) | void adc_setup(){
function getADCval (line 70) | uint16_t getADCval(int nch){
function getMCUtemp (line 90) | int32_t getMCUtemp(){
function getVdd (line 100) | uint32_t getVdd(){
FILE: F0:F030,F042,F072/3steppersLB/buttons.c
type keybase (line 22) | typedef struct{
function process_keys (line 32) | void process_keys(){
function keyevent (line 77) | keyevent keystate(uint8_t k, uint32_t *T){
function keyevent (line 87) | keyevent keyevt(uint8_t k){
FILE: F0:F030,F042,F072/3steppersLB/buttons.h
type keyevent (line 29) | typedef enum{
FILE: F0:F030,F042,F072/3steppersLB/can.c
function CAN_status (line 41) | CAN_status CAN_get_status(){
function CAN_messagebuf_push (line 48) | static int CAN_messagebuf_push(CAN_message *msg){
function CAN_message (line 59) | CAN_message *CAN_messagebuf_pop(){
function CAN_reinit (line 73) | void CAN_reinit(uint16_t speed){
function CAN_setup (line 102) | void CAN_setup(uint16_t speed){
function can_proc (line 148) | void can_proc(){
function CAN_status (line 196) | CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){
function can_process_fifo (line 248) | static void can_process_fifo(uint8_t fifo_num){
function formerr (line 302) | static void formerr(CAN_message *msg, errcodes err){
function TRUE_INLINE (line 316) | TRUE_INLINE void parseCANcommand(CAN_message *msg){
function cec_can_isr (line 362) | void cec_can_isr(){
FILE: F0:F030,F042,F072/3steppersLB/can.h
type CAN_message (line 36) | typedef struct{
type CAN_status (line 42) | typedef enum{
FILE: F0:F030,F042,F072/3steppersLB/commonproto.c
function errcodes (line 37) | static errcodes pingparser(uint8_t _U_ par, int32_t _U_ *val){
function errcodes (line 41) | static errcodes relayparser(uint8_t par, int32_t *val){
function errcodes (line 51) | static errcodes buzzerparser(uint8_t par, int32_t *val){
function errcodes (line 61) | static errcodes adcparser(uint8_t par, int32_t *val){
function errcodes (line 70) | static errcodes buttonsparser(uint8_t par, int32_t *val){
function errcodes (line 80) | static errcodes eswparser(uint8_t par, int32_t *val){
function errcodes (line 96) | static errcodes mcutparser(uint8_t _U_ par, int32_t *val){
function errcodes (line 102) | static errcodes mcuvddparser(uint8_t _U_ par, int32_t *val){
function errcodes (line 108) | static errcodes resetparser(uint8_t _U_ par, int32_t _U_ *val){
function errcodes (line 114) | static errcodes timeparser(uint8_t _U_ par, int32_t *val){
function errcodes (line 120) | static errcodes pwmparser(uint8_t par, int32_t *val){
function TRUE_INLINE (line 134) | TRUE_INLINE void setextpar(uint8_t val, uint8_t i){
function errcodes (line 149) | static errcodes extparser(uint8_t par, int32_t *val){
function errcodes (line 179) | static errcodes ustepsparser(uint8_t par, int32_t *val){
function errcodes (line 197) | static errcodes encstepsminparser(uint8_t par, int32_t *val){
function errcodes (line 207) | static errcodes encstepsmaxparser(uint8_t par, int32_t *val){
function errcodes (line 217) | static errcodes accparser(uint8_t par, int32_t *val){
function getSPD (line 229) | static uint16_t getSPD(uint8_t n, int32_t speed){
function errcodes (line 238) | static errcodes maxspdparser(uint8_t par, int32_t *val){
function errcodes (line 249) | static errcodes minspdparser(uint8_t par, int32_t *val){
function errcodes (line 260) | static errcodes spdlimparser(uint8_t par, int32_t *val){
function errcodes (line 266) | static errcodes maxstepsparser(uint8_t par, int32_t *val){
function errcodes (line 276) | static errcodes encrevparser(uint8_t par, int32_t *val){
function errcodes (line 287) | static errcodes motflagsparser(uint8_t par, int32_t *val){
function errcodes (line 298) | static errcodes eswreactparser(uint8_t par, int32_t *val){
function errcodes (line 310) | static errcodes saveconfparser(uint8_t _U_ par, int32_t _U_ *val){
function errcodes (line 319) | static errcodes reinitmparser(uint8_t _U_ par, int32_t _U_ *val){
function errcodes (line 325) | static errcodes emstopparser(uint8_t par, int32_t _U_ *val){
function errcodes (line 331) | static errcodes emstopallparser(uint8_t _U_ par, int32_t _U_ *val){
function errcodes (line 338) | static errcodes stopparser(uint8_t par, int32_t _U_ *val){
function errcodes (line 344) | static errcodes curposparser(uint8_t par, int32_t *val){
function errcodes (line 350) | static errcodes relstepsparser(uint8_t par, int32_t *val){
function errcodes (line 356) | static errcodes relslowparser(uint8_t par, int32_t *val){
function errcodes (line 362) | static errcodes motstateparser(uint8_t par, int32_t *val){
function errcodes (line 368) | static errcodes encposparser(uint8_t par, int32_t *val){
function errcodes (line 378) | static errcodes setposparser(uint8_t par, int32_t *val){
function errcodes (line 388) | static errcodes gotozeroparser(uint8_t par, _U_ int32_t *val){
FILE: F0:F030,F042,F072/3steppersLB/commonproto.h
type errcodes (line 39) | typedef enum{
type errcodes (line 52) | typedef errcodes (*fpointer)(uint8_t par, int32_t *val);
FILE: F0:F030,F042,F072/3steppersLB/custom_buttons.c
function custom_buttons_process (line 35) | void custom_buttons_process(){
FILE: F0:F030,F042,F072/3steppersLB/flash.c
function binarySearch (line 73) | static int binarySearch(int r, const uint8_t *start, int stor_size){
function flashstorage_init (line 95) | void flashstorage_init(){
function store_userconf (line 110) | int store_userconf(){
function write2flash (line 120) | static int write2flash(const void *start, const void *wrdata, uint32_t s...
function erase_flash (line 153) | static int erase_flash(const void *start, const void *end){
function dump_userconf (line 189) | void dump_userconf(_U_ char *txt){
function erase_storage (line 229) | int erase_storage(){
FILE: F0:F030,F042,F072/3steppersLB/flash.h
type motflags_t (line 48) | typedef struct{
type user_conf (line 60) | typedef struct __attribute__((packed, aligned(4))){
FILE: F0:F030,F042,F072/3steppersLB/hardware.c
function gpio_setup (line 44) | void gpio_setup(void){
function iwdg_setup (line 62) | void iwdg_setup(){
function setup_mpwm (line 87) | static void setup_mpwm(int i){
function setup_enc (line 106) | static void setup_enc(int i){
function timers_setup (line 129) | void timers_setup(){
function pause_ms (line 151) | void pause_ms(uint32_t pause){
function Jump2Boot (line 160) | void Jump2Boot(){ // for STM32F072
function MSB (line 190) | uint8_t MSB(uint16_t val){
function ESW_state (line 198) | uint8_t ESW_state(uint8_t x){
function tim14_isr (line 204) | void tim14_isr(){
function tim15_isr (line 209) | void tim15_isr(){
function tim16_isr (line 214) | void tim16_isr(){
function tim1_brk_up_trg_com_isr (line 220) | void tim1_brk_up_trg_com_isr(){
function tim2_isr (line 223) | void tim2_isr(){
function tim3_isr (line 226) | void tim3_isr(){
FILE: F0:F030,F042,F072/3steppersLB/main.c
function sys_tick_handler (line 32) | void sys_tick_handler(void){
function main (line 69) | int main(void){
FILE: F0:F030,F042,F072/3steppersLB/steppers.c
type mvto0state (line 25) | typedef enum{
type t_stalled (line 31) | typedef enum{
function TRUE_INLINE (line 87) | TRUE_INLINE void recalcARR(int i){
function update_stepper (line 96) | void update_stepper(uint8_t i){
function init_steppers (line 106) | void init_steppers(){
function encoder_position (line 122) | int32_t encoder_position(uint8_t i){
function setencpos (line 130) | int setencpos(uint8_t i, int32_t position){
function errcodes (line 147) | errcodes setmotpos(uint8_t i, int32_t position){
function errcodes (line 157) | errcodes getpos(uint8_t i, int32_t *position){
function errcodes (line 169) | errcodes getremainsteps(uint8_t i, int32_t *position){
function calcacceleration (line 175) | static void calcacceleration(uint8_t i){
function esw_block (line 215) | static int esw_block(uint8_t i){
function errcodes (line 233) | errcodes motor_absmove(uint8_t i, int32_t newpos){
function errcodes (line 280) | errcodes motor_relmove(uint8_t i, int32_t relsteps){
function errcodes (line 284) | errcodes motor_relslow(uint8_t i, int32_t relsteps){
function emstopmotor (line 294) | void emstopmotor(uint8_t i){
function stp_state (line 309) | stp_state getmotstate(uint8_t i){
function addmicrostep (line 314) | void addmicrostep(uint8_t i){
function encoders_UPD (line 349) | void encoders_UPD(uint8_t i){
function t_stalled (line 362) | static t_stalled chkSTALL(uint8_t i){
function chkstepper (line 436) | static void chkstepper(int i){
function errcodes (line 600) | errcodes motor_goto0(uint8_t i){
function stopmotor (line 610) | void stopmotor(uint8_t i){
function process_steppers (line 634) | void process_steppers(){
function geteswreact (line 643) | uint8_t geteswreact(uint8_t i){
FILE: F0:F030,F042,F072/3steppersLB/steppers.h
type stp_state (line 42) | typedef enum{
FILE: F0:F030,F042,F072/3steppersLB/strfunct.c
function sendbuf (line 39) | void sendbuf(){
function bufputchar (line 47) | void bufputchar(char ch){
function addtobuf (line 55) | void addtobuf(const char *txt){
function cmpstr (line 65) | int cmpstr(const char *s1, const char *s2){
function CAN_message (line 92) | static CAN_message *parseCANmsg(char *txt){
function sendCANcommand (line 134) | static void sendCANcommand(char *txt){
function CANini (line 143) | static void CANini(char *txt){
function addIGN (line 162) | static void addIGN(char *txt){
function print_ign_buf (line 187) | static void print_ign_buf(_U_ char *txt){
function printID (line 202) | static void printID(uint16_t FRn){
function list_filters (line 219) | static void list_filters(_U_ char *txt){
function add_filter (line 265) | static void add_filter(char *str){
function canid (line 348) | void canid(char *txt){
function inpause (line 368) | void inpause(_U_ char *txt){
function inresume (line 372) | void inresume(_U_ char *txt){
function delignlist (line 376) | void delignlist(_U_ char *txt){
function bootldr (line 380) | void bootldr(_U_ char *txt){
function getcounter (line 386) | void getcounter(_U_ char *txt){
function wdcheck (line 396) | void wdcheck(_U_ char *txt){
type codetext (line 400) | typedef struct{
function dumperrcodes (line 414) | void dumperrcodes(_U_ char *txt){
function eraseflash (line 426) | static void eraseflash(_U_ char *txt){
type commands (line 480) | typedef struct{
function dumpcmdcodes (line 552) | void dumpcmdcodes(_U_ char *txt){
function showHelp (line 585) | static void showHelp(){
function cmd_parser (line 612) | void cmd_parser(char *txt){
function printu (line 685) | void printu(uint32_t val){
function printi (line 699) | void printi(int32_t val){
function printuhex (line 708) | void printuhex(uint32_t val){
function isgood (line 727) | uint8_t isgood(uint16_t ID){
FILE: F0:F030,F042,F072/3steppersLB/usb.c
function EP1_Handler (line 26) | static void EP1_Handler(){
function transmit_Handler (line 36) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 43) | static void receive_Handler(){ // EP2OUT
function USB_setup (line 49) | void USB_setup(){
function usbwr (line 71) | static int usbwr(const uint8_t *buf, uint16_t l){
function send_next (line 90) | static void send_next(){
function USB_send (line 98) | void USB_send(const uint8_t *buf, uint16_t len){
function USB_sendstr (line 112) | void USB_sendstr(const char *str){
function USB_send_blk (line 120) | void USB_send_blk(const uint8_t *buf, uint16_t len){
function usb_proc (line 139) | void usb_proc(){
function USB_receive (line 166) | uint8_t USB_receive(uint8_t *buf){
FILE: F0:F030,F042,F072/3steppersLB/usb_defs.h
type USB_TypeDef (line 76) | typedef struct{
type USB_EPDATA_TypeDef (line 88) | typedef struct{
type USB_BtableDef (line 95) | typedef struct{
FILE: F0:F030,F042,F072/3steppersLB/usb_lib.c
function usb_LineCoding (line 31) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 138) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 142) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 146) | void WEAK break_handler(){
function vendor_handler (line 150) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 172) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 200) | static inline void get_descriptor(){
function std_d2h_req (line 229) | static inline void std_d2h_req(){
function std_h2d_req (line 246) | static inline void std_h2d_req(){
function EP0_Handler (line 271) | static void EP0_Handler(){
function EP_Init (line 349) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 377) | void usb_isr(){
function EP_WriteIRQ (line 431) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 449) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 461) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/3steppersLB/usb_lib.h
type USB_state (line 83) | typedef enum{
type config_pack_t (line 121) | typedef struct {
type ep_t (line 130) | typedef struct __ep_t{
type usb_dev_t (line 139) | typedef struct {
type usb_LineCoding (line 144) | typedef struct {
type usb_cdc_notification (line 159) | typedef struct {
FILE: F0:F030,F042,F072/CANBUS_SSI/adc.c
function adc_setup (line 38) | void adc_setup(){
function getADCval (line 99) | uint16_t getADCval(int nch){
function getMCUtemp (line 120) | int32_t getMCUtemp(){
function getVdd (line 130) | uint32_t getVdd(){
function Ufromadu (line 136) | static inline uint32_t Ufromadu(uint8_t nch, uint32_t vdd){
FILE: F0:F030,F042,F072/CANBUS_SSI/can.c
function CAN_status (line 44) | CAN_status CAN_get_status(){
function CAN_messagebuf_push (line 52) | static int CAN_messagebuf_push(CAN_message *msg){
function CAN_message (line 63) | CAN_message *CAN_messagebuf_pop(){
function readCANID (line 75) | void readCANID(){
function getCANID (line 80) | uint16_t getCANID(){
function CAN_reinit (line 84) | void CAN_reinit(uint16_t speed){
function CAN_setup (line 114) | void CAN_setup(uint16_t speed){
function can_proc (line 162) | void can_proc(){
function CAN_status (line 208) | CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){
function can_process_fifo (line 270) | static void can_process_fifo(uint8_t fifo_num){
function cec_can_isr (line 317) | void cec_can_isr(){
function can_accept_one (line 336) | void can_accept_one(){
function can_accept_any (line 346) | void can_accept_any(){
FILE: F0:F030,F042,F072/CANBUS_SSI/can.h
type CAN_message (line 53) | typedef struct{
type CAN_status (line 61) | typedef enum{
FILE: F0:F030,F042,F072/CANBUS_SSI/can_process.c
function can_messages_proc (line 51) | void can_messages_proc(){
function CAN_status (line 96) | CAN_status try2send(uint8_t *buf, uint8_t len, uint16_t id){
FILE: F0:F030,F042,F072/CANBUS_SSI/can_process.h
type CAN_commands (line 30) | typedef enum{
FILE: F0:F030,F042,F072/CANBUS_SSI/flash.c
function binarySearch (line 72) | static int binarySearch(int r, const uint8_t *start, int stor_size){
function flashstorage_init (line 94) | void flashstorage_init(){
function store_userconf (line 111) | int store_userconf(){
function write2flash (line 121) | static int write2flash(const void *start, const void *wrdata, uint32_t s...
function erase_flash (line 160) | static int erase_flash(const void *start, const void *end){
function dump_userconf (line 213) | void dump_userconf(){
FILE: F0:F030,F042,F072/CANBUS_SSI/flash.h
type user_conf (line 36) | typedef struct __attribute__((packed, aligned(4))){
FILE: F0:F030,F042,F072/CANBUS_SSI/hardware.c
function Jump2Boot (line 24) | void Jump2Boot(){
function iwdg_setup (line 49) | void iwdg_setup(){
function gpio_setup (line 79) | void gpio_setup(){
function tim2_Setup (line 97) | void tim2_Setup(){
function refreshBRDaddr (line 133) | uint8_t refreshBRDaddr(){
function getBRDaddr (line 136) | uint8_t getBRDaddr(){return brdADDR;}
function sleep (line 138) | void sleep(uint16_t ms){
FILE: F0:F030,F042,F072/CANBUS_SSI/main.c
function sys_tick_handler (line 37) | void sys_tick_handler(void){
function uhex (line 41) | static void uhex(uint8_t *arr, uint8_t l){
function CANsendEnc (line 99) | static void CANsendEnc(uint8_t *buf){
function CANsendLim (line 110) | static void CANsendLim(){
function main (line 116) | int main(void){
FILE: F0:F030,F042,F072/CANBUS_SSI/proto.c
function buftgt (line 49) | void buftgt(uint8_t isUSB){
function sendbuf (line 53) | void sendbuf(){
function addtobuf (line 64) | void addtobuf(const char *txt){
function bufputchar (line 81) | void bufputchar(char ch){
function showADCvals (line 90) | static inline void showADCvals(){
function printmcut (line 100) | static inline void printmcut(){
function showUIvals (line 111) | static inline void showUIvals(){
function CAN_message (line 131) | static CAN_message *parseCANmsg(char *txt){
function TRUE_INLINE (line 170) | TRUE_INLINE void sendCANcommand(char *txt){
function TRUE_INLINE (line 180) | TRUE_INLINE void userconf_manip(char *txt){
function chID (line 203) | static void chID(uint32_t new, uint16_t *id){
function chCAN (line 217) | static void chCAN(char val, uint8_t *ch){
function TRUE_INLINE (line 232) | TRUE_INLINE void setters(char *txt){
function cmd_parser (line 298) | void cmd_parser(char *txt, uint8_t isUSB){
function printu (line 405) | void printu(uint32_t val){
function printuhex (line 420) | void printuhex(uint32_t val){
FILE: F0:F030,F042,F072/CANBUS_SSI/spi.c
function spi_setup (line 30) | void spi_setup(){
function dma1_channel2_3_isr (line 79) | void dma1_channel2_3_isr(){
function SPI_transmit (line 96) | uint8_t SPI_transmit(const uint8_t *buf, uint8_t len){
function SPI_getdata (line 120) | uint8_t SPI_getdata(uint8_t *buf, uint8_t len){
FILE: F0:F030,F042,F072/CANBUS_SSI/spi.h
type spiStatus (line 27) | typedef enum{
FILE: F0:F030,F042,F072/CANBUS_SSI/usart.c
type _485_state (line 27) | typedef enum{
function usart_getline (line 57) | int usart_getline(char **line){
function usart_send_blocking (line 75) | void usart_send_blocking(const char *str, int len){
function usart_setup (line 92) | void usart_setup(){
function usart1_isr (line 137) | void usart1_isr(){
function usart_proc (line 183) | void usart_proc(){
FILE: F0:F030,F042,F072/CANBUS_SSI/usart.h
type TXstatus (line 32) | typedef enum{
FILE: F0:F030,F042,F072/CANBUS_SSI/usb.c
function EP1_Handler (line 32) | static void EP1_Handler(){
function transmit_Handler (line 42) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 49) | static void receive_Handler(){ // EP2OUT
function USB_setup (line 55) | void USB_setup(){
function usbwr (line 77) | static int usbwr(const uint8_t *buf, uint16_t l){
function send_next (line 96) | static void send_next(){
function USB_send (line 104) | void USB_send(const uint8_t *buf, uint16_t len){
function USB_sendstr (line 118) | void USB_sendstr(const char *str){
function USB_send_blk (line 126) | void USB_send_blk(const uint8_t *buf, uint16_t len){
function usb_proc (line 145) | void usb_proc(){
function USB_receive (line 172) | uint8_t USB_receive(uint8_t *buf){
FILE: F0:F030,F042,F072/CANBUS_SSI/usb_defs.h
type USB_TypeDef (line 81) | typedef struct{
type USB_EPDATA_TypeDef (line 93) | typedef struct{
type USB_BtableDef (line 100) | typedef struct{
FILE: F0:F030,F042,F072/CANBUS_SSI/usb_lib.c
function usb_LineCoding (line 36) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 143) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 147) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 151) | void WEAK break_handler(){
function vendor_handler (line 155) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 177) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 205) | static inline void get_descriptor(){
function std_d2h_req (line 234) | static inline void std_d2h_req(){
function std_h2d_req (line 251) | static inline void std_h2d_req(){
function EP0_Handler (line 276) | static void EP0_Handler(){
function EP_Init (line 354) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 382) | void usb_isr(){
function EP_WriteIRQ (line 436) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 454) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 466) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/CANBUS_SSI/usb_lib.h
type USB_state (line 88) | typedef enum{
type config_pack_t (line 126) | typedef struct {
type ep_t (line 135) | typedef struct __ep_t{
type usb_dev_t (line 144) | typedef struct {
type usb_LineCoding (line 149) | typedef struct {
type usb_cdc_notification (line 164) | typedef struct {
FILE: F0:F030,F042,F072/Chiller/adc.c
function getADCval (line 34) | uint16_t getADCval(int nch){
function getMCUtemp (line 55) | int32_t getMCUtemp(){
function getVdd (line 68) | uint32_t getVdd(){
function getNTC (line 79) | int16_t getNTC(int nch){
FILE: F0:F030,F042,F072/Chiller/hardware.c
function iwdg_setup (line 22) | static inline void iwdg_setup(){
function adc_setup (line 43) | static inline void adc_setup(){
function gpio_setup (line 120) | static inline void gpio_setup(){
function timers_setup (line 152) | static inline void timers_setup(){
function hw_setup (line 186) | void hw_setup(){
function exti0_1_isr (line 198) | void exti0_1_isr(){
FILE: F0:F030,F042,F072/Chiller/main.c
function sys_tick_handler (line 36) | void sys_tick_handler(void){
function print_state (line 40) | static void print_state(uint8_t state){
function main (line 56) | int main(void){
FILE: F0:F030,F042,F072/Chiller/mainloop.c
function increase_pump_pwm (line 49) | static inline void increase_pump_pwm(){
function decrease_pump_pwm (line 56) | static inline void decrease_pump_pwm(){
function binsrch (line 71) | static inline uint16_t binsrch(uint16_t oldval, uint16_t curval, uint8_t...
function change_heater_pwm (line 94) | static void change_heater_pwm(uint8_t dir){
function change_cooler_pwm (line 108) | static void change_cooler_pwm(uint8_t dir){
function get_critical (line 127) | static inline uint8_t get_critical(){
function check_alarm (line 197) | static inline void check_alarm(){
function checkOutT (line 227) | static inline void checkOutT(){
function chiller_state (line 277) | chiller_state *mainloop(){
FILE: F0:F030,F042,F072/Chiller/mainloop.h
type chiller_state (line 47) | typedef struct{
FILE: F0:F030,F042,F072/Chiller/protocol.c
function debugging_proc (line 31) | static void debugging_proc(const char *command){
function get_ntc (line 74) | static void get_ntc(const char *str){
FILE: F0:F030,F042,F072/Chiller/usart.c
function put_char (line 43) | int put_char(char c){
function put_string (line 51) | int put_string(const char *str){
function put_int (line 62) | int put_int(int32_t N){
function put_uint (line 69) | int put_uint(uint32_t N){
function TXstatus (line 85) | TXstatus usart1_sendbuf(){
function USART1_config (line 93) | void USART1_config(){
function usart1_isr (line 128) | void usart1_isr(){
function dma1_channel2_3_isr (line 200) | void dma1_channel2_3_isr(){
function usart1_getline (line 210) | int usart1_getline(char **line){
function TXstatus (line 227) | TXstatus usart1_send(const char *str, int len){
function TXstatus (line 244) | TXstatus usart1_send_blocking(const char *str, int len){
FILE: F0:F030,F042,F072/Chiller/usart.h
type TXstatus (line 32) | typedef enum{
FILE: F0:F030,F042,F072/F0_testbrd/adc.c
function getADCval (line 38) | uint16_t getADCval(int nch){
function getADCvoltage (line 59) | uint32_t getADCvoltage(int nch){
function getMCUtemp (line 67) | int32_t getMCUtemp(){
function getVdd (line 80) | uint32_t getVdd(){
FILE: F0:F030,F042,F072/F0_testbrd/hardware.c
function iwdg_setup (line 31) | void iwdg_setup(){
function gpio_setup (line 54) | static inline void gpio_setup(){
function adc_setup (line 69) | static inline void adc_setup(){
function pwm_setup (line 145) | static inline void pwm_setup(){
function hw_setup (line 174) | void hw_setup(){
function dma1_channel2_3_isr (line 183) | void dma1_channel2_3_isr(){
function dma1_channel4_5_isr (line 199) | void dma1_channel4_5_isr(){
FILE: F0:F030,F042,F072/F0_testbrd/i2c.c
function i2c_setup (line 34) | void i2c_setup(I2C_SPEED speed){
function write_i2cs (line 72) | static uint8_t write_i2cs(uint8_t addr, uint8_t *data, uint8_t nbytes, u...
function write_i2c (line 118) | uint8_t write_i2c(uint8_t addr, uint8_t *data, uint8_t nbytes){
function read_i2cb (line 127) | static uint8_t read_i2cb(uint8_t addr, uint8_t *data, uint8_t nbytes, ui...
function read_i2c (line 167) | uint8_t read_i2c(uint8_t addr, uint8_t *data, uint8_t nbytes){
function read_i2c_reg (line 172) | uint8_t read_i2c_reg(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t n...
function i2c_init_scan_mode (line 177) | void i2c_init_scan_mode(){
function i2c_scan_next_addr (line 185) | int i2c_scan_next_addr(uint8_t *addr){
FILE: F0:F030,F042,F072/F0_testbrd/i2c.h
type I2C_SPEED (line 26) | typedef enum{
FILE: F0:F030,F042,F072/F0_testbrd/main.c
function sys_tick_handler (line 37) | void sys_tick_handler(void){
function main (line 44) | int main(void){
FILE: F0:F030,F042,F072/F0_testbrd/proto.c
function USB_sendstr (line 32) | void USB_sendstr(const char *str){
function readNnumbers (line 88) | static uint16_t readNnumbers(char *buf){
function hexdump (line 102) | static void hexdump(uint8_t *arr, uint16_t len){
function rdI2C (line 141) | static inline void rdI2C(char *buf){
function wrSPI (line 183) | static inline void wrSPI(int SPIidx, char *buf){
function rdSPI (line 194) | static inline void rdSPI(int SPIidx){
function printADCvals (line 247) | void printADCvals(){
FILE: F0:F030,F042,F072/F0_testbrd/spi.c
function spicommonsetup (line 38) | static void spicommonsetup(uint8_t SPIidx, uint8_t master){
function spi_setup (line 85) | void spi_setup(){
function spi_stop (line 104) | void spi_stop(){
function SPI_transmit (line 116) | uint8_t SPI_transmit(uint8_t N, const uint8_t *buf, uint8_t len){
function SPI_prep_receive (line 135) | uint8_t SPI_prep_receive(uint8_t N){
function SPI_getdata (line 156) | uint8_t SPI_getdata(uint8_t N, uint8_t *buf, uint8_t *maxlen){
function SPI_isoverflow (line 173) | uint8_t SPI_isoverflow(uint8_t N){
FILE: F0:F030,F042,F072/F0_testbrd/spi.h
type spiStatus (line 29) | typedef enum{
FILE: F0:F030,F042,F072/F0_testbrd/usart.c
function usart_getline (line 65) | int usart_getline(int usartno, char **line){
function transmit_tbuf (line 78) | void transmit_tbuf(){
function usart_putchar (line 95) | void usart_putchar(int usartno, const char ch){
function usart_send (line 101) | void usart_send(int usartno, const char *str){
function usart_sendn (line 109) | void usart_sendn(int usartno, const char *str, uint32_t L){
function newline (line 117) | void newline(int usartno){
function usart_setup (line 123) | void usart_setup(){
function usart_stop (line 173) | void usart_stop(){
function usart_IRQ (line 181) | static void usart_IRQ(int usartno){
function usart1_isr (line 225) | void usart1_isr(){
function usart2_isr (line 229) | void usart2_isr(){
function usart3_4_isr (line 235) | void usart3_4_isr(){
FILE: F0:F030,F042,F072/F0_testbrd/usb.c
function EP1_Handler (line 31) | static void EP1_Handler(){
function transmit_Handler (line 41) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 48) | static void receive_Handler(){ // EP2OUT
function USB_setup (line 54) | void USB_setup(){
function usbwr (line 75) | static int usbwr(const uint8_t *buf, uint16_t l){
function send_next (line 94) | static void send_next(){
function USB_send (line 102) | void USB_send(const uint8_t *buf, uint16_t len){
function USB_send_blk (line 116) | void USB_send_blk(const uint8_t *buf, uint16_t len){
function usb_proc (line 135) | void usb_proc(){
function USB_receive (line 162) | uint8_t USB_receive(uint8_t *buf){
FILE: F0:F030,F042,F072/F0_testbrd/usb_defs.h
type USB_TypeDef (line 80) | typedef struct{
type USB_EPDATA_TypeDef (line 92) | typedef struct{
type USB_BtableDef (line 99) | typedef struct{
FILE: F0:F030,F042,F072/F0_testbrd/usb_lib.c
function usb_LineCoding (line 38) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 145) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 149) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 153) | void WEAK break_handler(){
function vendor_handler (line 157) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 179) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 207) | static inline void get_descriptor(){
function std_d2h_req (line 236) | static inline void std_d2h_req(){
function std_h2d_req (line 253) | static inline void std_h2d_req(){
function EP0_Handler (line 278) | static void EP0_Handler(){
function EP_Init (line 356) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 384) | void usb_isr(){
function EP_WriteIRQ (line 432) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 450) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 462) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/F0_testbrd/usb_lib.h
type USB_state (line 90) | typedef enum{
type config_pack_t (line 128) | typedef struct {
type ep_t (line 137) | typedef struct{
type usb_dev_t (line 146) | typedef struct {
type usb_LineCoding (line 151) | typedef struct {
type usb_cdc_notification (line 166) | typedef struct {
FILE: F0:F030,F042,F072/NUCLEO_SPI/main.c
function sys_tick_handler (line 29) | void sys_tick_handler(void){
function gpio_setup (line 33) | static void gpio_setup(void){
function printuhex (line 39) | static void printuhex(uint8_t *arr, uint8_t l){
function print14bit (line 54) | static void print14bit(uint8_t *arr){
function main (line 61) | int main(void){
FILE: F0:F030,F042,F072/NUCLEO_SPI/spi.c
function spi_setup (line 29) | void spi_setup(){
function SPI_prep_receive (line 77) | void SPI_prep_receive(){
function SPI_getdata (line 96) | uint8_t SPI_getdata(uint8_t *buf, uint8_t *maxlen){
function dma1_channel2_3_isr (line 109) | void dma1_channel2_3_isr(){
FILE: F0:F030,F042,F072/NUCLEO_SPI/spi.h
type spiStatus (line 28) | typedef enum{
FILE: F0:F030,F042,F072/NUCLEO_SPI/usart.c
function usart2_getline (line 43) | int usart2_getline(char **line){
function TXstatus (line 54) | TXstatus usart2_send(const char *str, int len){
function TXstatus (line 65) | TXstatus usart2_send_blocking(const char *str, int len){
function usart2_setup (line 79) | void usart2_setup(){
function dma1_channel4_5_isr (line 109) | void dma1_channel4_5_isr(){
function usart2_isr (line 116) | void usart2_isr(){
FILE: F0:F030,F042,F072/NUCLEO_SPI/usart.h
type TXstatus (line 32) | typedef enum{
FILE: F0:F030,F042,F072/PL2303_ringbuffer/hardware.c
function gpio_setup (line 21) | static inline void gpio_setup(){
function hw_setup (line 32) | void hw_setup(){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/main.c
function sys_tick_handler (line 29) | void sys_tick_handler(void){
function main (line 33) | int main(void){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/proto.c
function initbuf (line 170) | static void initbuf(){bptr = stbuf; blen = 255; *bptr = 0;}
function add2buf (line 171) | static void add2buf(const char *s){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/ringbuffer.c
function RB_datalen (line 22) | int RB_datalen(ringbuffer *b){
function RB_hasbyte (line 33) | int RB_hasbyte(ringbuffer *b, uint8_t byte){
function mcpy (line 47) | static void mcpy(uint8_t *targ, const uint8_t *src, int l){
function TRUE_INLINE (line 52) | TRUE_INLINE void incr(ringbuffer *b, volatile int *what, int n){
function RB_read (line 64) | int RB_read(ringbuffer *b, uint8_t *s, int len){
function RB_readto (line 89) | int RB_readto(ringbuffer *b, uint8_t byte, uint8_t *s, int len){
function RB_write (line 106) | int RB_write(ringbuffer *b, const uint8_t *str, int l){
function RB_clearbuf (line 121) | void RB_clearbuf(ringbuffer *b){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/ringbuffer.h
type ringbuffer (line 25) | typedef struct{
FILE: F0:F030,F042,F072/PL2303_ringbuffer/usb.c
function send_next (line 42) | static void send_next(){
function USB_sendall (line 57) | int USB_sendall(){
function USB_send (line 65) | int USB_send(const uint8_t *buf, int len){
function USB_sendstr (line 79) | int USB_sendstr(const char *string){
function USB_receive (line 93) | int USB_receive(uint8_t *buf, int len){
function USB_receivestr (line 109) | int USB_receivestr(char *buf, int len){
function EP1_Handler (line 121) | static void EP1_Handler(){
function transmit_Handler (line 131) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 138) | static void receive_Handler(){ // EP2OUT
function USB_proc (line 148) | void USB_proc(){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/usb_lib.c
function usb_LineCoding (line 30) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 139) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 143) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 147) | void WEAK break_handler(){
function vendor_handler (line 151) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 173) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 201) | static inline void get_descriptor(){
function std_d2h_req (line 230) | static inline void std_d2h_req(){
function std_h2d_req (line 247) | static inline void std_h2d_req(){
function EP0_Handler (line 272) | void EP0_Handler(){
function EP_WriteIRQ (line 345) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 362) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 374) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/usb_lib.h
type USB_state (line 83) | typedef enum{
type config_pack_t (line 121) | typedef struct {
type ep_t (line 130) | typedef struct __ep_t{
type usb_dev_t (line 139) | typedef struct {
type usb_LineCoding (line 144) | typedef struct {
type usb_cdc_notification (line 159) | typedef struct {
FILE: F0:F030,F042,F072/PL2303_ringbuffer/usbhw.c
function USB_setup (line 23) | void USB_setup(){
function EP_Init (line 55) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 83) | void usb_isr(){
FILE: F0:F030,F042,F072/PL2303_ringbuffer/usbhw.h
type USB_TypeDef (line 76) | typedef struct {
type USB_EPDATA_TypeDef (line 88) | typedef struct{
type USB_BtableDef (line 95) | typedef struct{
FILE: F0:F030,F042,F072/QuadEncoder/hardware.c
function gpio_setup (line 29) | static inline void gpio_setup(){
function timers_setup (line 41) | static inline void timers_setup(){
function hw_setup (line 61) | void hw_setup(){
function tim3_isr (line 68) | void tim3_isr(){
FILE: F0:F030,F042,F072/QuadEncoder/main.c
function sys_tick_handler (line 30) | void sys_tick_handler(void){
function main (line 34) | int main(void){
FILE: F0:F030,F042,F072/QuadEncoder/usart.c
function put_char (line 43) | int put_char(char c){
function put_string (line 52) | int put_string(const char *str){
function put_int (line 63) | int put_int(int32_t N){
function put_uint (line 70) | int put_uint(uint32_t N){
function TXstatus (line 86) | TXstatus usart1_sendbuf(){
function USART1_config (line 95) | void USART1_config(){
function usart1_isr (line 136) | void usart1_isr(){
function dma1_channel2_3_isr (line 208) | void dma1_channel2_3_isr(){
function usart1_getline (line 218) | int usart1_getline(char **line){
function TXstatus (line 235) | TXstatus usart1_send(const char *str, int len){
function TXstatus (line 252) | TXstatus usart1_send_blocking(const char *str, int len){
FILE: F0:F030,F042,F072/QuadEncoder/usart.h
type TXstatus (line 32) | typedef enum{
FILE: F0:F030,F042,F072/Servo/adc.c
function getADCval (line 36) | uint16_t getADCval(int nch){
function getMCUtemp (line 57) | int32_t getMCUtemp(){
function getVdd (line 70) | uint32_t getVdd(){
FILE: F0:F030,F042,F072/Servo/effects.c
function eff_madwipe (line 29) | static void eff_madwipe(int n){
function eff_wipe (line 39) | static void eff_wipe(int n){
function eff_pendulum (line 52) | static void eff_pendulum(int n){
function eff_pendsm (line 69) | static void eff_pendsm(int n){
function DMA_eff (line 111) | static void DMA_eff(const void* buff, uint8_t len){
function proc_effect (line 118) | void proc_effect(){
function effect_t (line 140) | effect_t set_effect(int n, effect_t eff){
FILE: F0:F030,F042,F072/Servo/effects.h
type effect_t (line 25) | typedef enum{
FILE: F0:F030,F042,F072/Servo/hardware.c
function iwdg_setup (line 26) | static inline void iwdg_setup(){
function adc_setup (line 47) | static inline void adc_setup(){
function gpio_setup (line 121) | static inline void gpio_setup(){
function setTIM3T (line 145) | void setTIM3T(uint32_t T){
function timers_setup (line 153) | static inline void timers_setup(){
function hw_setup (line 182) | void hw_setup(){
function getPWM (line 196) | int32_t getPWM(int nch){
function setPWM (line 201) | int32_t setPWM(int nch, uint32_t val, uint32_t speed){
function onposition (line 219) | uint8_t onposition(int nch){
function chkPWM (line 223) | static void chkPWM(int n){
function tim3_isr (line 240) | void tim3_isr(){
FILE: F0:F030,F042,F072/Servo/main.c
function sys_tick_handler (line 33) | void sys_tick_handler(void){
function main (line 37) | int main(void){
FILE: F0:F030,F042,F072/Servo/mainloop.c
function mainloop (line 27) | void mainloop(){
FILE: F0:F030,F042,F072/Servo/protocol.c
function putADC (line 29) | static void putADC(int n){
function debugging_proc (line 42) | static void debugging_proc(const char *command){
function chPWM (line 74) | static void chPWM(const char *command){
function set_servoT (line 97) | static void set_servoT(const char *buf){
function chk_effect (line 111) | static void chk_effect(const char *cmd, effect_t eff, const char *name){
function DMA_effect (line 119) | static void DMA_effect(const char *cmd){
FILE: F0:F030,F042,F072/Servo/usart.c
function put_char (line 43) | int put_char(char c){
function put_string (line 52) | int put_string(const char *str){
function put_int (line 63) | int put_int(int32_t N){
function put_uint (line 70) | int put_uint(uint32_t N){
function TXstatus (line 86) | TXstatus usart1_sendbuf(){
function USART1_config (line 95) | void USART1_config(){
function usart1_isr (line 136) | void usart1_isr(){
function dma1_channel2_3_isr (line 208) | void dma1_channel2_3_isr(){
function usart1_getline (line 218) | int usart1_getline(char **line){
function TXstatus (line 235) | TXstatus usart1_send(const char *str, int len){
function TXstatus (line 252) | TXstatus usart1_send_blocking(const char *str, int len){
FILE: F0:F030,F042,F072/Servo/usart.h
type TXstatus (line 32) | typedef enum{
FILE: F0:F030,F042,F072/Snippets/Flash_EEPROM/flash.c
function binarySearch (line 75) | static int binarySearch(int r, const uint8_t *start, int stor_size){
function flashstorage_init (line 97) | void flashstorage_init(){
function store_userconf (line 114) | int store_userconf(){
function write2flash (line 124) | static int write2flash(const void *start, const void *wrdata, uint32_t s...
function erase_flash (line 163) | static int erase_flash(const void *start, const void *end){
function dump_userconf (line 216) | void dump_userconf(){
FILE: F0:F030,F042,F072/Snippets/Flash_EEPROM/flash.h
type defflags_t (line 34) | typedef struct{
type user_conf (line 42) | typedef struct __attribute__((packed, aligned(4))){
FILE: F0:F030,F042,F072/Snippets/Jump2Boot.c
function Jump2Boot (line 12) | void Jump2Boot(){ // for STM32F072
FILE: F0:F030,F042,F072/Snippets/printuhex.c
function printuhex (line 2) | void printuhex(uint32_t val){
function printu (line 16) | void printu(uint32_t val){
function printi (line 30) | void printi(int32_t val){
FILE: F0:F030,F042,F072/Socket_fans/adc.c
function getADCval (line 36) | uint16_t getADCval(int nch){
function getMCUtemp (line 57) | int32_t getMCUtemp(){
function getVdd (line 70) | uint32_t getVdd(){
function Ufromadu (line 77) | static inline uint32_t Ufromadu(uint8_t nch){
function getU12 (line 85) | uint32_t getU12(){
function getU5 (line 91) | uint32_t getU5(){
function getNTC (line 100) | int16_t getNTC(int nch){
FILE: F0:F030,F042,F072/Socket_fans/flash.c
function binarySearch (line 55) | static int binarySearch(int r, const uint8_t *start, int stor_size){
function flashstorage_init (line 77) | void flashstorage_init(){
function store_userconf (line 94) | int store_userconf(){
function write2flash (line 104) | static int write2flash(const void *start, const void *wrdata, uint32_t s...
function erase_flash (line 143) | static int erase_flash(const void *start, const void *end){
FILE: F0:F030,F042,F072/Socket_fans/flash.h
type user_conf (line 35) | typedef struct __attribute__((packed, aligned(4))){
FILE: F0:F030,F042,F072/Socket_fans/hardware.c
function adc_setup (line 31) | void adc_setup(){
function gpio_setup (line 69) | static inline void gpio_setup(void){
function timers_setup (line 102) | static inline void timers_setup(){
function HW_setup (line 122) | void HW_setup(){
function iwdg_setup (line 128) | void iwdg_setup(){
function pause_ms (line 152) | void pause_ms(uint32_t pause){
function buzzer_chk (line 197) | void buzzer_chk(){ // check buzzer state
function exti4_15_isr (line 243) | void exti4_15_isr(){
FILE: F0:F030,F042,F072/Socket_fans/hardware.h
type buzzer_state (line 64) | typedef enum{
FILE: F0:F030,F042,F072/Socket_fans/knots/piecevise_files/a.js
function n (line 2) | function n(e){var t=he[e]={};return K.each(e.split(te),function(e,n){t[n...
function r (line 2) | function r(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(me,"...
function i (line 2) | function i(e){var t;for(t in e)if(("data"!==t||!K.isEmptyObject(e[t]))&&...
function o (line 2) | function o(){return!1}
function a (line 2) | function a(){return!0}
function s (line 2) | function s(e){return!e||!e.parentNode||11===e.parentNode.nodeType}
function l (line 2) | function l(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
function u (line 2) | function u(e,t,n){if(t=t||0,K.isFunction(t))return K.grep(e,function(e,r...
function c (line 2) | function c(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.crea...
function f (line 2) | function f(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.own...
function p (line 2) | function p(e,t){if(1===t.nodeType&&K.hasData(e)){var n,r,i,o=K._data(e),...
function d (line 2) | function d(e,t){var n;1===t.nodeType&&(t.clearAttributes&&t.clearAttribu...
function h (line 2) | function h(e){return"undefined"!=typeof e.getElementsByTagName?e.getElem...
function g (line 2) | function g(e){Je.test(e.type)&&(e.defaultChecked=e.checked)}
function m (line 2) | function m(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t...
function y (line 2) | function y(e,t){return e=t||e,"none"===K.css(e,"display")||!K.contains(e...
function v (line 2) | function v(e,t){for(var n,r,i=[],o=0,a=e.length;a>o;o++)n=e[o],n.style&&...
function b (line 2) | function b(e,t,n){var r=ct.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2...
function x (line 2) | function x(e,t,n,r){for(var i=n===(r?"border":"content")?4:"width"===t?1...
function w (line 2) | function w(e,t,n){var r="width"===t?e.offsetWidth:e.offsetHeight,i=!0,o=...
function T (line 2) | function T(e){if(dt[e])return dt[e];var t=K("<"+e+">").appendTo(R.body),...
function N (line 2) | function N(e,t,n,r){var i;if(K.isArray(t))K.each(t,function(t,i){n||xt.t...
function C (line 2) | function C(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function k (line 2) | function k(e,n,r,i,o,a){o=o||n.dataTypes[0],a=a||{},a[o]=!0;for(var s,l=...
function E (line 2) | function E(e,n){var r,i,o=K.ajaxSettings.flatOptions||{};for(r in n)n[r]...
function S (line 2) | function S(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes,c=e.responseFie...
function A (line 2) | function A(e,t){var n,r,i,o,a=e.dataTypes.slice(),s=a[0],l={},u=0;if(e.d...
function j (line 2) | function j(){try{return new e.XMLHttpRequest}catch(t){}}
function D (line 2) | function D(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t...
function L (line 2) | function L(){return setTimeout(function(){Yt=t},0),Yt=K.now()}
function H (line 2) | function H(e,t){K.each(t,function(t,n){for(var r=(Zt[t]||[]).concat(Zt["...
function _ (line 2) | function _(e,t,n){var r,i=0,o=Kt.length,a=K.Deferred().always(function()...
function F (line 2) | function F(e,t){var n,r,i,o,a;for(n in e)if(r=K.camelCase(n),i=t[r],o=e[...
function M (line 2) | function M(e,t,n){var r,i,o,a,s,l,u,c,f,p=this,d=e.style,h={},g=[],m=e.n...
function O (line 2) | function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}
function q (line 2) | function q(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=mt[i],r[...
function B (line 2) | function B(e){return K.isWindow(e)?e:9===e.nodeType?e.defaultView||e.par...
function n (line 3) | function n(e,t,n,r){n=n||[],t=t||L;var i,o,a,s,l=t.nodeType;if(!e||"stri...
function r (line 3) | function r(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function i (line 3) | function i(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function o (line 3) | function o(e){return W(function(t){return t=+t,W(function(n,r){for(var i...
function a (line 3) | function a(e,t,n){if(e===t)return n;for(var r=e.nextSibling;r;){if(r===t...
function s (line 3) | function s(e,t){var r,i,o,a,s,l,u,c=$[j][e+" "];if(c)return t?0:c.slice(...
function l (line 3) | function l(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=F++;return t.f...
function u (line 3) | function u(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)...
function c (line 3) | function c(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,u=null!=t;l>s;s++)(o...
function f (line 3) | function f(e,t,n,r,i,o){return r&&!r[j]&&(r=f(r)),i&&!i[j]&&(i=f(i,o)),W...
function p (line 3) | function p(e){for(var t,n,r,i=e.length,o=b.relative[e[0].type],a=o||b.re...
function d (line 3) | function d(e,t){var r=t.length>0,i=e.length>0,o=function a(o,s,l,u,f){va...
function h (line 3) | function h(e,t,r){for(var i=0,o=t.length;o>i;i++)n(e,t[i],r);return r}
function g (line 3) | function g(e,t,n,r,i){var o,a,l,u,c,f=s(e);f.length;if(!r&&1===f.length)...
function m (line 3) | function m(){}
function e (line 4) | function e(t,n){return new e.fn.init(t,n)}
function r (line 4) | function r(e,n,r,a){var u,f,v,b,w,N=n;2!==x&&(x=2,l&&clearTimeout(l),s=t...
function _defaults (line 9) | function _defaults(t,n){for(var r=Object.getOwnPropertyNames(n),e=0;e<r....
function o (line 9) | function o(u,c){if(!r[u]){if(!n[u]){var f="function"==typeof require&&re...
function t (line 9) | function t(){}
function e (line 9) | function e(t){return isFinite(t=+t)&&0!=t?0>t?-e(-t):Math.log(t+Math.sqr...
function n (line 10) | function n(t){var r=new O(t);return y(r,n.prototype),r}
function t (line 10) | function t(){}
function e (line 10) | function e(t,n){var r,u,a=arguments.length<3?t:arguments[2];return f(t)=...
function e (line 10) | function e(t,n,r){var u,s,l=arguments.length<4?t:arguments[3],h=o.getDes...
function r (line 10) | function r(t,n,r,e){var i=Object.create((n||o).prototype),u=new p(e||[])...
function e (line 10) | function e(t,n,r){try{return{type:"normal",arg:t.call(n,r)}}catch(e){ret...
function o (line 10) | function o(){}
function i (line 10) | function i(){}
function u (line 10) | function u(){}
function c (line 10) | function c(t){["next","throw","return"].forEach(function(n){t[n]=functio...
function f (line 10) | function f(t){this.arg=t}
function a (line 10) | function a(t){function n(n,r){var e=t[n](r),u=e.value;return u instanceo...
function s (line 10) | function s(t,n,r){var o=w;return function(i,u){if(o===_)throw new Error(...
function l (line 10) | function l(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.f...
function h (line 10) | function h(t){var n=t.completion||{};n.type="normal",delete n.arg,t.comp...
function p (line 10) | function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(l,this),this.r...
function v (line 10) | function v(t){if(t){var n=t[m];if(n)return n.call(t);if("function"==type...
function y (line 10) | function y(){return{value:d,done:!0}}
function n (line 10) | function n(n,e){return i.type="throw",i.arg=t,r.next=n,!!e}
function t (line 15) | function t(e,t){e&&Object.keys(t).forEach(function(n){if(!(n in e||n in ...
function n (line 15) | function n(e){var t=null;return e=e.map(function(e){return e instanceof ...
function t (line 15) | function t(e,t,n){if("function"==typeof t){"DOMContentLoaded"===e&&(e="l...
function n (line 15) | function n(e,t,n){if("function"==typeof t){"DOMContentLoaded"===e&&(e="l...
function t (line 15) | function t(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=docu...
function t (line 15) | function t(e,t){function n(e){return e.length?e.split(/\s+/g):[]}functio...
function n (line 15) | function n(t,n){"Element"in e&&Element.prototype&&Object.defineProperty&...
function e (line 25) | function e(e,t){var o=t.split("."),n=o.shift(),r=e;if("object"!==("undef...
function e (line 35) | function e(){}
function r (line 50) | function r(r,o){var t=[],n=!0,e=!1,i=void 0;try{for(var a,c=r[Symbol.ite...
function e (line 55) | function e(t){return JSON.stringify(t)}
function r (line 55) | function r(t){try{return JSON.parse(t)}catch(e){return t}}
function n (line 55) | function n(){u=t("<link>").attr("id",i).css("display","none").appendTo(t...
function o (line 55) | function o(t){return t.replace(/[^0-9a-z_\-]/gi,"_")}
function t (line 55) | function t(){}
function t (line 55) | function t(){e={}}
function t (line 60) | function t(n,t,r){if("string"!=typeof n||"function"!=typeof t)throw new ...
function r (line 60) | function r(n,r,e){var f=function i(){return o(n,i),r.apply(this,argument...
function e (line 60) | function e(t){var r=f[t],e=null,o=null;if(Array.isArray(r)&&0!==r.length...
function o (line 60) | function o(n,t){if("string"!=typeof n)throw new Error("Hook name should ...
function t (line 65) | function t(e,t,i){if(void 0!==t){i=i||{},null===t&&(t="",i.expires=-1);v...
function r (line 70) | function r(e){return LJ.Cookie.get("prop_"+e)}
function n (line 70) | function n(e,r){return LJ.Cookie.setGlobal("prop_"+e,"null"===r?null:r,{...
function t (line 70) | function t(n){var t=e.Deferred();return LJ.get("remote")?LJ.Api.call("us...
function o (line 70) | function o(r,t){var o=e.Deferred();return t=JSON.stringify(t),LJ.get("re...
function u (line 70) | function u(e){return o(e,null)}
function t (line 75) | function t(t,n){return{jsonrpc:"2.0",method:t,params:e.extend({},n,{auth...
function n (line 75) | function n(e,t,n,o){o.result?(o.result.auth_token&&(u.options.auth_token...
function o (line 75) | function o(e,t,n){console.warn("An internal error has occured while call...
function r (line 75) | function r(t,r,a){var s=new e.Deferred;return h.push({data:t,params:r,ca...
function n (line 80) | function n(e,n){var r=e.nodeName.toLowerCase();if("area"===r){var o,s=e....
function i (line 80) | function i(e){return!t(e).parents().andSelf().filter(function(){return"h...
function r (line 80) | function r(e,n,i,r){return t.each(o,function(){n-=parseFloat(t.curCSS(e,...
function e (line 97) | function e(e){return t.apply(this,arguments)}
function e (line 102) | function e(e,r){var t=[],n=!0,i=!1,a=void 0;try{for(var o,l=e[Symbol.ite...
function t (line 109) | function t(t){return t&&"short"!==t?"long"===t&&(t=LJ.ml("date.format.lo...
function e (line 109) | function e(t){var e=n[t%12];return LJ.ml(r.supplant({month:e}))}
function t (line 109) | function t(t){return 1===t?0:1}
function e (line 109) | function e(t){return t>1?1:0}
function n (line 109) | function n(t){return"undefined"==typeof t?0:t%10===1&&t%100!==11?0:t%10>...
function r (line 109) | function r(t){return 1===t?0:t%10>=2&&4>=t%10&&(10>t%100||t%100>=20)?1:2}
function i (line 109) | function i(t){return t%10===1&&t%100!==11?0:t%10>=2&&(10>t%100||t%100>=2...
function o (line 109) | function o(){return 0}
function a (line 109) | function a(t){return t%10===1&&t%100!==11?0:0!==t?1:2}
function l (line 109) | function l(t){return t%10===1&&t%100!==11?0:1}
function s (line 109) | function s(t,e){var n=c.hasOwnProperty(u)?c[u]:c.en,r=n(t);return e[r]?e...
function e (line 109) | function e(e){var i=t("<img />",{src:e,alt:"lj-counter"});r=r||t(n),r.ap...
function e (line 139) | function e(){this.element=t("<img />",{css:{position:"absolute",display:...
function t (line 145) | function t(t,e){e.hide()}
function e (line 145) | function e(t,e){0===t.val().length&&e.show()}
function e (line 145) | function e(t,e,n){e.parent().removeClass("current").eq(n).addClass("curr...
function n (line 145) | function n(n){var r=t(this).parent(),a=r.index(),o=n.data;o.containers[a...
function e (line 145) | function e(t,e){this.layer=jQuery(t),this.options=e,this.updateState(thi...
function e (line 150) | function e(e,n,l,a){var r={data:a||0===a||a===!1?a:n?n.data:{},_wrap:n?n...
function n (line 150) | function n(e,a,r){var p,i=r?t.map(r,function(t){return"string"==typeof t...
function l (line 150) | function l(e){var n=document.createElement("div");return n.innerHTML=e,t...
function a (line 150) | function a(e){return new Function("jQuery","$item","var $=jQuery,call,__...
function r (line 150) | function r(e,l){e._wrap=n(e,!0,t.isArray(l)?l:[h.test(l)?l:t(l).html()])...
function p (line 150) | function p(t){return t?t.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}
function i (line 150) | function i(t){var e=document.createElement("div");return e.appendChild(t...
function o (line 150) | function o(n){function l(n){function l(t){t+=u,p=c[t]=c[t]||e(p,y[p.pare...
function u (line 150) | function u(t,e,n,l){return t?void T.push({_:t,tmpl:e,item:this,data:n,op...
function c (line 150) | function c(e,n,l){return t.tmpl(t.template(e),n,l,this)}
function f (line 150) | function f(e,n){var l=e.options||{};return l.wrapped=n,t.tmpl(t.template...
function m (line 150) | function m(e,n){var l=this._wrap;return t.map(t(t.isArray(l)?l.join(""):...
function s (line 150) | function s(){var e=this.nodes;t.tmpl(null,null,null,this).insertBefore(e...
function n (line 166) | function n(n,t){this.xf=t,this.pred=n,this.lastValue=void 0,this.seenFir...
function n (line 166) | function n(n,t){this.xf=t,this.f=n}
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.found=!1}
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.idx=-1,this.found=!1}
function n (line 166) | function n(n,t){this.xf=t,this.f=n}
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.idx=-1,this.lastIdx=-1}
function n (line 166) | function n(n,t){this.xf=t,this.f=n}
function n (line 166) | function n(n,t){this.xf=t,this.n=n}
function n (line 166) | function n(n,t){this.xf=t,this.f=n}
function n (line 166) | function n(n){this.f=n}
function n (line 166) | function n(n,t,r){for(var e=0,u=r.length;u>e;){if(t=n["@@transducer/step...
function t (line 166) | function t(n,t,r){for(var e=r.next();!e.done;){if(t=n["@@transducer/step...
function r (line 166) | function r(n,t,r){return n["@@transducer/result"](r.reduce($(n["@@transd...
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.all=!0}
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.any=!1}
function n (line 166) | function n(n,t){this.xf=t,this.n=n}
function n (line 166) | function n(n,t){this.xf=t,this.f=n}
function n (line 166) | function n(n,t){this.xf=t,this.f=n,this.inputs={}}
function e (line 166) | function e(t,r){return pe(Tr(D,n(r)),t)}
function n (line 176) | function n(t){var e=t.getBoundingClientRect(),n=e.top;return n>=0&&n<=wi...
function a (line 176) | function a(t){return t?void LJ.Track.event.apply(LJ.Track,t.split(":")):...
function e (line 176) | function e(e){function o(t){var o="interval"+e;a[o]!==t&&(a[o]=t,t&&LJ.T...
function o (line 203) | function o(){e(document.body).on("click",".b-message-mobile-close",funct...
function t (line 203) | function t(o){var t=e(o.selector),r=".ljsale__hide";t.length&&!LJ.Cookie...
function r (line 203) | function r(){e("body").on("click",".lj-spoiler > .lj-spoiler-head a",fun...
function n (line 203) | function n(){var o=e(window),t=e("body"),r=!1,n=LJ.Function.throttle(fun...
function a (line 203) | function a(e){var o,t,r;if(e.type){o=decodeURIComponent(e.type),t={};for...
function l (line 203) | function l(){e.get(LiveJournal.getAjaxUrl("get_balance"),function(o){if(...
function e (line 203) | function e(){var e,o="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX...
function e (line 210) | function e(){return"undefined"==typeof a&&(a=c.x>m+v&&(o>C||o>m+v-o)),a}
function t (line 210) | function t(){return"undefined"==typeof s&&(s=c.y>y+u.scrollTop()&&n>0),s}
function i (line 210) | function i(){return"undefined"==typeof l&&(l=N.top+x-k<u.scrollTop()),l}
function e (line 216) | function e(t){var r=arguments.length<=1||void 0===arguments[1]?{}:argume...
function e (line 221) | function e(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.\^...
function r (line 221) | function r(t){return"string"!=typeof t&&(t=String(t)),t}
function o (line 221) | function o(t){var e={next:function(){var e=t.shift();return{done:void 0=...
function n (line 221) | function n(t){this.map={},t instanceof n?t.forEach(function(t,e){this.ap...
function s (line 221) | function s(t){return t.bodyUsed?Promise.reject(new TypeError("Already re...
function i (line 221) | function i(t){return new Promise(function(e,r){t.onload=function(){e(t.r...
function a (line 221) | function a(t){var e=new FileReader;return e.readAsArrayBuffer(t),i(e)}
function h (line 221) | function h(t){var e=new FileReader;return e.readAsText(t),i(e)}
function u (line 221) | function u(){return this.bodyUsed=!1,this._initBody=function(t){if(this....
function f (line 221) | function f(t){var e=t.toUpperCase();return b.indexOf(e)>-1?e:t}
function d (line 221) | function d(t,e){e=e||{};var r=e.body;if(d.prototype.isPrototypeOf(t)){if...
function p (line 221) | function p(t){var e=new FormData;return t.trim().split("&").forEach(func...
function c (line 221) | function c(t){var e=new n,r=(t.getAllResponseHeaders()||"").trim().split...
function l (line 221) | function l(t,e){e||(e={}),this.type="default",this.status=e.status,this....
function n (line 221) | function n(){return"responseURL"in i?i.responseURL:/^X-Request-URL:/m.te...
function e (line 250) | function e(e){function n(t,e,r){var o=t[0],i=t.slice(1);return r=r||wind...
function n (line 250) | function n(t){window.twemoji.parse(t,{ext:".svg",folder:"svg",size:"16x1...
function n (line 250) | function n(e){var n=e.data("gist-id");n&&t.ajax({method:"post",dataType:...
function r (line 250) | function r(e,n){this.service=e,t.extend(this,n),"function"==typeof this....
function o (line 250) | function o(e){e.jquery||(e=t(e));var o=e.data()||{},i=o.services.trim()....
function e (line 250) | function e(t){LJ.Social.parseLikes(t)}
function n (line 250) | function n(){var n=null;0!==r.length&&(n=r.filter(":screenable"),n.lengt...
function e (line 250) | function e(e,r,o){if(o=t.extend({},u,l[e],o||{}),"embed"===e)return void...
function n (line 250) | function n(t,e,n){function r(t,e){if(t){var n={facebook:"fbsharing",vkon...
function r (line 250) | function r(t){return l[t].tab}
function o (line 250) | function o(){return LJ.get("LJShareParams.links")?LJ.get("LJShareParams....
function i (line 250) | function i(t){return LJ.get("LJShareParams.services."+t+".title")||t}
function e (line 255) | function e(){for(var e=jQuery(window).scrollTop(),t=0;t<r.length;++t)if(...
function t (line 255) | function t(t){if(r.length){var o=document.activeElement;if(o){var n=o.no...
function t (line 282) | function t(e,t){return t=t||Error,function(){var n,r,i=2,o=arguments,a=o...
function n (line 282) | function n(e){if(null==e||A(e))return!1;if(Jr(e)||w(e)||Rr&&e instanceof...
function r (line 282) | function r(e,t,i){var o,a;if(e)if(C(e))for(o in e)"prototype"==o||"lengt...
function i (line 282) | function i(e,t,n){for(var r=Object.keys(e).sort(),i=0;i<r.length;i++)t.c...
function o (line 282) | function o(e){return function(t,n){e(n,t)}}
function a (line 282) | function a(){return++Zr}
function s (line 282) | function s(e,t){t?e.$$hashKey=t:delete e.$$hashKey}
function u (line 282) | function u(e,t,n){for(var r=e.$$hashKey,i=0,o=t.length;o>i;++i){var a=t[...
function c (line 282) | function c(e){return u(e,Ur.call(arguments,1),!1)}
function l (line 282) | function l(e){return u(e,Ur.call(arguments,1),!0)}
function f (line 282) | function f(e){return parseInt(e,10)}
function h (line 282) | function h(e,t){return c(Object.create(e),t)}
function p (line 282) | function p(){}
function d (line 282) | function d(e){return e}
function $ (line 282) | function $(e){return function(){return e}}
function v (line 282) | function v(e){return C(e.toString)&&e.toString!==Br}
function m (line 282) | function m(e){return"undefined"==typeof e}
function g (line 282) | function g(e){return"undefined"!=typeof e}
function y (line 282) | function y(e){return null!==e&&"object"===("undefined"==typeof e?"undefi...
function b (line 282) | function b(e){return null!==e&&"object"===("undefined"==typeof e?"undefi...
function w (line 282) | function w(e){return"string"==typeof e}
function x (line 282) | function x(e){return"number"==typeof e}
function S (line 282) | function S(e){return"[object Date]"===Br.call(e)}
function C (line 282) | function C(e){return"function"==typeof e}
function E (line 282) | function E(e){return"[object RegExp]"===Br.call(e)}
function A (line 282) | function A(e){return e&&e.window===e}
function k (line 282) | function k(e){return e&&e.$evalAsync&&e.$watch}
function O (line 282) | function O(e){return"[object File]"===Br.call(e)}
function M (line 282) | function M(e){return"[object FormData]"===Br.call(e)}
function T (line 282) | function T(e){return"[object Blob]"===Br.call(e)}
function N (line 282) | function N(e){return"boolean"==typeof e}
function V (line 282) | function V(e){return e&&C(e.then)}
function j (line 282) | function j(e){return e&&x(e.length)&&Yr.test(Br.call(e))}
function I (line 282) | function I(e){return"[object ArrayBuffer]"===Br.call(e)}
function _ (line 282) | function _(e){return!(!e||!(e.nodeName||e.prop&&e.attr&&e.find))}
function D (line 282) | function D(e){var t,n={},r=e.split(",");for(t=0;t<r.length;t++)n[r[t]]=!...
function P (line 282) | function P(e){return jr(e.nodeName||e[0]&&e[0].nodeName)}
function R (line 282) | function R(e,t){var n=e.indexOf(t);return n>=0&&e.splice(n,1),n}
function F (line 282) | function F(e,t){function n(e,t){var n,r=t.$$hashKey;if(Jr(e))for(var o=0...
function q (line 282) | function q(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(e!==...
function U (line 282) | function U(e,t,n){return e.concat(Ur.call(t,n))}
function L (line 282) | function L(e,t){return Ur.call(e,t||0)}
function H (line 282) | function H(e,t){var n=arguments.length>2?L(arguments,2):[];return!C(t)||...
function B (line 282) | function B(t,n){var r=n;return"string"==typeof t&&"$"===t.charAt(0)&&"$"...
function z (line 282) | function z(e,t){return m(e)?void 0:(x(t)||(t=t?2:null),JSON.stringify(e,...
function W (line 282) | function W(e){return w(e)?JSON.parse(e):e}
function G (line 282) | function G(e,t){e=e.replace(ti,"");var n=Date.parse("Jan 01, 1970 00:00:...
function Z (line 282) | function Z(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes...
function J (line 282) | function J(e,t,n){n=n?-1:1;var r=e.getTimezoneOffset(),i=G(t,r);return Z...
function Y (line 282) | function Y(e){e=Rr(e).clone();try{e.empty()}catch(t){}var n=Rr("<div>")....
function K (line 282) | function K(e){try{return decodeURIComponent(e)}catch(t){}}
function X (line 282) | function X(e){var t={};return r((e||"").split("&"),function(e){var n,r,i...
function Q (line 282) | function Q(e){var t=[];return r(e,function(e,n){Jr(e)?r(e,function(e){t....
function ee (line 282) | function ee(e){return te(e,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=")...
function te (line 282) | function te(e,t){return encodeURIComponent(e).replace(/%40/gi,"@").repla...
function ne (line 282) | function ne(e,t){var n,r,i=ni.length;for(r=0;i>r;++r)if(n=ni[r]+t,w(n=e....
function re (line 282) | function re(e,t){var n,i,o={};r(ni,function(t){var r=t+"app";!n&&e.hasAt...
function ie (line 282) | function ie(t,n,i){y(i)||(i={});var o={strictDi:!1};i=c(o,i);var a=funct...
function oe (line 282) | function oe(){e.name="NG_ENABLE_DEBUG_INFO!"+e.name,e.location.reload()}
function ae (line 282) | function ae(e){var t=Gr.element(e).injector();if(!t)throw Wr("test","no ...
function se (line 282) | function se(e,t){return t=t||"_",e.replace(ri,function(e,n){return(n?t:"...
function ue (line 282) | function ue(){var t;if(!ii){var n=ei();Fr=m(n)?e.jQuery:n?e[n]:void 0,Fr...
function ce (line 282) | function ce(e,t,n){if(!e)throw Wr("areq","Argument '{0}' is {1}",t||"?",...
function le (line 282) | function le(e,t,n){return n&&Jr(e)&&(e=e[e.length-1]),ce(C(e),t,"not a f...
function fe (line 282) | function fe(e,t){if("hasOwnProperty"===e)throw Wr("badname","hasOwnPrope...
function he (line 282) | function he(e,t,n){if(!t)return e;for(var r,i=t.split("."),o=e,a=i.lengt...
function pe (line 282) | function pe(e){for(var t,n=e[0],r=e[e.length-1],i=1;n!==r&&(n=n.nextSibl...
function de (line 282) | function de(){return Object.create(null)}
function $e (line 282) | function $e(e){function n(e,t,n){return e[t]||(e[t]=n())}var r=t("$injec...
function ve (line 282) | function ve(e,t){if(Jr(e)){t=t||[];for(var n=0,r=e.length;r>n;n++)t[n]=e...
function me (line 282) | function me(e){var t=[];return JSON.stringify(e,function(e,n){if(n=B(e,n...
function ge (line 282) | function ge(e){return"function"==typeof e?e.toString().replace(/ \{[\s\S...
function ye (line 282) | function ye(n){c(n,{bootstrap:ie,copy:F,extend:c,merge:l,equals:q,elemen...
function be (line 282) | function be(){return++pi}
function we (line 282) | function we(e){return e.replace(vi,function(e,t,n,r){return r?n.toUpperC...
function xe (line 282) | function xe(e){return!wi.test(e)}
function Se (line 282) | function Se(e){var t=e.nodeType;return t===oi||!t||t===ci}
function Ce (line 282) | function Ce(e){for(var t in hi[e.ng339])return!0;return!1}
function Ee (line 282) | function Ee(e){for(var t=0,n=e.length;n>t;t++)je(e[t])}
function Ae (line 282) | function Ae(e,t){var n,i,o,a,s=t.createDocumentFragment(),u=[];if(xe(e))...
function ke (line 282) | function ke(t,n){n=n||e.document;var r;return(r=bi.exec(t))?[n.createEle...
function Oe (line 282) | function Oe(e,t){var n=e.parentNode;n&&n.replaceChild(t,e),t.appendChild...
function Me (line 282) | function Me(e){if(e instanceof Me)return e;var t;if(w(e)&&(e=Kr(e),t=!0)...
function Te (line 282) | function Te(e){return e.cloneNode(!0)}
function Ne (line 282) | function Ne(e,t){if(t||je(e),e.querySelectorAll)for(var n=e.querySelecto...
function Ve (line 282) | function Ve(e,t,n,i){if(g(i))throw yi("offargs","jqLite#off() does not s...
function je (line 282) | function je(e,t){var n=e.ng339,r=n&&hi[n];if(r){if(t)return void delete ...
function Ie (line 282) | function Ie(e,t){var n=e.ng339,r=n&&hi[n];return t&&!r&&(e.ng339=n=be(),...
function _e (line 282) | function _e(e,t,n){if(Se(e)){var r=g(n),i=!r&&t&&!y(t),o=!t,a=Ie(e,!i),s...
function De (line 282) | function De(e,t){return e.getAttribute?(" "+(e.getAttribute("class")||""...
function Pe (line 282) | function Pe(e,t){t&&e.setAttribute&&r(t.split(" "),function(t){e.setAttr...
function Re (line 282) | function Re(e,t){if(t&&e.setAttribute){var n=(" "+(e.getAttribute("class...
function Fe (line 282) | function Fe(e,t){if(t)if(t.nodeType)e[e.length++]=t;else{var n=t.length;...
function qe (line 282) | function qe(e,t){return Ue(e,"$"+(t||"ngController")+"Controller")}
function Ue (line 282) | function Ue(e,t,n){e.nodeType==ci&&(e=e.documentElement);for(var r=Jr(t)...
function Le (line 282) | function Le(e){for(Ne(e,!0);e.firstChild;)e.removeChild(e.firstChild)}
function He (line 282) | function He(e,t){t||Ne(e);var n=e.parentNode;n&&n.removeChild(e)}
function Be (line 282) | function Be(t,n){n=n||e,"complete"===n.document.readyState?n.setTimeout(...
function ze (line 282) | function ze(e,t){var n=ki[t.toLowerCase()];return n&&Oi[P(e)]&&n}
function We (line 282) | function We(e){return Mi[e]}
function Ge (line 282) | function Ge(e,t){var n=function(n,r){n.isDefaultPrevented=function(){ret...
function Ze (line 282) | function Ze(e,t,n){n.call(e,t)}
function Je (line 282) | function Je(e,t,n){var r=t.relatedTarget;r&&(r===e||Ei.call(e,r))||n.cal...
function Ye (line 282) | function Ye(){this.$get=function(){return c(Me,{hasClass:function(e,t){r...
function Ke (line 282) | function Ke(e,t){var n=e&&e.$$hashKey;if(n)return"function"==typeof n&&(...
function Xe (line 282) | function Xe(e,t){if(t){var n=0;this.nextUid=function(){return++n}}r(e,th...
function Qe (line 282) | function Qe(e){return Function.prototype.toString.call(e)+" "}
function et (line 282) | function et(e){var t=Qe(e).replace(_i,""),n=t.match(Ni)||t.match(Vi);ret...
function tt (line 282) | function tt(e){var t=et(e);return t?"function("+(t[1]||"").replace(/[\s\...
function nt (line 282) | function nt(e,t,n){var i,o,a;if("function"==typeof e){if(!(i=e.$inject))...
function rt (line 282) | function rt(e,t){function n(e){return function(t,n){return y(t)?void r(t...
function it (line 282) | function it(){var e=!0;this.disableAutoScrolling=function(){e=!1},this.$...
function ot (line 282) | function ot(e,t){return e||t?e?t?(Jr(e)&&(e=e.join(" ")),Jr(t)&&(t=t.joi...
function at (line 282) | function at(e){for(var t=0;t<e.length;t++){var n=e[t];if(n.nodeType===Ri...
function st (line 282) | function st(e){w(e)&&(e=e.split(" "));var t=de();return r(e,function(e){...
function ut (line 282) | function ut(e){return y(e)?e:{}}
function ct (line 282) | function ct(e,t,n,i){function o(e){try{e.apply(null,L(arguments,1))}fina...
function lt (line 282) | function lt(){this.$get=["$window","$log","$sniffer","$document",functio...
function ft (line 282) | function ft(){this.$get=function(){function e(e,r){function i(e){e!=h&&(...
function ht (line 282) | function ht(){this.$get=["$cacheFactory",function(e){return e("templates...
function pt (line 282) | function pt(){}
function dt (line 282) | function dt(t,n){function i(e,t,n){var i=/^\s*([@&<]|=(\*?))(\??)\s*(\w*...
function $t (line 283) | function $t(e,t){this.previousValue=e,this.currentValue=t}
function vt (line 283) | function vt(e){return we(e.replace(Zi,""))}
function mt (line 283) | function mt(e,t){var n="",r=e.split(/\s+/),i=t.split(/\s+/);e:for(var o=...
function gt (line 283) | function gt(e){e=Rr(e);var t=e.length;if(1>=t)return e;for(;t--;){var n=...
function yt (line 283) | function yt(e,t){if(t&&w(t))return t;if(w(e)){var n=Yi.exec(e);if(n)retu...
function bt (line 283) | function bt(){var e={},n=!1;this.has=function(t){return e.hasOwnProperty...
function wt (line 283) | function wt(){this.$get=["$window",function(e){return Rr(e.document)}]}
function xt (line 283) | function xt(){this.$get=["$log",function(e){return function(t,n){e.error...
function St (line 283) | function St(e){return y(e)?S(e)?e.toISOString():z(e):e}
function Ct (line 283) | function Ct(){this.$get=function(){return function(e){if(!e)return"";var...
function Et (line 283) | function Et(){this.$get=function(){return function(e){function t(e,o,a){...
function At (line 283) | function At(e,t){if(w(e)){var n=e.replace(no,"").trim();if(n){var r=t("C...
function kt (line 283) | function kt(e){var t=e.match(eo);return t&&to[t[0]].test(e)}
function Ot (line 283) | function Ot(e){function t(e,t){e&&(i[e]=i[e]?i[e]+", "+t:t)}var n,i=de()...
function Mt (line 283) | function Mt(e){var t;return function(n){if(t||(t=Ot(e)),n){var r=t[jr(n)...
function Tt (line 283) | function Tt(e,t,n,i){return C(i)?i(e,t,n):(r(i,function(r){e=r(e,t,n)}),e)}
function Nt (line 283) | function Nt(e){return e>=200&&300>e}
function Vt (line 283) | function Vt(){var e=this.defaults={transformResponse:[At],transformReque...
function jt (line 283) | function jt(){this.$get=function(){return function(){return new e.XMLHtt...
function It (line 283) | function It(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrF...
function _t (line 283) | function _t(e,t,n,i,o){function a(e,t,n){e=e.replace("JSON_CALLBACK",t);...
function Dt (line 283) | function Dt(){var e="{{",t="}}";this.startSymbol=function(t){return t?(e...
function Pt (line 283) | function Pt(){this.$get=["$rootScope","$window","$q","$$q","$browser",fu...
function Rt (line 283) | function Rt(e){for(var t=e.split("/"),n=t.length;n--;)t[n]=ee(t[n]);retu...
function Ft (line 283) | function Ft(e,t){var n=In(e);t.$$protocol=n.protocol,t.$$host=n.hostname...
function qt (line 283) | function qt(e,t){var n="/"!==e.charAt(0);n&&(e="/"+e);var r=In(e);t.$$pa...
function Ut (line 283) | function Ut(e,t){return 0===e.lastIndexOf(t,0)}
function Lt (line 283) | function Lt(e,t){return Ut(t,e)?t.substr(e.length):void 0}
function Ht (line 283) | function Ht(e){var t=e.indexOf("#");return-1==t?e:e.substr(0,t)}
function Bt (line 283) | function Bt(e){return e.replace(/(#.+)|#$/,"$1")}
function zt (line 283) | function zt(e){return e.substr(0,Ht(e).lastIndexOf("/")+1)}
function Wt (line 283) | function Wt(e){return e.substring(0,e.indexOf("/",e.indexOf("//")+2))}
function Gt (line 283) | function Gt(e,t,n){this.$$html5=!0,n=n||"",Ft(e,this),this.$$parse=funct...
function Zt (line 283) | function Zt(e,t,n){Ft(e,this),this.$$parse=function(r){function i(e,t,n)...
function Jt (line 283) | function Jt(e,t,n){this.$$html5=!0,Zt.apply(this,arguments),this.$$parse...
function Yt (line 283) | function Yt(e){return function(){return this[e]}}
function Kt (line 283) | function Kt(e,t){return function(n){return m(n)?this[e]:(this[e]=t(n),th...
function Xt (line 283) | function Xt(){var e="",t={enabled:!1,requireBase:!0,rewriteLinks:!0};thi...
function Qt (line 283) | function Qt(){var e=!0,t=this;this.debugEnabled=function(t){return g(t)?...
function en (line 283) | function en(e,t){if("__defineGetter__"===e||"__defineSetter__"===e||"__l...
function tn (line 283) | function tn(e){return e+""}
function nn (line 283) | function nn(e,t){if(e){if(e.constructor===e)throw fo("isecfn","Referenci...
function rn (line 283) | function rn(e,t){if(e){if(e.constructor===e)throw fo("isecfn","Referenci...
function on (line 283) | function on(e,t){if(e&&(e===0..constructor||e===(!1).constructor||e===""...
function an (line 283) | function an(e,t){return"undefined"!=typeof e?e:t}
function sn (line 283) | function sn(e,t){return"undefined"==typeof e?t:"undefined"==typeof t?e:e+t}
function un (line 283) | function un(e,t){var n=e(t);return!n.$stateful}
function cn (line 283) | function cn(e,t){var n,i;switch(e.type){case yo.Program:n=!0,r(e.body,fu...
function ln (line 284) | function ln(e){if(1==e.length){var t=e[0].expression,n=t.toWatch;return ...
function fn (line 284) | function fn(e){return e.type===yo.Identifier||e.type===yo.MemberExpression}
function hn (line 284) | function hn(e){return 1===e.body.length&&fn(e.body[0].expression)?{type:...
function pn (line 284) | function pn(e){return 0===e.body.length||1===e.body.length&&(e.body[0].e...
function dn (line 284) | function dn(e){return e.constant}
function $n (line 284) | function $n(e,t){this.astBuilder=e,this.$filter=t}
function vn (line 284) | function vn(e,t){this.astBuilder=e,this.$filter=t}
function mn (line 284) | function mn(e){return"constructor"==e}
function gn (line 284) | function gn(e){return C(e.valueOf)?e.valueOf():wo.call(e)}
function yn (line 284) | function yn(){var e,t,n=de(),i=de(),o={"true":!0,"false":!1,"null":null,...
function bn (line 284) | function bn(){this.$get=["$rootScope","$exceptionHandler",function(e,t){...
function wn (line 284) | function wn(){this.$get=["$browser","$exceptionHandler",function(e,t){re...
function xn (line 284) | function xn(e,n){function i(){this.$$state={status:0}}function o(e,t){re...
function Sn (line 284) | function Sn(){this.$get=["$window","$timeout",function(e,t){var n=e.requ...
function Cn (line 284) | function Cn(){function e(e){function t(){this.$$watchers=this.$$nextSibl...
function En (line 284) | function En(){var e=/^\s*(https?|ftp|mailto|tel|file):/,t=/^\s*((https?|...
function An (line 284) | function An(e){if("self"===e)return e;if(w(e)){if(e.indexOf("***")>-1)th...
function kn (line 284) | function kn(e){var t=[];return g(e)&&r(e,function(e){t.push(An(e))}),t}
function On (line 284) | function On(){this.SCE_CONTEXTS=So;var e=["self"],t=[];this.resourceUrlW...
function Mn (line 284) | function Mn(){var e=!0;this.enabled=function(t){return arguments.length&...
function Tn (line 284) | function Tn(){this.$get=["$window","$document",function(e,t){var n,r,i={...
function Nn (line 284) | function Nn(){var e;this.httpOptions=function(t){return t?(e=t,this):e},...
function Vn (line 284) | function Vn(){this.$get=["$rootScope","$browser","$location",function(e,...
function jn (line 284) | function jn(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionH...
function In (line 284) | function In(e){var t=e;return Pr&&(Eo.setAttribute("href",t),t=Eo.href),...
function _n (line 284) | function _n(e){var t=w(e)?In(e):e;return t.protocol===Ao.protocol&&t.hos...
function Dn (line 284) | function Dn(){this.$get=$(e)}
function Pn (line 284) | function Pn(e){function t(e){try{return decodeURIComponent(e)}catch(t){r...
function Rn (line 284) | function Rn(){this.$get=Pn}
function Fn (line 284) | function Fn(e){function t(i,o){if(y(i)){var a={};return r(i,function(e,n...
function qn (line 284) | function qn(){return function(e,r,i,o){if(!n(e)){if(null==e)return e;thr...
function Un (line 284) | function Un(e,t,n,r){var i,o=y(e)&&n in e;return t===!0?t=q:C(t)||(t=fun...
function Ln (line 284) | function Ln(e,t,n,r,i,o){var a=Hn(e),s=Hn(t);if("string"===s&&"!"===t.ch...
function Hn (line 284) | function Hn(e){return null===e?"null":"undefined"==typeof e?"undefined":...
function Bn (line 284) | function Bn(e){var t=e.NUMBER_FORMATS;return function(e,n,r){return m(n)...
function zn (line 284) | function zn(e){var t=e.NUMBER_FORMATS;return function(e,n){return null==...
function Wn (line 284) | function Wn(e){var t,n,r,i,o,a=0;for((n=e.indexOf(Oo))>-1&&(e=e.replace(...
function Gn (line 284) | function Gn(e,t,n,r){var i=e.d,o=i.length-e.i;t=m(t)?Math.min(Math.max(n...
function Zn (line 284) | function Zn(e,t,n,r,i){if(!w(e)&&!x(e)||isNaN(e))return"";var o,a=!isFin...
function Jn (line 284) | function Jn(e,t,n,r){var i="";for((0>e||r&&0>=e)&&(r?e=-e+1:(e=-e,i="-")...
function Yn (line 284) | function Yn(e,t,n,r,i){return n=n||0,function(o){var a=o["get"+e]();retu...
function Kn (line 284) | function Kn(e,t,n){return function(r,i){var o=r["get"+e](),a=(n?"STANDAL...
function Xn (line 284) | function Xn(e,t,n){var r=-1*n,i=r>=0?"+":"";return i+=Jn(Math[r>0?"floor...
function Qn (line 284) | function Qn(e){var t=new Date(e,0,1).getDay();return new Date(e,0,(4>=t?...
function er (line 284) | function er(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+...
function tr (line 284) | function tr(e){return function(t){var n=Qn(t.getFullYear()),r=er(t),i=+r...
function nr (line 284) | function nr(e,t){return e.getHours()<12?t.AMPMS[0]:t.AMPMS[1]}
function rr (line 284) | function rr(e,t){return e.getFullYear()<=0?t.ERAS[0]:t.ERAS[1]}
function ir (line 284) | function ir(e,t){return e.getFullYear()<=0?t.ERANAMES[0]:t.ERANAMES[1]}
function or (line 284) | function or(e){function t(e){var t;if(t=e.match(n)){var r=new Date(0),i=...
function ar (line 284) | function ar(){return function(e,t){return m(t)&&(t=2),z(e,t)}}
function sr (line 284) | function sr(){return function(e,t,r){return t=Math.abs(Number(t))===1/0?...
function ur (line 284) | function ur(e,t,n){return w(e)?e.slice(t,n):Ur.call(e,t,n)}
function cr (line 284) | function cr(e){function r(t){return t.map(function(t){var n=1,r=d;if(C(t...
function lr (line 284) | function lr(e){return C(e)&&(e={link:e}),e.restrict=e.restrict||"AC",$(e)}
function fr (line 284) | function fr(e,t){e.$name=t}
function hr (line 284) | function hr(e,t,n,i,o){var a=this,s=[];a.$error={},a.$$success={},a.$pen...
function pr (line 284) | function pr(e){e.$formatters.push(function(t){return e.$isEmpty(t)?t:t.t...
function dr (line 284) | function dr(e,t,n,r,i,o){$r(e,t,n,r,i,o),pr(r)}
function $r (line 284) | function $r(e,t,n,r,i,o){var a=jr(t[0].type);if(!i.android){var s=!1;t.o...
function vr (line 284) | function vr(e,t){if(S(e))return e;if(w(e)){Zo.lastIndex=0;var n=Zo.exec(...
function mr (line 284) | function mr(e,t){return function(n,i){var o,a;if(S(n))return n;if(w(n)){...
function gr (line 285) | function gr(e,t,n,r){return function(i,o,a,s,u,c,l){function f(e){return...
function yr (line 285) | function yr(e,t,n,r){var i=t[0],o=r.$$hasNativeValidators=y(i.validity);...
function br (line 285) | function br(e,t,n,r,i,o){if(yr(e,t,n,r),$r(e,t,n,r,i,o),r.$$parserName="...
function wr (line 285) | function wr(e,t,n,r,i,o){$r(e,t,n,r,i,o),pr(r),r.$$parserName="url",r.$v...
function xr (line 285) | function xr(e,t,n,r,i,o){$r(e,t,n,r,i,o),pr(r),r.$$parserName="email",r....
function Sr (line 285) | function Sr(e,t,n,r){m(n.name)&&t.attr("name",a());var i=function(e){t[0...
function Cr (line 285) | function Cr(e,t,n,r,i){var o;if(g(r)){if(o=e(r),!o.constant)throw Oa("co...
function Er (line 285) | function Er(e,t,n,r,i,o,a,s){var u=Cr(s,e,"ngTrueValue",n.ngTrueValue,!0...
function Ar (line 285) | function Ar(e,t){return e="ngClass"+e,["$animate",function(n){function i...
function kr (line 285) | function kr(e){function t(e,t,s){m(t)?n("$pending",e,s):r("$pending",e,s...
function Or (line 285) | function Or(e){if(e)for(var t in e)if(e.hasOwnProperty(t))return!1;retur...
function Mr (line 285) | function Mr(e){e[0].hasAttribute("selected")&&(e[0].selected=!0)}
function t (line 285) | function t(){try{return new Function(""),!1}catch(e){return!0}}
function n (line 285) | function n(){r||(r=!0,t())}
function e (line 285) | function e(e,t){if(m(t)){var n=e.nodeType;return n===oi||n===si?e.textCo...
function o (line 285) | function o(e,t,n){var i=!1;return t&&(t=w(t)?t.split(" "):Jr(t)?t:[],r(t...
function a (line 285) | function a(){r(t,function(t){var n=e.get(t);if(n){var i=st(t.attr("class...
function s (line 285) | function s(n,r,s){var u=e.get(n)||{},c=o(u,r,!0),l=o(u,s,!1);(c||l)&&(e....
function t (line 285) | function t(e,t,n){if(n){var r=at(n);!r||r.parentNode||r.previousElementS...
function t (line 285) | function t(t){n.push(t),n.length>1||e(function(){for(var e=0;e<n.length;...
function a (line 285) | function a(e){this.setHost(e);var t=n(),r=function(e){o(e,0,!1)};this._d...
function n (line 285) | function n(){return r===e.length?void t(!0):void e[r](function(e){return...
function n (line 285) | function n(n){o=o&&n,++i===e.length&&t(o)}
function i (line 285) | function i(){return e(function(){o(),s||u.complete(),s=!0}),u}
function o (line 285) | function o(){a.addClass&&(t.addClass(a.addClass),a.addClass=null),a.remo...
function t (line 285) | function t(e){var t=function n(e){n.data=e,n.called=!0};return t.id=e,t}
function n (line 286) | function n(e,n,i){e.$watch(i[r],function(e){i.$set(t,!!e)})}
function r (line 286) | function r(e){return""===e?n('this[""]').assign:n(e).assign||p}
function i (line 484) | function i(){var e=b.$$parserName||"parse";return m(f)?(s(e,null),!0):(f...
function o (line 484) | function o(){var n=!0;return r(b.$validators,function(r,i){var o=r(e,t);...
function a (line 484) | function a(){var n=[],i=!0;r(b.$asyncValidators,function(r,o){var a=r(e,...
function s (line 484) | function s(e,t){l===w&&b.$setValidity(e,t)}
function u (line 484) | function u(e){l===w&&n(e)}
function t (line 484) | function t(){b.$modelValue!==o&&b.$$writeModelToScope()}
function a (line 484) | function a(e,t,r){function i(e,t,n,r,i){this.selectValue=e,this.viewValu...
function s (line 484) | function s(e,n,o,s){function l(e,t){var n=u.cloneNode(!1);t.appendChild(...
function c (line 484) | function c(e){s.text(e||"")}
function a (line 484) | function a(e,n){e.length?t.append(e):(s(),n.$destroy())}
function s (line 484) | function s(){n(e,function(e){t.append(e)})}
function e (line 484) | function e(e,t,n,i){var o=i[1];if(o){var a=i[0];if(a.ngModelCtrl=o,t.on(...
function t (line 484) | function t(e,t,n,r){var i=r[1];if(i){var o=r[0];i.$render=function(){o.w...
function t (line 484) | function t(e){e+="";var t=e.indexOf(".");return-1==t?0:e.length-t-1}
function n (line 484) | function n(e,n){var r=n;void 0===r&&(r=Math.min(t(e),3));var i=Math.pow(...
function ljTemplateRun (line 494) | function ljTemplateRun(t){function e(t,e){return t.filter(function(t){re...
function getCurrentUrl (line 494) | function getCurrentUrl(){var t=location,e=t.protocol,n=t.host,i=t.pathna...
function fixIeRedirect (line 494) | function fixIeRedirect(){LJ.Support.history||0!==angular.element("base")...
function ljHtml (line 494) | function ljHtml(t){return{compile:function(e,n){var i=t(n.ljHtml);return...
function ljHtmlLive (line 494) | function ljHtmlLive(t){return{scope:!0,restrict:"A",compile:function(e,n...
function includeReplace (line 494) | function includeReplace(){return{require:"ngInclude",link:function(t,e){...
function ljMl (line 494) | function ljMl(t,e){return{link:function(n,i,o){function r(e){var i;if(!o...
function ljSwitchOff (line 494) | function ljSwitchOff(t,e){return{restrict:"A",link:function(n,i,o){funct...
function ljDisabled (line 494) | function ljDisabled(){return function(t,e,n){t.$watch(n.ljDisabled,funct...
function focusAndSelect (line 494) | function focusAndSelect(t){return{restrict:"A",link:function(e,n,i){var ...
function ljDebounce (line 494) | function ljDebounce(t){return{link:function(e,n,i){var o,r,l,c=t(i.ljDeb...
function ljScroll (line 494) | function ljScroll(t){return{restrict:"A",compile:function(e,n){var i=ang...
function ljScreenable (line 494) | function ljScreenable(){var t=angular.element(document);return{link:func...
function ljSvgIcon (line 494) | function ljSvgIcon(){return{link:function(t,e,n){n.$observe("ljSvgIcon",...
function ljFlatbutton (line 494) | function ljFlatbutton(t,e,n){var i={a:['<a class="{{classes}}">',"{{titl...
function ljCut (line 494) | function ljCut(){return{link:function(t,e){var n=e.data("widget-options"...
function ljSticky (line 494) | function ljSticky(t,e,n){return{link:function(t,i,o){function r(){o.ljSa...
function stickyWithStops (line 494) | function stickyWithStops(t,e){return{link:function(n,i,o){var r=o.sticky...
function ljEmbedResizer (line 494) | function ljEmbedResizer(t){return{scope:!0,link:function(e,n){function i...
function onRender (line 494) | function onRender(t){return{link:function(e,n,i){e.$last&&t(function(){e...
function ljInitial (line 494) | function ljInitial(t){return{restrict:"A",compile:function(e,n){var i=n....
function convertToNumber (line 494) | function convertToNumber(){return{require:"ngModel",link:function(t,e,n,...
function trustAsResourceUrl (line 494) | function trustAsResourceUrl(t){return function(e){return t.trustAsResour...
function windowCheck (line 494) | function windowCheck(t){return{link:function(e,n,i){var o=+i.windowWidth...
function ljNgOnload (line 494) | function ljNgOnload(){return{scope:{callback:"&ljNgOnload"},link:functio...
function t (line 498) | function t(){for(var t=Math.pow(2,24),e=void 0;void 0===e||i.hasOwnPrope...
function e (line 507) | function e(e){function n(e){if(-1!==l.indexOf(e.type)&&!u[e.body]){var n...
function n (line 507) | function n(){return{templateUrl:"ljMessages.ng.tmpl",scope:!0,controller...
function t (line 507) | function t(e,n,t,s,o){function i(){s(function(){return u.length?(r.ngSty...
function n (line 512) | function n(){return"jsonp_"+Date.now()+"_"+Math.ceil(1e5*Math.random())}
function o (line 512) | function o(e){try{delete window[e]}catch(t){window[e]=void 0}}
function i (line 512) | function i(e){var t=document.getElementById(e);document.getElementsByTag...
function r (line 512) | function r(e){var t=arguments.length<=1||void 0===arguments[1]?{}:argume...
function e (line 517) | function e(e,n){var t=[],o=!0,r=!1,i=void 0;try{for(var a,l=e[Symbol.ite...
function e (line 528) | function e(){return{scope:{slot:"@lj0sale",type:"@lj0sale0type",customId...
function n (line 528) | function n(e,n,t,o,r,i,a,l,s){function c(){var e=new Date;e.setDate(e.ge...
function t (line 528) | function t(){var e=void 0,n="trunk"===LJ.get("version"),t={url:n?"https:...
function o (line 528) | function o(e){function n(){var n=["show_banner_caps=1","adv_debug="];ret...
function r (line 528) | function r(e){function n(n){return new Promise(function(t){e(function(){...
function i (line 528) | function i(e,n,t){function o(n,t,o){var r=e.document.createEvent("Event"...
function a (line 528) | function a(e){function n(n,t,o){function r(){i=t.height()+t.offset().top...
function l (line 528) | function l(){return{scope:!0,templateUrl:"recommended.ng.tmpl",controlle...
function s (line 528) | function s(e,n,t){return f[t]=f[t]||new Promise(function(n,o){fetchJsonp...
function c (line 528) | function c(e,n,t,o){var r=this,i=n.data().id;n.attr("lj-recommended-init...
function a (line 533) | function a(e){F[o("0x1a")]({d:e,t:r()-I})}
function c (line 533) | function c(e){return("undefined"==typeof e?"undefined":_typeof(e))===o("...
function r (line 533) | function r(){return e[o("0x21")](new(e[o("0x22")]))}
function x (line 533) | function x(t,n,a){try{if(e[o("0x27")]){if(a){var c=(24e5*(r()/24e5)[o("0...
function l (line 533) | function l(e){var t=o("0x2a");w&&w(e,t),x(y,t)}
function i (line 533) | function i(e,t){return t?e[o("0x2b")](".")[o("0x24")](-t)[o("0x20")]("."...
function d (line 533) | function d(n,a){function d(){for(var e=0;e<m[o("0x1c")];e++){var n=m[e];...
function u (line 533) | function u(e,t,n){var a=new h;if(0!==a[o("0x41")])throw new Error(o("0x6...
function t (line 540) | function t(){return{scope:!0,templateUrl:"NGLJNotificationLabel.ng.tmpl"...
function e (line 540) | function e(t,e,n,i){var r=this,c=t,f={targetNode:i.find(".notification__...
function t (line 545) | function t(t,n){var e=[],i=!0,o=!1,r=void 0;try{for(var c,a=t[Symbol.ite...
function t (line 551) | function t(t,n,e,i,o,r){var c=this,a=t;LJ.Event.emit("notifications::isR...
function n (line 551) | function n(t,n,e,i){var o=this,r=i;o.canUnsubscribe=!!t.notification.can...
function e (line 551) | function e(){return{templateUrl:"NGLJNotification.ng.tmpl",scope:!0,cont...
function i (line 551) | function i(){return{scope:{notification:"=notification"},controller:n,co...
function t (line 564) | function t(t){t.on("click",function(n){var e=n.target;if(!e.closest("[lj...
function n (line 564) | function n(){return{scope:!0,templateUrl:"NGLJNotificationPopup.ng.tmpl"...
function e (line 564) | function e(t,n,e,o,i,r){var a=this,c=t,s=!1,u=480,l=15,f=Site.page.is_po...
function t (line 569) | function t(t,n){function c(){return u}function e(t){u=t}function i(){n.c...
function e (line 576) | function e(e,n,t,r,a,c){function i(e,n){return"undefined"==typeof n?e:e+...
function t (line 598) | function t(){return Pn.apply(null,arguments)}
function e (line 598) | function e(t){Pn=t}
function n (line 598) | function n(t){return"[object Array]"===Object.prototype.toString.call(t)}
function i (line 598) | function i(t){return t instanceof Date||"[object Date]"===Object.prototy...
function r (line 598) | function r(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));retu...
function s (line 598) | function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
function o (line 598) | function o(t,e){for(var n in e)s(e,n)&&(t[n]=e[n]);return s(e,"toString"...
function a (line 598) | function a(t,e,n,i){return Ot(t,e,n,i,!0).utc()}
function u (line 598) | function u(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,...
function d (line 598) | function d(t){return null==t._pf&&(t._pf=u()),t._pf}
function l (line 598) | function l(t){if(null==t._isValid){var e=d(t);t._isValid=!(isNaN(t._d.ge...
function c (line 598) | function c(t){var e=a(NaN);return null!=t?o(d(e),t):d(e).userInvalidated...
function f (line 598) | function f(t,e){var n,i,r;if("undefined"!=typeof e._isAMomentObject&&(t....
function h (line 598) | function h(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),...
function m (line 598) | function m(t){return t instanceof h||null!=t&&null!=t._isAMomentObject}
function _ (line 598) | function _(t){return 0>t?Math.ceil(t):Math.floor(t)}
function y (line 598) | function y(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=_(e)),n}
function p (line 598) | function p(t,e,n){var i,r=Math.min(t.length,e.length),s=Math.abs(t.lengt...
function g (line 598) | function g(){}
function v (line 598) | function v(t){return t?t.toLowerCase().replace("_","-"):t}
function D (line 598) | function D(t){for(var e,n,i,r,s=0;s<t.length;){for(r=v(t[s]).split("-"),...
function M (line 598) | function M(t){var e=null;if(!In[t]&&"undefined"!=typeof module&&module&&...
function Y (line 598) | function Y(t,e){var n;return t&&(n="undefined"==typeof e?S(t):w(t,e),n&&...
function w (line 598) | function w(t,e){return null!==e?(e.abbr=t,In[t]=In[t]||new g,In[t].set(e...
function S (line 598) | function S(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr...
function k (line 598) | function k(t,e){var n=t.toLowerCase();An[n]=An[n+"s"]=An[e]=t}
function T (line 598) | function T(t){return"string"==typeof t?An[t]||An[t.toLowerCase()]:void 0}
function b (line 598) | function b(t){var e,n,i={};for(n in t)s(t,n)&&(e=T(n),e&&(i[e]=t[n]));re...
function O (line 598) | function O(e,n){return function(i){return null!=i?(W(this,e,i),t.updateO...
function U (line 598) | function U(t,e){return t._d["get"+(t._isUTC?"UTC":"")+e]()}
function W (line 598) | function W(t,e,n){return t._d["set"+(t._isUTC?"UTC":"")+e](n)}
function C (line 598) | function C(t,e){var n;if("object"==("undefined"==typeof t?"undefined":_t...
function G (line 598) | function G(t,e,n){var i=""+Math.abs(t),r=e-i.length,s=t>=0;return(s?n?"+...
function F (line 598) | function F(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return thi...
function P (line 598) | function P(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.repl...
function x (line 598) | function x(t){var e,n,i=t.match(zn);for(e=0,n=i.length;n>e;e++)jn[i[e]]?...
function H (line 598) | function H(t,e){return t.isValid()?(e=L(e,t.localeData()),Zn[e]=Zn[e]||x...
function L (line 598) | function L(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(...
function I (line 598) | function I(t){return"function"==typeof t&&"[object Function]"===Object.p...
function A (line 598) | function A(t,e,n){ri[t]=I(e)?e:function(t){return t&&n?n:e}}
function z (line 598) | function z(t,e){return s(ri,t)?ri[t](e._strict,e._locale):new RegExp(N(t))}
function N (line 598) | function N(t){return t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[...
function Z (line 598) | function Z(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==type...
function j (line 598) | function j(t,e){Z(t,function(t,n,i,r){i._w=i._w||{},e(t,i._w,i,r)})}
function E (line 598) | function E(t,e,n){null!=e&&s(si,t)&&si[t](e,n._a,n,t)}
function V (line 598) | function V(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}
function q (line 598) | function q(t){return this._months[t.month()]}
function J (line 598) | function J(t){return this._monthsShort[t.month()]}
function $ (line 598) | function $(t,e,n){var i,r,s;for(this._monthsParse||(this._monthsParse=[]...
function R (line 598) | function R(t,e){var n;return"string"==typeof e&&(e=t.localeData().months...
function B (line 598) | function B(e){return null!=e?(R(this,e),t.updateOffset(this,!0),this):U(...
function Q (line 598) | function Q(){return V(this.year(),this.month())}
function X (line 598) | function X(t){var e,n=t._a;return n&&-2===d(t).overflow&&(e=n[ai]<0||n[a...
function K (line 598) | function K(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof co...
function tt (line 598) | function tt(t,e){var n=!0;return o(function(){return n&&(K(t+"\n"+(new E...
function et (line 598) | function et(t,e){_i[t]||(K(e),_i[t]=!0)}
function nt (line 598) | function nt(t){var e,n,i=t._i,r=yi.exec(i);if(r){for(d(t).iso=!0,e=0,n=p...
function it (line 598) | function it(e){var n=vi.exec(e._i);return null!==n?void(e._d=new Date(+n...
function rt (line 598) | function rt(t,e,n,i,r,s,o){var a=new Date(t,e,n,i,r,s,o);return 1970>t&&...
function st (line 598) | function st(t){var e=new Date(Date.UTC.apply(null,arguments));return 197...
function ot (line 598) | function ot(t){return at(t)?366:365}
function at (line 598) | function at(t){return t%4===0&&t%100!==0||t%400===0}
function ut (line 598) | function ut(){return at(this.year())}
function dt (line 598) | function dt(t,e,n){var i,r=n-e,s=n-t.day();return s>r&&(s-=7),r-7>s&&(s+...
function lt (line 598) | function lt(t){return dt(t,this._week.dow,this._week.doy).week}
function ct (line 598) | function ct(){return this._week.dow}
function ft (line 598) | function ft(){return this._week.doy}
function ht (line 598) | function ht(t){var e=this.localeData().week(this);return null==t?e:this....
function mt (line 598) | function mt(t){var e=dt(this,1,4).week;return null==t?e:this.add(7*(t-e)...
function _t (line 598) | function _t(t,e,n,i,r){var s,o=6+r-i,a=st(t,0,1+o),u=a.getUTCDay();retur...
function yt (line 598) | function yt(t){var e=Math.round((this.clone().startOf("day")-this.clone(...
function pt (line 598) | function pt(t,e,n){return null!=t?t:null!=e?e:n}
function gt (line 598) | function gt(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.get...
function vt (line 598) | function vt(t){var e,n,i,r,s=[];if(!t._d){for(i=gt(t),t._w&&null==t._a[u...
function Dt (line 598) | function Dt(t){var e,n,i,r,s,o,a;e=t._w,null!=e.GG||null!=e.W||null!=e.E...
function Mt (line 598) | function Mt(e){if(e._f===t.ISO_8601)return void nt(e);e._a=[],d(e).empty...
function Yt (line 598) | function Yt(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridie...
function wt (line 598) | function wt(t){var e,n,i,r,s;if(0===t._f.length)return d(t).invalidForma...
function St (line 598) | function St(t){if(!t._d){var e=b(t._i);t._a=[e.year,e.month,e.day||e.dat...
function kt (line 598) | function kt(t){var e=new h(X(Tt(t)));return e._nextDay&&(e.add(1,"d"),e....
function Tt (line 598) | function Tt(t){var e=t._i,r=t._f;return t._locale=t._locale||S(t._l),nul...
function bt (line 598) | function bt(e){var s=e._i;void 0===s?e._d=new Date:i(s)?e._d=new Date(+s...
function Ot (line 598) | function Ot(t,e,n,i,r){var s={};return"boolean"==typeof n&&(i=n,n=void 0...
function Ut (line 598) | function Ut(t,e,n,i){return Ot(t,e,n,i,!1)}
function Wt (line 598) | function Wt(t,e){var i,r;if(1===e.length&&n(e[0])&&(e=e[0]),!e.length)re...
function Ct (line 598) | function Ct(){var t=[].slice.call(arguments,0);return Wt("isBefore",t)}
function Gt (line 598) | function Gt(){var t=[].slice.call(arguments,0);return Wt("isAfter",t)}
function Ft (line 598) | function Ft(t){var e=b(t),n=e.year||0,i=e.quarter||0,r=e.month||0,s=e.we...
function Pt (line 598) | function Pt(t){return t instanceof Ft}
function xt (line 598) | function xt(t,e){F(t,0,0,function(){var t=this.utcOffset(),n="+";return ...
function Ht (line 598) | function Ht(t){var e=(t||"").match(ei)||[],n=e[e.length-1]||[],i=(n+"")....
function Lt (line 598) | function Lt(e,n){var r,s;return n._isUTC?(r=n.clone(),s=(m(e)||i(e)?+e:+...
function It (line 598) | function It(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}
function At (line 598) | function At(e,n){var i,r=this._offset||0;return null!=e?("string"==typeo...
function zt (line 598) | function zt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffs...
function Nt (line 598) | function Nt(t){return this.utcOffset(0,t)}
function Zt (line 598) | function Zt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t...
function jt (line 598) | function jt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeo...
function Et (line 598) | function Et(t){return t=t?Ut(t).utcOffset():0,(this.utcOffset()-t)%60===0}
function Vt (line 598) | function Vt(){return this.utcOffset()>this.clone().month(0).utcOffset()|...
function qt (line 598) | function qt(){if("undefined"!=typeof this._isDSTShifted)return this._isD...
function Jt (line 598) | function Jt(){return!this._isUTC}
function $t (line 598) | function $t(){return this._isUTC}
function Rt (line 598) | function Rt(){return this._isUTC&&0===this._offset}
function Bt (line 598) | function Bt(t,e){var n,i,r,o=t,a=null;return Pt(t)?o={ms:t._milliseconds...
function Qt (line 598) | function Qt(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)...
function Xt (line 598) | function Xt(t,e){var n={milliseconds:0,months:0};return n.months=e.month...
function Kt (line 598) | function Kt(t,e){var n;return e=Lt(e,t),t.isBefore(e)?n=Xt(t,e):(n=Xt(e,...
function te (line 598) | function te(t,e){return function(n,i){var r,s;return null===i||isNaN(+i)...
function ee (line 598) | function ee(e,n,i,r){var s=n._milliseconds,o=n._days,a=n._months;r=null=...
function ne (line 598) | function ne(t,e){var n=t||Ut(),i=Lt(n,this).startOf("day"),r=this.diff(i...
function ie (line 598) | function ie(){return new h(this)}
function re (line 598) | function re(t,e){var n;return e=T("undefined"!=typeof e?e:"millisecond")...
function se (line 598) | function se(t,e){var n;return e=T("undefined"!=typeof e?e:"millisecond")...
function oe (line 598) | function oe(t,e,n){return this.isAfter(t,n)&&this.isBefore(e,n)}
function ae (line 598) | function ae(t,e){var n;return e=T(e||"millisecond"),"millisecond"===e?(t...
function ue (line 598) | function ue(t,e,n){var i,r,s=Lt(t,this),o=6e4*(s.utcOffset()-this.utcOff...
function de (line 598) | function de(t,e){var n,i,r=12*(e.year()-t.year())+(e.month()-t.month()),...
function le (line 598) | function le(){return this.clone().locale("en").format("ddd MMM DD YYYY H...
function ce (line 598) | function ce(){var t=this.clone().utc();return 0<t.year()&&t.year()<=9999...
function fe (line 598) | function fe(e){var n=H(this,e||t.defaultFormat);return this.localeData()...
function he (line 598) | function he(t,e){return this.isValid()?Bt({to:this,from:t}).locale(this....
function me (line 598) | function me(t){return this.from(Ut(),t)}
function _e (line 598) | function _e(t,e){return this.isValid()?Bt({from:this,to:t}).locale(this....
function ye (line 598) | function ye(t){return this.to(Ut(),t)}
function pe (line 598) | function pe(t){var e;return void 0===t?this._locale._abbr:(e=S(t),null!=...
function ge (line 598) | function ge(){return this._locale}
function ve (line 598) | function ve(t){switch(t=T(t)){case"year":this.month(0);case"quarter":cas...
function De (line 598) | function De(t){return t=T(t),void 0===t||"millisecond"===t?this:this.sta...
function Me (line 598) | function Me(){return+this._d-6e4*(this._offset||0)}
function Ye (line 598) | function Ye(){return Math.floor(+this/1e3)}
function we (line 598) | function we(){return this._offset?new Date(+this):this._d}
function Se (line 598) | function Se(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.m...
function ke (line 598) | function ke(){var t=this;return{years:t.year(),months:t.month(),date:t.d...
function Te (line 598) | function Te(){return l(this)}
function be (line 598) | function be(){return o({},d(this))}
function Oe (line 598) | function Oe(){return d(this).overflow}
function Ue (line 598) | function Ue(t,e){F(0,[t,t.length],0,e)}
function We (line 598) | function We(t,e,n){return dt(Ut([t,11,31+e-n]),e,n).week}
function Ce (line 598) | function Ce(t){var e=dt(this,this.localeData()._week.dow,this.localeData...
function Ge (line 598) | function Ge(t){var e=dt(this,1,4).year;return null==t?e:this.add(t-e,"y")}
function Fe (line 598) | function Fe(){return We(this.year(),1,4)}
function Pe (line 598) | function Pe(){var t=this.localeData()._week;return We(this.year(),t.dow,...
function xe (line 598) | function xe(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3...
function He (line 598) | function He(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(...
function Le (line 598) | function Le(t){return this._weekdays[t.day()]}
function Ie (line 598) | function Ie(t){return this._weekdaysShort[t.day()]}
function Ae (line 598) | function Ae(t){return this._weekdaysMin[t.day()]}
function ze (line 598) | function ze(t){var e,n,i;for(this._weekdaysParse=this._weekdaysParse||[]...
function Ne (line 598) | function Ne(t){var e=this._isUTC?this._d.getUTCDay():this._d.getDay();re...
function Ze (line 598) | function Ze(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return...
function je (line 598) | function je(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)}
function Ee (line 598) | function Ee(t,e){F(t,0,0,function(){return this.localeData().meridiem(th...
function Ve (line 598) | function Ve(t,e){return e._meridiemParse}
function qe (line 598) | function qe(t){return"p"===(t+"").toLowerCase().charAt(0)}
function Je (line 598) | function Je(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}
function $e (line 598) | function $e(t,e){e[fi]=y(1e3*("0."+t))}
function Re (line 598) | function Re(){return this._isUTC?"UTC":""}
function Be (line 598) | function Be(){return this._isUTC?"Coordinated Universal Time":""}
function Qe (line 598) | function Qe(t){return Ut(1e3*t)}
function Xe (line 598) | function Xe(){return Ut.apply(null,arguments).parseZone()}
function Ke (line 598) | function Ke(t,e,n){var i=this._calendar[t];return"function"==typeof i?i....
function tn (line 598) | function tn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.to...
function en (line 598) | function en(){return this._invalidDate}
function nn (line 598) | function nn(t){return this._ordinal.replace("%d",t)}
function rn (line 598) | function rn(t){return t}
function sn (line 598) | function sn(t,e,n,i){var r=this._relativeTime[n];return"function"==typeo...
function on (line 598) | function on(t,e){var n=this._relativeTime[t>0?"future":"past"];return"fu...
function an (line 598) | function an(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:...
function un (line 598) | function un(t,e,n,i){var r=S(),s=a().set(i,e);return r[n](s,t)}
function dn (line 598) | function dn(t,e,n,i,r){if("number"==typeof t&&(e=t,t=void 0),t=t||"",nul...
function ln (line 598) | function ln(t,e){return dn(t,e,"months",12,"month")}
function cn (line 598) | function cn(t,e){return dn(t,e,"monthsShort",12,"month")}
function fn (line 598) | function fn(t,e){return dn(t,e,"weekdays",7,"day")}
function hn (line 598) | function hn(t,e){return dn(t,e,"weekdaysShort",7,"day")}
function mn (line 598) | function mn(t,e){return dn(t,e,"weekdaysMin",7,"day")}
function _n (line 598) | function _n(){var t=this._data;return this._milliseconds=Ri(this._millis...
function yn (line 598) | function yn(t,e,n,i){var r=Bt(e,n);return t._milliseconds+=i*r._millisec...
function pn (line 598) | function pn(t,e){return yn(this,t,e,1)}
function gn (line 598) | function gn(t,e){return yn(this,t,e,-1)}
function vn (line 598) | function vn(t){return 0>t?Math.floor(t):Math.ceil(t)}
function Dn (line 598) | function Dn(){var t,e,n,i,r,s=this._milliseconds,o=this._days,a=this._mo...
function Mn (line 598) | function Mn(t){return 4800*t/146097}
function Yn (line 598) | function Yn(t){return 146097*t/4800}
function wn (line 598) | function wn(t){var e,n,i=this._milliseconds;if(t=T(t),"month"===t||"year...
function Sn (line 598) | function Sn(){return this._milliseconds+864e5*this._days+this._months%12...
function kn (line 598) | function kn(t){return function(){return this.as(t)}}
function Tn (line 598) | function Tn(t){return t=T(t),this[t+"s"]()}
function bn (line 598) | function bn(t){return function(){return this._data[t]}}
function On (line 598) | function On(){return _(this.days()/7)}
function Un (line 598) | function Un(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}
function Wn (line 598) | function Wn(t,e,n){var i=Bt(t).abs(),r=cr(i.as("s")),s=cr(i.as("m")),o=c...
function Cn (line 598) | function Cn(t,e){return void 0===fr[t]?!1:void 0===e?fr[t]:(fr[t]=e,!0)}
function Gn (line 598) | function Gn(t){var e=this.localeData(),n=Wn(this,!t,e);return t&&(n=e.pa...
function Fn (line 598) | function Fn(){var t,e,n,i=hr(this._milliseconds)/1e3,r=hr(this._days),s=...
function t (line 604) | function t(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10...
function n (line 604) | function n(e,n,_){var i={mm:n?"минута_минуты_минут":"минуту_минуты_минут...
function _ (line 604) | function _(e,t){var n={nominative:"январь_февраль_март_апрель_май_июнь_и...
function i (line 604) | function i(e,t){var n={nominative:"янв_фев_март_апр_май_июнь_июль_авг_се...
function d (line 604) | function d(e,t){var n={nominative:"воскресенье_понедельник_вторник_среда...
function n (line 609) | function n(){function n(e,t){var n,r={},i=e.split(",");for(n=0;n<i.lengt...
function r (line 609) | function r(e){var t=[],n=d(t,c);return n.chars(e),t.join("")}
function h (line 609) | function h(e){e&&y.push(r(e))}
function p (line 609) | function p(e,t){var n,r=b(e);y.push("<a ");for(n in r)y.push(n+'="'+r[n]...
function _toConsumableArray (line 614) | function _toConsumableArray(t){if(Array.isArray(t)){for(var e=0,n=Array(...
function _toArray (line 614) | function _toArray(t){return Array.isArray(t)?t:Array.from(t)}
function t (line 650) | function t(t,a,u,f,m,_,d){var p={};t.notifications=[],t.isLoggedIn=l;var...
function _toConsumableArray (line 667) | function _toConsumableArray(t){if(Array.isArray(t)){for(var n=0,e=Array(...
function e (line 726) | function e(e){return"string"!=typeof e?e:e+(~e.indexOf("?")?"&v=":"?v=")+t}
function e (line 731) | function e(e){var t,o,r;if("object"!==("undefined"==typeof e?"undefined"...
function addAlias (line 736) | function addAlias(e,t,s,n,i){var o;return t?(o=new LJWidgetIPPU_AddAlias...
function createAliasPopup (line 736) | function createAliasPopup(){return{classes:{saveButton:".js-save",remove...
function e (line 736) | function e(){window.LJWidgetIPPU_AddAlias=new Class(LJWidgetIPPU,{init:f...
function s (line 750) | function s(t){e.each(t,function(e,t){var i;"undefined"!=typeof t&&(t.cli...
function i (line 750) | function i(e){return e.error?ContextualPopup.showNote(e.error.message):(...
FILE: F0:F030,F042,F072/Socket_fans/knots/piecevise_files/a_002.js
function e (line 2) | function e(t,e){e=e||!1;var a=t.getDate().toString();1===a.length&&(a="0...
function a (line 2) | function a(t,a){return e(a,!0)>=e(t[0],!0)&&e(a,!0)<=e(t[1],!0)}
function n (line 2) | function n(a,n,i){this.initialize=function(t){this.tbody=this.catchTable...
function i (line 13) | function i(t){for(;++t<=s&&!o[t];);return t}
function c (line 13) | function c(t){for(;!o[t]&&--t>=0;);for(var e=t;s>e;e++)if(o[e]){g[e]=r.p...
function d (line 13) | function d(t){for(var e=t,n=r.placeholder;s>e;e++)if(o[e]){var a=i(e),u=...
function h (line 13) | function h(e){var a=t(this).caret(),r=e.keyCode;return y=16>r||r>16&&32>...
function v (line 13) | function v(e){if(y)return y=!1,8==e.keyCode?!1:null;e=e||window.event;va...
function m (line 13) | function m(t,e){for(var n=t;e>n&&s>n;n++)o[n]&&(g[n]=r.placeholder)}
function k (line 13) | function k(){return b.val(g.join("")).val()}
function p (line 13) | function p(t){for(var e=b.val(),n=-1,a=0,i=0;s>a;a++)if(o[a]){for(g[a]=r...
function a (line 18) | function a(e,t){return"cache_"+e+t}
function s (line 18) | function s(e,t){var n=this;this.calendar=e,this.events=null,this.options...
function e (line 23) | function e(e,n){return f[e]?void console.error("Ref element with id `%s`...
function n (line 23) | function n(e){f[e]&&delete f[e]}
function o (line 23) | function o(e){var n=f[e];return n||console.error("Ref `%s` not found.",e...
function r (line 23) | function r(e,n){"undefined"==typeof n&&(n={});var r=o(e),f=angular.eleme...
function t (line 23) | function t(e){var n=angular.element(window),o=n.scrollTop(),r=o+n.height...
function e (line 33) | function e(e,o,t,n,r){return{scope:!0,link:function(i,l,a){function u(){...
function o (line 33) | function o(e,o,n,r,i,l){var a={},u={};return a.current=null,a.node=null,...
function t (line 38) | function t(t,n){function c(){return u}function e(t){u=t}function i(){n.c...
function e (line 45) | function e(e,n,t,r,a,c){function i(e,n){return"undefined"==typeof n?e:e+...
function n (line 50) | function n(n,o){"undefined"==typeof o?angular.extend(t,n):t[n]=o}
function o (line 50) | function o(n){return t[n]}
function e (line 50) | function e(){return t}
function t (line 57) | function t(t,i,u){var a=e.defer(),s={addFriend:{is_invite_sent:!0},remov...
function i (line 57) | function i(e,n,i){var u=t(e,n?"subscribe":"unsubscribe",i);return n||u.t...
function u (line 57) | function u(e,n,r){return t(e,n?"addFriend":"removeFriend",r)}
function a (line 57) | function a(e,n,r){return t(e,n?"join":"leave",r)}
function s (line 57) | function s(e,n,r){return t(e,n?"setBan":"setUnban",r)}
function o (line 57) | function o(e,n,r){return t(e,n?"banEverywhere":"unbanEverywhere",r)}
function e (line 57) | function e(e){return e>>>0}
function t (line 57) | function t(e){if(!angular.isUndefined(e)){var n=l.get(f.get("journal"))|...
function i (line 57) | function i(e){var n=l.get(f.get("journal"));return Boolean(n[e])}
function u (line 57) | function u(e){var n;if(angular.isString(e)){if(n=l.get(f.get("journal"))...
function a (line 57) | function a(e){var n=l.get(f.get("journal"));return n||angular.isObject(n...
function s (line 57) | function s(e){var n,r=l.get(f.get("journal")),t=[];for(n in r)if(r.hasOw...
function o (line 57) | function o(e,n){var r=u(e)||{username:e};return angular.extend(r,n),t(r),r}
function a (line 57) | function a(e){return k[C.get("type")][e]}
function s (line 57) | function s(e){return"subscriptions"===C.get("type")?Boolean(e.is_subscri...
function o (line 57) | function o(e,n){return angular.isUndefined(n)?e[c()]||1:void(e[c()]=n)}
function c (line 57) | function c(){return"subscriptions"===C.get("type")?"filtermask":"groupma...
function l (line 57) | function l(e,n,t){return r.call("user.get",{target:e,fields:n},t).then(f...
function f (line 57) | function f(e,n,t){return r.call("user.get",{targetid:e,fields:n},t).then...
function d (line 57) | function d(e,n){return r.call("relations.list_friends",{journal:C.get("j...
function g (line 57) | function g(e){return r.call("groups.list_users",{journal:C.get("journal"...
function p (line 57) | function p(e){return r.call("relations.list_subscriptions",{journal:C.ge...
function b (line 57) | function b(e){return r.call("relations.list_banned",{journal:C.get("jour...
function _ (line 57) | function _(e){return function(n){var r=n.users;return r.forEach(LJ.Funct...
function v (line 57) | function v(e){return r.call("relations."+e+"_count").then(function(e){re...
function h (line 57) | function h(n){return angular.isArray(n)||(n=[n]),0===n.length?e.reject("...
function m (line 57) | function m(e,n){var r=i.get(e);return r?t.check(o(r),n):!1}
function j (line 57) | function j(e){return e.filter(i.exists).map(i.get).filter(s)}
function y (line 57) | function y(e){var n=(e.filter||"").toLowerCase(),r=i.get(function(r){ret...
function U (line 57) | function U(e){var n=(e.filter||"").toLowerCase(),r=i.get(function(r){ret...
function w (line 57) | function w(e,n){angular.isArray(n)||(n=[n]);var r;return r="subscription...
function L (line 57) | function L(e,n,r){angular.isArray(n)||(n=[n]);var i=j(n);return i.forEac...
function O (line 57) | function O(e,n){return i.update(e,{alias:n}),r.call("user.alias_set",{ta...
function E (line 57) | function E(e){return function(n,r){return n[e].toLowerCase().localeCompa...
function F (line 57) | function F(){var e,n=C.get("journal");C.set.apply(null,arguments),e=C.ge...
function e (line 65) | function e(e,r,n,t,a,u,s){function i(e){var r=n.defer(),t=s.Cache.get(e)...
function r (line 65) | function r(e,r,n){return{templateUrl:"ljUser.ng.tmpl",replace:!0,scope:!...
function n (line 65) | function n(e,r,n){return{template:'<img class="{{user.class}}" src="http...
function t (line 65) | function t(e,r,n){return{templateUrl:"ljUser.ng.tmpl",replace:!0,scope:!...
function a (line 65) | function a(e){var r="https:",n=function(e,n){return e.journal_url?e.jour...
function u (line 65) | function u(e,r){var n="https:";return{template:'\n <img\n ...
function o (line 73) | function o(){angular.extend(this,{MAX_COUNT:31,filters:[],key:"filters",...
function r (line 73) | function r(){this.rpc={create:"filters.create",update:"filters.update",r...
function r (line 73) | function r(){this.rpc={create:"groups.create",read:"groups.list",update:...
function e (line 81) | function e(e,r,t,n,o,i){function l(){return Array.isArray(e.usernames)?e...
function t (line 93) | function t(e){LJ.Track.event("Relations","Menu",e)}
function b (line 93) | function b(e,t){var s;switch(t&&d(t),e){case"addFriend":s=a.toggleFriend...
function f (line 93) | function f(){var e,t=c.Cache.get(h);return t.is_subscribedon?(e=t.filter...
function d (line 93) | function d(e){g&&m(),g=(new Hourglass).setEvent(e).show()}
function m (line 93) | function m(){g&&(g.remove(),g=null)}
function o (line 100) | function o(){var o,t,n,l;LJ.get("remoteUser")&&(o=e(".s-header .s-header...
function t (line 100) | function t(){e(".s-header input[placeholder], #lj_controlstrip_new input...
function n (line 100) | function n(){o(),t(),LJ.Flags.isEnabled("new_friends_and_subscriptions")...
function o (line 100) | function o(o){var t=e("."+r.showElem+":not("+o+")");e(t).removeClass(r.s...
function t (line 100) | function t(){var o=e("."+r.showElem);o.length>0?e(l.bodyElem).addClass(r...
function n (line 100) | function n(){var o=e("."+r.showElem);o.length>0?a.catchBlur=!0:a.catchBl...
function e (line 113) | function e(){var t=3,e={7:4,8:4,9:3};return t=e[v]>0?e[v]:v}
function i (line 113) | function i(){var t=1;if(M>H)return t=1;if(v>=2){t=Math.floor(H/M),t>v&&(...
function n (line 113) | function n(){H=u.width(),b=O>H?i():e(),s(H/b)}
function s (line 113) | function s(t){var e=[150,300,330,400,500,600,800],i=["xxs","xs","s","m",...
function r (line 113) | function r(){u.find("."+w).removeClass(w),"xs"===F&&z.each(function(){va...
function o (line 113) | function o(t){return p.get(t).scrollHeight}
function a (line 113) | function a(){if(0===C&&g.height()>0){p.height("auto");var t=p.map(o),e=M...
function h (line 113) | function h(){H=u.width();var t=[400,600,800,1e3,1200,1400],e=["xs","s","...
function f (line 113) | function f(){var t=c+"--size-"+j,e=c+"--items-in-row-"+b,i=c+"--item-siz...
function e (line 118) | function e(){return a=t("."+c),0==a.length?void setTimeout(e,1e3):(u=a.a...
function n (line 118) | function n(){var t=1;return _>M?t:(m>=2&&(t=Math.floor(M/_),6>t&&(t=Math...
function i (line 118) | function i(){M=a.width(),y>M&&(z=n()),g=M/z,r(g)}
function r (line 118) | function r(){var t=[150,250,330,400,500,600,800],e=["xxs","xs","s","m","...
function o (line 118) | function o(){M=a.width();var t=[280,300,400,800,1e3,1200,1400],e=["xxs",...
function s (line 118) | function s(){var t=c+"--size-"+p,e=c+"--items-in-row-"+z,n=c+"--item-siz...
function n (line 138) | function n(n){n.preventDefault(),t.open("memories",r,e(i)),o.$apply()}
function e (line 149) | function e(){return{scope:!0,templateUrl:"embed.ng.tmpl",controllerAs:"e...
function n (line 149) | function n(e,n,t,r){function a(n){n.data&&n.data.height&&(o.height=n.dat...
function l (line 163) | function l(){e.open("share",{params:a,services:n},r),t.$evalAsync()}
function n (line 175) | function n(n){n.preventDefault(),o.open("removeRepost",{post:e.post},t),...
function c (line 189) | function c(){e("body").find("[data-tour]").each(function(){var t=e(this)...
function a (line 189) | function a(){var e=Object.keys(L)[0],t=L[e];i.current=t.filter(function(...
function l (line 189) | function l(){Object.keys(L).length&&a()}
function s (line 189) | function s(){r.close(),O.fadeOut(),angular.element("body").removeClass("...
function f (line 189) | function f(){return angular.element("body").addClass("p-ljtour").on("ljs...
function p (line 189) | function p(){var e=i.current.indexOf(i.step);e<i.current.length-1?(i.ste...
function d (line 189) | function d(){var e=i.current.indexOf(i.step);e>0&&(i.step=i.current[--e]...
function b (line 189) | function b(e){return e.hasOwnProperty("tourOwner")?LJ.get("remote.userna...
function v (line 189) | function v(e){return e.hasOwnProperty("tourSkipIf")?e.tourSkipIf.split("...
function m (line 189) | function m(e){return e.is(":visible")&&0!==e.css("opacity")&&"hidden"!==...
function g (line 189) | function g(e){return e?e.hasOwnProperty("tourStartPage")?new RegExp(e.to...
function y (line 189) | function y(){angular.element(window).trigger("resize"),S()}
function h (line 189) | function h(){if(i.step){if(!i.step.element.is(":visible"))return p();r.c...
function S (line 189) | function S(){u.scrollTo(i.step.tour+i.step.tourStep,{onlyOutOfScreen:!0})}
function k (line 189) | function k(e){if(i.current&&i.current.length){switch(e.which){case 27:s(...
function e (line 213) | function e(){return{scope:{batchParams:"=ngljLikeReact",journalID:"@jour...
function t (line 213) | function t(e,t,n,o,a,i){var r=a,c=this,l=500;c.showToolbar=!1,c.timer=nu...
function t (line 221) | function t(){return{scope:{batchParams:"=ngljLikeReactionStats",journalI...
function n (line 221) | function n(t,n,e,o){var a=this,i=t;a.invisModeOn=!LJ.Flags.isEnabled("re...
function e (line 233) | function e(){return{scope:{params:"=ngljReactionDetail"},templateUrl:"NG...
function t (line 233) | function t(e){return{restrict:"A",link:function(t,i,n){e(function(){var ...
function i (line 233) | function i(e,t,i,n,a,r){t.isLoggedIn=!!LJ.get("remote");var s=this,c=e;c...
function e (line 242) | function e(){return{scope:{params:"=ngljReactionPicker"},templateUrl:"re...
function t (line 242) | function t(e,t,n,i,o,r){var c=this,a=e;c.arrowOptions={position:"bottom"...
function e (line 247) | function e(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.\^...
function r (line 247) | function r(t){return"string"!=typeof t&&(t=String(t)),t}
function o (line 247) | function o(t){var e={next:function(){var e=t.shift();return{done:void 0=...
function n (line 247) | function n(t){this.map={},t instanceof n?t.forEach(function(t,e){this.ap...
function s (line 247) | function s(t){return t.bodyUsed?Promise.reject(new TypeError("Already re...
function i (line 247) | function i(t){return new Promise(function(e,r){t.onload=function(){e(t.r...
function a (line 247) | function a(t){var e=new FileReader;return e.readAsArrayBuffer(t),i(e)}
function h (line 247) | function h(t){var e=new FileReader;return e.readAsText(t),i(e)}
function u (line 247) | function u(){return this.bodyUsed=!1,this._initBody=function(t){if(this....
function f (line 247) | function f(t){var e=t.toUpperCase();return b.indexOf(e)>-1?e:t}
function d (line 247) | function d(t,e){e=e||{};var r=e.body;if(d.prototype.isPrototypeOf(t)){if...
function p (line 247) | function p(t){var e=new FormData;return t.trim().split("&").forEach(func...
function c (line 247) | function c(t){var e=new n,r=(t.getAllResponseHeaders()||"").trim().split...
function l (line 247) | function l(t,e){e||(e={}),this.type="default",this.status=e.status,this....
function n (line 247) | function n(){return"responseURL"in i?i.responseURL:/^X-Request-URL:/m.te...
function _defineProperty (line 252) | function _defineProperty(e,t,r){return t in e?Object.defineProperty(e,t,...
function _defineProperty (line 259) | function _defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,...
function e (line 268) | function e(e,r,a,c,l,u,s,m){var d=s;d.callGetLikesRaw=function(e){var t=...
function _defineProperty (line 273) | function _defineProperty(e,n,t){return n in e?Object.defineProperty(e,n,...
function e (line 286) | function e(){return{scope:{noActions:"@ljLikusNoActions",count:"@ljLikus...
function n (line 286) | function n(e,n,t,r,i,o,u,s){function l(e){e.preventDefault(),u.close("li...
function t (line 286) | function t(){return{scope:!0,templateUrl:"likusBubble.ng.tmpl",controlle...
function r (line 286) | function r(e,n,t,r){function i(){return t.showUsers()}function o(e){retu...
function i (line 286) | function i(e){function n(n){return i[n]=i[n]||new Promise(function(t){va...
function o (line 286) | function o(e,n,t,r,i,o){function u(t,r,i){var o=n.defer(),u=r.token+"#"+...
function t (line 291) | function t(){function t(){this._models={}}function o(o){return e[o]?e[o]...
function n (line 296) | function n(){function n(e,t){var n,r={},i=e.split(",");for(n=0;n<i.lengt...
function r (line 296) | function r(e){var t=[],n=d(t,c);return n.chars(e),t.join("")}
function h (line 296) | function h(e){e&&y.push(r(e))}
function p (line 296) | function p(e,t){var n,r=b(e);y.push("<a ");for(n in r)y.push(n+'="'+r[n]...
function e (line 311) | function e(e,n,t,r){function o(){l.currentState=l.states.success,i=n(fun...
function n (line 311) | function n(e,n,t,r,o){function s(s,c,a){if(LJ.get("remote")){if(a.ljTime...
function e (line 323) | function e(){var e=angular.element(".b-discoverytimes-wrapper[lj-discove...
function n (line 323) | function n(){function e(e,n){n.removeAttr("lj-discovery-times")}return{s...
function t (line 323) | function t(e,n,t,i,o,r){function m(){v+=1,v>=d.items.length&&(v=0),a.on(...
function i (line 323) | function i(e){function n(){return r.limit=r.itemshow,r.is_published=!0,r...
function o (line 323) | function o(e){function n(){return e.call("discovery.get_feed",o)}functio...
function o (line 346) | function o(o){function r(r,t){function l(l,i){if(this.promoId&&this.jour...
function r (line 346) | function r(o,r){function t(n,t,l,i){if(n&&n["class"]&&"grants"===n["clas...
function n (line 346) | function n(o,r){var n=this;n.profileInfo=Site.remote,n.showComplaintForm...
function t (line 346) | function t(){return{templateUrl:"complaintForm.ng.tmpl",controller:l,con...
function l (line 346) | function l(o){var r=this;r.reason=1,r.shown=o.formShown,r.complain=funct...
function i (line 346) | function i(o,r,n){function t(o,r){u[o]=r}function l(o){m=o.promoId,c=o.i...
function t (line 351) | function t(){return Pn.apply(null,arguments)}
function e (line 351) | function e(t){Pn=t}
function n (line 351) | function n(t){return"[object Array]"===Object.prototype.toString.call(t)}
function i (line 351) | function i(t){return t instanceof Date||"[object Date]"===Object.prototy...
function r (line 351) | function r(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));retu...
function s (line 351) | function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
function o (line 351) | function o(t,e){for(var n in e)s(e,n)&&(t[n]=e[n]);return s(e,"toString"...
function a (line 351) | function a(t,e,n,i){return Ot(t,e,n,i,!0).utc()}
function u (line 351) | function u(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,...
function d (line 351) | function d(t){return null==t._pf&&(t._pf=u()),t._pf}
function l (line 351) | function l(t){if(null==t._isValid){var e=d(t);t._isValid=!(isNaN(t._d.ge...
function c (line 351) | function c(t){var e=a(NaN);return null!=t?o(d(e),t):d(e).userInvalidated...
function f (line 351) | function f(t,e){var n,i,r;if("undefined"!=typeof e._isAMomentObject&&(t....
function h (line 351) | function h(e){f(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),...
function m (line 351) | function m(t){return t instanceof h||null!=t&&null!=t._isAMomentObject}
function _ (line 351) | function _(t){return 0>t?Math.ceil(t):Math.floor(t)}
function y (line 351) | function y(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=_(e)),n}
function p (line 351) | function p(t,e,n){var i,r=Math.min(t.length,e.length),s=Math.abs(t.lengt...
function g (line 351) | function g(){}
function v (line 351) | function v(t){return t?t.toLowerCase().replace("_","-"):t}
function D (line 351) | function D(t){for(var e,n,i,r,s=0;s<t.length;){for(r=v(t[s]).split("-"),...
function M (line 351) | function M(t){var e=null;if(!In[t]&&"undefined"!=typeof module&&module&&...
function Y (line 351) | function Y(t,e){var n;return t&&(n="undefined"==typeof e?S(t):w(t,e),n&&...
function w (line 351) | function w(t,e){return null!==e?(e.abbr=t,In[t]=In[t]||new g,In[t].set(e...
function S (line 351) | function S(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr...
function k (line 351) | function k(t,e){var n=t.toLowerCase();An[n]=An[n+"s"]=An[e]=t}
function T (line 351) | function T(t){return"string"==typeof t?An[t]||An[t.toLowerCase()]:void 0}
function b (line 351) | function b(t){var e,n,i={};for(n in t)s(t,n)&&(e=T(n),e&&(i[e]=t[n]));re...
function O (line 351) | function O(e,n){return function(i){return null!=i?(W(this,e,i),t.updateO...
function U (line 351) | function U(t,e){return t._d["get"+(t._isUTC?"UTC":"")+e]()}
function W (line 351) | function W(t,e,n){return t._d["set"+(t._isUTC?"UTC":"")+e](n)}
function C (line 351) | function C(t,e){var n;if("object"==("undefined"==typeof t?"undefined":_t...
function G (line 351) | function G(t,e,n){var i=""+Math.abs(t),r=e-i.length,s=t>=0;return(s?n?"+...
function F (line 351) | function F(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return thi...
function P (line 351) | function P(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.repl...
function x (line 351) | function x(t){var e,n,i=t.match(zn);for(e=0,n=i.length;n>e;e++)jn[i[e]]?...
function H (line 351) | function H(t,e){return t.isValid()?(e=L(e,t.localeData()),Zn[e]=Zn[e]||x...
function L (line 351) | function L(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(...
function I (line 351) | function I(t){return"function"==typeof t&&"[object Function]"===Object.p...
function A (line 351) | function A(t,e,n){ri[t]=I(e)?e:function(t){return t&&n?n:e}}
function z (line 351) | function z(t,e){return s(ri,t)?ri[t](e._strict,e._locale):new RegExp(N(t))}
function N (line 351) | function N(t){return t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[...
function Z (line 351) | function Z(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),"number"==type...
function j (line 351) | function j(t,e){Z(t,function(t,n,i,r){i._w=i._w||{},e(t,i._w,i,r)})}
function E (line 351) | function E(t,e,n){null!=e&&s(si,t)&&si[t](e,n._a,n,t)}
function V (line 351) | function V(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}
function q (line 351) | function q(t){return this._months[t.month()]}
function J (line 351) | function J(t){return this._monthsShort[t.month()]}
function $ (line 351) | function $(t,e,n){var i,r,s;for(this._monthsParse||(this._monthsParse=[]...
function R (line 351) | function R(t,e){var n;return"string"==typeof e&&(e=t.localeData().months...
function B (line 351) | function B(e){return null!=e?(R(this,e),t.updateOffset(this,!0),this):U(...
function Q (line 351) | function Q(){return V(this.year(),this.month())}
function X (line 351) | function X(t){var e,n=t._a;return n&&-2===d(t).overflow&&(e=n[ai]<0||n[a...
function K (line 351) | function K(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof co...
function tt (line 351) | function tt(t,e){var n=!0;return o(function(){return n&&(K(t+"\n"+(new E...
function et (line 351) | function et(t,e){_i[t]||(K(e),_i[t]=!0)}
function nt (line 351) | function nt(t){var e,n,i=t._i,r=yi.exec(i);if(r){for(d(t).iso=!0,e=0,n=p...
function it (line 351) | function it(e){var n=vi.exec(e._i);return null!==n?void(e._d=new Date(+n...
function rt (line 351) | function rt(t,e,n,i,r,s,o){var a=new Date(t,e,n,i,r,s,o);return 1970>t&&...
function st (line 351) | function st(t){var e=new Date(Date.UTC.apply(null,arguments));return 197...
function ot (line 351) | function ot(t){return at(t)?366:365}
function at (line 351) | function at(t){return t%4===0&&t%100!==0||t%400===0}
function ut (line 351) | function ut(){return at(this.year())}
function dt (line 351) | function dt(t,e,n){var i,r=n-e,s=n-t.day();return s>r&&(s-=7),r-7>s&&(s+...
function lt (line 351) | function lt(t){return dt(t,this._week.dow,this._week.doy).week}
function ct (line 351) | function ct(){return this._week.dow}
function ft (line 351) | function ft(){return this._week.doy}
function ht (line 351) | function ht(t){var e=this.localeData().week(this);return null==t?e:this....
function mt (line 351) | function mt(t){var e=dt(this,1,4).week;return null==t?e:this.add(7*(t-e)...
function _t (line 351) | function _t(t,e,n,i,r){var s,o=6+r-i,a=st(t,0,1+o),u=a.getUTCDay();retur...
function yt (line 351) | function yt(t){var e=Math.round((this.clone().startOf("day")-this.clone(...
function pt (line 351) | function pt(t,e,n){return null!=t?t:null!=e?e:n}
function gt (line 351) | function gt(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.get...
function vt (line 351) | function vt(t){var e,n,i,r,s=[];if(!t._d){for(i=gt(t),t._w&&null==t._a[u...
function Dt (line 351) | function Dt(t){var e,n,i,r,s,o,a;e=t._w,null!=e.GG||null!=e.W||null!=e.E...
function Mt (line 351) | function Mt(e){if(e._f===t.ISO_8601)return void nt(e);e._a=[],d(e).empty...
function Yt (line 351) | function Yt(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridie...
function wt (line 351) | function wt(t){var e,n,i,r,s;if(0===t._f.length)return d(t).invalidForma...
function St (line 351) | function St(t){if(!t._d){var e=b(t._i);t._a=[e.year,e.month,e.day||e.dat...
function kt (line 351) | function kt(t){var e=new h(X(Tt(t)));return e._nextDay&&(e.add(1,"d"),e....
function Tt (line 351) | function Tt(t){var e=t._i,r=t._f;return t._locale=t._locale||S(t._l),nul...
function bt (line 351) | function bt(e){var s=e._i;void 0===s?e._d=new Date:i(s)?e._d=new Date(+s...
function Ot (line 351) | function Ot(t,e,n,i,r){var s={};return"boolean"==typeof n&&(i=n,n=void 0...
function Ut (line 351) | function Ut(t,e,n,i){return Ot(t,e,n,i,!1)}
function Wt (line 351) | function Wt(t,e){var i,r;if(1===e.length&&n(e[0])&&(e=e[0]),!e.length)re...
function Ct (line 351) | function Ct(){var t=[].slice.call(arguments,0);return Wt("isBefore",t)}
function Gt (line 351) | function Gt(){var t=[].slice.call(arguments,0);return Wt("isAfter",t)}
function Ft (line 351) | function Ft(t){var e=b(t),n=e.year||0,i=e.quarter||0,r=e.month||0,s=e.we...
function Pt (line 351) | function Pt(t){return t instanceof Ft}
function xt (line 351) | function xt(t,e){F(t,0,0,function(){var t=this.utcOffset(),n="+";return ...
function Ht (line 351) | function Ht(t){var e=(t||"").match(ei)||[],n=e[e.length-1]||[],i=(n+"")....
function Lt (line 351) | function Lt(e,n){var r,s;return n._isUTC?(r=n.clone(),s=(m(e)||i(e)?+e:+...
function It (line 351) | function It(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}
function At (line 351) | function At(e,n){var i,r=this._offset||0;return null!=e?("string"==typeo...
function zt (line 351) | function zt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffs...
function Nt (line 351) | function Nt(t){return this.utcOffset(0,t)}
function Zt (line 351) | function Zt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t...
function jt (line 351) | function jt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeo...
function Et (line 351) | function Et(t){return t=t?Ut(t).utcOffset():0,(this.utcOffset()-t)%60===0}
function Vt (line 351) | function Vt(){return this.utcOffset()>this.clone().month(0).utcOffset()|...
function qt (line 351) | function qt(){if("undefined"!=typeof this._isDSTShifted)return this._isD...
function Jt (line 351) | function Jt(){return!this._isUTC}
function $t (line 351) | function $t(){return this._isUTC}
function Rt (line 351) | function Rt(){return this._isUTC&&0===this._offset}
function Bt (line 351) | function Bt(t,e){var n,i,r,o=t,a=null;return Pt(t)?o={ms:t._milliseconds...
function Qt (line 351) | function Qt(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)...
function Xt (line 351) | function Xt(t,e){var n={milliseconds:0,months:0};return n.months=e.month...
function Kt (line 351) | function Kt(t,e){var n;return e=Lt(e,t),t.isBefore(e)?n=Xt(t,e):(n=Xt(e,...
function te (line 351) | function te(t,e){return function(n,i){var r,s;return null===i||isNaN(+i)...
function ee (line 351) | function ee(e,n,i,r){var s=n._milliseconds,o=n._days,a=n._months;r=null=...
function ne (line 351) | function ne(t,e){var n=t||Ut(),i=Lt(n,this).startOf("day"),r=this.diff(i...
function ie (line 351) | function ie(){return new h(this)}
function re (line 351) | function re(t,e){var n;return e=T("undefined"!=typeof e?e:"millisecond")...
function se (line 351) | function se(t,e){var n;return e=T("undefined"!=typeof e?e:"millisecond")...
function oe (line 351) | function oe(t,e,n){return this.isAfter(t,n)&&this.isBefore(e,n)}
function ae (line 351) | function ae(t,e){var n;return e=T(e||"millisecond"),"millisecond"===e?(t...
function ue (line 351) | function ue(t,e,n){var i,r,s=Lt(t,this),o=6e4*(s.utcOffset()-this.utcOff...
function de (line 351) | function de(t,e){var n,i,r=12*(e.year()-t.year())+(e.month()-t.month()),...
function le (line 351) | function le(){return this.clone().locale("en").format("ddd MMM DD YYYY H...
function ce (line 351) | function ce(){var t=this.clone().utc();return 0<t.year()&&t.year()<=9999...
function fe (line 351) | function fe(e){var n=H(this,e||t.defaultFormat);return this.localeData()...
function he (line 351) | function he(t,e){return this.isValid()?Bt({to:this,from:t}).locale(this....
function me (line 351) | function me(t){return this.from(Ut(),t)}
function _e (line 351) | function _e(t,e){return this.isValid()?Bt({from:this,to:t}).locale(this....
function ye (line 351) | function ye(t){return this.to(Ut(),t)}
function pe (line 351) | function pe(t){var e;return void 0===t?this._locale._abbr:(e=S(t),null!=...
function ge (line 351) | function ge(){return this._locale}
function ve (line 351) | function ve(t){switch(t=T(t)){case"year":this.month(0);case"quarter":cas...
function De (line 351) | function De(t){return t=T(t),void 0===t||"millisecond"===t?this:this.sta...
function Me (line 351) | function Me(){return+this._d-6e4*(this._offset||0)}
function Ye (line 351) | function Ye(){return Math.floor(+this/1e3)}
function we (line 351) | function we(){return this._offset?new Date(+this):this._d}
function Se (line 351) | function Se(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.m...
function ke (line 351) | function ke(){var t=this;return{years:t.year(),months:t.month(),date:t.d...
function Te (line 351) | function Te(){return l(this)}
function be (line 351) | function be(){return o({},d(this))}
function Oe (line 351) | function Oe(){return d(this).overflow}
function Ue (line 351) | function Ue(t,e){F(0,[t,t.length],0,e)}
function We (line 351) | function We(t,e,n){return dt(Ut([t,11,31+e-n]),e,n).week}
function Ce (line 351) | function Ce(t){var e=dt(this,this.localeData()._week.dow,this.localeData...
function Ge (line 351) | function Ge(t){var e=dt(this,1,4).year;return null==t?e:this.add(t-e,"y")}
function Fe (line 351) | function Fe(){return We(this.year(),1,4)}
function Pe (line 351) | function Pe(){var t=this.localeData()._week;return We(this.year(),t.dow,...
function xe (line 351) | function xe(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3...
function He (line 351) | function He(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(...
function Le (line 351) | function Le(t){return this._weekdays[t.day()]}
function Ie (line 351) | function Ie(t){return this._weekdaysShort[t.day()]}
function Ae (line 351) | function Ae(t){return this._weekdaysMin[t.day()]}
function ze (line 351) | function ze(t){var e,n,i;for(this._weekdaysParse=this._weekdaysParse||[]...
function Ne (line 351) | function Ne(t){var e=this._isUTC?this._d.getUTCDay():this._d.getDay();re...
function Ze (line 351) | function Ze(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return...
function je (line 351) | function je(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)}
function Ee (line 351) | function Ee(t,e){F(t,0,0,function(){return this.localeData().meridiem(th...
function Ve (line 351) | function Ve(t,e){return e._meridiemParse}
function qe (line 351) | function qe(t){return"p"===(t+"").toLowerCase().charAt(0)}
function Je (line 351) | function Je(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}
function $e (line 351) | function $e(t,e){e[fi]=y(1e3*("0."+t))}
function Re (line 351) | function Re(){return this._isUTC?"UTC":""}
function Be (line 351) | function Be(){return this._isUTC?"Coordinated Universal Time":""}
function Qe (line 351) | function Qe(t){return Ut(1e3*t)}
function Xe (line 351) | function Xe(){return Ut.apply(null,arguments).parseZone()}
function Ke (line 351) | function Ke(t,e,n){var i=this._calendar[t];return"function"==typeof i?i....
function tn (line 351) | function tn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.to...
function en (line 351) | function en(){return this._invalidDate}
function nn (line 351) | function nn(t){return this._ordinal.replace("%d",t)}
function rn (line 351) | function rn(t){return t}
function sn (line 351) | function sn(t,e,n,i){var r=this._relativeTime[n];return"function"==typeo...
function on (line 351) | function on(t,e){var n=this._relativeTime[t>0?"future":"past"];return"fu...
function an (line 351) | function an(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:...
function un (line 351) | function un(t,e,n,i){var r=S(),s=a().set(i,e);return r[n](s,t)}
function dn (line 351) | function dn(t,e,n,i,r){if("number"==typeof t&&(e=t,t=void 0),t=t||"",nul...
function ln (line 351) | function ln(t,e){return dn(t,e,"months",12,"month")}
function cn (line 351) | function cn(t,e){return dn(t,e,"monthsShort",12,"month")}
function fn (line 351) | function fn(t,e){return dn(t,e,"weekdays",7,"day")}
function hn (line 351) | function hn(t,e){return dn(t,e,"weekdaysShort",7,"day")}
function mn (line 351) | function mn(t,e){return dn(t,e,"weekdaysMin",7,"day")}
function _n (line 351) | function _n(){var t=this._data;return this._milliseconds=Ri(this._millis...
function yn (line 351) | function yn(t,e,n,i){var r=Bt(e,n);return t._milliseconds+=i*r._millisec...
function pn (line 351) | function pn(t,e){return yn(this,t,e,1)}
function gn (line 351) | function gn(t,e){return yn(this,t,e,-1)}
function vn (line 351) | function vn(t){return 0>t?Math.floor(t):Math.ceil(t)}
function Dn (line 351) | function Dn(){var t,e,n,i,r,s=this._milliseconds,o=this._days,a=this._mo...
function Mn (line 351) | function Mn(t){return 4800*t/146097}
function Yn (line 351) | function Yn(t){return 146097*t/4800}
function wn (line 351) | function wn(t){var e,n,i=this._milliseconds;if(t=T(t),"month"===t||"year...
function Sn (line 351) | function Sn(){return this._milliseconds+864e5*this._days+this._months%12...
function kn (line 351) | function kn(t){return function(){return this.as(t)}}
function Tn (line 351) | function Tn(t){return t=T(t),this[t+"s"]()}
function bn (line 351) | function bn(t){return function(){return this._data[t]}}
function On (line 351) | function On(){return _(this.days()/7)}
function Un (line 351) | function Un(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}
function Wn (line 351) | function Wn(t,e,n){var i=Bt(t).abs(),r=cr(i.as("s")),s=cr(i.as("m")),o=c...
function Cn (line 351) | function Cn(t,e){return void 0===fr[t]?!1:void 0===e?fr[t]:(fr[t]=e,!0)}
function Gn (line 351) | function Gn(t){var e=this.localeData(),n=Wn(this,!t,e);return t&&(n=e.pa...
function Fn (line 351) | function Fn(){var t,e,n,i=hr(this._milliseconds)/1e3,r=hr(this._days),s=...
function t (line 357) | function t(e,t){var n=e.split("_");return t%10===1&&t%100!==11?n[0]:t%10...
function n (line 357) | function n(e,n,_){var i={mm:n?"минута_минуты_минут":"минуту_минуты_минут...
function _ (line 357) | function _(e,t){var n={nominative:"январь_февраль_март_апрель_май_июнь_и...
function i (line 357) | function i(e,t){var n={nominative:"янв_фев_март_апр_май_июнь_июль_авг_се...
function d (line 357) | function d(e,t){var n={nominative:"воскресенье_понедельник_вторник_среда...
function e (line 406) | function e(e,o,t){function r(e,o){var t={facebook:"fbsharing",twitter:"t...
function o (line 406) | function o(e){return""!==e&&angular.isDefined(e)}
function t (line 406) | function t(){var e=LJ.Cookie.get(a);try{return angular.fromJson(e)}catch...
function r (line 406) | function r(e){LJ.Cookie.setGlobal(a,angular.toJson(e),{expires:s})}
function n (line 406) | function n(e,n,i,a,s,l){function u(o){e.$watch(function(){return c[o]},f...
function i (line 406) | function i(e,r,i){function a(n,a,s,l){var u=o(n.showLater),c=t()||{},d=L...
function LJShareButtonCtrl (line 418) | function LJShareButtonCtrl(t,e){var r=this;r.reposted=!1,r.loading=!0,e....
function ljShareButtonDirective (line 418) | function ljShareButtonDirective(){return{controller:LJShareButtonCtrl,co...
function t (line 431) | function t(t,e,n,i,o,r){var u=function(){var t=arguments.length<=0||void...
function e (line 431) | function e(t){var e={};return e.getPositionData=function(){var e=argumen...
function n (line 431) | function n(t,e,n,i,o,r,u,l,p){var s=this;s.suggestions=[],s.selectedHint...
function i (line 431) | function i(){return{controller:"inputHintCtrl",controllerAs:"widget",tem...
function e (line 436) | function e(e,r,i){if(!o)throw new Error("textarea-caret-position#getCare...
function t (line 444) | function t(t,e,n){var r={};return r.doStandardTextareaMount=function(r){...
function t (line 452) | function t(t,n,e,r){var a={};a.doStandardTextareaMount=function(){var t=...
function t (line 471) | function t(t){function e(t,e,n,a){var r=this,c=[],i=e[0].hasAttribute("n...
function _toConsumableArray (line 476) | function _toConsumableArray(t){if(Array.isArray(t)){for(var e=0,n=Array(...
function t (line 484) | function t(){return{restrict:"A",templateUrl:"anonSuggestion.ng.tmpl",sc...
function e (line 484) | function e(t,e){function n(t){var e=arguments.length<=1||void 0===argume...
function service (line 489) | function service(e,t,n,o){var i={},r=!1,l=function(e){var t=arguments.le...
function pollController (line 489) | function pollController(e,t,n,o,i,r,l,a,s,c){var u=this,p=o;u.selections...
function participantsController (line 489) | function participantsController(e,t,n,o){var i=this,r=e;i.isVisible=!0,i...
function confirmController (line 489) | function confirmController(e,t,n,o){var i=this;i.isVisible=!0;var r=o.fi...
function pollDirective (line 489) | function pollDirective(){return{scope:!0,controller:"ljPollCtrl",control...
function participantsDirective (line 489) | function participantsDirective(){return{link:function(e){},controller:"l...
function confirmDirective (line 489) | function confirmDirective(){return{controller:"ljPollConfirmCtrl",contro...
function e (line 489) | function e(e,t){var n=[],o=!0,i=!1,r=void 0;try{for(var l,a=e[Symbol.ite...
function _toConsumableArray (line 527) | function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,r=Array(...
function _toConsumableArray (line 536) | function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,n=Array(...
function r (line 559) | function r(){p&&(o(),i(),l(),LJ.Support.isMobile()&&u())}
function o (line 559) | function o(){0===h&&(h=parseInt(a.css("top"),10),w=f.height(),m=h-w),J=d...
function i (line 559) | function i(){if(p!==!1){var t={},a=e(window).scrollTop(),r="vertical",o=...
function s (line 559) | function s(){o(),i(),n.$apply()}
function l (line 559) | function l(){g.children().length&&c(g)}
function c (line 559) | function c(){--y<0||(0===g.height()?t(c,C):(o(),i()))}
function u (line 559) | function u(){if(!(--b<0)){var e=angular.element(".b-smartappbanner"),n=e...
function r (line 559) | function r(){var t=f.css("top"),n=2*parseFloat(t);b=e(window).width()-n,...
function o (line 559) | function o(){var e=arguments.length<=0||void 0===arguments[0]?{}:argumen...
function i (line 559) | function i(){var t=e(this),n=t[0],a=t.width(),r=n.naturalWidth,i=(n.natu...
function s (line 559) | function s(t){u.attr("src",e(t).attr("src")),e("body").addClass(v);var n...
function a (line 559) | function a(){var t=r[0].clientWidth;i>=t?r.map(function(){e(this)[0].cla...
function _textSpan (line 564) | function _textSpan(){return _textElements("span",arguments)}
function _textDiv (line 564) | function _textDiv(){return _textElements("div",arguments)}
function _textElements (line 564) | function _textElements(t,e){for(var n=[],r=0;r<e.length;r++){var u=docum...
function changeOpac (line 569) | function changeOpac(e,t){var i=$(e);if(i&&i.style){var s=i.style;s&&(IPP...
function e (line 599) | function e(e,t){jQuery("<div>"+t+"</div>").find("img").each(function(){e...
function t (line 599) | function t(e){g.close()}
function e (line 612) | function e(e){var t=-1!==e[0].type.indexOf("image"),n=e[0].size/1e6>=LJ....
function t (line 612) | function t(t){var n=t.clipboardData||t.nativeEvent.clipboardData;if(n.fi...
function n (line 612) | function n(){var e=document.querySelector(".b-loginform form").getAttrib...
function array (line 623) | function array(t){for(i=0;i<t;i++)this[i]=0;this.length=t}
function integer (line 623) | function integer(t){return t%4294967296}
function shr (line 623) | function shr(t,e){return t=integer(t),e=integer(e),t-2147483648>=0?(t%=2...
function shl1 (line 623) | function shl1(t){return t%=2147483648,t&!0?(t-=1073741824,t*=2,t+=214748...
function shl (line 623) | function shl(t,e){t=integer(t),e=integer(e);for(var n=0;e>n;n++)t=shl1(t...
function and (line 623) | function and(t,e){t=integer(t),e=integer(e);var n=t-2147483648,r=e-21474...
function or (line 623) | function or(t,e){t=integer(t),e=integer(e);var n=t-2147483648,r=e-214748...
function xor (line 623) | function xor(t,e){t=integer(t),e=integer(e);var n=t-2147483648,r=e-21474...
function not (line 623) | function not(t){return t=integer(t),4294967295-t}
function F (line 623) | function F(t,e,n){return or(and(t,e),and(not(t),n))}
function G (line 623) | function G(t,e,n){return or(and(t,n),and(e,not(n)))}
function H (line 623) | function H(t,e,n){return xor(xor(t,e),n)}
function I (line 623) | function I(t,e,n){return xor(e,or(t,not(n)))}
function rotateLeft (line 623) | function rotateLeft(t,e){return or(shl(t,e),shr(t,32-e))}
function FF (line 623) | function FF(t,e,n,r,i,o,a){return t=t+F(e,n,r)+i+a,t=rotateLeft(t,o),t+=e}
function GG (line 623) | function GG(t,e,n,r,i,o,a){return t=t+G(e,n,r)+i+a,t=rotateLeft(t,o),t+=e}
function HH (line 623) | function HH(t,e,n,r,i,o,a){return t=t+H(e,n,r)+i+a,t=rotateLeft(t,o),t+=e}
function II (line 623) | function II(t,e,n,r,i,o,a){return t=t+I(e,n,r)+i+a,t=rotateLeft(t,o),t+=e}
function transform (line 623) | function transform(t,e){var n=0,r=0,o=0,a=0,u=transformBuffer;for(n=stat...
function init (line 623) | function init(){for(count[0]=count[1]=0,state[0]=1732584193,state[1]=402...
function update (line 623) | function update(t){var e;e=and(shr(count[0],3),63),count[0]<4294967288?c...
function finish (line 623) | function finish(){var t,e=new array(8),n=0,r=0,i=0;for(n=0;4>n;n++)e[n]=...
function hexa (line 623) | function hexa(t){var e="0123456789abcdef",n="",r=t;for(hexa_i=0;hexa_i<8...
function MD5 (line 623) | function MD5(t){var e,n,r,o,a,u,S;for(init(),r=0;r<t.length;r++)e=t.char...
function teste (line 623) | function teste(){testOk||(document.test.o1.value=MD5(document.test.i1.va...
function t (line 633) | function t(t){for(var n,r=t+1;r<e.length;++r){if(n=e[r].state,"expanded"...
function setStyle (line 639) | function setStyle(e,t,n){if(document.getElementById){var o=document.getE...
function setInner (line 639) | function setInner(e,t){if(document.getElementById){var n=document.getEle...
function hideElement (line 639) | function hideElement(e){if(document.getElementById){var t=document.getEl...
function setAttr (line 639) | function setAttr(e,t,n){if(document.getElementById){var o=document.getEl...
function multiformSubmit (line 639) | function multiformSubmit(e,t){var n=e.mode.value;if(!n)return alert(t.no...
function getLocalizedStr (line 639) | function getLocalizedStr(e,t){return LJ.ml(e,t)}
function hsv_to_rgb (line 639) | function hsv_to_rgb(e,t,n){if(0===t)return n*=255,[n,n,n];e*=6;var o=Mat...
function deleteComment (line 639) | function deleteComment(e,t){t=t||"delete";var n,o,r,i,a=""!==Site.curren...
function removeComment (line 639) | function removeComment(e,t){if("iframe"!==LiveJournal.CommentManager.get...
function createDeleteFunction (line 639) | function createDeleteFunction(e,t,n){return n=n||"delete",function(o){o=...
function poofAt (line 639) | function poofAt(e){var t=document.createElement("div");t.style.position=...
function updateLink (line 639) | function updateLink(e,t,n){e.href=t.newurl;var o=window["userhook_"+t.mo...
function createModerationFunction (line 639) | function createModerationFunction(control,dItemid,action){action=action|...
function removeEmptyMarkup (line 639) | function removeEmptyMarkup(e){jQuery("#ljcmt"+e).remove()}
function LJ_Mul (line 639) | function LJ_Mul(e,t){return parseInt(e,10)*parseInt(t,10)}
function LJ_JoinURL (line 639) | function LJ_JoinURL(e){var t=[].slice.call(arguments,1).join("&");return...
function LJ_Concat (line 639) | function LJ_Concat(){return[].slice.call(arguments,0).join("")}
function i (line 663) | function i(){this._friends=[],this._visibleArr=[],this._needRebuild=!0}
function t (line 663) | function t(e){if(!(0>=e)){var i=s(e);if(!i)return 1===e?c.itemList("empt...
function s (line 663) | function s(e){var i,t;if(0===u.perPage?(i=0,t=p.getVisibleLength()):(i=(...
function n (line 663) | function n(){if(0!==u.perPage){var e=Math.ceil(p.getVisibleLength()/u.pe...
function r (line 663) | function r(){t(d)}
function a (line 663) | function a(){el.firstLink.mousedown(function(e){t(1),e.preventDefault()}...
function l (line 663) | function l(e){p.filterFriends(e),t(d)}
function e (line 668) | function e(e,t){return String.fromCharCode(t)}
function e (line 668) | function e(e){t=e["core.util"]||{}}
function e (line 668) | function e(e){return this[e]}
function i (line 668) | function i(t){return r.call(this,t,e)}
function a (line 668) | function a(e){return 10>e?"0"+e:e}
function b (line 668) | function b(e){var t,n,i;switch(t=/[\"\\\x00-\x1f\x7f-\x9f]/g,"undefined"...
function e (line 668) | function e(e,t){n>e||!i||(2===e&&i.warn?i.warn(t):3===e&&i.error?i.error...
function e (line 668) | function e(t,n){for(var i in n)n.hasOwnProperty(i)&&("object"===_typeof(...
function t (line 668) | function t(){var e=document.scripts||document.getElementsByTagName("scri...
function n (line 668) | function n(e){var t="";if(3==e.nodeType||4==e.nodeType)t=e.nodeValue;els...
function i (line 668) | function i(i){var r=t();if(r){var s;r=n(r);try{s=new Function("return ("...
function r (line 668) | function r(e){for(var t in s)if(s.hasOwnProperty(t))for(var n=s[t],i=0,r...
function a (line 668) | function a(){var e;if("undefined"!=typeof shindig&&shindig.xhrwrapper&&s...
function b (line 668) | function b(e,t){if(4!==e.readyState)return!0;try{if(200!==e.status){var ...
function c (line 668) | function c(t,n,i,r){b(r,n)||n(e(i,{body:r.responseText}))}
function d (line 668) | function d(j,m,l,o){if(!b(o,m)){o=o.responseText;var r=o.indexOf(k)+k.le...
function e (line 668) | function e(e,t){var n={text:t.body,rc:t.rc||200,headers:t.headers,oauthA...
function f (line 668) | function f(e,t,n,i,r,s,o,d){var g=a();if(0==t.indexOf("//")&&(t=document...
function e (line 668) | function e(e,t,n){"undefined"!=typeof window.addEventListener?window.add...
function t (line 668) | function t(e){var t=gadgets.json.parse(e.data);if(t&&t.f){var i=gadgets....
function e (line 668) | function e(){var o=a[".."];if(!o)if(++s>i)gadgets.warn("Nix transport se...
function e (line 668) | function e(e,t){if(!C[e]){var n=x;t||(n=D),C[e]=n;for(var i=S[e]||[],r=0...
function t (line 668) | function t(){function e(){k=!0}j||("undefined"!=typeof window.addEventLi...
function n (line 668) | function n(e,n,i,r,a){v[n]&&v[n]===i||(gadgets.error("Invalid auth token...
function i (line 668) | function i(t,n){if(t&&"string"==typeof t.s&&"string"==typeof t.f&&t.a in...
function r (line 668) | function r(e){if(!e)return"";e=e.toLowerCase(),0==e.indexOf("//")&&(e=wi...
function a (line 668) | function a(e){if("/"==e.charAt(0)){var t=e.indexOf("|"),n=t>0?e.substrin...
function s (line 668) | function s(e){if("undefined"==typeof e||".."===e)return window.parent;va...
function o (line 668) | function o(e,t){if(w[e]!==!0){"undefined"==typeof w[e]&&(w[e]=0);var n=s...
function d (line 668) | function d(e){return(e=y[e])&&"/"===e.substring(0,1)&&(e="/"===e.substri...
function g (line 668) | function g(e,t,n){/http(s)?:\/\/.+/.test(t)||(0==t.indexOf("//")?t=windo...
function c (line 668) | function c(e,t){t=t||"",v[e]=String(t),o(e,t)}
function u (line 668) | function u(e){e=(e.passReferrer||"").split(":",2),R=e[0]||"none",O=e[1]|...
function p (line 668) | function p(t){"true"===String(t.useLegacyProtocol)&&(x=gadgets.rpctx.ifp...
function l (line 668) | function l(e,t){function n(n){n=n?n.rpc:{},u(n);var i=n.parentRelayUrl||...
function h (line 668) | function h(e,t,n){if(".."===e)l(n||T.rpctoken||T.ifpctok||"",t);else e:{...
function e (line 668) | function e(e){return function(){U(e+": call ignored")}}
function e (line 668) | function e(e){e||(e=window.event);var t;return e.target?t=e.target:e.src...
function n (line 668) | function n(e,n){return t.hasOwnProperty(e)?t[e]:n}
function i (line 668) | function i(e){if(!(s=e.match(c)))throw Error("Invalid variable : "+e)}
function r (line 668) | function r(e,t,r){var a=e.split(",");for(e=0;e<a.length&&(i(a[e]),!r(t,n...
function t (line 669) | function t(){}
function e (line 669) | function e(e){var t=null;return t={},t.frameId=e,t}
function t (line 669) | function t(t,n){if(i&&(n.responseCode="PAYMENT_PROCESSOR_ALREADY_OPENED"...
function n (line 669) | function n(t,n){var s={payments:{}};if(i&&(s.responseCode="PAYMENT_PROCE...
function e (line 669) | function e(){var e=r.getParam("frameId");return e=shindig.container.gadg...
function t (line 669) | function t(){var t=r.getParam("payment.stoken"),i=e();r.setParam("paymen...
function n (line 669) | function n(e){var t=e.responseCode||e.status;r.setParam("payment.respons...
function i (line 669) | function i(){var t=r.getParam("reqParams.stoken"),n=e();r.setParam("reqP...
function e (line 669) | function e(e,t,i){e={POST_DATA:gadgets.json.stringify(e),CONTENT_TYPE:"J...
function t (line 669) | function t(t){var i=t["osapi.services"];if(n=t["osapi.useOAuth2"],i)for(...
FILE: F0:F030,F042,F072/Socket_fans/knots/piecevise_files/a_data/a.js
function e (line 2) | function e(e){var t="LJ.CrossStorage"===e.data.source;if(!t)return null;...
function t (line 2) | function t(){try{return window.self!==window.top}catch(e){return!0}}
FILE: F0:F030,F042,F072/Socket_fans/knots/piecevise_files/top100.js
function n (line 1) | function n(a){return void 0!==a}
function p (line 1) | function p(){}
function aa (line 1) | function aa(a){a.B=function(){return a.vb?a.vb:a.vb=new a}}
function ba (line 2) | function ba(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array...
function q (line 3) | function q(a){return"array"==ba(a)}
function ca (line 3) | function ca(a){var b=ba(a);return"array"==b||"object"==b&&"number"==type...
function t (line 3) | function t(a){return"string"==typeof a}
function u (line 3) | function u(a){return"function"==ba(a)}
function fa (line 3) | function fa(a,b,c){return a.call.apply(a.bind,arguments)}
function ga (line 4) | function ga(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Arra...
function v (line 4) | function v(a,b,c){v=Function.prototype.bind&&-1!=Function.prototype.bind...
function x (line 5) | function x(a,b){function c(){}c.prototype=b.prototype;a.yc=b.prototype;a...
function ia (line 5) | function ia(){}
function ja (line 5) | function ja(){this.b=this.a=void 0}
function la (line 5) | function la(a){a.b&&(k.clearTimeout(a.b),a.b=null)}
function ma (line 5) | function ma(a){a.a.src="";a.a.onload=function(){};a.a.onabort=function()...
function z (line 10) | function z(){var a=void 0;na?a={$:!0,vc:!0}:a=!0;return a}
function c (line 10) | function c(){e=k.setTimeout(d,1E3);a.apply(null,l)}
function d (line 10) | function d(){e=null;g&&(g=!1,c())}
function ra (line 10) | function ra(a,b){this.b=a;this.a=b}
function sa (line 10) | function sa(a,b){this.c=a;this.f=b||ta;this.b=!1;this.a=void 0}
function ua (line 10) | function ua(a){a.a=k.setTimeout(v(a.g,a),a.f)}
function va (line 10) | function va(a){a.a&&(k.clearTimeout(a.a),a.a=null)}
function wa (line 10) | function wa(a,b){this.a=a;this.I=b}
function A (line 10) | function A(){this.c=this.b=0;this.a=[]}
function xa (line 11) | function xa(a,b,c){this.f=c;this.c=a;this.g=b;this.b=0;this.a=null}
function ya (line 11) | function ya(a,b){a.g(b);a.b<a.f&&(a.b++,b.next=a.a,a.a=b)}
function C (line 11) | function C(a){if(Error.captureStackTrace)Error.captureStackTrace(this,C)...
function za (line 11) | function za(a,b,c,d,e){this.reset(a,b,c,d,e)}
function Ba (line 11) | function Ba(){0!=Ca&&(this[da]||(this[da]=++ea));this.H=this.H;this.Ia=t...
function Da (line 11) | function Da(a,b){this.type=a;this.a=this.target=b}
function Ga (line 11) | function Ga(a,b,c,d,e){this.listener=a;this.a=null;this.src=b;this.type=...
function Ha (line 11) | function Ha(a){a.da=!0;a.listener=null;a.a=null;a.src=null;a.za=null}
function Ja (line 11) | function Ja(a){var b=[];Ka(new La,a,b);return b.join("")}
function La (line 11) | function La(){}
function Ka (line 12) | function Ka(a,b,c){if(null==b)c.push("null");else{if("object"==typeof b)...
function Ma (line 14) | function Ma(a,b){b.push('"',a.replace(Oa,function(a){var b=Na[a];b||(b="...
function Pa (line 14) | function Pa(a,b){for(var c in a)b.call(void 0,a[c],c,a)}
function Qa (line 14) | function Qa(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}
function Ra (line 14) | function Ra(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}
function Sa (line 14) | function Sa(a){return null!==a&&"withCredentials"in a}
function Ua (line 15) | function Ua(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];...
function Va (line 15) | function Va(a,b){this.b=a;this.a=b}
function Wa (line 15) | function Wa(a){a.prototype.then=a.prototype.then;a.prototype.$goog_Thena...
function Xa (line 15) | function Xa(a){if(!a)return!1;try{return!!a.$goog_Thenable}catch(b){retu...
function Ya (line 15) | function Ya(a){this.a=a}
function $a (line 17) | function $a(a){a=(a.a.cookie||"").split(Za);for(var b=[],c=[],d,e,g=0;e=...
function ab (line 17) | function ab(){}
function bb (line 17) | function bb(a){var b;(b=a.a)||(b={},cb(a)&&(b[0]=!0,b[1]=!0),b=a.a=b);re...
function db (line 17) | function db(a){db[" "](a);return a}
function eb (line 17) | function eb(a,b){for(var c=a.split("%s"),d="",e=Array.prototype.slice.ca...
function gb (line 17) | function gb(a,b){return a<b?-1:a>b?1:0}
function D (line 17) | function D(a){this.b=[];this.f=[];this.a={};this.h=this.c=0;this.g=a||!1}
function hb (line 19) | function hb(a,b){var c=String(b);a.g&&(c=c.toLowerCase());return c}
function ib (line 19) | function ib(a,b){b.unshift(a);C.call(this,eb.apply(null,b));b.shift()}
function jb (line 19) | function jb(a,b){throw new ib("Failure"+(a?": "+a:""),Array.prototype.sl...
function nb (line 21) | function nb(a,b){var c;a:{c=a.length;for(var d=t(a)?a.split(""):a,e=0;e<...
function ob (line 21) | function ob(a,b){var c=F(a,b),d;(d=0<=c)&&Array.prototype.splice.call(a,...
function pb (line 21) | function pb(a){return Array.prototype.concat.apply(Array.prototype,argum...
function qb (line 21) | function qb(a){for(var b=[],c=0;c<a;c++)b[c]=0;return b}
function rb (line 21) | function rb(){this.a=[]}
function sb (line 21) | function sb(){this.a=new rb}
function tb (line 21) | function tb(){this.b=this.a=null}
function ub (line 21) | function ub(){this.next=this.b=this.a=null}
function wb (line 21) | function wb(a){this.src=a;this.A={};this.a=0}
function xb (line 21) | function xb(a,b,c,d,e){var g=b.toString();b=a.A[g];b||(b=a.A[g]=[],a.a++...
function zb (line 22) | function zb(a,b){var c=b.type;c in a.A&&ob(a.A[c],b)&&(Ha(b),0==a.A[c].l...
function yb (line 22) | function yb(a,b,c,d){for(var e=0;e<a.length;++e){var g=a[e];if(!g.da&&g....
function Ab (line 22) | function Ab(a,b){this.a=n(a)?a:0;this.J=n(b)?b:0}
function Cb (line 22) | function Cb(){}
function Db (line 22) | function Db(a){return(a=cb(a))?new ActiveXObject(a):new XMLHttpRequest}
function cb (line 22) | function cb(a){if(!a.b&&"undefined"==typeof XMLHttpRequest&&"undefined"!...
function Eb (line 22) | function Eb(a,b){this.b={};this.a=[];this.c=0;var c=arguments.length;if(...
function Fb (line 23) | function Fb(a){if(a.c!=a.a.length){for(var b=0,c=0;b<a.a.length;){var d=...
function Gb (line 24) | function Gb(a){if(a.S&&"function"==typeof a.S)return a.S();if(t(a))retur...
function Hb (line 25) | function Hb(a,b){if(a.forEach&&"function"==typeof a.forEach)a.forEach(b,...
function Kb (line 25) | function Kb(a){a=a.match(/[\d]+/g);if(!a)return"";a.length=3;return a.jo...
function H (line 27) | function H(a){return-1!=Mb.indexOf(a)}
function Pb (line 27) | function Pb(a){k.setTimeout(function(){throw a;},0)}
function Rb (line 28) | function Rb(){var a=k.MessageChannel;"undefined"===typeof a&&"undefined"...
function Sb (line 30) | function Sb(a,b){Tb||Ub();Vb||(Tb(),Vb=!0);var c=Wb,d=vb.get();d.set(a,b...
function Ub (line 30) | function Ub(){if(k.Promise&&k.Promise.resolve){var a=k.Promise.resolve(v...
function Xb (line 31) | function Xb(){for(var a=null;a=Wb.remove();){try{a.a.call(a.b)}catch(b){...
function J (line 31) | function J(a,b){this.a=Yb;this.j=void 0;this.c=this.b=this.f=null;this.g...
function ac (line 31) | function ac(){this.next=this.context=this.b=this.c=this.a=null;this.f=!1}
function cc (line 32) | function cc(a,b,c){var d=bc.get();d.c=a;d.b=b;d.context=c;return d}
function ec (line 32) | function ec(a,b){a.b||a.a!=$b&&a.a!=K||fc(a);a.c?a.c.next=b:a.b=b;a.c=b}
function dc (line 32) | function dc(a,b,c,d){var e=cc(null,null,null);e.a=new J(function(a,l){e....
function Zb (line 33) | function Zb(a,b,c){if(a.a==Yb){a==c&&(b=K,c=new TypeError("Promise canno...
function gc (line 34) | function gc(a,b,c,d,e){function g(a){m||(m=!0,d.call(e,a))}function l(a)...
function fc (line 34) | function fc(a){a.h||(a.h=!0,Sb(a.l,a))}
function ic (line 34) | function ic(a){var b=null;a.b&&(b=a.b,a.b=b.next,b.next=null);a.b||(a.c=...
function jc (line 35) | function jc(a,b,c){b==$b?a.c.call(a.context,c):a.b&&a.b.call(a.context,c)}
function hc (line 35) | function hc(a,b){a.g=!0;Sb(function(){a.g&&kc.call(null,b)})}
function lc (line 35) | function lc(a){Ba.call(this);this.h=1;this.f=[];this.c=0;this.a=[];this....
function mc (line 35) | function mc(a,b,c,d){if(b=a.b[b]){var e=a.a;if(b=nb(b,function(a){return...
function nc (line 36) | function nc(a,b,c){Sb(function(){a.apply(b,c)})}
function tc (line 37) | function tc(){var a=k.document;return a?a.documentMode:void 0}
function M (line 39) | function M(a){var b;if(!(b=yc[a])){b=0;for(var c=fb(String(uc)).split("....
function b (line 41) | function b(){c||(c=!0,y.b.Ga=!0,a())}
function Bc (line 43) | function Bc(){this.a=[];k.setTimeout(v(function(){Cc(this)},this),0)}
function Cc (line 43) | function Cc(a){for(var b=y.b.getElementsByTagName(y.b.Kb.Ab),c=[],d=0,e=...
function Dc (line 43) | function Dc(a){this.f=a;this.b=this.c=this.a=null}
function Ec (line 43) | function Ec(a,b){this.name=a;this.value=b}
function Jc (line 43) | function Jc(a){if(a.c)return a.c;if(a.a)return Jc(a.a);jb("Root logger h...
function Mc (line 45) | function Mc(a){Lc||(Lc=new Dc(""),Kc[""]=Lc,Lc.c=Gc);var b;if(!(b=Kc[a])...
function Pc (line 45) | function Pc(a,b){Da.call(this,a?a.type:"");this.a=this.target=null;this....
function N (line 47) | function N(a,b,c,d,e){if(q(b))for(var g=0;g<b.length;g++)N(a,b[g],c,d,e)...
function Wc (line 48) | function Wc(){var a=Yc,b=Nc?function(c){return a.call(b.src,b.listener,c...
function Zc (line 48) | function Zc(a,b,c,d,e){if(q(b))for(var g=0;g<b.length;g++)Zc(a,b[g],c,d,...
function $c (line 49) | function $c(a){if("number"!=typeof a&&a&&!a.da){var b=a.src;if(b&&b[Ea])...
function Xc (line 49) | function Xc(a){return a in Rc?Rc[a]:Rc[a]="on"+a}
function ad (line 49) | function ad(a,b,c,d){var e=!0;if(a=Vc(a))if(b=a.A[b.toString()])for(b=b....
function bd (line 50) | function bd(a,b){var c=a.listener,d=a.za||a.src;a.ua&&$c(a);return c.cal...
function Yc (line 51) | function Yc(a,b){if(a.da)return!0;if(!Nc){var c;if(!(c=b))a:{c=["window"...
function Vc (line 52) | function Vc(a){a=a[Qc];return a instanceof wb?a:null}
function Tc (line 52) | function Tc(a){if(u(a))return a;a[cd]||(a[cd]=function(b){return a.handl...
function S (line 58) | function S(){this.c=new lc;this.f={}}
function dd (line 59) | function dd(a,b){var c=a.f[b];c||(c=a.f[b]={A:[],Ya:void 0});c.Ya||(c.Ya...
function ed (line 59) | function ed(a){switch(a){case "click":case "mousedown":case "tap":case "...
function fd (line 60) | function fd(a,b){return v(function(){for(var a=dd(this,b).A,d=Array(argu...
function gd (line 60) | function gd(){this.c=S.B();this.a=0;w();this.b=!0;k.setTimeout(v(this.f,...
function hd (line 60) | function hd(a){return++a.a>=jd.length?12E4:1E3*(jd[a.a]-jd[a.a-1])}
function kd (line 60) | function kd(){this.c=this.a=void 0;this.b=this.f="";this.g=void 0;var a;...
function md (line 60) | function md(){Ba.call(this);this.pa=new wb(this);this.ra=this}
function U (line 60) | function U(a,b){var c=a.ra,d=b,e=d.type||d;if(t(d))d=new Da(d,c);else if...
function Uc (line 60) | function Uc(a,b,c,d,e){xb(a.pa,String(b),c,d,e)}
function nd (line 61) | function nd(a,b,c,d){if(b=a.pa.A[String(b)]){b=b.concat();for(var e=!0,g...
function od (line 61) | function od(){this.b=S.B();this.a=void 0;this.c=Bc.B();pd(this)}
function pd (line 61) | function pd(a){a.b.addListener("mousedown",function(a){var c=a.O().butto...
function sd (line 62) | function sd(a,b){var c;for(c=b.target;c&&(!n(c.tagName)||"a"!==c.tagName...
function td (line 62) | function td(a,b){Pa(b,function(b,d){"style"==d?a.style.cssText=b:"class"...
function vd (line 63) | function vd(a){a=a.document;a="CSS1Compat"==a.compatMode?a.documentEleme...
function wd (line 63) | function wd(a){return a.parentWindow||a.defaultView}
function xd (line 63) | function xd(a){this.a=a||k.document||document}
function yd (line 65) | function yd(){this.b=new D;this.a=void 0;var a=this.b;a.K("et","pv");a.s...
function Bd (line 66) | function Bd(a,b,c,d){var e=a.b.clone(),g=b.hb&&a.Oa();d=d||b.cb||k.locat...
function Ad (line 67) | function Ad(a){if(!a.a){a.a=B.get("last_visit");for(var b=["/",k.documen...
function zd (line 68) | function zd(){var a=Lb.match(/[\d]+/g);if(!a||!a.length)return"";a.lengt...
function Cd (line 68) | function Cd(){this.a=this.c=this.b=void 0;this.g=!1;k.setTimeout(v(this....
function V (line 68) | function V(a,b){a&&a.log(Hc,b,void 0)}
function Dd (line 68) | function Dd(a,b,c){if(u(a))c&&(a=v(a,c));else if(a&&"function"==typeof a...
function Ed (line 68) | function Ed(a){md.call(this);this.Ha=new Eb;this.G=a||null;this.b=!1;thi...
function Nd (line 71) | function Nd(a){return L&&M(9)&&"number"==typeof a.timeout&&n(a.ontimeout)}
function Ld (line 71) | function Ld(a){return"content-type"==a.toLowerCase()}
function Kd (line 72) | function Kd(a,b){a.b=!1;a.a&&(a.f=!0,a.a.abort(),a.f=!1);a.g=b;Pd(a);Od(a)}
function Pd (line 72) | function Pd(a){a.V||(a.V=!0,U(a,"complete"),U(a,"error"))}
function Qd (line 74) | function Qd(a){if(a.b&&"undefined"!=typeof h)if(a.v[1]&&4==Rd(a)&&2==Sd(...
function Od (line 75) | function Od(a){if(a.a){Md(a);var b=a.a,c=a.v[0]?p:null;a.a=null;a.v=null...
function Md (line 76) | function Md(a){a.a&&a.u&&(a.a.ontimeout=null);"number"==typeof a.l&&(k.c...
function Rd (line 76) | function Rd(a){return a.a?a.a.readyState:0}
function Sd (line 76) | function Sd(a){try{return 2<Rd(a)?a.a.status:-1}catch(b){return-1}}
function W (line 76) | function W(a,b){return b+" ["+a.ga+" "+a.j+" "+Sd(a)+"]"}
function Td (line 76) | function Td(){this.a=void 0}
function Ud (line 76) | function Ud(a,b){a.a=new Ed;a.a.ja=!0;a.a.c=Math.max(0,ka);Uc(a.a,"succe...
function Vd (line 76) | function Vd(){this.a=new ja;this.c=new Td;this.b=new ia}
function ae (line 76) | function ae(){this.a=new sb;this.u=new Vd;this.h=!1;this.b=0;this.c=!1;t...
function be (line 77) | function be(){this.b=S.B();this.g=new kd;this.j=new Cd;this.h=new sa(v(t...
function de (line 79) | function de(a){a.c&&k.clearTimeout(a.c);a.c=k.setTimeout(v(function(){th...
function ee (line 80) | function ee(a,b){this.f=[];this.H=b||null;this.a=this.b=!1;this.c=void 0...
function fe (line 80) | function fe(a,b,c){a.b=!0;a.c=c;a.a=!b;ge(a)}
function he (line 80) | function he(a){if(a.b){if(!a.u)throw new ie;a.u=!1}}
function je (line 80) | function je(a,b,c){a.f.push([b,c,void 0]);a.b&&ge(a)}
function ke (line 81) | function ke(a){return mb(a.f,function(a){return u(a[1])})}
function ge (line 82) | function ge(a){if(a.g&&a.b&&ke(a)){var b=a.g,c=le[b];c&&(k.clearTimeout(...
function ie (line 83) | function ie(){C.call(this)}
function me (line 83) | function me(a){this.a=k.setTimeout(v(this.c,this),0);this.b=a}
function ne (line 83) | function ne(a){var b={},c=b.document||document,d=document.createElement(...
function se (line 84) | function se(a){var b=a.getElementsByTagName("HEAD");return b&&0!=b.lengt...
function oe (line 84) | function oe(a,b,c){null!=c&&k.clearTimeout(c);a.onload=p;a.onerror=p;a.o...
function pe (line 84) | function pe(a,b){var c="Jsloader error (code #"+a+")";b&&(c+=": "+b);C.c...
function te (line 84) | function te(){this.b={};this.a={};this.c=S.B();for(var a in ue)this.a[ue...
function we (line 84) | function we(a,b,c){a.b[b.name]||(ne(ve+b.path),a.a[b.name].push(c))}
function xe (line 84) | function xe(){this.j=this.h=this.b=this.g=void 0;this.v=ae.B();this.u=te...
function ye (line 85) | function ye(a,b){var c=ze(a,b);if(!c.ca){for(var d=0,e=a.a.length;d<e;++...
function Y (line 87) | function Y(a,b,c,d,e){a=a.v;var g={};c=c||5;if(1===c)g.type=Yd;else{var ...
function ze (line 90) | function ze(a,b){var c={},d=b.o;c.id=b.wa();c.s=b;c.element=d.P();c.w=d....
function Be (line 90) | function Be(a,b){for(var c=b.wa(),d=0,e=a.a.length;d<e;++d)if(a.a[d].id=...
function Ae (line 91) | function Ae(a,b){for(var c=0,d=a.a.length;c<d;++c)for(var e=a.a[c],g=b,l...
function Ce (line 91) | function Ce(a,b){if(a.b){var c=a.b.getBlocks(b.w,b.Ca),d=void 0;if(c)for...
function De (line 93) | function De(a,b){this.a=this.b=void 0;Ee(this);this.version="1.8.0";if(a...
function Ee (line 96) | function Ee(a){a.$a=(new Date/1E3).toString()+"-"+y.g.Ba().toString()}
function Ge (line 96) | function Ge(a,b){this.o=new De(a,b);this.a=xe.B();ye(this.a,this)}
function X (line 98) | function X(a,b){var c=a.o;b.setMeta("pid",c.T);b.setMeta("rid",c.$a);b.s...
function y (line 99) | function y(a,b){a.checkInit&&k.setTimeout(function(){y.G.oc("initKraken"...
function He (line 100) | function He(){}
FILE: F0:F030,F042,F072/Socket_fans/main.c
function sys_tick_handler (line 34) | void sys_tick_handler(void){
function main (line 79) | int main(void){
FILE: F0:F030,F042,F072/Socket_fans/monitor.c
function chkOffRelay (line 39) | static void chkOffRelay(){
function startOff (line 59) | static void startOff(){
function SetDontProcess (line 66) | void SetDontProcess(uint8_t newstate){ // set dontprocess value
function GetDontProcess (line 69) | uint8_t GetDontProcess(){ // get dontprocess value
function chkButtons (line 75) | static void chkButtons(){
function process_monitor (line 102) | void process_monitor(){
FILE: F0:F030,F042,F072/Socket_fans/proto.c
function sendbuf (line 38) | void sendbuf(){
function bufputchar (line 47) | void bufputchar(char ch){
function addtobuf (line 55) | void addtobuf(const char *txt){
function onoff (line 139) | static void onoff(char state, GPIO_TypeDef *port, uint32_t pin, char *te...
function ADCget (line 156) | static inline void ADCget(char chno){
function coolerRPS (line 169) | static inline void coolerRPS(char n){
function getPWM (line 180) | static inline void getPWM(char n){
function changePWM (line 203) | static inline void changePWM(char *str){
function buzzercmd (line 227) | static inline void buzzercmd(char cmd){
function gett (line 251) | void gett(char chno){
function chkButtons (line 260) | static inline void chkButtons(){
function showState (line 268) | void showState(){
function setArrval (line 314) | static inline void setArrval(int16_t *arr, uint8_t maxelem, char *params){
function setval (line 340) | static inline void setval(uint32_t *var, char *params){
function showSettings (line 353) | static inline void showSettings(){
function setters (line 370) | static inline void setters(char *txt){ // setters
function cmd_parser (line 413) | void cmd_parser(char *txt){
function printu (line 546) | void printu(uint32_t val){
function printi (line 561) | void printi(int32_t val){
function printuhex (line 570) | void printuhex(uint32_t val){
FILE: F0:F030,F042,F072/Socket_fans/usb.c
function EP1_Handler (line 31) | static void EP1_Handler(){
function transmit_Handler (line 41) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 48) | static void receive_Handler(){ // EP2OUT
function USB_setup (line 54) | void USB_setup(){
function usbwr (line 76) | static int usbwr(const uint8_t *buf, uint16_t l){
function send_next (line 95) | static void send_next(){
function USB_send (line 103) | void USB_send(const uint8_t *buf, uint16_t len){
function USB_sendstr (line 117) | void USB_sendstr(const char *str){
function USB_send_blk (line 125) | void USB_send_blk(const uint8_t *buf, uint16_t len){
function usb_proc (line 144) | void usb_proc(){
function USB_receive (line 171) | uint8_t USB_receive(uint8_t *buf){
FILE: F0:F030,F042,F072/Socket_fans/usb_defs.h
type USB_TypeDef (line 81) | typedef struct{
type USB_EPDATA_TypeDef (line 93) | typedef struct{
type USB_BtableDef (line 100) | typedef struct{
FILE: F0:F030,F042,F072/Socket_fans/usb_lib.c
function usb_LineCoding (line 36) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 143) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 147) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 151) | void WEAK break_handler(){
function vendor_handler (line 155) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 177) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 205) | static inline void get_descriptor(){
function std_d2h_req (line 234) | static inline void std_d2h_req(){
function std_h2d_req (line 251) | static inline void std_h2d_req(){
function EP0_Handler (line 276) | static void EP0_Handler(){
function EP_Init (line 354) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 382) | void usb_isr(){
function EP_WriteIRQ (line 436) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 454) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 466) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/Socket_fans/usb_lib.h
type USB_state (line 88) | typedef enum{
type config_pack_t (line 126) | typedef struct {
type ep_t (line 135) | typedef struct __ep_t{
type usb_dev_t (line 144) | typedef struct {
type usb_LineCoding (line 149) | typedef struct {
type usb_cdc_notification (line 164) | typedef struct {
FILE: F0:F030,F042,F072/TM1637/hardware.c
function gpio_setup (line 27) | static inline void gpio_setup(){
function i2c_setup (line 43) | static inline void i2c_setup(){
function hw_setup (line 62) | void hw_setup(){
FILE: F0:F030,F042,F072/TM1637/i2c.c
function wri2c (line 30) | static uint8_t wri2c(uint8_t byte){
function write_i2c (line 49) | uint8_t write_i2c(const uint8_t *commands, uint8_t nbytes){
function read_i2c (line 69) | uint8_t read_i2c(uint8_t command, uint8_t *data){
FILE: F0:F030,F042,F072/TM1637/main.c
function sys_tick_handler (line 28) | void sys_tick_handler(void){
function main (line 32) | int main(void){
FILE: F0:F030,F042,F072/TM1637/protocol.c
function putdata (line 46) | static void putdata(uint8_t var){
function getk (line 79) | static void getk(){
function display_number (line 90) | static uint8_t display_number(int32_t N){
function display_hex (line 111) | static uint8_t display_hex(int32_t N){
function dispnum (line 132) | static void dispnum(const char *n, uint8_t hex){
function dispabcd (line 143) | static void dispabcd(){
FILE: F0:F030,F042,F072/TM1637/usart.c
function put_char (line 39) | int put_char(char c){
function put_string (line 48) | int put_string(const char *str){
function put_int (line 59) | int put_int(int32_t N){
function put_uint (line 66) | int put_uint(uint32_t N){
function TXstatus (line 82) | TXstatus usart1_sendbuf(){
function USART1_config (line 91) | void USART1_config(){
function usart1_isr (line 132) | void usart1_isr(){
function dma1_channel2_3_isr (line 204) | void dma1_channel2_3_isr(){
function usart1_getline (line 214) | int usart1_getline(char **line){
function TXstatus (line 231) | TXstatus usart1_send(const char *str, int len){
function TXstatus (line 248) | TXstatus usart1_send_blocking(const char *str, int len){
FILE: F0:F030,F042,F072/TM1637/usart.h
type TXstatus (line 29) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/adc.c
function adc_setup (line 40) | void adc_setup(){
function getADCval (line 102) | uint16_t getADCval(int nch){
function getMCUtemp (line 123) | int32_t getMCUtemp(){
function getVdd (line 136) | uint32_t getVdd(){
function Ufromadu (line 142) | static inline uint32_t Ufromadu(uint8_t nch, uint32_t vdd){
FILE: F0:F030,F042,F072/TSYS_controller/can.c
function CAN_status (line 50) | CAN_status CAN_get_status(){
function CAN_messagebuf_push (line 58) | static int CAN_messagebuf_push(CAN_message *msg){
function CAN_message (line 69) | CAN_message *CAN_messagebuf_pop(){
function readCANID (line 81) | void readCANID(){
function CAN_setup (line 87) | void CAN_setup(uint16_t speed){
function CAN_listenall (line 155) | void CAN_listenall(){
function CAN_listenone (line 160) | void CAN_listenone(){
function can_proc (line 165) | void can_proc(){
function CAN_status (line 185) | CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){
function can_process_fifo (line 228) | static void can_process_fifo(uint8_t fifo_num){
function cec_can_isr (line 280) | void cec_can_isr(){
FILE: F0:F030,F042,F072/TSYS_controller/can.h
type CAN_message (line 44) | typedef struct{
type CAN_status (line 50) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/can_process.c
function sendmcut (line 34) | static inline void sendmcut(uint8_t *data){
function senduival (line 43) | static inline void senduival(){
function showui (line 60) | static inline void showui(char *v1, char *v2, uint8_t *data){
function can_messages_proc (line 75) | void can_messages_proc(){
function CAN_status (line 271) | static CAN_status try2send(uint8_t *buf, uint8_t len, uint16_t id){
function CAN_status (line 287) | CAN_status can_send_cmd(uint16_t targetID, uint8_t cmd){
function CAN_status (line 296) | CAN_status can_send_data(uint8_t *data, uint8_t len){
function send_temperatures (line 310) | int8_t send_temperatures(int8_t N){
FILE: F0:F030,F042,F072/TSYS_controller/can_process.h
type CAN_commands (line 33) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/hardware.c
function gpio_setup (line 29) | void gpio_setup(void){
function i2c_setup (line 57) | void i2c_setup(I2C_SPEED speed){
FILE: F0:F030,F042,F072/TSYS_controller/hardware.h
type I2C_SPEED (line 85) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/i2c.c
function write_i2c (line 51) | uint8_t write_i2c(uint8_t addr, uint8_t data){
function read_i2c (line 93) | uint8_t read_i2c(uint8_t addr, uint32_t *data, uint8_t nbytes){
FILE: F0:F030,F042,F072/TSYS_controller/main.c
function sys_tick_handler (line 43) | void sys_tick_handler(void){
function iwdg_setup (line 48) | static void iwdg_setup(){
function main (line 70) | int main(void){
FILE: F0:F030,F042,F072/TSYS_controller/proto.c
function sendbuf (line 57) | void sendbuf(){
function addtobuf (line 91) | void addtobuf(const char *txt){
function bufputchar (line 128) | void bufputchar(char ch){
function CANsend (line 140) | static void CANsend(uint16_t targetID, uint8_t cmd, char echo){
function showADCvals (line 148) | static inline void showADCvals(){
function printmcut (line 158) | static inline void printmcut(){
function showUIvals (line 169) | static inline void showUIvals(){
function setCANbrate (line 186) | static inline void setCANbrate(char *str){
function CAN_message (line 206) | static CAN_message *parseCANmsg(char *txt){
function sendCANcommand (line 246) | static void sendCANcommand(char *txt){
function cmd_parser (line 260) | void cmd_parser(char *txt, uint8_t isUSB){
function printu (line 472) | void printu(uint32_t val){
function printuhex (line 488) | void printuhex(uint32_t val){
function mesg (line 582) | void mesg(char *txt){
FILE: F0:F030,F042,F072/TSYS_controller/ringbuffer.c
function RB_datalen (line 22) | int RB_datalen(ringbuffer *b){
function RB_hasbyte (line 33) | int RB_hasbyte(ringbuffer *b, uint8_t byte){
function mcpy (line 47) | static void mcpy(uint8_t *targ, const uint8_t *src, int l){
function TRUE_INLINE (line 52) | TRUE_INLINE void incr(ringbuffer *b, volatile int *what, int n){
function RB_read (line 64) | int RB_read(ringbuffer *b, uint8_t *s, int len){
function RB_readto (line 89) | int RB_readto(ringbuffer *b, uint8_t byte, uint8_t *s, int len){
function RB_write (line 106) | int RB_write(ringbuffer *b, const uint8_t *str, int l){
function RB_clearbuf (line 121) | void RB_clearbuf(ringbuffer *b){
FILE: F0:F030,F042,F072/TSYS_controller/ringbuffer.h
type ringbuffer (line 25) | typedef struct{
FILE: F0:F030,F042,F072/TSYS_controller/sensors_manage.c
function calc_t (line 88) | static uint16_t calc_t(uint32_t t, int i){
function sensors_off (line 106) | void sensors_off(){
function sensors_on (line 116) | static int sensors_on(){
function sensors_init (line 135) | void sensors_init(){
function sensors_start (line 147) | void sensors_start(){
function count_sensors (line 170) | static void count_sensors(){
function resetproc (line 188) | static uint8_t resetproc(){
function getcoeff (line 200) | static uint8_t getcoeff(uint8_t i){
function getcoefsproc (line 220) | static uint8_t getcoefsproc(){
function msrtempproc (line 230) | static uint8_t msrtempproc(){
function gettempproc (line 256) | static uint8_t gettempproc(){
function sensors_scan (line 285) | static uint8_t sensors_scan(uint8_t (* procfn)()){
function showcoeffs (line 308) | void showcoeffs(){
function showtemperature (line 328) | void showtemperature(){
function sensors_process (line 361) | void sensors_process(){
FILE: F0:F030,F042,F072/TSYS_controller/sensors_manage.h
type SensorsState (line 38) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/usart.c
function usart_getline (line 49) | int usart_getline(char **line){
function TXstatus (line 60) | TXstatus usart_send(const char *str, int len){
function TXstatus (line 93) | TXstatus usart_send_blocking(const char *str, int len){
function usart_setup (line 115) | void usart_setup(){
function usart1_isr (line 176) | void usart1_isr(){
function dma1_channel4_5_isr (line 219) | void dma1_channel4_5_isr(){
function dma1_channel2_3_isr (line 228) | void dma1_channel2_3_isr(){
FILE: F0:F030,F042,F072/TSYS_controller/usart.h
type TXstatus (line 37) | typedef enum{
FILE: F0:F030,F042,F072/TSYS_controller/usb.c
function send_next (line 34) | void send_next(){
function USB_sendall (line 49) | int USB_sendall(){
function USB_send (line 57) | int USB_send(const uint8_t *buf, int len){
function USB_putbyte (line 71) | int USB_putbyte(uint8_t byte){
function USB_sendstr (line 82) | int USB_sendstr(const char *string){
function USB_receive (line 97) | int USB_receive(uint8_t *buf, int len){
function USB_receivestr (line 114) | int USB_receivestr(char *buf, int len){
FILE: F0:F030,F042,F072/TSYS_controller/usb_lib.c
function usb_LineCoding (line 31) | usb_LineCoding getLineCoding(){return lineCoding;}
function linecoding_handler (line 148) | void WEAK linecoding_handler(usb_LineCoding __attribute__((unused)) *lc){
function clstate_handler (line 152) | void WEAK clstate_handler(uint16_t __attribute__((unused)) val){
function break_handler (line 156) | void WEAK break_handler(){
function vendor_handler (line 160) | void WEAK vendor_handler(config_pack_t *packet){
function wr0 (line 183) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 211) | static inline void get_descriptor(){
function std_d2h_req (line 234) | static inline void std_d2h_req(){
function EP1_Handler (line 252) | static void EP1_Handler(){
function transmit_Handler (line 262) | static void transmit_Handler(){ // EP3IN
function receive_Handler (line 269) | static void receive_Handler(){ // EP2OUT
function std_h2d_req (line 280) | static inline void std_h2d_req(){
function EP0_Handler (line 307) | void EP0_Handler(){
function EP_WriteIRQ (line 379) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 407) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 419) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/TSYS_controller/usb_lib.h
type config_pack_t (line 117) | typedef struct {
type ep_t (line 126) | typedef struct{
type usb_LineCoding (line 134) | typedef struct {
type usb_cdc_notification (line 149) | typedef struct {
FILE: F0:F030,F042,F072/TSYS_controller/usbhw.c
function USB_setup (line 23) | void USB_setup(){
function EP_Init (line 54) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 81) | void usb_isr(){
FILE: F0:F030,F042,F072/TSYS_controller/usbhw.h
type USB_TypeDef (line 76) | typedef struct {
type USB_EPDATA_TypeDef (line 89) | typedef struct{
type USB_BtableDef (line 110) | typedef struct{
FILE: F0:F030,F042,F072/USBHID/hardware.c
function gpio_setup (line 29) | void gpio_setup(void){
function getBRDaddr (line 49) | uint8_t getBRDaddr(){return brdADDR;}
FILE: F0:F030,F042,F072/USBHID/main.c
function sys_tick_handler (line 31) | void sys_tick_handler(void){
function iwdg_setup (line 35) | void iwdg_setup(){
function move_mouse (line 58) | void move_mouse(int8_t x, int8_t y){
function send_word (line 77) | void send_word(const char *wrd){
function main (line 89) | int main(void){
FILE: F0:F030,F042,F072/USBHID/usart.c
function usart_getline (line 44) | int usart_getline(char **line){
function transmit_tbuf (line 56) | void transmit_tbuf(){
function usart_putchar (line 70) | void usart_putchar(const char ch){
function usart_send (line 75) | void usart_send(const char *str){
function usart_sendn (line 83) | void usart_sendn(const char *str, uint8_t L){
function newline (line 90) | void newline(){
function usart_setup (line 96) | void usart_setup(){
function usart1_isr (line 140) | void usart1_isr(){
function printu (line 183) | void printu(uint32_t val){
function printuhex (line 205) | void printuhex(uint32_t val){
function hexdump (line 225) | void hexdump(uint8_t *arr, uint16_t len){
function dma1_channel4_5_isr (line 238) | void dma1_channel4_5_isr(){
function dma1_channel2_3_isr (line 246) | void dma1_channel2_3_isr(){
FILE: F0:F030,F042,F072/USBHID/usb.c
function EP1_Handler (line 31) | static void EP1_Handler(){
function USB_setup (line 43) | void USB_setup(){
function usb_proc (line 64) | void usb_proc(){
function USB_send (line 75) | void USB_send(uint8_t *buf, uint16_t size){
FILE: F0:F030,F042,F072/USBHID/usb_defs.h
type USB_TypeDef (line 75) | typedef struct{
type USB_EPDATA_TypeDef (line 87) | typedef struct{
type USB_BtableDef (line 94) | typedef struct{
FILE: F0:F030,F042,F072/USBHID/usb_lib.c
function wr0 (line 185) | static void wr0(const uint8_t *buf, uint16_t size){
function get_descriptor (line 213) | static inline void get_descriptor(){
function std_d2h_req (line 242) | static inline void std_d2h_req(){
function std_h2d_req (line 259) | static inline void std_h2d_req(){
function EP0_Handler (line 286) | static void EP0_Handler(){
function EP_Init (line 349) | int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, ...
function usb_isr (line 377) | void usb_isr(){
function EP_WriteIRQ (line 428) | void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Write (line 446) | void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
function EP_Read (line 458) | int EP_Read(uint8_t number, uint8_t *buf){
FILE: F0:F030,F042,F072/USBHID/usb_lib.h
type USB_state (line 92) | typedef enum{
type config_pack_t (line 130) | typedef struct {
type ep_t (line 139) | typedef struct __ep_t{
type usb_dev_t (line 148) | typedef struct {
FILE: F0:F030,F042,F072/blink/systick_blink.c
function sys_tick_handler (line 27) | void sys_tick_handler(void){
function systick_setup (line 34) | static void systick_setup(uint
Copy disabled (too large)
Download .json
Condensed preview — 3605 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (116,999K chars).
[
{
"path": ".gitignore",
"chars": 162,
"preview": "*~\n*.bak\n*.bck\n*-cache.lib\n*.kicad_pcb-bak\n*.dcm\n*.pho\n*.zip\n*/mk/*\n.hg*\n.dropbox.attr\n*.sublime-project\n*.sublime-works"
},
{
"path": "F0:F030,F042,F072/3steppersLB/Makefile",
"chars": 203,
"preview": "BINARY := steppers\n# MCU code\nMCU := F072xB\n# change this linking script depending on particular MCU model,"
},
{
"path": "F0:F030,F042,F072/3steppersLB/Makefile.old",
"chars": 4275,
"preview": "BINARY\t\t= steppers\nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 57600\n# MCU FAMILY\nFAMILY\t\t?= F0\n# MCU code\nMCU\t\t\t?= F072xB\n#DE"
},
{
"path": "F0:F030,F042,F072/3steppersLB/Readme.md",
"chars": 8916,
"preview": "Loopback control of three stepper motors\n========================================\n\n\n# Pinout\n\n- **PA0** Enc2a (motor2 en"
},
{
"path": "F0:F030,F042,F072/3steppersLB/adc.c",
"chars": 4504,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/adc.h",
"chars": 1016,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/buttons.c",
"chars": 2901,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/buttons.h",
"chars": 1362,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/can.c",
"chars": 13077,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/can.h",
"chars": 1583,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/commonproto.c",
"chars": 12156,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/commonproto.h",
"chars": 3955,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/custom_buttons.c",
"chars": 3723,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/custom_buttons.h",
"chars": 902,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/flash.c",
"chars": 8595,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/3steppersLB/flash.h",
"chars": 3089,
"preview": "/*\n * flash.h\n *\n * Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/3steppersLB/hardware.c",
"chars": 9444,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/hardware.h",
"chars": 5892,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/elements.kicad_sym",
"chars": 40565,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"74HC4051\" (pin_names (offset 0.254)) (in"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/fp-info-cache",
"chars": 3492,
"preview": "32493563391627\nJumper\nSolderJumper-2_P1.3mm_Bridged2Bar_Pad1.0x1.5mm\nSMD Solder Jumper, 1x1.5mm Pads, 0.3mm gap, bridged"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/fp-lib-table",
"chars": 117,
"preview": "(fp_lib_table\n (lib (name my_footprints)(type KiCad)(uri ${KIPRJMOD}/my_footprints.pretty)(options \"\")(descr \"\"))\n)\n"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-B_Cu.gbr",
"chars": 293365,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-B_Mask.gbr",
"chars": 22412,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-B_Paste.gbr",
"chars": 10028,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-B_SilkS.gbr",
"chars": 142074,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-Edge_Cuts.gbr",
"chars": 1922,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-F_Cu.gbr",
"chars": 391022,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-F_Mask.gbr",
"chars": 84000,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-F_Paste.gbr",
"chars": 52819,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-F_SilkS.gbr",
"chars": 65990,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,5.1.10*%\n%TF.CreationDate,2021-10-03T18:13:03+03:00*%\n%TF.ProjectId,stm32,73746d33-3"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-NPTH-drl_map.gbr",
"chars": 3548,
"preview": "%FSLAX45Y45*%\nG04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*\nG04 Created by KiCad (PCBNEW 5.1.10) date "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-NPTH.drl",
"chars": 274,
"preview": "M48\n; DRILL file {KiCad 5.1.10} date Sun Oct 3 17:53:51 2021\n; FORMAT={-:-/ absolute / metric / decimal}\n; #@! TF.Creat"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-PTH-drl_map.gbr",
"chars": 98471,
"preview": "%FSLAX45Y45*%\nG04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*\nG04 Created by KiCad (PCBNEW 5.1.10) date "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-PTH.drl",
"chars": 3737,
"preview": "M48\n; DRILL file {KiCad 5.1.10} date Sun Oct 3 17:53:51 2021\n; FORMAT={-:-/ absolute / metric / decimal}\n; #@! TF.Creat"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-drl.rpt",
"chars": 1022,
"preview": "Drill report for /home/eddy/Yandex.Disk/Projects/stm32samples/F0-nolib/3steppersLB/kicad/stm32.kicad_pcb\nCreated on Пн 0"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32-job.gbrjob",
"chars": 2536,
"preview": "{\n \"Header\":\n {\n \"GenerationSoftware\":\n {\n \"Vendor\": \"KiCad\",\n \"Application\": \"Pcbnew\",\n \"Ve"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/gerbers/stm32.drl",
"chars": 3700,
"preview": "M48\n; DRILL file {KiCad 5.1.10} date Sun Oct 3 11:10:15 2021\n; FORMAT={-:-/ absolute / metric / decimal}\n; #@! TF.Creat"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/my_footprints.pretty/B0x0xS.kicad_mod",
"chars": 1067,
"preview": "(module B0x0xS (layer F.Cu) (tedit 5EC4EFC6)\n (fp_text reference REF** (at 0.127 2.286) (layer F.SilkS)\n (effects (f"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/my_footprints.pretty/Hole_3mm.kicad_mod",
"chars": 351,
"preview": "(module Hole_3mm (layer F.Cu) (tedit 5913F6E4)\n (fp_text reference REF** (at 0 3.81) (layer F.SilkS) hide\n (effects "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32-cache.kicad_sym",
"chars": 106055,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"Connector_Conn_01x02_Female\" (pin_names "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32-rescue.kicad_sym",
"chars": 87063,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"+3.3V\" (power) (pin_names (offset 0)) (i"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.csv",
"chars": 16157,
"preview": "\"Source:\",\"/home/eddy/Docs/SAO/ELECTRONICS/STM32/F0-srcs/CANbus4BTA/kicad/stm32.kicad_sch\"\n\"Date:\",\"Чт 21 июл 2022 18:01"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.kicad_pcb",
"chars": 1215516,
"preview": "(kicad_pcb\n\t(version 20240108)\n\t(generator \"pcbnew\")\n\t(generator_version \"8.0\")\n\t(general\n\t\t(thickness 2.5)\n\t\t(legacy_te"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.kicad_prl",
"chars": 1314,
"preview": "{\n \"board\": {\n \"active_layer\": 31,\n \"active_layer_preset\": \"Front Assembly View\",\n \"auto_track_width\": true,\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.kicad_pro",
"chars": 12892,
"preview": "{\n \"board\": {\n \"3dviewports\": [],\n \"design_settings\": {\n \"defaults\": {\n \"board_outline_line_width\": 0"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.kicad_sch",
"chars": 370484,
"preview": "(kicad_sch\n\t(version 20231120)\n\t(generator \"eeschema\")\n\t(generator_version \"8.0\")\n\t(uuid \"f40cbe7e-cd25-45e5-a6cb-d92457"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/stm32.xml",
"chars": 95832,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<export version=\"E\">\n <design>\n <source>/home/eddy/Docs/SAO/ELECTRONICS/STM32"
},
{
"path": "F0:F030,F042,F072/3steppersLB/kicad/sym-lib-table",
"chars": 575,
"preview": "(sym_lib_table\n (lib (name \"stm32-rescue\")(type \"KiCad\")(uri \"${KIPRJMOD}/stm32-rescue.kicad_sym\")(options \"\")(descr \"\""
},
{
"path": "F0:F030,F042,F072/3steppersLB/main.c",
"chars": 3498,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.c",
"chars": 22337,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.cflags",
"chars": 8,
"preview": "-std=c17"
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.config",
"chars": 135,
"preview": "// Add predefined macros for your project here. For example:\n// #define THE_ANSWER 42\n#define EBUG\n#define STM32F0\n#defi"
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.creator",
"chars": 10,
"preview": "[General]\n"
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.creator.user",
"chars": 10056,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 6.0.0, 2022-10-28T17:08:49."
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.cxxflags",
"chars": 10,
"preview": "-std=c++17"
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.files",
"chars": 238,
"preview": "adc.c\nadc.h\nbuttons.c\nbuttons.h\ncan.c\ncan.h\ncommonproto.c\ncommonproto.h\ncustom_buttons.c\ncustom_buttons.h\nflash.c\nflash."
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.h",
"chars": 2612,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/steppers.includes",
"chars": 54,
"preview": ".\n../inc\n../inc/Fx\n../inc/cm\n../inc/ld\n../inc/startup\n"
},
{
"path": "F0:F030,F042,F072/3steppersLB/strfunct.c",
"chars": 23721,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/strfunct.h",
"chars": 1717,
"preview": "/*\n * This file is part of the 3steppers project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/3steppersLB/usb.c",
"chars": 5513,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/usb.h",
"chars": 1206,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/usb_defs.h",
"chars": 3272,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/usb_lib.c",
"chars": 17302,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/usb_lib.h",
"chars": 6178,
"preview": "/*\n * This file is part of the canrelay project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/3steppersLB/version.inc",
"chars": 59,
"preview": "#define BUILD_NUMBER \"173\"\n#define BUILD_DATE \"2023-02-21\"\n"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/Makefile",
"chars": 253,
"preview": "BINARY := canstepper\n# MCU code\nMCU ?= F072xB\n# change this linking script depending on particular MCU mode"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/Readme.md",
"chars": 2445,
"preview": "Get data from SSI angle encoder & limit switches and send it to BTA CAN bus.\n\nBased on steppers-control board:\n\n\nDevelop"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/adc.c",
"chars": 5856,
"preview": "/*\n * This file is part of the TSYS_controller project.\n * Copyright 2019 Edward V. Emelianov <edward.emelianoff@gmail.c"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/adc.h",
"chars": 991,
"preview": "/*\n * This file is part of the TSYS_controller project.\n * Copyright 2019 Edward V. Emelianov <edward.emelianoff@gmail.c"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/can.c",
"chars": 12554,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/can.h",
"chars": 2441,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/can_process.c",
"chars": 3045,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/can_process.h",
"chars": 1436,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/flash.c",
"chars": 8359,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/flash.h",
"chars": 1788,
"preview": "/*\n * flash.h\n *\n * Copyright 2017 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/hardware.c",
"chars": 5500,
"preview": "/*\n * This file is part of the Stepper project.\n * Copyright 2020 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/hardware.h",
"chars": 1811,
"preview": "/*\n * This file is part of the Stepper project.\n * Copyright 2020 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/main.c",
"chars": 4671,
"preview": "/*\n * main.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/proto.c",
"chars": 13067,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/proto.h",
"chars": 1641,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/spi.c",
"chars": 4887,
"preview": "/*\n * This file is part of the Stepper project.\n * Copyright 2020 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/spi.h",
"chars": 1107,
"preview": "/*\n * This file is part of the Stepper project.\n * Copyright 2020 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usart.c",
"chars": 6121,
"preview": "/*\n * usart.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usart.h",
"chars": 1334,
"preview": "/*\n * usart.h\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usb.c",
"chars": 5790,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usb.h",
"chars": 1383,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usb_defs.h",
"chars": 3455,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usb_lib.c",
"chars": 17485,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/usb_lib.h",
"chars": 6351,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/CANBUS_SSI/version.inc",
"chars": 57,
"preview": "#define BUILD_NUMBER \"1\"\n#define BUILD_DATE \"2023-01-18\"\n"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/Readme",
"chars": 65,
"preview": "New device that we intend to use instead of BTA PEP controllers.\n"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/elements.kicad_sym",
"chars": 45516,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"74HC4051\" (pin_names (offset 0.254)) (in"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/fp-info-cache",
"chars": 167,
"preview": "8279029184160\nmy_footprints\nB0x0xS\n\n\n0\n4\n4\nmy_footprints\nB0505S-2W\n\n\n0\n4\n4\nmy_footprints\nHole_3mm\n\n\n0\n1\n1\nmy_footprints\n"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/fp-lib-table",
"chars": 259,
"preview": "(fp_lib_table\n (lib (name \"my_footprints\")(type \"KiCad\")(uri \"${KIPRJMOD}/my_footprints.pretty\")(options \"\")(descr \"\"))"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-B_Cu.gbr",
"chars": 446082,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-22T12:05:19+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-B_Mask.gbr",
"chars": 9776,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-B_Paste.gbr",
"chars": 1819,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-B_Silkscreen.gbr",
"chars": 10146,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-Edge_Cuts.gbr",
"chars": 2667,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-F_Cu.gbr",
"chars": 691541,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-22T12:05:19+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-F_Mask.gbr",
"chars": 21588,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-F_Paste.gbr",
"chars": 13611,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-11T14:10:47+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-F_Silkscreen.gbr",
"chars": 199272,
"preview": "%TF.GenerationSoftware,KiCad,Pcbnew,6.0.5*%\n%TF.CreationDate,2022-11-22T12:05:19+03:00*%\n%TF.ProjectId,stm32,73746d33-32"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-drl_map.gbr",
"chars": 170520,
"preview": "%FSLAX45Y45*%\nG04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*\nG04 Created by KiCad (PCBNEW 6.0.5) date 2"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32-job.gbrjob",
"chars": 2663,
"preview": "{\n \"Header\": {\n \"GenerationSoftware\": {\n \"Vendor\": \"KiCad\",\n \"Application\": \"Pcbnew\",\n \"Version\": \"6."
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/gerbers/stm32.drl",
"chars": 6750,
"preview": "M48\n; DRILL file {KiCad 6.0.5} date Вт 22 ноя 2022 12:05:16\n; FORMAT={-:-/ absolute / metric / decimal}\n; #@! TF.Creatio"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/iso3086.kicad_sym",
"chars": 4220,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"ISO3086\" (in_bom yes) (on_board yes)\n "
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/my_footprints.pretty/B0505S-2W.kicad_mod",
"chars": 1360,
"preview": "(footprint \"B0505S-2W\" (version 20211014) (generator pcbnew)\n (layer \"F.Cu\")\n (tedit 0)\n (attr smd)\n (fp_text refere"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/my_footprints.pretty/B0x0xS.kicad_mod",
"chars": 2291,
"preview": "(footprint \"B0x0xS\" (version 20211014) (generator pcbnew)\n (layer \"F.Cu\")\n (tedit 5EC4EFC6)\n (attr through_hole)\n (f"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/my_footprints.pretty/Hole_3mm.kicad_mod",
"chars": 351,
"preview": "(module Hole_3mm (layer F.Cu) (tedit 5913F6E4)\n (fp_text reference REF** (at 0 3.81) (layer F.SilkS) hide\n (effects "
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/my_footprints.pretty/VRB2405.kicad_mod",
"chars": 1421,
"preview": "(footprint \"VRB2405\" (version 20211014) (generator pcbnew)\n (layer \"F.Cu\")\n (tedit 0)\n (attr through_hole)\n (fp_text"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/my_footprints.pretty/VRB_DCDC.kicad_mod",
"chars": 2426,
"preview": "(footprint \"VRB_DCDC\" (version 20211014) (generator pcbnew)\n (layer \"F.Cu\")\n (tedit 0)\n (attr through_hole)\n (fp_tex"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/optocouple.kicad_sch",
"chars": 12259,
"preview": "(kicad_sch\n\t(version 20231120)\n\t(generator \"eeschema\")\n\t(generator_version \"8.0\")\n\t(uuid \"c774fcd8-2321-49e3-82b6-f08029"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/schematic-positions-to-layout.debug",
"chars": 49692,
"preview": "work_dir = /home/eddy/Docs/SAO/ELECTRONICS/STM32/F0-srcs/CANbus4BTA/kicad\nin_pcb_file = stm32.kicad_pcb\nroot_schematic_f"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32-cache.kicad_sym",
"chars": 106055,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"Connector_Conn_01x02_Female\" (pin_names "
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32-rescue.kicad_sym",
"chars": 87063,
"preview": "(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)\n (symbol \"+3.3V\" (power) (pin_names (offset 0)) (i"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.csv",
"chars": 27168,
"preview": "\"Source:\",\"/home/eddy/Docs/SAO/BTA/NEW_control_system/InsteadOfPEP/CANbus4BTA/kicad/stm32.kicad_sch\"\n\"Date:\",\"Вт 22 ноя "
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.kicad_pcb",
"chars": 2295338,
"preview": "(kicad_pcb\n\t(version 20240108)\n\t(generator \"pcbnew\")\n\t(generator_version \"8.0\")\n\t(general\n\t\t(thickness 1.6)\n\t\t(legacy_te"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.kicad_prl",
"chars": 1305,
"preview": "{\n \"board\": {\n \"active_layer\": 0,\n \"active_layer_preset\": \"All Layers\",\n \"auto_track_width\": false,\n \"hidde"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.kicad_pro",
"chars": 15465,
"preview": "{\n \"board\": {\n \"3dviewports\": [],\n \"design_settings\": {\n \"defaults\": {\n \"board_outline_line_width\": 0"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.kicad_sch",
"chars": 584061,
"preview": "(kicad_sch\n\t(version 20231120)\n\t(generator \"eeschema\")\n\t(generator_version \"8.0\")\n\t(uuid \"f40cbe7e-cd25-45e5-a6cb-d92457"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/stm32.xml",
"chars": 154214,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<export version=\"E\">\n <design>\n <source>/home/eddy/Docs/SAO/BTA/NEW_control_s"
},
{
"path": "F0:F030,F042,F072/CANbus4BTA/kicad/sym-lib-table",
"chars": 673,
"preview": "(sym_lib_table\n (lib (name \"stm32-rescue\")(type \"KiCad\")(uri \"${KIPRJMOD}/stm32-rescue.kicad_sym\")(options \"\")(descr \"\""
},
{
"path": "F0:F030,F042,F072/Chiller/Makefile",
"chars": 3306,
"preview": "BINARY\t\t= chiller\nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 115200\n# MCU FAMILY\nFAMILY\t\t= F0\n# MCU code\nMCU\t\t\t= F030x4\nDEFS\t"
},
{
"path": "F0:F030,F042,F072/Chiller/Readme.md",
"chars": 1000,
"preview": "Self-made chiller control system\n\nUART: 115200N1, not more than 100ms between data bytes in command\nTo turn ON human ter"
},
{
"path": "F0:F030,F042,F072/Chiller/adc.c",
"chars": 4094,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/adc.h",
"chars": 997,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/hardware.c",
"chars": 8232,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/hardware.h",
"chars": 2672,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control-rescue.lib",
"chars": 11954,
"preview": "EESchema-LIBRARY Version 2.4\n#encoding utf-8\n#\n# +12V\n#\nDEF +12V #PWR 0 0 Y Y 1 F P\nF0 \"#PWR\" 0 -150 50 H I C CNN\nF1 \"+1"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.csv",
"chars": 10851,
"preview": "\"Source:\",\"/home/eddy/Docs/SAO/ELECTRONICS/Chiller/kicad/Chiller_control.sch\"\n\"Date:\",\" 28 2019 09:03:40\"\n\"Tool:\",\"Eesc"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.kicad_pcb",
"chars": 643102,
"preview": "(kicad_pcb\n\t(version 20240108)\n\t(generator \"pcbnew\")\n\t(generator_version \"8.0\")\n\t(general\n\t\t(thickness 1.6)\n\t\t(legacy_te"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.kicad_prl",
"chars": 1304,
"preview": "{\n \"board\": {\n \"active_layer\": 0,\n \"active_layer_preset\": \"\",\n \"auto_track_width\": true,\n \"hidden_netclasse"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.kicad_pro",
"chars": 19381,
"preview": "{\n \"board\": {\n \"3dviewports\": [],\n \"design_settings\": {\n \"defaults\": {\n \"apply_defaults_to_fp_fields\""
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.kicad_sch",
"chars": 249166,
"preview": "(kicad_sch\n\t(version 20231120)\n\t(generator \"eeschema\")\n\t(generator_version \"8.0\")\n\t(uuid \"5149937b-b36d-4952-b29c-2bc65f"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.net",
"chars": 35300,
"preview": "(export (version D)\n (design\n (source /home/eddy/Docs/SAO/ELECTRONICS/Chiller/kicad/Chiller_control.sch)\n (date \""
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.pro",
"chars": 1758,
"preview": "update=Вс 27 янв 2019 15:05:22\nversion=1\nlast_client=kicad\n[cvpcb]\nversion=1\nNetIExt=net\n[general]\nversion=1\n[schematic_"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/Chiller_control.sch",
"chars": 45539,
"preview": "EESchema Schematic File Version 4\nLIBS:Chiller_control-cache\nEELAYER 29 0\nEELAYER END\n$Descr A4 11693 8268\nencoding utf-"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/fp-info-cache",
"chars": 439407,
"preview": "3089057598695452\nButtons_Switches_SMD\nNidec_Copal_SH-7010A\n4-bit rotary coded switch, J-hook, https://www.nidec-copal-el"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/fp-lib-table",
"chars": 93,
"preview": "(fp_lib_table\n (lib (name modules)(type KiCad)(uri modules.pretty)(options \"\")(descr \"\"))\n)\n"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/modules.pretty/DB9-F.kicad_mod",
"chars": 2005,
"preview": "(module DB9-F (layer F.Cu) (tedit 546362FD)\n (descr \"Connecteur DB9 femelle couche\")\n (tags \"CONN DB9\")\n (fp_text ref"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/modules.pretty/TO-220-3_Horizontal_TabDown.kicad_mod",
"chars": 2766,
"preview": "(module TO-220-3_Horizontal_TabDown (layer F.Cu) (tedit 5BEBD722)\n (descr \"TO-220-3, Horizontal, RM 2.54mm, see https:/"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/modules.pretty/hole_3mm.kicad_mod",
"chars": 699,
"preview": "(module hole_3mm (layer F.Cu) (tedit 5BF13739)\n (fp_text reference hole_3mm (at 0 -2.54) (layer F.SilkS) hide\n (effe"
},
{
"path": "F0:F030,F042,F072/Chiller/kicad/sym-lib-table",
"chars": 134,
"preview": "(sym_lib_table\n (lib (name Chiller_control-rescue)(type Legacy)(uri ${KIPRJMOD}/Chiller_control-rescue.lib)(options \"\")"
},
{
"path": "F0:F030,F042,F072/Chiller/main.c",
"chars": 3679,
"preview": "/*\n * main.c\n *\n * Copyright 2018 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/Chiller/mainloop.c",
"chars": 10492,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2019 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/mainloop.h",
"chars": 1772,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2019 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/protocol.c",
"chars": 5793,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/protocol.h",
"chars": 896,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/Chiller/usart.c",
"chars": 9054,
"preview": "/*\n * usart.c\n *\n * Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/Chiller/usart.h",
"chars": 1695,
"preview": "/*\n * usart.h\n *\n * Copyright 2018 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/Makefile",
"chars": 3707,
"preview": "BINARY\t\t= pl2303\nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 57600\n# MCU FAMILY\nFAMILY\t\t= F0\n# MCU code\n#MCU\t\t\t= F042x6\nMCU = "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/Readme.md",
"chars": 158,
"preview": "Simple test for STM32F0x2, PWM for all 4 channels of TIM3, USB (PL2303 emulator); USART1/2/3, SPI1/2, \nI2C1 tests, ADC1 "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/adc.c",
"chars": 2800,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/adc.h",
"chars": 1006,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/hardware.c",
"chars": 9036,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/hardware.h",
"chars": 1551,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/i2c.c",
"chars": 6324,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/i2c.h",
"chars": 1428,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/main.c",
"chars": 3478,
"preview": "/*\n * main.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/proto.c",
"chars": 15252,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/proto.h",
"chars": 1240,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/spi.c",
"chars": 7216,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/spi.h",
"chars": 1289,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usart.c",
"chars": 8303,
"preview": "/*\n * usart.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usart.h",
"chars": 1649,
"preview": "/*\n * usart.h\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usb.c",
"chars": 5586,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usb.h",
"chars": 1240,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usb_defs.h",
"chars": 3480,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usb_lib.c",
"chars": 17326,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/F0_testbrd/usb_lib.h",
"chars": 6392,
"preview": "/*\n * geany_encoding=ko"
},
{
"path": "F0:F030,F042,F072/MAKE",
"chars": 73,
"preview": "LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map -Wl,--print-memory-usage\n"
},
{
"path": "F0:F030,F042,F072/Makefile",
"chars": 4383,
"preview": "BINARY\t\t= \nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 115200\nINDEPENDENT_HEADERS=\n# MCU FAMILY\nFAMILY\t\t?= F0\n# MCU code\nMCU\t\t"
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/Makefile",
"chars": 3415,
"preview": "BINARY\t\t= usart\nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 115200\n# MCU FAMILY\nFAMILY\t\t= F0\n# MCU code\nMCU\t\t\t= F042x6\nDEFS\t\t+"
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/Readme",
"chars": 256,
"preview": "This is a simple USART over DMA application with software end of string control.\nSpeed 115200. Received string echoes ba"
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/main.c",
"chars": 2758,
"preview": "/*\n * main.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is "
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/spi.c",
"chars": 4413,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/spi.h",
"chars": 1145,
"preview": "/*\n * This file is part of the F0testbrd project.\n * Copyright 2021 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n "
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/usart.c",
"chars": 5016,
"preview": "/*\n * usart.c\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/NUCLEO_SPI/usart.h",
"chars": 1434,
"preview": "/*\n * usart.h\n *\n * Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>\n *\n * This program is"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/Makefile",
"chars": 201,
"preview": "BINARY := PL2303\n# MCU code\nMCU ?= F072xB\n# change this linking script depending on particular MCU model,\nL"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/hardware.c",
"chars": 1189,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/hardware.h",
"chars": 1349,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/main.c",
"chars": 1624,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/openocd.cfg",
"chars": 2605,
"preview": "# script for stm32f0x family\n\n#\n# stm32 devices support SWD transports only.\n#\nsource [find interface/stlink-v2-1.cfg]\ns"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/proto.c",
"chars": 7863,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/proto.h",
"chars": 1040,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/ringbuffer.c",
"chars": 3681,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/ringbuffer.h",
"chars": 1341,
"preview": "/*\n * This file is part of the pl2303 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n "
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usb.c",
"chars": 5248,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usb.h",
"chars": 1167,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usb_lib.c",
"chars": 13457,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usb_lib.h",
"chars": 6020,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usbhw.c",
"chars": 5453,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/usbhw.h",
"chars": 3476,
"preview": "/*\n * This file is part of the MLX90640 project.\n * Copyright 2022 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *"
},
{
"path": "F0:F030,F042,F072/PL2303_ringbuffer/version.inc",
"chars": 59,
"preview": "#define BUILD_NUMBER \"120\"\n#define BUILD_DATE \"2022-10-27\"\n"
},
{
"path": "F0:F030,F042,F072/QuadEncoder/Makefile",
"chars": 3306,
"preview": "BINARY\t\t= encoder\nBOOTPORT\t?= /dev/ttyUSB0\nBOOTSPEED\t?= 115200\n# MCU FAMILY\nFAMILY\t\t= F0\n# MCU code\nMCU\t\t\t= F030x4\nDEFS\t"
},
{
"path": "F0:F030,F042,F072/QuadEncoder/Readme.md",
"chars": 514,
"preview": "Quadrature encoder\n=============================\n\n## GPIO\n\n## UART \n115200N1, not more than 100ms between data bytes in "
},
{
"path": "F0:F030,F042,F072/QuadEncoder/hardware.c",
"chars": 2696,
"preview": "/*\n * This file is part of the Chiller project.\n * Copyright 2018 Edward V. Emelianov <edward.emelianoff@gmail.com>.\n *\n"
}
]
// ... and 3405 more files (download for full content)
About this extraction
This page contains the full source code of the eddyem/stm32samples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3605 files (145.7 MB), approximately 27.2M tokens, and a symbol index with 8772 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.