Improved ebus device handling to use tcp based device too

This commit is contained in:
Roland Jax
2014-02-20 23:11:31 +01:00
parent 521fc4c1ae
commit 3ec0712bc4
10 changed files with 291 additions and 227 deletions
+2
View File
@@ -3,6 +3,8 @@ ebus Daemon (ebusd) - ChangeLog
2014-02-20:
* Missing void declarations in various function parameter added.
* New branch "socket" created.
* Improved ebus device handling to use tcp based device too.
2014-01-22:
* autogen.sh modified.
+203 -150
View File
@@ -40,6 +40,10 @@
#include <errno.h>
#include <dirent.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "log.h"
#include "ebus-decode.h"
@@ -68,15 +72,14 @@ static unsigned char ack = EBUS_ACK;
static unsigned char nak = EBUS_NAK;
static unsigned char syn = EBUS_SYN;
static int sfd;
static int bfd;
static int devicetype = BUS_DEVICE_SERIAL;
static struct termios oldtio;
static FILE *rawfp = NULL;
void
eb_set_nodevicecheck(int check)
{
@@ -189,131 +192,6 @@ eb_raw_file_write(const unsigned char *buf, int buflen)
int
eb_serial_valid(void)
{
int serial;
if (ioctl(sfd, TIOCMGET, &serial) < 0 && nodevicecheck == NO)
return -1;
else
return 0;
}
int
eb_serial_open(const char *dev, int *fd)
{
int ret;
struct termios newtio;
sfd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY);
//~ err_ret_if(sfd < 0, -1);
if (sfd < 0)
return -1;
ret = fcntl(sfd, F_SETFL, 0);
err_ret_if(ret < 0, -1);
/* check if the usb device is working */
ret = eb_serial_valid();
err_ret_if(ret < 0, -2);
/* save current settings of serial port */
ret = tcgetattr(sfd, &oldtio);
err_ret_if(ret < 0, -1);
memset(&newtio, '\0', sizeof(newtio));
newtio.c_cflag = SERIAL_BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
newtio.c_iflag = IGNPAR;
newtio.c_oflag &= ~OPOST;
newtio.c_cc[VMIN] = 1;
newtio.c_cc[VTIME] = 0;
ret = tcflush(sfd, TCIFLUSH);
err_ret_if(ret < 0, -1);
/* activate new settings of serial port */
ret = tcsetattr(sfd, TCSANOW, &newtio);
err_ret_if(ret < 0, -1);
*fd = sfd;
return 0;
}
int
eb_serial_close(void)
{
int ret;
/* activate old settings of serial port */
ret = tcsetattr(sfd, TCSANOW, &oldtio);
/* Ignore this error otherwise USB port may stay unclosed */
/* err_ret_if(ret < 0, -1); */
/* Close file descriptor from serial device */
ret = close(sfd);
err_ret_if(ret < 0, -1);
return 0;
}
int
eb_serial_send(const unsigned char *buf, int buflen)
{
int ret, val;
/* write msg to ebus device */
val = write(sfd, buf, buflen);
err_ret_if(val < 0, -1);
ret = tcflush(sfd, TCIOFLUSH);
err_ret_if(ret < 0, -1);
return val;
}
int
eb_serial_recv(unsigned char *buf, int *buflen)
{
int ret;
/* flush deactivated - brings us an error */
/* tcflush(sfd, TCIOFLUSH); */
/* read msg from ebus device */
*buflen = read(sfd, buf, *buflen);
err_if(*buflen < 0);
if (*buflen < 0) {
log_print(L_WAR, "error read serial device");
return -1;
}
if (*buflen > SERIAL_BUFSIZE) {
log_print(L_WAR, "read data len > %d", SERIAL_BUFSIZE);
return -3;
}
/* print bus */
if (showraw == YES)
eb_print_hex(buf, *buflen);
/* dump raw data*/
if (rawdump == YES) {
ret = eb_raw_file_write(buf, *buflen);
if (ret < 0)
log_print(L_WAR, "can't write rawdata");
}
return 0;
}
void
eb_print_result(void)
{
@@ -364,7 +242,7 @@ eb_recv_data_get(unsigned char *buf, int *buflen)
void
eb_recv_data_prepare(const unsigned char *buf, int buflen)
{
unsigned char tmp[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE];
int tmplen, crc;
memset(tmp, '\0', sizeof(tmp));
@@ -407,7 +285,7 @@ eb_recv_data_prepare(const unsigned char *buf, int buflen)
int
eb_recv_data(unsigned char *buf, int *buflen)
{
unsigned char tmp[SERIAL_BUFSIZE], msg[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE], msg[BUS_DEVICE_BUFSIZE];
int tmplen, msglen, ret, i, esc, found;
memset(msg, '\0', sizeof(msg));
@@ -421,7 +299,7 @@ eb_recv_data(unsigned char *buf, int *buflen)
memset(tmp, '\0', sizeof(tmp));
tmplen = sizeof(tmp);
ret = eb_serial_recv(tmp, &tmplen);
ret = eb_bus_recv(tmp, &tmplen);
if (ret < 0)
return -1;
@@ -506,7 +384,7 @@ eb_recv_data(unsigned char *buf, int *buflen)
int
eb_bus_wait_syn(int *skip)
{
unsigned char buf[SERIAL_BUFSIZE];
unsigned char buf[BUS_DEVICE_BUFSIZE];
int buflen, ret, i, found;
found = 99;
@@ -516,7 +394,7 @@ eb_bus_wait_syn(int *skip)
memset(buf, '\0', sizeof(buf));
buflen = sizeof(buf);
ret = eb_serial_recv(buf, &buflen);
ret = eb_bus_recv(buf, &buflen);
if (ret < 0)
return -1;
@@ -543,7 +421,7 @@ eb_bus_wait_syn(int *skip)
int
eb_bus_wait(void)
{
unsigned char buf[SERIAL_BUFSIZE];
unsigned char buf[BUS_DEVICE_BUFSIZE];
int buflen, ret, skip, retry;
struct timeval tact, tlast, tdiff;
@@ -559,7 +437,7 @@ eb_bus_wait(void)
gettimeofday(&tlast, NULL);
/* send QQ */
ret = eb_serial_send(&qq, 1);
ret = eb_bus_send(&qq, 1);
if (ret < 0)
return -1;
@@ -576,7 +454,7 @@ eb_bus_wait(void)
/* receive 1 byte - must be QQ */
memset(buf, '\0', sizeof(buf));
buflen = sizeof(buf);
ret = eb_serial_recv(buf, &buflen);
ret = eb_bus_recv(buf, &buflen);
if (ret < 0)
return -1;
@@ -600,7 +478,7 @@ eb_bus_free(void)
ret = 0;
skip = 0;
ret = eb_serial_send(&syn, 1);
ret = eb_bus_send(&syn, 1);
if (ret < 0)
return -1;
@@ -611,12 +489,187 @@ eb_bus_free(void)
return 0;
}
int
eb_bus_valid(void)
{
int busdevice;
if (ioctl(bfd, TIOCMGET, &busdevice) < 0 && nodevicecheck == NO)
return -1;
else
return 0;
}
void
eb_bus_devicetype(const char *dev)
{
if (strchr(dev, '/') == NULL && strchr(dev, ':') != NULL) {
devicetype = BUS_DEVICE_SOCKET;
}
}
int
eb_bus_open(const char *dev, int *fd)
{
int ret;
eb_bus_devicetype(dev);
if (devicetype == BUS_DEVICE_SERIAL) {
struct termios newtio;
bfd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY);
//~ err_ret_if(bfd < 0, -1);
if (bfd < 0)
return -1;
ret = fcntl(bfd, F_SETFL, 0);
err_ret_if(ret < 0, -1);
/* check if the serial device is working */
ret = eb_bus_valid();
err_ret_if(ret < 0, -2);
/* save current settings of serial device */
ret = tcgetattr(bfd, &oldtio);
err_ret_if(ret < 0, -1);
memset(&newtio, '\0', sizeof(newtio));
newtio.c_cflag = SERIAL_BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
newtio.c_iflag = IGNPAR;
newtio.c_oflag &= ~OPOST;
newtio.c_cc[VMIN] = 1;
newtio.c_cc[VTIME] = 0;
ret = tcflush(bfd, TCIFLUSH);
err_ret_if(ret < 0, -1);
/* activate new settings of serial device */
ret = tcsetattr(bfd, TCSANOW, &newtio);
err_ret_if(ret < 0, -1);
*fd = bfd;
}
if (devicetype == BUS_DEVICE_SOCKET) {
struct sockaddr_in sock;
memset((char *) &sock, 0, sizeof(sock));
char *host = strtok((char *) dev, ":");
char *port = strtok(NULL, ":");
if (inet_addr(host) == INADDR_NONE) {
struct hostent *he;
he = gethostbyname(host);
err_ret_if(he == NULL, -1);
memcpy(&sock.sin_addr, he->h_addr_list[0], he->h_length);
} else {
ret = inet_aton(host, &sock.sin_addr);
err_ret_if(ret == 0, -1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons(atoi(port));
bfd = socket(AF_INET, SOCK_STREAM, 0);
err_ret_if(bfd < 0, -1);
ret = connect(bfd, (struct sockaddr *)&sock, sizeof(sock));
err_ret_if(ret < 0, -1);
*fd = bfd;
}
return 0;
}
int
eb_bus_close(void)
{
int ret;
if (devicetype == BUS_DEVICE_SERIAL) {
/* activate old settings of serial device */
ret = tcsetattr(bfd, TCSANOW, &oldtio);
/* Ignore this error otherwise USB port may stay unclosed */
/* err_ret_if(ret < 0, -1); */
}
/* Close file descriptor from bus device */
ret = close(bfd);
err_ret_if(ret < 0, -1);
return 0;
}
int
eb_bus_send(const unsigned char *buf, int buflen)
{
int ret, val;
/* write msg to bus device */
val = write(bfd, buf, buflen);
err_ret_if(val < 0, -1);
if (devicetype == BUS_DEVICE_SERIAL) {
ret = tcflush(bfd, TCIOFLUSH);
err_ret_if(ret < 0, -1);
}
return val;
}
int
eb_bus_recv(unsigned char *buf, int *buflen)
{
int ret;
/* if (devicetype == BUS_DEVICE_SERIAL) { */
/* flush deactivated - brings us an error */
/* tcflush(bfd, TCIOFLUSH); */
/* } */
/* read msg from bus device */
*buflen = read(bfd, buf, *buflen);
err_if(*buflen < 0);
if (*buflen < 0) {
log_print(L_WAR, "error read bus device");
return -1;
}
if (*buflen > BUS_DEVICE_BUFSIZE) {
log_print(L_WAR, "read data len > %d", BUS_DEVICE_BUFSIZE);
return -3;
}
/* print bus */
if (showraw == YES)
eb_print_hex(buf, *buflen);
/* dump raw data*/
if (rawdump == YES) {
ret = eb_raw_file_write(buf, *buflen);
if (ret < 0)
log_print(L_WAR, "can't write rawdata");
}
return 0;
}
int
eb_send_data_get_ack(unsigned char *buf, int *buflen)
{
unsigned char tmp[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE];
int tmplen, ret, i, j, found;
j = 0;
@@ -627,7 +680,7 @@ eb_send_data_get_ack(unsigned char *buf, int *buflen)
memset(tmp, '\0', sizeof(tmp));
tmplen = sizeof(tmp);
ret = eb_serial_recv(tmp, &tmplen);
ret = eb_bus_recv(tmp, &tmplen);
if (ret < 0)
return -1;
@@ -679,7 +732,7 @@ eb_send_data_get_ack(unsigned char *buf, int *buflen)
void
eb_send_data_prepare(const unsigned char *buf, int buflen)
{
unsigned char crc[2], tmp[SERIAL_BUFSIZE];
unsigned char crc[2], tmp[BUS_DEVICE_BUFSIZE];
int tmplen, crclen;
/* reset struct */
@@ -725,7 +778,7 @@ eb_send_data_prepare(const unsigned char *buf, int buflen)
int
eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus, int *buslen)
{
unsigned char tmp[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE];
int tmplen, ret, val;
ret = 0;
@@ -741,7 +794,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
*buslen = send_data.len_esc;
/* send message to slave */
ret = eb_serial_send(&send_data.msg_esc[1], send_data.len_esc - 1);
ret = eb_bus_send(&send_data.msg_esc[1], send_data.len_esc - 1);
if (ret < 0)
return -1;
@@ -780,7 +833,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
*buslen += send_data.len_esc;
/* send message to slave */
ret = eb_serial_send(&send_data.msg_esc[0], send_data.len_esc);
ret = eb_bus_send(&send_data.msg_esc[0], send_data.len_esc);
if (ret < 0)
return -1;
@@ -837,7 +890,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
*buslen += 1;
/* send message to slave */
ret = eb_serial_send(&nak, 1);
ret = eb_bus_send(&nak, 1);
if (ret < 0)
return -1;
@@ -874,7 +927,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
memcpy(&bus[*buslen], &nak, 1);
*buslen += 1;
ret = eb_serial_send(&nak, 1);
ret = eb_bus_send(&nak, 1);
if (ret < 0)
return -1;
@@ -884,7 +937,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
memcpy(&bus[*buslen], &ack, 1);
*buslen += 1;
ret = eb_serial_send(&ack, 1);
ret = eb_bus_send(&ack, 1);
if (ret < 0)
return -1;
@@ -904,7 +957,7 @@ eb_send_data(const unsigned char *buf, int buflen, int type, unsigned char *bus,
void
eb_execute(int id, char *data, char *buf, int *buflen)
{
unsigned char msg[SERIAL_BUFSIZE], hlp[CMD_DATA_SIZE], bus[TMP_BUFSIZE];
unsigned char msg[BUS_DEVICE_BUFSIZE], hlp[CMD_DATA_SIZE], bus[TMP_BUFSIZE];
char tmp[TMP_BUFSIZE];
int ret, msglen, buslen, msgtype, retry, cycdata, pos, len;
@@ -1166,10 +1219,10 @@ eb_cyc_data_process(const unsigned char *buf, int buflen)
int
eb_cyc_data_recv(void)
{
static unsigned char msg[SERIAL_BUFSIZE];
static unsigned char msg[BUS_DEVICE_BUFSIZE];
static int msglen = 0;
unsigned char buf[SERIAL_BUFSIZE];
unsigned char buf[BUS_DEVICE_BUFSIZE];
int ret, i, buflen;
char tmp[TMP_BUFSIZE];
@@ -1182,7 +1235,7 @@ eb_cyc_data_recv(void)
memset(msg, '\0', sizeof(msg));
/* get new data */
ret = eb_serial_recv(buf, &buflen);
ret = eb_bus_recv(buf, &buflen);
if (ret < 0)
return -1;
+47 -42
View File
@@ -44,9 +44,9 @@
*/
struct send_data {
unsigned char crc; /**< crc of escaped message */
unsigned char msg[SERIAL_BUFSIZE + 1]; /**< original message */
unsigned char msg[BUS_DEVICE_BUFSIZE + 1]; /**< original message */
int len; /**< length of original message */
unsigned char msg_esc[SERIAL_BUFSIZE + 1]; /**< esacaped message */
unsigned char msg_esc[BUS_DEVICE_BUFSIZE + 1]; /**< esacaped message */
int len_esc; /**< length of esacaped message */
};
@@ -56,9 +56,9 @@ struct send_data {
struct recv_data {
unsigned char crc_recv; /**< received crc */
unsigned char crc_calc; /**< calculated crc */
unsigned char msg[SERIAL_BUFSIZE + 1]; /**< unescaped message */
unsigned char msg[BUS_DEVICE_BUFSIZE + 1]; /**< unescaped message */
int len; /**< length of unescaped message */
unsigned char msg_esc[SERIAL_BUFSIZE + 1]; /**< received message */
unsigned char msg_esc[BUS_DEVICE_BUFSIZE + 1]; /**< received message */
int len_esc; /**< length of received message */
};
@@ -165,44 +165,6 @@ int eb_raw_file_write(const unsigned char *buf, int buflen);
/**
* @brief Check if serial FD is vaild.
* @return 0 ok | -1 error
*/
int eb_serial_valid(void);
/**
* @brief Open serial device in raw mode. 1 Byte is then minimum input length.
* @param [in] *dev serial device
* @param [out] *fd file descriptor from opened serial device
* @return 0 ok | -1 error
*/
int eb_serial_open(const char *dev, int *fd);
/**
* @brief close serial device and set settings to default.
* @return 0 ok | -1 error | -2 bad file descriptor
*/
int eb_serial_close(void);
/**
* @brief send bytes to serial device
* @param [in] *buf pointer to a byte array
* @param [in] buflen length of byte array
* @return 0 ok | -1 error | -2 bad file descriptor
*/
int eb_serial_send(const unsigned char *buf, int buflen);
/**
* @brief receive bytes from serial device
* @param [out] *buf pointer to a byte array received bytes
* @param [out] *buflen length of received bytes
* @return 0 ok | -1 error | -2 bad file descriptor | -3 received data > BUFFER
*/
int eb_serial_recv(unsigned char *buf, int *buflen);
/**
* @brief print received results in a specific format
* @return none
@@ -267,6 +229,49 @@ int eb_bus_wait(void);
*/
int eb_bus_free(void);
/**
* @brief check device type
* @param [in] *dev bus device
* @return none
*/
void eb_bus_devicetype(const char *dev);
/**
* @brief Check if bus FD is vaild.
* @return 0 ok | -1 error
*/
int eb_bus_valid(void);
/**
* @brief Open bus device in raw mode. 1 Byte is then minimum input length.
* @param [in] *dev bus device
* @param [out] *fd file descriptor from opened bus device
* @return 0 ok | -1 error
*/
int eb_bus_open(const char *dev, int *fd);
/**
* @brief close bus device (and reset settings)
* @return 0 ok | -1 error | -2 bad file descriptor
*/
int eb_bus_close(void);
/**
* @brief send bytes to bus device
* @param [in] *buf pointer to a byte array
* @param [in] buflen length of byte array
* @return 0 ok | -1 error | -2 bad file descriptor
*/
int eb_bus_send(const unsigned char *buf, int buflen);
/**
* @brief receive bytes from bus device
* @param [out] *buf pointer to a byte array received bytes
* @param [out] *buflen length of received bytes
* @return 0 ok | -1 error | -2 bad file descriptor | -3 received data > BUFFER
*/
int eb_bus_recv(unsigned char *buf, int *buflen);
/**
+1 -1
View File
@@ -685,7 +685,7 @@ eb_cmd_prepare(int id, char *data, unsigned char *msg, int *msglen, char *buf)
char str[CMD_SIZE_S_ZZ + CMD_SIZE_S_CMD + 2 + CMD_SIZE_S_MSG + 1];
char byte;
int ret, i, j, k;
int in[SERIAL_BUFSIZE];
int in[BUS_DEVICE_BUFSIZE];
/* encode msg */
memset(tmp, '\0', sizeof(tmp));
+5 -1
View File
@@ -58,9 +58,13 @@
#define EBUS_MSG_MASTER_MAX_DB_LEN 12
#define EBUS_MSG_SLAVE_MAX_DB_LEN 12
#define BUS_DEVICE_SERIAL 0
#define BUS_DEVICE_SOCKET 1
#define BUS_DEVICE_BUFSIZE 100
#define SERIAL_DEVICE "/dev/ttyUSB0"
#define SERIAL_BAUDRATE B2400
#define SERIAL_BUFSIZE 100
#define CMD_DATA_SIZE 50 /* 5+16+3+16+2 = 42 || 256 */
+2 -2
View File
@@ -64,7 +64,7 @@ eb_htoi(const char *buf)
void
eb_esc(unsigned char *buf, int *buflen)
{
unsigned char tmp[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE];
int tmplen, i;
memset(tmp, '\0', sizeof(tmp));
@@ -101,7 +101,7 @@ eb_esc(unsigned char *buf, int *buflen)
void
eb_unesc(unsigned char *buf, int *buflen)
{
unsigned char tmp[SERIAL_BUFSIZE];
unsigned char tmp[BUS_DEVICE_BUFSIZE];
int tmplen, i, found;
memset(tmp, '\0', sizeof(tmp));
+23 -23
View File
@@ -48,7 +48,7 @@ static int pidfile_locked = NO;
static int msg_queue_on = NO;
static int pidfd = UNSET; /* pidfile file descriptor */
static int serialfd = UNSET; /* serial file descriptor */
static int busfd = UNSET; /* bus file descriptor */
static int socketfd = UNSET; /* socket file descriptor */
@@ -105,12 +105,12 @@ static struct config cfg[] = {
{"address", STR, &address, "\tbus address (" NUMSTR(EBUS_QQ) ")"},
{"cfgdir", STR, &cfgdir, "\tconfiguration directory of command files (" DAEMON_CFGDIR ")"},
{"cfgfile", STR, &cfgfile, "\tdaemon configuration file (" DAEMON_CFGFILE ")"},
{"device", STR, &device, "\tserial device (" SERIAL_DEVICE ")"},
{"device", STR, &device, "\tbus device (" SERIAL_DEVICE ")"},
{"extension", STR, &extension, "extension of command files (" DAEMON_EXTENSION ")"},
{"foreground", BOL, &foreground, "run in foreground"},
{"loglevel", STR, &loglevel, "\tlog level (INF | " LOGTXT ")"},
{"logfile", STR, &logfile, "\tlog file (" DAEMON_LOGFILE ")"},
{"nodevicecheck", BOL, &nodevicecheck, "don't check serial device"},
{"nodevicecheck", BOL, &nodevicecheck, "don't check bus device"},
{"pidfile", STR, &pidfile, "\tpid file (" DAEMON_PIDFILE ")"},
{"port", NUM, &port, "\tport (" NUMSTR(SOCKET_PORT) ")"},
{"rawdump", BOL, &rawdump, "\tdump raw ebus data to file"},
@@ -408,9 +408,9 @@ cleanup(int state)
log_print(L_INF, "port %d closed", port);
}
/* close serial device */
if (serialfd > 0) {
if (eb_serial_close() == -1)
/* close bus device */
if (busfd > 0) {
if (eb_bus_close() == -1)
log_print(L_ERR, "can't close device: %s", device);
else
log_print(L_INF, "%s closed", device);
@@ -467,14 +467,14 @@ main_loop(void)
timeout_reached = NO;
FD_ZERO(&listenfds);
FD_SET(serialfd, &listenfds);
FD_SET(busfd, &listenfds);
FD_SET(socketfd, &listenfds);
maxfd = socketfd;
/* serialfd should be always lower then socketfd */
if (serialfd > socketfd) {
log_print(L_ERR, "serialfd %d > %d socketfd", serialfd, socketfd);
/* busfd should be always lower then socketfd */
if (busfd > socketfd) {
log_print(L_ERR, "busfd %d > %d socketfd", busfd, socketfd);
cleanup(EXIT_FAILURE);
}
@@ -490,12 +490,12 @@ main_loop(void)
/* set readfds to inital listenfds */
readfds = listenfds;
/* check if the usb device is working */
if (eb_serial_valid() < 0 || timeout_reached == YES) {
/* check if the bus device is working */
if (eb_bus_valid() < 0 || timeout_reached == YES) {
timeout_reached = NO;
if (serialfd > 0 && sfd_closed == NO) {
log_print(L_ERR, "serial device is invalid");
if (busfd > 0 && sfd_closed == NO) {
log_print(L_ERR, "bus device is invalid");
sfd_closed = YES;
/* close listing tcp socket */
@@ -506,8 +506,8 @@ main_loop(void)
log_print(L_INF, "port %d closed", port);
}
/* close serial device */
if (eb_serial_close() == -1)
/* close bus device */
if (eb_bus_close() == -1)
log_print(L_ERR, "can't close device: %s", device);
else
log_print(L_INF, "%s closed", device);
@@ -517,8 +517,8 @@ main_loop(void)
/* need sleep to prevent high cpu consumption */
sleep(1);
/* open serial device */
if (eb_serial_open(device, &serialfd) == 0) {
/* open bus device */
if (eb_bus_open(device, &busfd) == 0) {
log_print(L_INF, "%s opened", device);
sfd_closed = NO;
}
@@ -533,7 +533,7 @@ main_loop(void)
ret = select(maxfd + 1, &readfds, NULL, NULL, &timeout);
/* timeout after 10 secs means that ebus is probably
disconnected or USB device is dead */
disconnected or BUS device is dead */
if (ret == 0) {
log_print(L_WAR, "select timeout (%d) reached", timeout.tv_sec);
timeout_reached = YES;
@@ -550,8 +550,8 @@ main_loop(void)
cleanup(EXIT_FAILURE);
}
/* new data from serial port? */
if (FD_ISSET(serialfd, &readfds)) {
/* new data from bus device? */
if (FD_ISSET(busfd, &readfds)) {
/* get cycle message from bus */
ret = eb_cyc_data_recv();
@@ -717,8 +717,8 @@ main(int argc, char *argv[])
}
/* open serial device */
if (eb_serial_open(device, &serialfd) == -1) {
/* open bus device */
if (eb_bus_open(device, &busfd) == -1) {
log_print(L_ALL, "can't open device: %s", device);
cleanup(EXIT_FAILURE);
} else {
+1 -1
View File
@@ -316,7 +316,7 @@ sock_open(int *fd, int port, int localhost)
int ret, opt;
struct sockaddr_in sock;
*fd = socket(PF_INET, SOCK_STREAM, 0);
*fd = socket(AF_INET, SOCK_STREAM, 0);
err_ret_if(*fd < 0, -1);
/* todo: verify if this realy work */
+1 -1
View File
@@ -30,7 +30,7 @@ int main(void) {
int i, j, end, ret;
int bcd, d1b, data[SERIAL_BUFSIZE + 1];
int bcd, d1b, data[BUS_DEVICE_BUFSIZE + 1];
float d1c, d2b, d2c;
char byte;
+6 -6
View File
@@ -151,9 +151,9 @@ int
main(int argc, char *argv[])
{
int i, j, k, end, ret, val, max_argc, buslen;
int in[SERIAL_BUFSIZE + 1];
int in[BUS_DEVICE_BUFSIZE + 1];
char byte;
unsigned char msg[SERIAL_BUFSIZE + 1], bus[TMP_BUFSIZE];
unsigned char msg[BUS_DEVICE_BUFSIZE + 1], bus[TMP_BUFSIZE];
progname = (const char *)strrchr(argv[0], '/');
progname = progname ? (progname + 1) : argv[0];
@@ -202,7 +202,7 @@ main(int argc, char *argv[])
msg[k] = (unsigned char)
(in[j]*16 + in[j+1]);
ret = eb_serial_open(device, &serialfd);
ret = eb_bus_open(device, &serialfd);
if (ret < 0)
fprintf(stdout, "Error open %s.\n", device);
@@ -215,7 +215,7 @@ main(int argc, char *argv[])
}
ret = eb_serial_close();
ret = eb_bus_close();
if (ret < 0)
fprintf(stdout, "Error close %s.\n", device);
@@ -250,7 +250,7 @@ main(int argc, char *argv[])
if (k > 0) {
ret = eb_serial_open(device, &serialfd);
ret = eb_bus_open(device, &serialfd);
if (ret < 0)
fprintf(stdout, "Error open %s.\n", device);
@@ -267,7 +267,7 @@ main(int argc, char *argv[])
}
ret = eb_serial_close();
ret = eb_bus_close();
if (ret < 0)
fprintf(stdout, "Error close %s.\n", device);
}