summaryrefslogtreecommitdiff
path: root/project/Core/Src/Project
diff options
context:
space:
mode:
Diffstat (limited to 'project/Core/Src/Project')
-rw-r--r--project/Core/Src/Project/local_control.c11
-rw-r--r--project/Core/Src/Project/project.c26
-rw-r--r--project/Core/Src/Project/remote_control.c14
3 files changed, 31 insertions, 20 deletions
diff --git a/project/Core/Src/Project/local_control.c b/project/Core/Src/Project/local_control.c
index 1ddcd2a..6b6f5e4 100644
--- a/project/Core/Src/Project/local_control.c
+++ b/project/Core/Src/Project/local_control.c
@@ -8,8 +8,9 @@
#include <stm32l4xx.h>
#include <stdio.h>
#include "GPIO.h"
+#include "project.h"
-void local_control_start() {
+void local_control_init() {
GPIO_Init();
NVIC_EnableIRQ(EXTI9_5_IRQn);
}
@@ -18,16 +19,14 @@ void local_control_loop() {
}
-void local_control_stop() {
- NVIC_DisableIRQ(EXTI15_10_IRQn);
-}
-
void EXTI9_5_IRQHandler() {
if (~EXTI->PR1 & EXTI_PR1_PIF9)
return;
-
EXTI->PR1 |= EXTI_PR1_PIF9;
+ if (project_get_mode() != LOCAL_MODE)
+ return;
+
int status = !(GPIOC->IDR & GPIO_PIN_9);
printf("Other %i\r\n", status);
}
diff --git a/project/Core/Src/Project/project.c b/project/Core/Src/Project/project.c
index be329fa..7188207 100644
--- a/project/Core/Src/Project/project.c
+++ b/project/Core/Src/Project/project.c
@@ -15,20 +15,22 @@
#include "local_control.h"
#include "remote_control.h"
#include "GPIO.h"
-
-#define LOCAL_MODE (1)
-#define REMOTE_MODE (2)
+#include "project.h"
static uint8_t state = STOPPED_STATE;
uint8_t *project_get_state() {
return &state;
}
+static uint8_t mode = REMOTE_MODE;
+
+uint8_t project_get_mode() {
+ return mode;
+}
void project_run() {
- int mode = LOCAL_MODE;
- local_control_start();
-// remote_control_start();
+ local_control_init();
+ remote_control_init();
GPIO_Init();
NVIC_EnableIRQ(EXTI15_10_IRQn);
@@ -41,8 +43,9 @@ void project_run() {
local_control_loop(); break;
}
- if (state == PAUSED_STATE)
+ if (state == PAUSED_STATE) {
pause_loop();
+ }
}
}
@@ -52,8 +55,13 @@ void EXTI15_10_IRQHandler() {
EXTI->PR1 |= EXTI_PR1_PIF13;
- int status = !(GPIOC->IDR & GPIO_PIN_13);
- printf("%i\r\n", status);
+ mode = !mode;
+ switch (mode) {
+ case REMOTE_MODE:
+ puts("\r\n***REMOTE MODE ACTIVE***\r\n"); break;
+ case LOCAL_MODE:
+ puts("\r\n***MANUAL OVERRIDE MODE ACTIVE***\r\n"); break;
+ }
}
diff --git a/project/Core/Src/Project/remote_control.c b/project/Core/Src/Project/remote_control.c
index dd48cb7..2153a4a 100644
--- a/project/Core/Src/Project/remote_control.c
+++ b/project/Core/Src/Project/remote_control.c
@@ -15,7 +15,7 @@
static char buffer[80];
static char* cur = buffer;
-void remote_control_start() {
+void remote_control_init() {
NVIC_EnableIRQ (USART2_IRQn);
USART2->CR1 |= USART_CR1_RXNEIE; // 1 << 5
@@ -26,10 +26,6 @@ void remote_control_loop() {
}
-void remote_control_stop() {
-
-}
-
static void parse_input(char buffer[]) {
uint8_t *state = project_get_state();
if (!strcmp(buffer, "HELP")) {
@@ -58,15 +54,22 @@ static void parse_input(char buffer[]) {
#include "systick.h"
void USART2_IRQHandler() {
int ch = USART_Read(USART2);
+
+ if (project_get_mode() != REMOTE_MODE)
+ return;
+
putchar(ch);
if (!ch)
return;
+
if (ch == '\r') {
+ putchar('\n');
*cur = 0;
parse_input(buffer);
cur = buffer;
return;
}
+
if (ch == 0x08 || ch == 0x7F) {
if (cur <= buffer)
return;
@@ -74,6 +77,7 @@ void USART2_IRQHandler() {
printf("\b \b");
return;
}
+
*cur++ = ch;
}