1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coloz-blinker-library

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
BlinkerATMaster.h 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
某10 Отправлено 6 лет назад 4bf677d
#ifndef BLINKER_AT_MASTER_H
#define BLINKER_AT_MASTER_H
#include "BlinkerDebug.h"
#include "BlinkerConfig.h"
#include "BlinkerUtility.h"
enum blinker_at_m_state_t {
AT_M_NONE,
AT_M_RESP,
AT_M_OK,
AT_M_ERR
};
#define BLINKER_MAX_AT_MASTER_PARAM_NUM 6
#define BLINKER_MAX_AT_MASTER_DATA_SIZE 48
class BlinkerMasterAT
{
public :
BlinkerMasterAT() {}
// : _isReq(false)
// {}
void update(const String & data) {
// _data = data;
// BLINKER_LOG(BLINKER_F("update data: "), data);
serialize(data);
// return _isReq;
}
blinker_at_m_state_t getState() { return _isReq; }
String reqName() { return _reqName; }
uint8_t paramNum() { return _paramNum; }
String getParam(uint8_t num) {
if (num >= _paramNum) return "";
else return _param[num];
}
private :
blinker_at_m_state_t _isReq;
uint8_t _paramNum;
// String _data;
char _reqName[32];
char _param[BLINKER_MAX_AT_MASTER_PARAM_NUM][BLINKER_MAX_AT_MASTER_DATA_SIZE];
void serialize(const String & _data) {
BLINKER_LOG_ALL(BLINKER_F("serialize _data: "), _data);
// _reqName = "";
memset(_reqName, '\0', 32);
_isReq = AT_M_NONE;
int addr_start = _data.indexOf("+");
int addr_end = 0;
// BLINKER_LOG(BLINKER_F("serialize addr_start: "), addr_start);
// BLINKER_LOG(BLINKER_F("serialize addr_end: "), addr_end);
if ((addr_start != -1) && STRING_contains_string(_data, ":")) {
addr_start = 0;
addr_end = _data.indexOf(":");
if (addr_end == -1) {
_isReq = AT_M_NONE;
return;
}
else {
strcpy(_reqName, _data.substring(addr_start + 1, addr_end).c_str());
BLINKER_LOG_ALL(BLINKER_F("serialize _reqName: "), _reqName);
}
// _isReq = true;
// BLINKER_LOG(BLINKER_F("serialize _data: "), _data);
String serData;
uint16_t dataLen = _data.length();
addr_start = 0;
for (_paramNum = 0; _paramNum < BLINKER_MAX_AT_MASTER_PARAM_NUM; _paramNum++) {
addr_start += addr_end;
addr_start += 1;
serData = _data.substring(addr_start, dataLen);
addr_end = serData.indexOf(",");
// BLINKER_LOG(BLINKER_F("serialize serData: "), serData);
// BLINKER_LOG(BLINKER_F("serialize addr_start: "), addr_start);
// BLINKER_LOG(BLINKER_F("serialize addr_end: "), addr_end);
if (addr_end == -1) {
if (addr_start >= dataLen) {
_isReq = AT_M_NONE;
return;
}
addr_end = serData.indexOf(" ");
if (addr_end != -1) {
// _param[_paramNum] = serData.substring(0, addr_end);
if (addr_end != 0)
{
if (serData.substring(0, addr_end).length() < BLINKER_MAX_AT_MASTER_DATA_SIZE)
{
strcpy(_param[_paramNum], serData.substring(0, addr_end).c_str());
}
_isReq = AT_M_RESP;
BLINKER_LOG_ALL(BLINKER_F("_param0["), _paramNum, \
BLINKER_F("]: "), _param[_paramNum],
BLINKER_F(", addr_end: "), addr_end);
_paramNum++;
return;
}
else if (addr_end == 0 && serData.length() > 0)
{
serData = serData.substring(1, serData.length());
if (serData.substring(0, serData.length()).length() < BLINKER_MAX_AT_MASTER_DATA_SIZE)
{
strcpy(_param[_paramNum], serData.substring(0, serData.length()).c_str());
}
_isReq = AT_M_RESP;
BLINKER_LOG_ALL(BLINKER_F("_param0["), _paramNum, \
BLINKER_F("]: "), _param[_paramNum],
BLINKER_F(", addr_end: "), addr_end);
_paramNum++;
return;
}
}
// _param[_paramNum] = serData;
if (serData.length() < BLINKER_MAX_AT_MASTER_DATA_SIZE)
{
strcpy(_param[_paramNum], serData.c_str());
}
// BLINKER_LOG_ALL(BLINKER_F("serialize serData: "), serData);
BLINKER_LOG_ALL(BLINKER_F("_param1["), _paramNum, \
BLINKER_F("]: "), _param[_paramNum], \
" ", serData);
// BLINKER_LOG_ALL(BLINKER_F("serialize serData: "), serData);
_paramNum++;
_isReq = AT_M_RESP;
return;
}
else {
// _param[_paramNum] = serData.substring(0, addr_end);
if (serData.substring(0, addr_end).length() < BLINKER_MAX_AT_MASTER_DATA_SIZE)
{
strcpy(_param[_paramNum], serData.substring(0, addr_end).c_str());
}
}
BLINKER_LOG_ALL(BLINKER_F("_param["), _paramNum, \
BLINKER_F("]: "), _param[_paramNum]);
}
_isReq = AT_M_RESP;
return;
}
else if (_data == BLINKER_CMD_OK) {
_isReq = AT_M_OK;
return;
}
else if (_data == BLINKER_CMD_ERROR) {
_isReq = AT_M_ERR;
return;
}
else {
_isReq = AT_M_NONE;
return;
}
}
};
#endif

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/coloz-blinker-library.git
git@gitlife.ru:oschina-mirror/coloz-blinker-library.git
oschina-mirror
coloz-blinker-library
coloz-blinker-library
master