The data are sent by another device in the following frame format:
---------------------------------------------------------------------
|start | Command | Data | CRC | End |
|0x02| 0x41 | (0-127 octets) | | 0x03|
--------------------------------------------------------------------
The Data field contains 127 octets as shown and octet 1,2 contains one type of data; octet 3,4 contains another data. I need to get these data
I know how to write and read data to and from a serial port in Linux, but it is just to write and read a simple string (like "ABD")
My issue is that I do not know how to parse the data frame formatted as above so that I can:
- get the data in octet 1,2 in the Data field
- get the data in octet 3,4 in the Data field
- get the value in CRC field to check the consistency of the data
Here the sample snip code that read and write a simple string from and to a serial port in Linux:
Expand|Select|Wrap|Line Numbers
- int writeport(int fd, char *chars) {
- int len = strlen(chars);
- chars[len] = 0x0d; // stick a <CR> after the command
- chars[len+1] = 0x00; // terminate the string properly
- int n = write(fd, chars, strlen(chars));
- if (n < 0) {
- fputs("write failed!\n", stderr);
- return 0;
- }
- return 1;
- }
- int readport(int fd, char *result) {
- int iIn = read(fd, result, 254);
- result[iIn-1] = 0x00;
- if (iIn < 0) {
- if (errno == EAGAIN) {
- printf("SERIAL EAGAIN ERROR\n");
- return 0;
- } else {
- printf("SERIAL read error %d %s\n", errno, strerror(errno));
- return 0;
- }
- }
- return 1;
- }
Thanks all.