ELEC-C7222
Libraries for ELEC C7222 Course Work
Loading...
Searching...
No Matches
platform.hpp
Go to the documentation of this file.
1
11#ifndef ELEC_C7222_PLATFORM_HPP
12#define ELEC_C7222_PLATFORM_HPP
13
14#include <cstdint>
15#include <memory>
16#include <chrono>
17
19#include "onboard_led.hpp"
21
22#include "led.hpp"
23#include "button.hpp"
24#include "pwm.hpp"
25
26
27
28namespace c7222 {
29
119 public:
124
134
140
149
153 static void SleepMs(uint32_t ms);
154
159 static void SleepUs(uint64_t us);
160
165 static void SleepUntil(std::chrono::steady_clock::time_point target);
166
170 static void TightLoopContents();
172
194
216
223
228 return GetPicoWBoard()->GetLed(id);
229 }
230
237
250 std::unique_ptr<PwmOut> CreateLedPwm(PicoWBoard::LedId id, uint8_t dim);
251
256 GpioInputEvent events,
257 std::function<void(uint32_t)> handler) {
258 GetPicoWBoard()->GetButton(id).EnableIrq(events, std::move(handler));
259 }
260
267
274
279 GetPicoWBoard()->GetLed(id).Toggle();
280 }
281
286 GetPicoWBoard()->GetLed(id).On();
287 }
288
293 GetPicoWBoard()->GetLed(id).Off();
294 }
295
299 bool IsInitialized() const {
300 return initialized_;
301 }
302
303 private:
307 Platform();
308 ~Platform() = default;
310 static Platform* instance_;
311
313 bool initialized_{false};
315 bool arch_initialized_{false};
317 bool board_io_initialized_{false};
318
319};
320
321} // namespace c7222
322
323#endif // ELEC_C7222_PLATFORM_HPP
Input-only GPIO abstraction for push-buttons.
C++ board-level helper for the C7222 Pico W board.
Input-only GPIO wrapper intended for push-buttons.
Definition button.hpp:43
bool IsPressed() const
Return true if the button is currently pressed (active-low).
void EnableIrq(GpioInputEvent events, std::function< void(uint32_t)> handler)
Enable GPIO IRQs for the given event set and handler.
void DisableIrq()
Disable any IRQs configured for this input.
Output-only GPIO wrapper intended for LEDs.
Definition led.hpp:39
void Off()
Turn the LED off.
void Toggle()
Toggle the LED state.
void On()
Turn the LED on.
Disable both copy and move operations.
Definition non_copyable.hpp:75
Simple on-board LED controller.
Definition onboard_led.hpp:34
static OnBoardLED * GetInstance()
Get the singleton instance.
Reads the RP2040 on-chip temperature sensor via the ADC.
Definition onchip_temperature_sensor.hpp:33
static OnChipTemperatureSensor * GetInstance()
Get the singleton instance.
Board-level convenience wrapper for the C7222 Pico W board.
Definition c7222_pico_w_board.hpp:42
static PicoWBoard * GetInstance()
Access the singleton instance (if used).
Led & GetLed(LedId id)
Retrieve a board LED by logical ID.
LedId
Logical LED identifiers mapped to GPIO pins.
Definition c7222_pico_w_board.hpp:52
ButtonId
Logical button identifiers mapped to GPIO pins.
Definition c7222_pico_w_board.hpp:64
Button & GetButton(ButtonId id)
Retrieve a board button by logical ID.
Singleton access to platform-specific devices and initialization.
Definition platform.hpp:118
void EnableButtonIrq(PicoWBoard::ButtonId id, GpioInputEvent events, std::function< void(uint32_t)> handler)
Enable IRQs for a board button.
Definition platform.hpp:255
static void SleepUntil(std::chrono::steady_clock::time_point target)
Sleep until a steady-clock time point.
std::unique_ptr< PwmOut > CreateLedPwm(PicoWBoard::LedId id, uint8_t dim)
Create a PWM output for a board LED pin.
static void SleepUs(uint64_t us)
Sleep for a number of microseconds.
bool Initialize()
Initialize platform-specific hardware.
PicoWBoard * GetPicoWBoard()
Access the PicoWBoard singleton.
Definition platform.hpp:220
Button & GetButton(PicoWBoard::ButtonId id)
Get a board button by logical ID.
Definition platform.hpp:234
void ToggleLed(PicoWBoard::LedId id)
Toggle a board LED.
Definition platform.hpp:278
bool IsInitialized() const
Return true if platform initialization has completed.
Definition platform.hpp:299
static void SleepMs(uint32_t ms)
Sleep for a number of milliseconds.
bool EnsureArchInitialized()
Ensure the platform architecture is initialized.
void LedOff(PicoWBoard::LedId id)
Turn a board LED off.
Definition platform.hpp:292
void LedOn(PicoWBoard::LedId id)
Turn a board LED on.
Definition platform.hpp:285
void DisableButtonIrq(PicoWBoard::ButtonId id)
Disable IRQs for a board button.
Definition platform.hpp:264
bool IsButtonPressed(PicoWBoard::ButtonId id)
Read the current state of a board button (true if pressed).
Definition platform.hpp:271
static Platform * GetInstance()
Get the singleton instance.
OnBoardLED * GetOnBoardLed()
Access the on-board LED.
Definition platform.hpp:191
Led & GetLed(PicoWBoard::LedId id)
Get a board LED by logical ID.
Definition platform.hpp:227
OnChipTemperatureSensor * GetOnChipTemperatureSensor()
Access the on-chip temperature sensor.
Definition platform.hpp:213
static void TightLoopContents()
Body for tight polling loops (no-op hook).
Output-only GPIO abstraction for LEDs.
C7222 course abstractions namespace.
Definition ble.hpp:20
GpioInputEvent
GPIO input event bitmask for IRQ configuration.
Definition gpio.hpp:96
On-board LED abstraction for the C7222 course.
RP2040 on-chip temperature sensor wrapper.
Simple PWM output wrapper with period and duty cycle configuration.