diff --git a/Makefile b/Makefile index ce2861d..42ef7e4 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +PYSQUARED_VERSION ?= v2.0.0-alpha-25w14 +PYSQUARED ?= git+https://github.com/proveskit/pysquared@$(PYSQUARED_VERSION) + .PHONY: all all: .venv download-libraries pre-commit-install help @@ -13,18 +16,11 @@ help: ## Display this help. @$(UV) venv @$(UV) pip install --requirement pyproject.toml -LOCAL_PYSQUARED ?= "" - .PHONY: download-libraries download-libraries: uv .venv ## Download the required libraries @echo "Downloading libraries..." - @$(UV) pip install --requirement lib/requirements.txt --target lib --no-deps --upgrade --quiet; \ - - @if [ -n "$(LOCAL_PYSQUARED)" ]; then \ - $(UV) pip install $(LOCAL_PYSQUARED) --target lib --no-deps --upgrade --quiet; \ - else \ - $(UV) pip install git+https://github.com/proveskit/pysquared --target lib --no-deps --upgrade --quiet; \ - fi + @$(UV) pip install --requirement lib/requirements.txt --target lib --no-deps --upgrade --quiet + @$(UV) pip --no-cache install $(PYSQUARED) --target lib --no-deps --upgrade --quiet @rm -rf lib/*.dist-info @rm -rf lib/.lock @@ -83,7 +79,7 @@ define rsync_to_dest exit 1; \ fi - @rsync -avh $(1)/config.json artifacts/proves/version.py $(1)/*.py $(1)/lib --exclude='requirements.txt' --exclude='__pycache__' $(2) --delete --times --checksum + @rsync -avh $(1)/config.json artifacts/proves/version.py $(1)/*.py $(1)/lib --exclude=".*" --exclude='requirements.txt' --exclude='__pycache__' $(2) --delete --times --checksum endef ##@ Build Tools diff --git a/config.json b/config.json index bf32f00..57f838f 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,5 @@ { "cubesat_name": "Orpheus", -"callsign": "KO6AZM", "last_battery_temp": 20.0, "sleep_duration": 30, "detumble_enable_z": true, @@ -44,10 +43,7 @@ "Everything in life is a spring if you think hard enough!" ], "debug": true, -"legacy": false, "heating": false, -"orpheus":true, -"is_licensed":false, "normal_temp": 20, "normal_battery_temp": 1, "normal_micro_temp": 20, @@ -59,6 +55,7 @@ "reboot_time": 3600, "turbo_clock": false, "radio": { + "license": "", "receiver_id": 250, "sender_id": 251, "start_time": 80000, diff --git a/lib/requirements.txt b/lib/requirements.txt index 2286cc2..1703932 100644 --- a/lib/requirements.txt +++ b/lib/requirements.txt @@ -1,5 +1,4 @@ adafruit-circuitpython-asyncio @ git+https://github.com/adafruit/adafruit_circuitpython_asyncio@1.3.3 -proves-circuitpython-rv3028 @ git+https://github.com/proveskit/PROVES_CircuitPython_RV3028@1.0.0 adafruit-circuitpython-drv2605==1.3.4 adafruit-circuitpython-lis2mdl==2.1.23 adafruit-circuitpython-lsm6ds==4.5.13 @@ -7,6 +6,7 @@ adafruit-circuitpython-mcp9808==3.3.24 adafruit-circuitpython-neopixel==6.3.12 adafruit-circuitpython-register==1.10.1 adafruit-circuitpython-rfm==1.0.3 -adafruit-circuitpython-tca9548a @ git+https://github.com/proveskit/Adafruit_CircuitPython_TCA9548A +adafruit-circuitpython-tca9548a @ git+https://github.com/proveskit/Adafruit_CircuitPython_TCA9548A@1.0.0 adafruit-circuitpython-ticks==1.1.1 adafruit-circuitpython-veml7700==2.0.2 +proves-circuitpython-rv3028 @ git+https://github.com/proveskit/PROVES_CircuitPython_RV3028@1.0.0 diff --git a/main.py b/main.py index aa4317e..4196e62 100644 --- a/main.py +++ b/main.py @@ -15,7 +15,8 @@ import microcontroller try: - from board_definitions import proveskit_rp2040_v4 as board + # from board_definitions import proveskit_rp2040_v4 as board + raise ImportError except ImportError: import board @@ -23,19 +24,23 @@ import lib.pysquared.functions as functions import lib.pysquared.nvm.register as register -import lib.pysquared.pysquared as pysquared +from lib.pysquared.cdh import CommandDataHandler from lib.pysquared.config.config import Config +from lib.pysquared.hardware.busio import _spi_init, initialize_i2c_bus from lib.pysquared.hardware.digitalio import initialize_pin -from lib.pysquared.hardware.rfm9x.factory import RFM9xFactory -from lib.pysquared.hardware.rfm9x.manager import RFM9xManager +from lib.pysquared.hardware.imu.manager.lsm6dsox import LSM6DSOXManager +from lib.pysquared.hardware.magnetometer.manager.lis2mdl import LIS2MDLManager +from lib.pysquared.hardware.radio.manager.sx126x import SX126xManager from lib.pysquared.logger import Logger from lib.pysquared.nvm.counter import Counter from lib.pysquared.nvm.flag import Flag -from lib.pysquared.rtc.rtc_common import RTC +from lib.pysquared.rtc.manager.microcontroller import MicrocontrollerManager +from lib.pysquared.satellite import Satellite from lib.pysquared.sleep_helper import SleepHelper +from lib.pysquared.watchdog import Watchdog from version import __version__ -RTC.init() +rtc = MicrocontrollerManager() logger: Logger = Logger( error_counter=Counter(index=register.ERRORCNT, datastore=microcontroller.nvm), @@ -47,6 +52,7 @@ hardware_version=os.uname().version, software_version=__version__, ) + loiter_time: int = 5 try: @@ -54,33 +60,66 @@ logger.info(f"Code Starting in {loiter_time-i} seconds") time.sleep(1) + watchdog = Watchdog(logger, board.WDT_WDI) + watchdog.pet() + logger.debug("Initializing Config") config: Config = Config("config.json") - c = pysquared.Satellite(config, logger, __version__) - c.watchdog_pet() - sleep_helper = SleepHelper(c, logger) + # TODO(nateinaction): fix spi init + spi0 = _spi_init( + logger, + board.SPI1_SCK, + board.SPI1_MOSI, + board.SPI1_MISO, + ) - radio_manager = RFM9xManager( + radio = SX126xManager( logger, + config.radio, Flag(index=register.FLAG, bit_index=7, datastore=microcontroller.nvm), - RFM9xFactory( - c.spi0, - initialize_pin(logger, board.SPI0_CS0, digitalio.Direction.OUTPUT, True), - initialize_pin(logger, board.RF1_RST, digitalio.Direction.OUTPUT, True), - config.radio, - ), - config.is_licensed, + spi0, + initialize_pin(logger, board.SPI0_CS0, digitalio.Direction.OUTPUT), + initialize_pin(logger, board.RF2_IO0, digitalio.Direction.INPUT), + initialize_pin(logger, board.RF1_RST, digitalio.Direction.OUTPUT), + initialize_pin(logger, board.RF2_IO4, digitalio.Direction.INPUT), ) - f = functions.functions(c, logger, config, sleep_helper, radio_manager) + i2c1 = initialize_i2c_bus( + logger, + board.I2C1_SCL, + board.I2C1_SDA, + 100000, + ) + + magnetometer = LIS2MDLManager(logger, i2c1) + + imu = LSM6DSOXManager(logger, i2c1, 0x6B) + + c = Satellite(logger, config) + + sleep_helper = SleepHelper(c, logger, watchdog) + + cdh = CommandDataHandler(config, logger, radio) + + f = functions.functions( + c, + logger, + config, + sleep_helper, + radio, + magnetometer, + imu, + watchdog, + cdh, + ) def initial_boot(): - c.watchdog_pet() + watchdog.pet() f.beacon() - c.watchdog_pet() + watchdog.pet() f.listen() - c.watchdog_pet() + watchdog.pet() try: c.boot_count.increment() @@ -102,10 +141,10 @@ def initial_boot(): def send_imu_data(): logger.info("Looking to get imu data...") IMUData = [] - c.watchdog_pet() + watchdog.pet() logger.info("IMU has baton") IMUData = f.get_imu_data() - c.watchdog_pet() + watchdog.pet() f.send(IMUData) def main(): @@ -118,7 +157,7 @@ def main(): f.listen_loiter() f.all_face_data() - c.watchdog_pet() + watchdog.pet() f.send_face() f.listen_loiter() @@ -133,13 +172,13 @@ def main(): def critical_power_operations(): initial_boot() - c.watchdog_pet() + watchdog.pet() sleep_helper.long_hibernate() def minimum_power_operations(): initial_boot() - c.watchdog_pet() + watchdog.pet() sleep_helper.short_hibernate() @@ -150,19 +189,15 @@ def minimum_power_operations(): c.check_reboot() if c.power_mode == "critical": - c.rgb = (0, 0, 0) critical_power_operations() elif c.power_mode == "minimum": - c.rgb = (255, 0, 0) minimum_power_operations() elif c.power_mode == "normal": - c.rgb = (255, 255, 0) main() elif c.power_mode == "maximum": - c.rgb = (0, 255, 0) main() else: @@ -176,8 +211,5 @@ def minimum_power_operations(): finally: logger.info("Going Neutral!") - c.rgb = (0, 0, 0) - c.hardware["WDT"] = False - except Exception as e: logger.critical("An exception occured within main.py", e) diff --git a/repl.py b/repl.py index 22469e1..9d0df50 100644 --- a/repl.py +++ b/repl.py @@ -4,7 +4,7 @@ from lib.pysquared.config.config import Config from lib.pysquared.logger import Logger from lib.pysquared.nvm.counter import Counter -from lib.pysquared.pysquared import Satellite +from lib.pysquared.satellite import Satellite from version import __version__ logger: Logger = Logger(