Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 1 addition & 4 deletions config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"cubesat_name": "Orpheus",
"callsign": "KO6AZM",
"last_battery_temp": 20.0,
"sleep_duration": 30,
"detumble_enable_z": true,
Expand Down Expand Up @@ -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,
Expand All @@ -59,6 +55,7 @@
"reboot_time": 3600,
"turbo_clock": false,
"radio": {
"license": "",
"receiver_id": 250,
"sender_id": 251,
"start_time": 80000,
Expand Down
4 changes: 2 additions & 2 deletions lib/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
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
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
98 changes: 65 additions & 33 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,32 @@
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

import os

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),
Expand All @@ -47,40 +52,74 @@
hardware_version=os.uname().version,
software_version=__version__,
)

loiter_time: int = 5

try:
for i in range(loiter_time):
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()
Expand All @@ -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():
Expand All @@ -118,7 +157,7 @@ def main():
f.listen_loiter()

f.all_face_data()
c.watchdog_pet()
watchdog.pet()
f.send_face()

f.listen_loiter()
Expand All @@ -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()

Expand All @@ -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:
Expand All @@ -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)
2 changes: 1 addition & 1 deletion repl.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down