Ввод и обработка комманды через telnet

rootdev
Offline
Зарегистрирован: 19.03.2017

Добрый день знатоки Arduino!

Есть острая необходимость вводить данные на ардуино удаленно через telnet. Сам telnet сервер настроен, и комманды вводятся с помощью функции switch case, но это неверный подход, и много лишнего кода на минимальные комманды. Почитав гугл ответов нашел мало по данной теме, как вводить длинные команды с распознаванием слов.

Например нужно записать в EEPROM новый IP-адрес для управления arduino. Команда будет примерно такая:

setip 192.168.0.100

Переменная "192.168.0.100" должна записаться в EEPROM.

В данный момент комманды обрабатываются следующим образом, без распознавания слов:

void parseReceivedText()
{ // look at first character and decide what to do
  switch (textBuff[0]) {
    case 'a' : doAnalogCommand();   break;
    case '?' : printHelpMessage();   break;
    case 'i' : commandI(); break;
    case 'e' : commandE(); break;
    case 0x0d : break;  //ignore a carriage return
    default: printErrorMessage();   break;
  } }


void commandE()
{ switch (textBuff[1]) {
  case 'x' : closeConnection(); break;
  default: printErrorMessage(); break; } 
}

void commandI()
{
  switch (textBuff[1]) {
  case 'n' : showinfo(); break;
  case 'p' : commandIP(); break;
  default: printErrorMessage(); break; } 
}

void commandIP()
{ 
  switch (textBuff[2]) {
  case ' ' : changeIP(); break;
  default: printErrorMessage(); break; }
}

void changeIP()
{ client.println("Change ip adress.");
}

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

strncmp(); strstr();

rootdev
Offline
Зарегистрирован: 19.03.2017

Andy пишет:

strncmp(); strstr();

Да, про данные комманды я видел некоторую информацию в интернете. Спасибо!

Но все-таки, Вы можете помочь примерным кодом распознавания именно 2-х слов в комманде?

sadman41
Offline
Зарегистрирован: 19.10.2016

rootdev пишет:

Но все-таки, Вы можете помочь примерным кодом распознавания именно 2-х слов в комманде?

https://www.google.ru/search?q=strncmp+example&*

rootdev
Offline
Зарегистрирован: 19.03.2017

Хорошо. Спасибо всем за наводку, буду разбираться. Если кто-нибудь изъявит желание поделиться кодом, приветствую. Когда сам составлю код поделюсь тут, может кому пригодится.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Есть 100500 способов решения этой задачи.

char *cmd="setip 10.10.10.1";
char *data = strchr(cmd,' ');
if(!data) return 0;
*data=0;
data++;

Теперь в cmd лежит "setip", в data - "10.10.10.1"

Дальше делаешь чё хочешь:

if(!strcmp(cmd,"setip")){/*разбираешь data как IP*/};
if(!strcmp(cmd,"setmask")){/*разбираешь data как маску*/};