prepair the use of the cli lib

This commit is contained in:
Laila van Reenen 2024-06-11 21:23:05 +02:00
parent 65ffc134fa
commit f4375bf5b8
Signed by: LailaTheElf
GPG Key ID: 1F4E6EE3E6DDF769
5 changed files with 87 additions and 74 deletions

@ -1 +1 @@
Subproject commit 34f830bd1d23379f58b956f28cd6cd0171d46957
Subproject commit 09ae51070be1be5ebf6717649460510dd744cf65

View File

@ -3,13 +3,13 @@
#include "commands.h"
int boads(char* line)
int contrl(char* line)
{
// do stuff
}
const CMD_t Commands[] = {
{ "ctrl", &test }
{ "ctrl", &contrl }
};
CMDList_t* getCMDList()

View File

@ -1,25 +1,34 @@
#include <arduino.h>
#include <stdbool.h>
#include <stdint.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define WIFI_SSID "MBCBootjes"
#define WIFI_PASS "hetgrootedok"
#include "../lib/cli/CLI/CLI.h"
#include "../lib/cli/CMDList/CMDList.h"
#include "commands.h"
#define WIFI_SSID "UPC46273"
#define WIFI_PASS "SPHZHKRY"
#define UDP_PORT 1234
#define BOAT_ID 1
WiFiUDP UDP;
#define RX_BUFFER_SIZE 255
char rxBuffer[RX_BUFFER_SIZE];
char lineBuffer[RX_BUFFER_SIZE];
uint8_t rxBuffer_readPointer = 0;
uint8_t rxBuffer_lineStart = 0;
uint8_t rxBuffer_lineEnd = 0;
bool unProcessedLineAvailable = false;
bool running = true;
CMDList_t* cmdList;
bool rxBuffer_overflow = false;
int charOut(const char* line)
{
// don't print anything
return 0;
}
void setup() {
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED)
@ -29,75 +38,34 @@ void setup() {
}
UDP.begin(UDP_PORT);
}
void processLine()
{
rxBuffer[rxBuffer_lineEnd] = 0;
uint8_t readPointer = rxBuffer_lineStart;
enum {
reading_id,
reading_cmd,
reading_value,
invalid_line
} readState = reading_id;
running = true;
uint16_t id = 0;
cmdList = getCMDList();
while (rxBuffer_lineStart < rxBuffer_lineEnd)
{
switch (readState)
{
case reading_id:
if (rxBuffer[readPointer] >= '0' && rxBuffer[readPointer] <= '9')
{
id = (id * 10) + (rxBuffer[readPointer] - '0');
}
else if ((rxBuffer[readPointer] == ':') && (id == BOAT_ID))
{
readState = reading_cmd;
}
else
{
readState = invalid_line;
}
break;
case reading_cmd:
break;
case reading_value:
break;
case invalid_line:
rxBuffer_lineStart = rxBuffer_lineEnd;
break;
// init cli
CLI_init((CLI_charOutFn)&charOut, cmdList);
while (running)
{
int packetSize = UDP.parsePacket();
while (packetSize) {
char c;
int len = UDP.read(&c, 1);
if (len == 1)
{
CLI_charIn(c);
packetSize -= c;
}
}
rxBuffer_lineStart++;
}
}
}
int readNextLine()
{
while (rxBuffer_readPointer < RX_BUFFER_SIZE)
{
if (rxBuffer[rxBuffer_readPointer] == '\n')
{
rxBuffer_lineEnd = rxBuffer_readPointer;
processLine();
}
CLI_deinit();
CMDList_deinit(cmdList);
rxBuffer_readPointer++;
}
return;
}
void loop()
{
int packetSize = UDP.parsePacket();
if (packetSize) {
int len = UDP.read(&rxBuffer[0], RX_BUFFER_SIZE);
rxBuffer_readPointer = 0;
rxBuffer_lineStart = 0;
rxBuffer_lineEnd = 0;
readNextLine();
}
}

39
rx_esp2866/src/utils.c Normal file
View File

@ -0,0 +1,39 @@
#include "utils.h"
#include <stdbool.h>
#include <stdint.h>
char* getNextArg(char* args)
{
uint8_t step = 0;
int end = 0;
while (end == 0)
{
if (step < 255)
{
switch (*(args + step))
{
case ';':
end = 1; // found
case '\n':
case '\r':
case '\0':
end = 2; // end of line
}
}
else
{
end = 3; // line to long
}
step++;
}
if (end != 3)
{
return args + step;
}
else
{
return NULL;
}
}

6
rx_esp2866/src/utils.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef UTILS_H
#define UTILS_H
char* getNextArg(char* args);
#endif