Untitled
unknown
c_cpp
a year ago
2.4 kB
10
Indexable
int commAtCmd(const char * cmd, char * response)
{
#ifdef LOGS_CP
BBVAMXDebug("--commAtCmd-- cmd[%s]", cmd);
#endif
int inResult = BBVAMX_SUCCESS;
int size = 1024;
int fd = 0;
int ready;
int writeByte = 0;
int readByte = 0;
const char *ports[] = {"/dev/mux1", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3"}; //const char *ports[] = {"/dev/mux1"}; //const char *ports[] = {"/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3"};
const char *uart;
char *buffer;
fd_set fds;
struct timeval timeout;
for (int x = 0; x < sizeof(ports); x++) {
fd = open(ports[x], O_RDWR | O_NOCTTY); //fd = open(ports[x], O_RDWR | O_NOCTTY); //fd = open(ports[x], O_RDWR);
if (fd < 0)
{
BBVAMXDebug("Error opening fd[%d][%s] errno[%d][%s]", fd, ports[x], errno, strerror(errno));
}
else
{
BBVAMXDebug("Open[%s] fd[%d]", ports[x], fd);
uart = ports[x];
break;
}
}
if (fd < 0) return BBVAMX_ERROR;
inResult = SetTermios(fd, 115200, 8, 'n', 1);
if(inResult < 0)
{
BBVAMXDebug("Error SetTermios");
close(fd);
return BBVAMX_ERROR;
}
//BBVAMXDebug("Uart set configuration: %s", "115200, 8, 'n', 1");
writeByte = write(fd, cmd, /*STRLEN*/STRLEN(cmd));
if(writeByte <= 0)
{
BBVAMXDebug("Error wirte fd[%d][%s] errno[%d][%s]", fd, uart, errno, strerror(errno));
close(fd);
return BBVAMX_ERROR;
}
//OsSleep(100);
FD_ZERO(&fds);
FD_SET(fd, &fds);
timeout.tv_sec = 20;
timeout.tv_usec = 0;
//verificar la disponibilidad de datos en la respuesta
ready = select(fd + 1, &fds, NULL, NULL, &timeout);
if(ready == 0)
{
BBVAMXDebug("The specified time has expired TIMEOUT[%d]", timeout.tv_sec);
close(fd);
return BBVAMX_ERROR;
}
if(ready < 0)
{
BBVAMXDebug("ERROR fd[%d][%s] errno[%d][%s]", fd, uart, errno, strerror(errno));
close(fd);
return BBVAMX_ERROR;
}
buffer = (char *) mallocBBVAMX(size + 1);
memset(buffer, 0x00, size + 1);
readByte = read(fd, buffer, size);
if(readByte <= 0)
{
BBVAMXDebug("Error read fd[%d][%s] errno[%d][%s]", fd, uart, errno, strerror(errno));
close(fd);
freeBBVAMX(buffer);
return BBVAMX_ERROR;
}
memset(response, 0x00, sizeof(response));
memcpy(response, buffer, readByte);
close(fd);
freeBBVAMX(buffer);
BBVAMXDebug("--commAtCmd-- cmd[%s] response[%s]", cmd, response);
return inResult;
}
Editor is loading...
Leave a Comment