|
19 | 19 | from lib.pysquared.logger import Logger |
20 | 20 | from lib.pysquared.nvm.counter import Counter |
21 | 21 | from lib.pysquared.rtc.manager.microcontroller import MicrocontrollerManager |
22 | | -from lib.pysquared.sleep_helper import SleepHelper |
23 | 22 | from lib.pysquared.watchdog import Watchdog |
| 23 | +from lib.adafruit_mcp230xx.mcp23017 import MCP23017 |
| 24 | +from lib.pysquared.hardware.power_monitor.manager.ina219 import INA219Manager |
| 25 | + |
| 26 | + |
| 27 | +from lib.adafruit_tca9548a import TCA9548A |
| 28 | + |
| 29 | + |
24 | 30 | from version import __version__ |
25 | 31 |
|
26 | 32 | boot_time: float = time.time() |
|
41 | 47 | software_version=__version__, |
42 | 48 | ) |
43 | 49 |
|
| 50 | +logger.debug("Initializing Config") |
| 51 | +config: Config = Config("config.json") |
| 52 | + |
44 | 53 | loiter_time: int = 5 |
45 | 54 | for i in range(loiter_time): |
46 | 55 | logger.info(f"Code Starting in {loiter_time-i} seconds") |
47 | 56 | time.sleep(1) |
48 | 57 |
|
49 | 58 | try: |
50 | 59 |
|
51 | | - initialize_pin(logger, board.SPI0_CS0, digitalio.Direction.OUTPUT, True), |
| 60 | + SPI0_CS0 = initialize_pin(logger, board.SPI0_CS0, digitalio.Direction.OUTPUT, True) |
| 61 | + SPI1_CS0 = initialize_pin(logger, board.SPI1_CS0, digitalio.Direction.OUTPUT, True) |
| 62 | + GPIO_RESET = initialize_pin(logger, board.GPIO_EXPANDER_RESET, digitalio.Direction.OUTPUT, True) |
52 | 63 |
|
| 64 | + i2c1 = initialize_i2c_bus( |
| 65 | + logger, |
| 66 | + board.I2C1_SCL, |
| 67 | + board.I2C1_SDA, |
| 68 | + 100000, |
| 69 | + ) |
| 70 | + |
| 71 | + i2c0 = initialize_i2c_bus( |
| 72 | + logger, |
| 73 | + board.I2C0_SCL, |
| 74 | + board.I2C0_SDA, |
| 75 | + 100000, |
| 76 | + ) |
| 77 | + |
| 78 | + |
| 79 | + mcp = MCP23017(i2c1) |
53 | 80 |
|
54 | | - # This sets up all of the GPIO pins on the MCP23017 |
55 | 81 | #GPB |
56 | 82 | FACE4_ENABLE = mcp.get_pin(8) |
57 | 83 | FACE0_ENABLE = mcp.get_pin(9) |
58 | 84 | FACE1_ENABLE = mcp.get_pin(10) |
59 | 85 | FACE2_ENABLE = mcp.get_pin(11) |
60 | 86 | FACE3_ENABLE = mcp.get_pin(12) |
61 | 87 | FACE5_ENABLE = mcp.get_pin(13) |
62 | | - #READ ONLY |
63 | | - #CHARGE |
64 | | - |
| 88 | + |
65 | 89 | # GPA |
66 | 90 | ENABLE_HEATER = mcp.get_pin(0) |
67 | 91 | PAYLOAD_PWR_ENABLE = mcp.get_pin(1) |
|
72 | 96 | RF2_IO0 = mcp.get_pin(6) |
73 | 97 | RF2_IO3 = mcp.get_pin(7) |
74 | 98 |
|
75 | | - # This defines the direction of the GPIO pins |
76 | | - FACE4_ENABLE.direction = digitalio.Direction.OUTPUT |
77 | | - FACE0_ENABLE.direction = digitalio.Direction.OUTPUT |
78 | | - FACE1_ENABLE.direction = digitalio.Direction.OUTPUT |
79 | | - FACE2_ENABLE.direction = digitalio.Direction.OUTPUT |
80 | | - FACE3_ENABLE.direction = digitalio.Direction.OUTPUT |
81 | | - ENAB_RF.direction = digitalio.Direction.OUTPUT |
82 | | - VBUS_RESET.direction = digitalio.Direction.OUTPUT |
83 | | - ENABLE_HEATER.direction = digitalio.Direction.OUTPUT |
84 | | - PAYLOAD_PWR_ENABLE.direction = digitalio.Direction.OUTPUT |
85 | | - |
86 | | - |
87 | | - |
88 | | - watchdog = Watchdog(logger, board.WDT_WDI) |
89 | | - watchdog.pet() |
90 | | - |
91 | | - logger.debug("Initializing Config") |
92 | | - config: Config = Config("config.json") |
93 | | - |
94 | | - mux_reset = initialize_pin( |
95 | | - logger, board.MUX_RESET, digitalio.Direction.OUTPUT, False |
96 | | - ) |
97 | | - |
98 | | - # TODO(nateinaction): fix spi init |
99 | 99 | spi0 = _spi_init( |
100 | 100 | logger, |
101 | 101 | board.SPI0_SCK, |
|
110 | 110 | board.SPI1_MISO, |
111 | 111 | ) |
112 | 112 |
|
| 113 | + |
113 | 114 | sband_radio = SX1280Manager( |
114 | 115 | logger, |
115 | 116 | config.radio, |
116 | 117 | spi1, |
117 | | - initialize_pin(logger, board.SPI1_CS0, digitalio.Direction.OUTPUT, True), |
| 118 | + SPI1_CS0, |
118 | 119 | initialize_pin(logger, board.RF2_RST, digitalio.Direction.OUTPUT, True), |
119 | | - initialize_pin(logger, board.RF2_IO0, digitalio.Direction.OUTPUT, True), |
| 120 | + RF2_IO0, |
120 | 121 | 2.4, |
121 | 122 | initialize_pin(logger, board.RF2_TX_EN, digitalio.Direction.OUTPUT, False), |
122 | 123 | initialize_pin(logger, board.RF2_RX_EN, digitalio.Direction.OUTPUT, False), |
123 | 124 | ) |
124 | 125 |
|
125 | | - i2c1 = initialize_i2c_bus( |
126 | | - logger, |
127 | | - board.SCL1, |
128 | | - board.SDA1, |
129 | | - 100000, |
130 | | - ) |
131 | | - |
132 | | - sleep_helper = SleepHelper(logger, config, watchdog) |
133 | 126 |
|
134 | 127 | uhf_radio = RFM9xManager( |
135 | | - logger, |
136 | | - config.radio, |
137 | | - spi0, |
138 | | - initialize_pin(logger, board.SPI0_CS0, digitalio.Direction.OUTPUT, True), |
139 | | - initialize_pin(logger, board.RF1_RST, digitalio.Direction.OUTPUT, True), |
| 128 | + logger, |
| 129 | + config.radio, |
| 130 | + spi0, |
| 131 | + SPI0_CS0, |
| 132 | + initialize_pin(logger, board.RF1_RST, digitalio.Direction.OUTPUT, True), |
140 | 133 | ) |
141 | 134 |
|
142 | 135 | magnetometer = LIS2MDLManager(logger, i2c1) |
|
147 | 140 | logger, |
148 | 141 | uhf_radio, |
149 | 142 | config.radio.license, |
150 | | - Counter(Register.message_count), |
| 143 | + Counter(2), |
151 | 144 | 0.2, |
152 | 145 | ) |
153 | 146 |
|
|
157 | 150 | logger, |
158 | 151 | config.cubesat_name, |
159 | 152 | uhf_packet_manager, |
160 | | - boot_time, |
| 153 | + time.monotonic(), |
161 | 154 | imu, |
162 | 155 | magnetometer, |
163 | 156 | uhf_radio, |
164 | 157 | sband_radio, |
165 | | - error_count, |
166 | | - boot_count, |
167 | 158 | ) |
168 | 159 |
|
| 160 | + |
| 161 | + # Face Control Helper Functions |
| 162 | + def all_faces_off(): |
| 163 | + """ |
| 164 | + This function turns off all of the faces. Note the load switches are disabled low. |
| 165 | + """ |
| 166 | + FACE0_ENABLE.value = False |
| 167 | + FACE1_ENABLE.value = False |
| 168 | + FACE2_ENABLE.value = False |
| 169 | + FACE3_ENABLE.value = False |
| 170 | + FACE4_ENABLE.value = False |
| 171 | + |
| 172 | + |
| 173 | + def all_faces_on(): |
| 174 | + """ |
| 175 | + This function turns on all of the faces. Note the load switches are enabled high. |
| 176 | + """ |
| 177 | + FACE0_ENABLE.value = True |
| 178 | + FACE1_ENABLE.value = True |
| 179 | + FACE2_ENABLE.value = True |
| 180 | + FACE3_ENABLE.value = True |
| 181 | + FACE4_ENABLE.value = True |
| 182 | + |
| 183 | + mux_reset = initialize_pin(logger, board.MUX_RESET, digitalio.Direction.OUTPUT, False) |
| 184 | + all_faces_on() |
| 185 | + time.sleep(0.1) |
| 186 | + mux_reset.value = True |
| 187 | + tca = TCA9548A(i2c0, address=int(0x77)) #all 3 connected to high |
| 188 | + |
| 189 | + battery_power_monitor: PowerMonitorProto = INA219Manager(logger, i2c0, 0x40) |
| 190 | + solar_power_monitor: PowerMonitorProto = INA219Manager(logger, i2c0, 0x41) |
| 191 | + |
| 192 | + |
169 | 193 | def nominal_power_loop(): |
170 | 194 | logger.debug( |
171 | 195 | "FC Board Stats", |
172 | 196 | bytes_remaining=gc.mem_free(), |
173 | 197 | ) |
174 | 198 |
|
| 199 | + all_faces_on() |
| 200 | + |
175 | 201 | uhf_packet_manager.send(config.radio.license.encode("utf-8")) |
176 | 202 |
|
177 | 203 | beacon.send() |
|
0 commit comments