You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
1.9 KiB
118 lines
1.9 KiB
/*
|
|
* comand_parser.c
|
|
*
|
|
* Created: 23-Feb-19 17:58:28
|
|
* Author : Edwin
|
|
*/
|
|
|
|
#include <avr/io.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include "entryf.h"
|
|
#include "hal_usart.h"
|
|
#include <avr/interrupt.h>
|
|
|
|
#define RX_BUFF_SIZE 100
|
|
#define ENTRY_LIST_SIZE 3
|
|
#define HUMAN_READABLE 0
|
|
|
|
char rx_buff[RX_BUFF_SIZE];
|
|
uint8_t rx_buff_index = 0;
|
|
uint8_t parse_FLG = 0;
|
|
|
|
typedef (*callback_t)();
|
|
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
callback_t callback;
|
|
}entry_t;
|
|
|
|
uint8_t entryListIndex = 0;
|
|
entry_t entryList[ENTRY_LIST_SIZE]={{"led 1", turnOnLed},
|
|
{"led 0", turnOffLed},
|
|
{"led t", toggleLed}};
|
|
|
|
|
|
void rxCallback()
|
|
{
|
|
char input = hal_USART_readDataReg();
|
|
|
|
if(parse_FLG) return;
|
|
|
|
// if(input == )
|
|
|
|
// enter
|
|
if(input == 13 ){
|
|
rx_buff[rx_buff_index] = '\0';
|
|
parse_FLG = 1;
|
|
return;
|
|
}
|
|
|
|
// backspace
|
|
if(input == 8 && rx_buff_index > 0){
|
|
rx_buff_index--;
|
|
hal_USART_putc(input);
|
|
return;
|
|
}
|
|
|
|
if(rx_buff_index < (RX_BUFF_SIZE - 1) && !parse_FLG){
|
|
rx_buff[rx_buff_index++] = input;
|
|
hal_USART_putc(input);
|
|
}
|
|
}
|
|
|
|
void parser()
|
|
{
|
|
uint8_t i = 0;
|
|
if(!parse_FLG) return;
|
|
for(i = 0; i < ENTRY_LIST_SIZE && parse_FLG; i++) {
|
|
//if(strncmp(entryList[i].name,rx_buff,rx_buff_index) == 0){
|
|
if(strcmp(entryList[i].name,rx_buff) == 0){
|
|
entryList[i].callback();
|
|
rx_buff_index = 0;
|
|
parse_FLG = 0;
|
|
|
|
#if HUMAN_READABLE
|
|
hal_USART_puts("\n\r>>");
|
|
#endif
|
|
|
|
return;
|
|
}
|
|
}
|
|
#if HUMAN_READABLE
|
|
hal_USART_puts("\n\rNo match found!");
|
|
hal_USART_puts("\n\r>>");
|
|
#else
|
|
hal_USART_puts("nmf\n\r");
|
|
#endif
|
|
|
|
rx_buff_index = 0;
|
|
parse_FLG = 0;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
|
|
ledInit();
|
|
|
|
cli();
|
|
|
|
hal_USART_RxEnable();
|
|
hal_USART_TxEnable();
|
|
hal_USART_setCharSize(charSize_8BIT);
|
|
hal_USART_setBaudRate(9600);
|
|
hal_USART_registerRxCallback(rxCallback);
|
|
sei();
|
|
|
|
#if HUMAN_READABLE
|
|
hal_USART_puts("\n\r>>");
|
|
#endif
|
|
|
|
while (1)
|
|
{
|
|
parser();
|
|
}
|
|
}
|
|
|