add pop data and read data

This commit is contained in:
Kinchin Fong 2023-10-10 21:04:20 +08:00
parent 5d95ffc2f5
commit dffc5c5f20
4 changed files with 35 additions and 1 deletions

View File

@ -36,7 +36,8 @@
|------|--------|---------|-------|-------|
| AT | AT | OK | OK | 测试串口是否连通 |
| AT+MSGSTORE=`len`,`data` | AT+MSGSTORE=10,00AA02F556789098783E | OK/ERROR | OK | 向队尾存储一条数据 |
| AT+MSGREAD=? | AT+MSGREAD=? | `index`,`len`,`data`/ERROR | 25,10,00AA02F556789098783E | 读取队头的一条数据,并删除此数据 |
| AT+MSGREAD=? | AT+MSGREAD=? | `index`,`len`,`data`/ERROR | 25,10,00AA02F556789098783E | 读取队头的一条数据,但不删除此数据 |
| AT+MSGPOP=? | AT+MSGPOP=? | `index`,`len`,`data`/ERROR | 25,10,00AA02F556789098783E | 读取队头的一条数据,并删除此数据 |
| AT+DEVIDREAD=? | AT+DEVIDREAD=? | `ID`/ERROR | NHND02458821 | 读取设备唯一序列号 |
| AT+SYSCFGREAD=? | AT+SYSCFGREAD=? | `config`/ERROR | 0,9,6 | 读取配置 |
| AT+FORCESAVE | AT+FORCESAVE | OK/ERROR | OK | 强制写入队列数据至 Flash |

View File

@ -22,6 +22,7 @@ public:
int Init(VFileSystem* fs);
int PushData(uint8_t len, const uint8_t* data);
int PopData(int& index, uint8_t& len, uint8_t* data);
int ReadData(int& index, uint8_t& len, uint8_t* data);
int ReadDataFromIndex(int index, uint8_t& len, uint8_t* data);
int HeadIndex();
int TailIndex();

View File

@ -72,6 +72,17 @@ int DataRecorder::PopData(int& index, uint8_t& len, uint8_t* data)
return IncHeadIndex();
}
int DataRecorder::ReadData(int& index, uint8_t& len, uint8_t* data)
{
if (head == tail) {
return -4;
}
index = head;
len = headBlock.record[head % RECORD_PER_BLOCK].len;
memcpy(data, headBlock.record[head % RECORD_PER_BLOCK].data, len);
return 0;
}
int DataRecorder::ReadDataFromIndex(int index, uint8_t& len, uint8_t* data)
{
int ret;

View File

@ -113,6 +113,27 @@ void InterSerial::ParseCmd(String cmd)
Serial1.printf("OK\r\n");
} else if (cmd == "MSGREAD=?") {
uint8_t dataBuf[RECORD_DATA_SIZE] = {0};
uint8_t dataLen = 0;
int index = 0;
if (rec->ReadData(index, dataLen, dataBuf)) {
Serial1.printf("ERROR\r\n");
return;
}
String result = "";
result += String(index);
result += ",";
result += String(dataLen);
result += ",";
char tmpHex[2] = {0};
for (int i = 0; i < dataLen; i++) {
sprintf(tmpHex, "%02X", dataBuf[i]);
result += tmpHex[0];
result += tmpHex[1];
}
Serial1.printf("%s\r\n", result.c_str());
} else if (cmd == "MSGPOP=?") {
uint8_t dataBuf[RECORD_DATA_SIZE] = {0};
uint8_t dataLen = 0;
int index = 0;