.gitignore
AUTHORS
LICENSE
README.md
pyproject.toml
pytest.ini
requirements.txt
ruff.toml
tox.ini
.github/workflows/python-package.yml
.github/workflows/release.yml
.run/PyTrain CityLife Client.run.xml
.run/PyTrain CityLife Server.run.xml
.run/PyTrain Sprucewood Server.run.xml
cli/acc.py
cli/engine.py
cli/make_gui.py
cli/make_service.py
cli/piconfig.py
cli/pytrain.py
cli/switch.py
doc/fonts/14 Segment LED Regular.ttf
doc/fonts/Digital Display.ttf
doc/fonts/digital-dream/DIGITALDREAM.ttf
doc/fonts/digital-dream/DIGITALDREAMFAT.ttf
doc/fonts/digital-dream/DIGITALDREAMFATNARROW.ttf
doc/fonts/digital-dream/DIGITALDREAMFATSKEW.ttf
doc/fonts/digital-dream/DIGITALDREAMFATSKEWNARROW.ttf
doc/fonts/digital-dream/DIGITALDREAMNARROW.ttf
doc/fonts/digital-dream/DIGITALDREAMSKEW.ttf
doc/fonts/digital-dream/DIGITALDREAMSKEWNARROW.ttf
doc/fonts/digital-readout/SFDigitalReadout-Heavy.ttf
doc/fonts/digital-readout/SFDigitalReadout-HeavyObliq.ttf
doc/fonts/digital-readout/SFDigitalReadout-Light.ttf
doc/fonts/digital-readout/SFDigitalReadout-LightObliq.ttf
doc/fonts/digital-readout/SFDigitalReadout-Medium.ttf
doc/fonts/digital-readout/SFDigitalReadout-MediumObli.ttf
doc/images/gantry.jpg
doc/images/gantry.pdf
doc/images/switch-example.png
examples/README.MD
examples/buttons.py
examples/gantry_crane_block.py
scripts/README.md
scripts/change.py
scripts/delete_failed_runs.sh
src/__init__.py
src/pytrain/__init__.py
src/pytrain/_version.py
src/pytrain/atc/__init__.py
src/pytrain/atc/block.py
src/pytrain/cli/__init__.py
src/pytrain/cli/acc.py
src/pytrain/cli/amc2.py
src/pytrain/cli/asc2.py
src/pytrain/cli/bpc2.py
src/pytrain/cli/dialogs.py
src/pytrain/cli/echo.py
src/pytrain/cli/effects.py
src/pytrain/cli/engine.py
src/pytrain/cli/halt.py
src/pytrain/cli/lighting.py
src/pytrain/cli/make_base.py
src/pytrain/cli/make_gui.py
src/pytrain/cli/make_service.py
src/pytrain/cli/piconfig.py
src/pytrain/cli/pytrain.py
src/pytrain/cli/route.py
src/pytrain/cli/sounds.py
src/pytrain/cli/switch.py
src/pytrain/comm/__init__.py
src/pytrain/comm/comm_buffer.py
src/pytrain/comm/command_listener.py
src/pytrain/comm/enqueue_proxy_requests.py
src/pytrain/comm/serial_reader.py
src/pytrain/db/__init__.py
src/pytrain/db/accessory_state.py
src/pytrain/db/base_state.py
src/pytrain/db/block_state.py
src/pytrain/db/client_state_listener.py
src/pytrain/db/comp_data.py
src/pytrain/db/component_state.py
src/pytrain/db/component_state_store.py
src/pytrain/db/engine_state.py
src/pytrain/db/irda_state.py
src/pytrain/db/prod_info.py
src/pytrain/db/startup_state.py
src/pytrain/db/state_watcher.py
src/pytrain/db/sync_state.py
src/pytrain/db/watchable.py
src/pytrain/gpio/__init__.py
src/pytrain/gpio/base_watcher.py
src/pytrain/gpio/controller.py
src/pytrain/gpio/crane_car.py
src/pytrain/gpio/culvert_loader.py
src/pytrain/gpio/engine_controller.py
src/pytrain/gpio/engine_status.py
src/pytrain/gpio/gantry_crane.py
src/pytrain/gpio/gpio_device.py
src/pytrain/gpio/gpio_handler.py
src/pytrain/gpio/keypad.py
src/pytrain/gpio/launch_pad.py
src/pytrain/gpio/launch_status.py
src/pytrain/gpio/power_district.py
src/pytrain/gpio/power_watcher.py
src/pytrain/gpio/py_rotary_encoder.py
src/pytrain/gpio/route.py
src/pytrain/gpio/smoke_fluid_loader.py
src/pytrain/gpio/state_source.py
src/pytrain/gpio/switch.py
src/pytrain/gpio/sys_admin.py
src/pytrain/gpio/i2c/__init__.py
src/pytrain/gpio/i2c/ads_1x15.py
src/pytrain/gpio/i2c/analog_handler_i2c.py
src/pytrain/gpio/i2c/button_i2c.py
src/pytrain/gpio/i2c/i2c.py
src/pytrain/gpio/i2c/i2c_device.py
src/pytrain/gpio/i2c/lcd.py
src/pytrain/gpio/i2c/led_i2c.py
src/pytrain/gpio/i2c/mcp23017.py
src/pytrain/gpio/i2c/oled.py
src/pytrain/gpio/utils/__init__.py
src/pytrain/gpio/utils/sh1122.py
src/pytrain/gpio/utils/text_buffer.py
src/pytrain/gui/__init__.py
src/pytrain/gui/accessories_gui.py
src/pytrain/gui/accessory_base.py
src/pytrain/gui/accessory_gui.py
src/pytrain/gui/backhoe_gui.py
src/pytrain/gui/component_state_gui.py
src/pytrain/gui/control_tower_gui.py
src/pytrain/gui/culvert_gui.py
src/pytrain/gui/engine_gui.py
src/pytrain/gui/fire_station_gui.py
src/pytrain/gui/freight_depot_gui.py
src/pytrain/gui/freight_station_gui.py
src/pytrain/gui/gas_station_gui.py
src/pytrain/gui/hobby_shop_gui.py
src/pytrain/gui/hold_button.py
src/pytrain/gui/launch_gui.py
src/pytrain/gui/milk_loader_gui.py
src/pytrain/gui/motors_gui.py
src/pytrain/gui/playground_gui.py
src/pytrain/gui/power_district_gui.py
src/pytrain/gui/routes_gui.py
src/pytrain/gui/smoke_fluid_loader_gui.py
src/pytrain/gui/state_based_gui.py
src/pytrain/gui/switches_gui.py
src/pytrain/gui/systems_gui.py
src/pytrain/gui/fonts/digital-dream/DIGITALDREAM.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMFAT.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMFATNARROW.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMFATSKEW.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMFATSKEWNARROW.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMNARROW.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMSKEW.ttf
src/pytrain/gui/fonts/digital-dream/DIGITALDREAMSKEWNARROW.ttf
src/pytrain/gui/images/192-Control-Tower-6-37996.jpg
src/pytrain/gui/images/192-Control-Tower-6-82014.jpg
src/pytrain/gui/images/192R-Railroad-Control-Tower-6-32988.jpg
src/pytrain/gui/images/Adolph-Coors-Brewing-Co-30-9161.jpg
src/pytrain/gui/images/Advanced-Smoke-Fluid-Loader-6-37821.jpg
src/pytrain/gui/images/Altoona-Brewing-CO-30-90191.jpg
src/pytrain/gui/images/Atlantic-Gas-Station-30-91003.jpg
src/pytrain/gui/images/BP-Gas-Station-30-9181.jpg
src/pytrain/gui/images/Backhoe-Construction-Scene-K42416.gif
src/pytrain/gui/images/Breaking-News-Emoji.gif
src/pytrain/gui/images/Budweiser-30-9171.jpg
src/pytrain/gui/images/Citgo-Gas-Station-30-9113.jpg
src/pytrain/gui/images/Dairymens-League-6-14291.jpg
src/pytrain/gui/images/Esso-Gas-Station-30-9106.jpg
src/pytrain/gui/images/Fire-Station-MTH-30-9157.jpg
src/pytrain/gui/images/Freight-Depot-Platform-30-9199.jpg
src/pytrain/gui/images/Gulf-Gas-Station-30-9168.jpg
src/pytrain/gui/images/K-Lineville-Freight-Depot-K-42418.jpg
src/pytrain/gui/images/Keystone-Smoke-Fluid-Loader-6-83634.jpg
src/pytrain/gui/images/LCS-AMC2-6-81641.jpg
src/pytrain/gui/images/LCS-ASC2-6-81639.jpg
src/pytrain/gui/images/LCS-BPC2-6-81640.jpg
src/pytrain/gui/images/LCS-Sensor-Track-6-81294.jpg
src/pytrain/gui/images/Lionelville-Culvert-Loader-6-82029.jpg
src/pytrain/gui/images/Lionelville-Culvert-Unloader-6-82030.jpg
src/pytrain/gui/images/Lionelville-Hobby-Shop-6-85294.jpg
src/pytrain/gui/images/Madison-Hobby-Shop-6-14133.jpg
src/pytrain/gui/images/Man-With-Handcart.png
src/pytrain/gui/images/Middletown-Freight-Station-30-9184.jpg
src/pytrain/gui/images/Middletown-Military-Station-30-9183.jpg
src/pytrain/gui/images/Middletown-Passenger-Station-30-9125.jpg
src/pytrain/gui/images/Midtown-Models-Hobby-Shop-6-32998.jpg
src/pytrain/gui/images/Mobile-Gas-Station-30-9124.jpg
src/pytrain/gui/images/Moose-Pond-Creamery-6-22660.jpg
src/pytrain/gui/images/Mountain-View-Creamery-6-21675.jpg
src/pytrain/gui/images/NASA-Mission-Control-Tower-2229040.jpg
src/pytrain/gui/images/New-York-Central-Freight-Station-30-9151.jpg
src/pytrain/gui/images/New-York-Central-Passenger-Station-30-9164.jpg
src/pytrain/gui/images/Numbers-1-Black-icon.png
src/pytrain/gui/images/Old-Reading-Brewing-Co-30-90190.jpg
src/pytrain/gui/images/Pennsylvania-Railroad-PRR-30-9152.jpg
src/pytrain/gui/images/Pittsburgh-Brewing-Co-30-90189.jpg
src/pytrain/gui/images/Playground-6-82104.jpg
src/pytrain/gui/images/Radio-Control-Tower-6-24153.jpg
src/pytrain/gui/images/Route-66-Gas-Station-30-91002.jpg
src/pytrain/gui/images/Safety-Attention-Sticker.gif
src/pytrain/gui/images/Shell-Gas-Station-30-9182.jpg
src/pytrain/gui/images/Sinclair-Gas-Station-30-9101.jpg
src/pytrain/gui/images/Sunoco-Gas-Station-30-9154.jpg
src/pytrain/gui/images/Swing-6-14199.jpg
src/pytrain/gui/images/Texaco-Gas-Station-30-91001.jpg
src/pytrain/gui/images/Tidewater-Oil-Gas-Station-30-9181.jpg
src/pytrain/gui/images/Tire-Swing-6-82105.jpg
src/pytrain/gui/images/Tug-of-War-6-82107.jpg
src/pytrain/gui/images/Union-76-Gas-Station-30-9109.jpg
src/pytrain/gui/images/__init__.py
src/pytrain/gui/images/abort.jpg
src/pytrain/gui/images/animated_backhoe.gif
src/pytrain/gui/images/brews-waiting.png
src/pytrain/gui/images/bulb-power-off.png
src/pytrain/gui/images/bulb-power-on.png
src/pytrain/gui/images/control_tower_animation.gif
src/pytrain/gui/images/delete-key.jpg
src/pytrain/gui/images/depot-milk-can-eject.jpeg
src/pytrain/gui/images/freight-waiting.jpg
src/pytrain/gui/images/gas-station-car.png
src/pytrain/gui/images/green_light.jpg
src/pytrain/gui/images/green_light_off.jpg
src/pytrain/gui/images/launch.jpg
src/pytrain/gui/images/launch_btn.jpg
src/pytrain/gui/images/left_arrow.jpg
src/pytrain/gui/images/let-off.jpg
src/pytrain/gui/images/load_culvert.png
src/pytrain/gui/images/loaded.png
src/pytrain/gui/images/off_button.jpg
src/pytrain/gui/images/on_button.jpg
src/pytrain/gui/images/passengers-waiting.png
src/pytrain/gui/images/red_light.jpg
src/pytrain/gui/images/red_light_off.jpg
src/pytrain/gui/images/right_arrow.jpg
src/pytrain/gui/images/smoke-fluid.png
src/pytrain/gui/images/tire-swing-child.jpg
src/pytrain/gui/images/tower.jpg
src/pytrain/gui/images/tower.png
src/pytrain/gui/images/tug-of-war.jpg
src/pytrain/gui/images/unload_culvert.png
src/pytrain/gui/images/walkie_talkie.jpg
src/pytrain/gui/images/walkie_talkie.png
src/pytrain/gui/images/water-inject.jpg
src/pytrain/gui/images/engine_gui/RR-Speeds.jpg
src/pytrain/gui/images/engine_gui/bell.jpg
src/pytrain/gui/images/engine_gui/boost.jpg
src/pytrain/gui/images/engine_gui/brake.jpg
src/pytrain/gui/images/engine_gui/front-coupler.jpg
src/pytrain/gui/images/engine_gui/generic_crane_car.jpg
src/pytrain/gui/images/engine_gui/generic_diesel.jpg
src/pytrain/gui/images/engine_gui/generic_diesel_switcher.jpg
src/pytrain/gui/images/engine_gui/generic_electric.jpg
src/pytrain/gui/images/engine_gui/generic_freight.jpg
src/pytrain/gui/images/engine_gui/generic_passenger_car.jpg
src/pytrain/gui/images/engine_gui/generic_steam.jpg
src/pytrain/gui/images/engine_gui/generic_steam_santa.jpg
src/pytrain/gui/images/engine_gui/generic_steam_switcher.jpg
src/pytrain/gui/images/engine_gui/horn.jpg
src/pytrain/gui/images/engine_gui/rear-coupler.jpg
src/pytrain/gui/images/engine_gui/rpm-down.jpg
src/pytrain/gui/images/engine_gui/rpm-up.jpg
src/pytrain/gui/images/engine_gui/smoke-down.jpg
src/pytrain/gui/images/engine_gui/smoke-up.jpg
src/pytrain/gui/images/engine_gui/vol-down.jpg
src/pytrain/gui/images/engine_gui/vol-up.jpg
src/pytrain/gui/images/engine_gui/whistle.jpg
src/pytrain/installation/__init__.py
src/pytrain/installation/buttons_gui.py.template
src/pytrain/installation/launch_pytrain.bash.template
src/pytrain/installation/pytrain.bash.template
src/pytrain/installation/pytrain.service.template
src/pytrain/installation/pytrain_desktop.template
src/pytrain/pdi/__init__.py
src/pytrain/pdi/amc2_req.py
src/pytrain/pdi/asc2_req.py
src/pytrain/pdi/base3_buffer.py
src/pytrain/pdi/base3_component.py
src/pytrain/pdi/base_req.py
src/pytrain/pdi/block_req.py
src/pytrain/pdi/bpc2_req.py
src/pytrain/pdi/constants.py
src/pytrain/pdi/d4_req.py
src/pytrain/pdi/irda_req.py
src/pytrain/pdi/lcs_req.py
src/pytrain/pdi/pdi_device.py
src/pytrain/pdi/pdi_listener.py
src/pytrain/pdi/pdi_req.py
src/pytrain/pdi/pdi_state_store.py
src/pytrain/pdi/stm2_req.py
src/pytrain/pdi/wifi_req.py
src/pytrain/protocol/__init__.py
src/pytrain/protocol/command_base.py
src/pytrain/protocol/command_def.py
src/pytrain/protocol/command_req.py
src/pytrain/protocol/constants.py
src/pytrain/protocol/multibyte/__init__.py
src/pytrain/protocol/multibyte/dcds_command_req.py
src/pytrain/protocol/multibyte/dialog_cmd.py
src/pytrain/protocol/multibyte/effects_cmd.py
src/pytrain/protocol/multibyte/lighting_cmd.py
src/pytrain/protocol/multibyte/masking_cmd.py
src/pytrain/protocol/multibyte/multibyte_command_req.py
src/pytrain/protocol/multibyte/multibyte_constants.py
src/pytrain/protocol/multibyte/param_command_req.py
src/pytrain/protocol/multibyte/r4lc_command_req.py
src/pytrain/protocol/multibyte/sound_effects_cmd.py
src/pytrain/protocol/sequence/__init__.py
src/pytrain/protocol/sequence/abs_speed_rpm.py
src/pytrain/protocol/sequence/grade_crossing_req.py
src/pytrain/protocol/sequence/labor_effect.py
src/pytrain/protocol/sequence/ramped_speed_req.py
src/pytrain/protocol/sequence/sequence_constants.py
src/pytrain/protocol/sequence/sequence_req.py
src/pytrain/protocol/sequence/set_speed_req.py
src/pytrain/protocol/sequence/speed_req.py
src/pytrain/protocol/tmcc1/__init__.py
src/pytrain/protocol/tmcc1/acc_cmd.py
src/pytrain/protocol/tmcc1/engine_cmd.py
src/pytrain/protocol/tmcc1/halt_cmd.py
src/pytrain/protocol/tmcc1/route_cmd.py
src/pytrain/protocol/tmcc1/switch_cmd.py
src/pytrain/protocol/tmcc1/tmcc1_command.py
src/pytrain/protocol/tmcc1/tmcc1_constants.py
src/pytrain/protocol/tmcc2/__init__.py
src/pytrain/protocol/tmcc2/engine_cmd.py
src/pytrain/protocol/tmcc2/halt_cmd.py
src/pytrain/protocol/tmcc2/route_cmd.py
src/pytrain/protocol/tmcc2/tmcc2_command.py
src/pytrain/protocol/tmcc2/tmcc2_constants.py
src/pytrain/utils/__init__.py
src/pytrain/utils/argument_parser.py
src/pytrain/utils/dual_logging.py
src/pytrain/utils/expiring_set.py
src/pytrain/utils/host_info.py
src/pytrain/utils/image_utils.py
src/pytrain/utils/ip_tools.py
src/pytrain/utils/path_utils.py
src/pytrain/utils/pollable_queue.py
src/pytrain/utils/singleton.py
src/pytrain/utils/text_utils.py
src/pytrain/utils/unique_deque.py
src/pytrain/utils/validations.py
src/pytrain_ogr.egg-info/PKG-INFO
src/pytrain_ogr.egg-info/SOURCES.txt
src/pytrain_ogr.egg-info/dependency_links.txt
src/pytrain_ogr.egg-info/entry_points.txt
src/pytrain_ogr.egg-info/requires.txt
src/pytrain_ogr.egg-info/top_level.txt
test/README.md
test/__init__.py
test/requirements.txt
test/test_base.py
test/test_pytest.py
test/atc/__init__.py
test/atc/test_block.py
test/cli/__init__.py
test/cli/test_make_service.py
test/comm/__init__.py
test/comm/test_command_listener.py
test/comm/test_command_listener_ai.py
test/comm/test_dispatch_listener.py
test/comm/test_enqueue_proxy_requests.py
test/db/__init__.py
test/db/test_accessory_state.py
test/db/test_client_state_listener.py
test/db/test_comp_data.py
test/db/test_component_state.py
test/db/test_component_state_store.py
test/db/test_component_state_store_ai.py
test/db/test_engine_state.py
test/db/test_startup_state.py
test/db/test_state_watcher.py
test/gpio/__init__.py
test/gpio/test_engine_status.py
test/gpio/test_gpio_device.py
test/gpio/i2c/__init__.py
test/gpio/i2c/smbusmock.py
test/gpio/i2c/test_i2c.py
test/gpio/i2c/test_mcp23017.py
test/gpio/utils/__init__.py
test/gpio/utils/test_text_buffer.py
test/gui/__init__.py
test/gui/test_component_state_gui.py
test/gui/test_dummy_gui_components.py
test/gui/test_gas_station_gui.py
test/pdi/__init__.py
test/pdi/test_amc2_req.py
test/pdi/test_asc2_req.py
test/pdi/test_base3_buffer.py
test/pdi/test_base3_component.py
test/pdi/test_base_req.py
test/pdi/test_bpc2_req.py
test/pdi/test_constants.py
test/pdi/test_d4_req.py
test/pdi/test_irda_req.py
test/pdi/test_lcs_req.py
test/pdi/test_pdi_listener.py
test/pdi/test_pdi_req.py
test/pdi/test_pdi_state_store.py
test/pdi/test_stm2_req.py
test/protocol/__init__.py
test/protocol/test_command_base.py
test/protocol/test_command_req.py
test/protocol/test_constants.py
test/protocol/test_validations.py
test/utils/__init__.py
test/utils/test_argument_parser.py
test/utils/test_dual_logging.py
test/utils/test_expiring_set.py
test/utils/test_ip_tools.py
test/utils/test_path_util.py
test/utils/test_pollable_queue.py
test/utils/test_singleton.py
test/utils/test_text_utils.py
test/utils/test_unique_deque.py
test/utils/test_validations.py