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_NAME "DSRemote"
#define PROGRAM_VERSION "0.30_1508291645" #define PROGRAM_VERSION "0.30_1508312029"
#define MAX_PATHLEN 4096 #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 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], char buf[MAX_CMD_LEN + 16],
str[256]; str[256];
@ -106,21 +106,23 @@ int tmcdev_write(struct tmcdev *dev, const char *cmd)
return -1; return -1;
} }
if(strlen(cmd) > MAX_CMD_LEN) len = strlen(cmd);
if(len > MAX_CMD_LEN)
{ {
printf("tmcdev error: command too long\n"); printf("tmcdev error: command too long\n");
return -1; return -1;
} }
if(strlen(cmd) < 2) if(len < 2)
{ {
printf("tmcdev error: command too short\n"); printf("tmcdev error: command too short\n");
return -1; return -1;
} }
if(cmd[strlen(cmd) - 1] == '?') if(cmd[len - 1] == '?')
{ {
qry = 1; qry = 1;
} }
@ -145,22 +147,40 @@ int tmcdev_write(struct tmcdev *dev, const char *cmd)
printf("tmc_dev write: %s", buf); 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"); printf("tmcdev error: device write error");
return -1;
} }
if(!qry) if(!qry)
{ {
for(i=0; i<20; i++) 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') 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; return -1;
} }
if(size >= 0) dev->hdrbuf[size] = 0;
{
dev->hdrbuf[size] = 0;
}
if(size == 0)
{
return 0;
}
if(dev->hdrbuf[0] != '#') if(dev->hdrbuf[0] != '#')
{ {

Wyświetl plik

@ -38,38 +38,40 @@ int sockfd;
struct sockaddr_in inet_address; 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) 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); 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 -1;
{
return n;
}
else
{
return -1;
}
} }
static int tmclan_recv(char *buf, int sz) static int tmclan_recv(char *buf, int sz)
{ {
temp_tcp_fds = tcp_fds; /* because select overwrites the arguments */ fd_set temp_tcp_fds = tcp_fds; /* because select overwrites the arguments */
temp_timeout = timeout; 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 */ 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++) for(int i=0; i<20; i++)
{ {
usleep(50000); usleep(25000);
if(tmclan_send("*OPC?\n") != 6) if(tmclan_send("*OPC?\n") != 6)
{ {
printf("tmcdev error: device write error");
return -1; 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') if(str[0] == '1')
{ {
@ -290,15 +303,7 @@ int tmclan_read(struct tmcdev *tmc_device)
return -3; return -3;
} }
if(size >= 0) tmc_device->hdrbuf[size] = 0;
{
tmc_device->hdrbuf[size] = 0;
}
if(size == 0)
{
return 0;
}
if(tmc_device->hdrbuf[0] != '#') if(tmc_device->hdrbuf[0] != '#')
{ {