Skip to content

Commit

Permalink
fix gpio
Browse files Browse the repository at this point in the history
  • Loading branch information
AsiiaPine committed Sep 5, 2024
1 parent 3bfb656 commit 1e43c46
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 35 deletions.
7 changes: 4 additions & 3 deletions Src/applications/cyphal/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ The node has the following registers:
|| Register name | Description |
| -- | ----------------------- | ----------- |
| 1 | uavcan.node.id | Defines a node-ID. Allowed values [0,127]. |
| 2 | system.name | Defines custom node name. If empty, the node will use the default name. |
| 3 | system.protocol | Auto, Cyphal/CAN or DroneCAN |
| 4 | uavcan.node.description | User/integrator-defined, human-readable description of this specific node. |
| 2 | system.can_terminator | Bitmask which switch can terminators (0 - both off, 1 - enables second, 2 - enables first, 3 - enables both). Works only for v3. |
| 3 | system.name | Defines custom node name. If empty, the node will use the default name. |
| 4 | system.protocol | Auto, Cyphal/CAN or DroneCAN |
| 5 | uavcan.node.description | User/integrator-defined, human-readable description of this specific node. |

> This docs was automatically generated. Do not edit it manually.
7 changes: 3 additions & 4 deletions Src/common/application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,9 @@ static int8_t init_board_periphery() {
auto libparams_strings_amount = NUM_OF_STR_PARAMS;
paramsInit(libparams_integers_amount, libparams_strings_amount, -1, 1);
paramsLoad();
#if defined(CAN1_TERMINATOR) && defined(CAN2_TERMINATOR)

#if defined(CAN1_TERMINATOR_Pin) && defined(CAN2_TERMINATOR_Pin)
auto teminator_parm = paramsGetIntegerValue(IntParamsIndexes::PARAM_SYSTEM_CAN_TEMINATOR);
GPIOPeriphery::set(GPIOPin::TERMINATOR1);
GPIOPeriphery::set(GPIOPin::TERMINATOR2);

std::bitset<2> terminator_mask(teminator_parm);
for (uint8_t i = 0; i < 2; i++) {
Expand All @@ -38,7 +37,7 @@ static int8_t init_board_periphery() {
GPIOPeriphery::reset(GPIOPin(i));
}
}
#endif
#endif
return 0;
}

Expand Down
6 changes: 2 additions & 4 deletions Src/periphery/gpio/gpio.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,18 @@
#define SRC_PERIPHERY_GPIO_HPP_

#include <stdint.h>
#include "logger.hpp"

#ifdef __cplusplus
extern "C" {
#endif

enum class GPIOPin {
TERMINATOR1,
TERMINATOR2,
CAN_TERMINATOR1,
CAN_TERMINATOR2,
GPIO_AMOUNT,
};

class GPIOPeriphery {
static Logger _logger;
public:
static void set(const GPIOPin gpio_pin);
static bool get(const GPIOPin gpio_pin);
Expand Down
30 changes: 12 additions & 18 deletions Src/platform/stm32g0b1/gpio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@

void GPIOPeriphery::set(GPIOPin gpio_pin) {
switch (gpio_pin) {
case GPIOPin::TERMINATOR1:
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin,
GPIO_PIN_SET);
case GPIOPin::CAN_TERMINATOR1:
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_SET);
break;

case GPIOPin::TERMINATOR2:
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port,
CAN2_TERMINATOR_Pin, GPIO_PIN_SET);
case GPIOPin::CAN_TERMINATOR2:
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_SET);
break;
default:
break;
Expand All @@ -26,10 +24,10 @@ void GPIOPeriphery::set(GPIOPin gpio_pin) {

bool GPIOPeriphery::get(GPIOPin gpio_pin) {
switch (gpio_pin) {
case GPIOPin::TERMINATOR1:
case GPIOPin::CAN_TERMINATOR1:
return HAL_GPIO_ReadPin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin);

case GPIOPin::TERMINATOR2:
case GPIOPin::CAN_TERMINATOR2:
return HAL_GPIO_ReadPin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin);

default:
Expand All @@ -38,21 +36,17 @@ bool GPIOPeriphery::get(GPIOPin gpio_pin) {
}

void GPIOPeriphery::reset() {
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin,
GPIO_PIN_RESET);
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin,
GPIO_PIN_RESET);
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_RESET);
}

void GPIOPeriphery::reset(GPIOPin gpio_pin) {
switch (gpio_pin) {
case GPIOPin::TERMINATOR1:
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin,
GPIO_PIN_RESET);
case GPIOPin::CAN_TERMINATOR1:
HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_RESET);
break;
case GPIOPin::TERMINATOR2:
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin,
GPIO_PIN_RESET);
case GPIOPin::CAN_TERMINATOR2:
HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_RESET);
break;
default:
break;
Expand Down
12 changes: 6 additions & 6 deletions Src/platform/ubuntu/gpio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@

#include "periphery/gpio/gpio.hpp"

#include <vector>
#include "main.h"

Logger GPIOPeriphery::_logger = Logger("GPIO");
bool gpio[(int)GPIOPin::GPIO_AMOUNT];
static std::vector<bool> gpio((int)GPIOPin::GPIO_AMOUNT, false);

void GPIOPeriphery::set(GPIOPin gpio_pin) {
gpio[(int)gpio_pin] = 1;
gpio[(int)gpio_pin] = true;
}
bool GPIOPeriphery::get(GPIOPin gpio_pin) {
return gpio[(int)gpio_pin];
}
void GPIOPeriphery::reset() {
for (uint8_t i = 0; i < (int)GPIOPin::GPIO_AMOUNT; i++ ) {
gpio[i] = 0;
for (auto gpio_val : gpio) {
gpio_val = false;
}
}
void GPIOPeriphery::reset(GPIOPin gpio_pin) {
gpio[(int)gpio_pin] = 0;
gpio[(int)gpio_pin] = false;
}

0 comments on commit 1e43c46

Please sign in to comment.