Skip to content

Commit

Permalink
Rename nvm.bitFlags -> nvm.Flag, update comments (#98)
Browse files Browse the repository at this point in the history
Changing name conventions to be more intuitive
  • Loading branch information
nateinaction authored Jan 21, 2025
1 parent 0e7ee09 commit 4d46647
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 28 deletions.
15 changes: 8 additions & 7 deletions lib/pysquared/nvm/bitflags.py → lib/pysquared/nvm/flag.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@
pass


class bitFlag:
class Flag:
"""
get() -> bool: Check if specific bit in a specific byte (held in byte array of nvm) is on (1 -> True) or off (0 -> False)
toggle(value: bool) -> None: Set specific bit in a specific byte (held in byte array of nvm) to on (1) or off (0)
Flag class for managing boolean flags stored in non-volatile memory
"""

def __init__(self, index: int, bit: int, datastore: ByteArray) -> None:
def __init__(self, index: int, bit_index: int, datastore: ByteArray) -> None:
self._index = index # Index of specific byte in array of bytes
self._bit = bit # Position of bit within specific byte
self._bit = bit_index # Position of bit within specific byte
self._datastore = datastore # Array of bytes (Non-volatile Memory)
self._bit_mask = 1 << (bit % 8) # Creating bitmask with bit position
self._bit_mask = 1 << bit_index # Creating bitmask with bit position
# Ex. bit = 3 -> 3 % 8 = 3 -> 1 << 3 = 00001000

def get(self) -> bool: # Return if bit value/flag is on (1) or off (0)
def get(self) -> bool:
"""Get flag value"""
return bool(self._datastore[self._index] & self._bit_mask)

def toggle(self, value: bool) -> None:
"""Toggle flag value"""
if value:
# If true, perform OR on specific byte and bitmask to set bit to set specific bit to 1
self._datastore[self._index] |= self._bit_mask
Expand Down
28 changes: 13 additions & 15 deletions lib/pysquared/pysquared.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
from lib.adafruit_lsm6ds.lsm6dsox import LSM6DSOX # IMU
from lib.adafruit_rfm import rfm9x, rfm9xfsk # Radio
from lib.pysquared.debugcolor import co
from lib.pysquared.nvm.bitflags import bitFlag
from lib.pysquared.nvm.counter import Counter
from lib.pysquared.nvm.flag import Flag

try:
from typing import Any, OrderedDict, TextIO, Union
Expand Down Expand Up @@ -60,14 +60,12 @@ class Satellite:
error_count: Counter = Counter(index=_ERRORCNT, datastore=microcontroller.nvm)

# Define NVM flags
f_softboot: bitFlag = bitFlag(index=_FLAG, bit=0, datastore=microcontroller.nvm)
f_solar: bitFlag = bitFlag(index=_FLAG, bit=1, datastore=microcontroller.nvm)
f_burnarm: bitFlag = bitFlag(index=_FLAG, bit=2, datastore=microcontroller.nvm)
f_brownout: bitFlag = bitFlag(index=_FLAG, bit=3, datastore=microcontroller.nvm)
f_triedburn: bitFlag = bitFlag(index=_FLAG, bit=4, datastore=microcontroller.nvm)
f_shtdwn: bitFlag = bitFlag(index=_FLAG, bit=5, datastore=microcontroller.nvm)
f_burned: bitFlag = bitFlag(index=_FLAG, bit=6, datastore=microcontroller.nvm)
f_fsk: bitFlag = bitFlag(index=_FLAG, bit=7, datastore=microcontroller.nvm)
f_softboot: Flag = Flag(index=_FLAG, bit_index=0, datastore=microcontroller.nvm)
f_burnarm: Flag = Flag(index=_FLAG, bit_index=2, datastore=microcontroller.nvm)
f_brownout: Flag = Flag(index=_FLAG, bit_index=3, datastore=microcontroller.nvm)
f_shtdwn: Flag = Flag(index=_FLAG, bit_index=5, datastore=microcontroller.nvm)
f_burned: Flag = Flag(index=_FLAG, bit_index=6, datastore=microcontroller.nvm)
f_fsk: Flag = Flag(index=_FLAG, bit_index=7, datastore=microcontroller.nvm)

def debug_print(self, statement: Any) -> None:
"""
Expand Down Expand Up @@ -520,20 +518,20 @@ def turbo(self, value: bool) -> None:
self.error_print(f"[ERROR][CLOCK SPEED]{traceback.format_exception(e)}")

@property
def burnarm(self) -> bitFlag:
def burnarm(self) -> Flag:
return self.f_burnarm

@burnarm.setter
def burnarm(self, value: bitFlag) -> None:
self.f_burnarm: bitFlag = value
def burnarm(self, value: Flag) -> None:
self.f_burnarm: Flag = value

@property
def burned(self) -> bitFlag:
def burned(self) -> Flag:
return self.f_burned

@burned.setter
def burned(self, value: bitFlag) -> None:
self.f_burned: bitFlag = value
def burned(self, value: Flag) -> None:
self.f_burned: Flag = value

@property
def RGB(self) -> tuple[int, int, int]:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest

import lib.pysquared.nvm.bitflags as bitflags
from lib.pysquared.nvm.flag import Flag
from mocks.circuitpython.byte_array import ByteArray


Expand All @@ -10,14 +10,14 @@ def setup_datastore():


def test_init(setup_datastore):
flag = bitflags.bitFlag(16, 0, setup_datastore) # Example flag for softboot
flag = Flag(16, 0, setup_datastore) # Example flag for softboot
assert flag._index == 16 # Check if _index (index of byte array) is set to 16
assert flag._bit == 0 # Check if _bit (bit position) is set to first index of byte
assert flag._bit_mask == 0b00000001 # Check if _bit_mask is set correctly


def test_get(setup_datastore):
flag = bitflags.bitFlag(16, 1, setup_datastore) # Example flag for solar
flag = Flag(16, 1, setup_datastore) # Example flag for solar
assert setup_datastore[16] == 0b00000000
assert not flag.get() # Bit should be 0 by default

Expand All @@ -26,7 +26,7 @@ def test_get(setup_datastore):


def test_toggle(setup_datastore):
flag = bitflags.bitFlag(16, 2, setup_datastore) # Example flag for burnarm
flag = Flag(16, 2, setup_datastore) # Example flag for burnarm
assert setup_datastore[16] == 0b00000000
flag.toggle(False) # Set flag to off (bit to 0)
assert setup_datastore[16] == 0b00000000
Expand All @@ -46,12 +46,12 @@ def test_toggle(setup_datastore):


def test_edge_cases(setup_datastore):
first_bit = bitflags.bitFlag(0, 0, setup_datastore)
first_bit = Flag(0, 0, setup_datastore)
first_bit.toggle(True)
assert setup_datastore[0] == 0b00000001
assert first_bit.get()

last_bit = bitflags.bitFlag(0, 7, setup_datastore)
last_bit = Flag(0, 7, setup_datastore)
last_bit.toggle(True)
assert setup_datastore[0] == 0b10000001
assert last_bit.get()

0 comments on commit 4d46647

Please sign in to comment.