Work in progress.

merge-requests/1/head
Teuniz 2015-08-31 20:30:05 +02:00
rodzic e6c4c49d73
commit ff893cb0d9
3 zmienionych plików z 63 dodań i 46 usunięć

Wyświetl plik

@ -33,7 +33,7 @@
#define PROGRAM_NAME "DSRemote"
#define PROGRAM_VERSION "0.30_1508291645"
#define PROGRAM_VERSION "0.30_1508312029"
#define MAX_PATHLEN 4096

Wyświetl plik

@ -96,7 +96,7 @@ void tmcdev_close(struct tmcdev *dev)
int tmcdev_write(struct tmcdev *dev, const char *cmd)
{
int i, size, qry=0;
int i, n, len, qry=0;
char buf[MAX_CMD_LEN + 16],
str[256];
@ -106,21 +106,23 @@ int tmcdev_write(struct tmcdev *dev, const char *cmd)
return -1;
}
if(strlen(cmd) > MAX_CMD_LEN)
len = strlen(cmd);
if(len > MAX_CMD_LEN)
{
printf("tmcdev error: command too long\n");
return -1;
}
if(strlen(cmd) < 2)
if(len < 2)
{
printf("tmcdev error: command too short\n");
return -1;
}
if(cmd[strlen(cmd) - 1] == '?')
if(cmd[len - 1] == '?')
{
qry = 1;
}
@ -145,22 +147,40 @@ int tmcdev_write(struct tmcdev *dev, const char *cmd)
printf("tmc_dev write: %s", buf);
}
size = write(dev->fd, buf, strlen(buf));
n = write(dev->fd, buf, strlen(buf));
if(size < 0)
if(n != (len + 1))
{
printf("tmcdev error: device write error");
return -1;
}
if(!qry)
{
for(i=0; i<20; i++)
{
usleep(50000);
usleep(25000);
write(dev->fd, "*OPC?\n", 6);
n = write(dev->fd, "*OPC?\n", 6);
if(read(dev->fd, str, 128) == 2)
if(n < 0)
{
printf("tmcdev error: device write error");
return -1;
}
n = read(dev->fd, str, 128);
if(n < 0)
{
printf("tmcdev error: device read error");
return -1;
}
if(n == 2)
{
if(str[0] == '1')
{
@ -170,7 +190,7 @@ int tmcdev_write(struct tmcdev *dev, const char *cmd)
}
}
return size - 1;
return len;
}
@ -211,15 +231,7 @@ int tmcdev_read(struct tmcdev *dev)
return -1;
}
if(size >= 0)
{
dev->hdrbuf[size] = 0;
}
if(size == 0)
{
return 0;
}
dev->hdrbuf[size] = 0;
if(dev->hdrbuf[0] != '#')
{

Wyświetl plik

@ -38,38 +38,40 @@ int sockfd;
struct sockaddr_in inet_address;
struct timeval timeout, temp_timeout;
struct timeval timeout;
fd_set tcp_fds, temp_tcp_fds; /* filedescriptor pool */
fd_set tcp_fds; /* filedescriptor pool */
static int tmclan_send(const char *str)
{
int n, len;
int len;
fd_set temp_tcp_fds = tcp_fds; /* because select overwrites the arguments */
struct timeval temp_timeout = timeout;
len = strlen(str);
n = send(sockfd, str, len, MSG_NOSIGNAL);
if(select(sockfd + 1, 0, &temp_tcp_fds, 0, &temp_timeout) != -1)
{
if(FD_ISSET(sockfd, &temp_tcp_fds)) /* check if our file descriptor is set */
{
return send(sockfd, str, len, MSG_NOSIGNAL);
}
}
if(n == len)
{
return n;
}
else
{
return -1;
}
return -1;
}
static int tmclan_recv(char *buf, int sz)
{
temp_tcp_fds = tcp_fds; /* because select overwrites the arguments */
temp_timeout = timeout;
fd_set temp_tcp_fds = tcp_fds; /* because select overwrites the arguments */
struct timeval temp_timeout = timeout;
if(select(sockfd + 1, &temp_tcp_fds, 0, 0, &temp_timeout))
if(select(sockfd + 1, &temp_tcp_fds, 0, 0, &temp_timeout) != -1)
{
if(FD_ISSET(sockfd, &temp_tcp_fds)) /* check if our file descriptor is set */
{
@ -217,14 +219,25 @@ int tmclan_write(struct tmcdev *tmc_device __attribute__ ((unused)), const char
{
for(int i=0; i<20; i++)
{
usleep(50000);
usleep(25000);
if(tmclan_send("*OPC?\n") != 6)
{
printf("tmcdev error: device write error");
return -1;
}
if(tmclan_recv(str, 128) == 2)
n = tmclan_recv(str, 128);
if(n < 0)
{
printf("tmcdev error: device read error");
return -1;
}
if(n == 2)
{
if(str[0] == '1')
{
@ -290,15 +303,7 @@ int tmclan_read(struct tmcdev *tmc_device)
return -3;
}
if(size >= 0)
{
tmc_device->hdrbuf[size] = 0;
}
if(size == 0)
{
return 0;
}
tmc_device->hdrbuf[size] = 0;
if(tmc_device->hdrbuf[0] != '#')
{