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
19 changes: 10 additions & 9 deletions Inc/HALAL/Services/DigitalOutputService/DigitalOutputService.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
#pragma once
#include "HALAL/Models/PinModel/Pin.hpp"

class DigitalOutputService{
public:
static map<uint8_t,Pin> service_ids;
static uint8_t id_counter;
class DigitalOutputService {
public:
static map<uint8_t, Pin> service_ids;
static uint8_t id_counter;

static uint8_t inscribe(Pin& pin);
static void turn_on(uint8_t id);
static void turn_off(uint8_t id);
static void set_pin_state(uint8_t id, PinState state);
static void toggle(uint8_t id);
static uint8_t inscribe(Pin& pin);
static void turn_on(uint8_t id);
static void turn_off(uint8_t id);
static void set_pin_state(uint8_t id, PinState state);
static void toggle(uint8_t id);
static bool lock_pin_state(uint8_t id, PinState state);
};
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ class DigitalOutputService {
static void turn_off(uint8_t id);
static void set_pin_state(uint8_t id, PinState state);
static void toggle(uint8_t id);
static bool lock_pin_state(uint8_t id, PinState state);
};
24 changes: 12 additions & 12 deletions Inc/ST-LIB_LOW/DigitalOutput/DigitalOutput.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
#include "HALAL/HALAL.hpp"

class DigitalOutput {
public:
DigitalOutput() = default;
DigitalOutput(Pin& pin);

void turn_on();
void turn_off();
void toggle();
void set_pin_state(PinState state);
private:
Pin pin;
uint8_t id;
};
public:
DigitalOutput() = default;
DigitalOutput(Pin& pin);

void turn_on();
void turn_off();
void toggle();
void set_pin_state(PinState state);
bool lock_pin_state(PinState state);

private:
Pin pin;
uint8_t id;
};
79 changes: 46 additions & 33 deletions Src/HALAL/Services/DigitalOutputService/DigitalOutputService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,53 +6,66 @@
*/

#include "HALAL/Services/DigitalOutputService/DigitalOutputService.hpp"

#include "ErrorHandler/ErrorHandler.hpp"

uint8_t DigitalOutputService::id_counter = 0;
map<uint8_t,Pin> DigitalOutputService::service_ids = {};
map<uint8_t, Pin> DigitalOutputService::service_ids = {};

uint8_t DigitalOutputService::inscribe(Pin& pin){
Pin::inscribe(pin, OUTPUT);
DigitalOutputService::service_ids[id_counter] = pin;
return id_counter++;
uint8_t DigitalOutputService::inscribe(Pin& pin) {
Pin::inscribe(pin, OUTPUT);
DigitalOutputService::service_ids[id_counter] = pin;
return id_counter++;
}

void DigitalOutputService::turn_off(uint8_t id){
if (not DigitalOutputService::service_ids.contains(id)){
ErrorHandler("ID %d is not registered as a DigitalOutput",id);
return;
}
void DigitalOutputService::turn_off(uint8_t id) {
if (not DigitalOutputService::service_ids.contains(id)) {
ErrorHandler("ID %d is not registered as a DigitalOutput", id);
return;
}

Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)PinState::OFF);
Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)PinState::OFF);
}

void DigitalOutputService::turn_on(uint8_t id){
if (not DigitalOutputService::service_ids.contains(id)){
ErrorHandler("ID %d is not registered as a DigitalOutput",id);
return;
}
void DigitalOutputService::turn_on(uint8_t id) {
if (not DigitalOutputService::service_ids.contains(id)) {
ErrorHandler("ID %d is not registered as a DigitalOutput", id);
return;
}

Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)PinState::ON);
Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)PinState::ON);
}

void DigitalOutputService::set_pin_state(uint8_t id, PinState state){
if (not DigitalOutputService::service_ids.contains(id)){
ErrorHandler("ID %d is not registered as a DigitalOutput",id);
return;
}
void DigitalOutputService::set_pin_state(uint8_t id, PinState state) {
if (not DigitalOutputService::service_ids.contains(id)) {
ErrorHandler("ID %d is not registered as a DigitalOutput", id);
return;
}

Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState) state);
Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)state);
}

void DigitalOutputService::toggle(uint8_t id){
if (not DigitalOutputService::service_ids.contains(id)){
ErrorHandler("ID %d is not registered as a DigitalOutput",id);
return;
}
void DigitalOutputService::toggle(uint8_t id) {
if (not DigitalOutputService::service_ids.contains(id)) {
ErrorHandler("ID %d is not registered as a DigitalOutput", id);
return;
}

Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_TogglePin(pin.port, pin.gpio_pin);
Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_TogglePin(pin.port, pin.gpio_pin);
}

bool DigitalOutputService::lock_pin_state(uint8_t id, PinState state) {
if (not DigitalOutputService::service_ids.contains(id)) {
ErrorHandler("ID %d is not registered as a DigitalOutput", id);
return false;
}

Pin pin = DigitalOutputService::service_ids[id];
HAL_GPIO_WritePin(pin.port, pin.gpio_pin, (GPIO_PinState)state);
HAL_StatusTypeDef locked = HAL_GPIO_LockPin(pin.port, pin.gpio_pin);
return locked == HAL_OK;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,14 @@ map<uint8_t, Pin> DigitalOutputService::service_ids = {};

uint8_t DigitalOutputService::inscribe(Pin& pin) {
EmulatedPin& emulated_pin = SharedMemory::get_pin(pin);
if (emulated_pin.type != PinType::NOT_USED) {
ErrorHandler("Pin %s is not available for DigitalOutput usage, is already using as %s", pin.to_string().c_str(), emulated_pin.type);
return 0;
}
emulated_pin.type = PinType::DigitalOutput;
if (emulated_pin.type != PinType::NOT_USED) {
ErrorHandler(
"Pin %s is not available for DigitalOutput usage, is already using "
"as %s",
pin.to_string().c_str(), emulated_pin.type);
return 0;
}
emulated_pin.type = PinType::DigitalOutput;
Pin::inscribe(pin, OUTPUT);
DigitalOutputService::service_ids[id_counter] = pin;
return id_counter++;
Expand Down Expand Up @@ -62,7 +65,12 @@ void DigitalOutputService::toggle(uint8_t id) {

Pin pin = DigitalOutputService::service_ids[id];
EmulatedPin& emulated_pin = SharedMemory::get_pin(pin);
emulated_pin.PinData.digital_output.state == PinState::ON ?
emulated_pin.PinData.digital_output.state = PinState::OFF :
emulated_pin.PinData.digital_output.state = PinState::ON;
emulated_pin.PinData.digital_output.state == PinState::ON
? emulated_pin.PinData.digital_output.state = PinState::OFF
: emulated_pin.PinData.digital_output.state = PinState::ON;
}

bool DigitalOutputService::lock_pin_state(uint8_t id, PinState state) {
set_pin_state(id, state);
return true;
}
21 changes: 10 additions & 11 deletions Src/ST-LIB_LOW/DigitalOutput/DigitalOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,19 @@

#include "DigitalOutput/DigitalOutput.hpp"

DigitalOutput::DigitalOutput(Pin& pin) : pin(pin), id(DigitalOutputService::inscribe(pin)) {}
DigitalOutput::DigitalOutput(Pin& pin)
: pin(pin), id(DigitalOutputService::inscribe(pin)) {}

void DigitalOutput::turn_on() {
DigitalOutputService::turn_on(id);
}
void DigitalOutput::turn_on() { DigitalOutputService::turn_on(id); }

void DigitalOutput::turn_off() {
DigitalOutputService::turn_off(id);
}
void DigitalOutput::turn_off() { DigitalOutputService::turn_off(id); }

void DigitalOutput::set_pin_state(PinState state) {
DigitalOutputService::set_pin_state(id, state);
DigitalOutputService::set_pin_state(id, state);
}

void DigitalOutput::toggle(){
DigitalOutputService::toggle(id);
}
void DigitalOutput::toggle() { DigitalOutputService::toggle(id); }

bool DigitalOutput::lock_pin_state(PinState state) {
return DigitalOutputService::lock_pin_state(id, state);
}