Browse Source

Updated ethstream to have separate Command and Data ports for NerdJack

git-svn-id: https://bucket.mit.edu/svn/nilm/acquisition/ethstream@7212 ddd99763-3ecb-0310-9145-efcb8ce7c51f
tags/ethstream-1.1
zacharyc 15 years ago
parent
commit
1d760e033b
3 changed files with 65 additions and 20 deletions
  1. +22
    -10
      ethstream.c
  2. +38
    -9
      nerdjack.c
  3. +5
    -1
      nerdjack.h

+ 22
- 10
ethstream.c View File

@@ -337,23 +337,35 @@ int nerdDoStream(const char *address, int *channel_list, int channel_count, int
static int first_call = 1;
char command[13];

if (nerd_generate_command(command, channel_list, channel_count, precision, period) < 0) {
info("Failed to create configuration command\n");
goto out;
}


if (nerd_send_command(address,"STOP") < 0) {
info("Failed to send STOP command\n");
goto out;
}

if (nerd_send_command(address,command) < 0) {
if (first_call)
retval = -ENOTCONN;
info("Failed to send command\n");
goto out;
}
first_call = 0;
/* Open connection. If this fails, and this is the
first attempt, return a different error code so we give up. */
fd_data = nerd_open(address, NERDJACK_DATA_PORT);
if (fd_data < 0) {
info("Connect failed: %s:%d\n", address, NERDJACK_DATA_PORT);
if (first_call)
retval = -ENOTCONN;
goto out;
goto out;
}
first_call = 0;
if (nerd_generate_command(command, channel_list, channel_count, precision, period) < 0) {
info("Failed to create configuration command\n");
goto out1;
}
if (nerd_data_stream(fd_data, command, channel_count, channel_list, precision, convert, lines) < 0) {
if (nerd_data_stream(fd_data, channel_count, channel_list, precision, convert, lines) < 0) {
info("Failed to open data stream\n");
goto out1;
}


+ 38
- 9
nerdjack.c View File

@@ -120,7 +120,43 @@ int numCopies;
int * destlist;
} deststruct;

int nerd_data_stream(int data_fd, char * command, int numChannels, int *channel_list, int precision, int convert, int lines)
int nerd_send_command(const char * address, char * command)
{
int ret,fd_command;
char buf[3];
fd_command = nerd_open(address, NERDJACK_COMMAND_PORT);
if (fd_command < 0) {
info("Connect failed: %s:%d\n", address, NERDJACK_COMMAND_PORT);
return -2;
}

/* Send request */
ret = send_all_timeout(fd_command, command, strlen(command), 0,
& (struct timeval) { .tv_sec = NERDJACK_TIMEOUT });
if (ret < 0 || ret != strlen(command)) {
verb("short send %d\n", (int)ret);
return -1;
}

ret = recv_all_timeout(fd_command,buf,3,0,
& (struct timeval) { .tv_sec = NERDJACK_TIMEOUT });

nerd_close_conn(fd_command);

if (ret < 0 || ret != 3) {
verb("Error receiving OK for command\n");
return -1;
}

if (0 != strcmp("OK",buf)){
verb("Did not receive OK. Received %s\n",buf);
return -3;
}

return 0;
}

int nerd_data_stream(int data_fd, int numChannels, int *channel_list, int precision, int convert, int lines)
{
unsigned char buf[NERDJACK_PACKET_SIZE];

@@ -128,7 +164,7 @@ int nerd_data_stream(int data_fd, char * command, int numChannels, int *channel_

int index = 0;
//int totalread = 0;
int ret = 0;
//int ret = 0;
int alignment = 0;
signed short datapoint = 0;
unsigned short dataline[NERDJACK_CHANNELS];
@@ -186,13 +222,6 @@ int nerd_data_stream(int data_fd, char * command, int numChannels, int *channel_
int numChannelsSampled = numChannels - numDuplicates;
int numGroups = NERDJACK_NUM_SAMPLES / numChannelsSampled;

/* Send request */
ret = send_all_timeout(data_fd, command, strlen(command), 0,
& (struct timeval) { .tv_sec = NERDJACK_TIMEOUT });
if (ret < 0 || ret != strlen(command)) {
verb("short send %d\n", (int)ret);
return -1;
}

//Loop forever to grab data
while((charsread = recv_all_timeout(data_fd,buf,NERDJACK_PACKET_SIZE,0,


+ 5
- 1
nerdjack.h View File

@@ -19,6 +19,7 @@
#define NERDJACK_CLOCK_RATE 54000000
#define NERDJACK_DATA_PORT 49155
#define NERDJACK_UDP_RECEIVE_PORT 49156
#define NERDJACK_COMMAND_PORT 49157

#define NERDJACK_PACKET_SIZE 1460
#define NERDJACK_NUM_SAMPLES 724
@@ -31,8 +32,11 @@ int nerd_close_conn(int data_fd);
int nerd_generate_command(char * command, int * channel_list, int channel_count, int precision,
unsigned short period);

/* Send given command to NerdJack */
int nerd_send_command(const char * address, char * command);

/* Stream data out of the NerdJack */
int nerd_data_stream(int data_fd, char * command, int numChannels, int * channel_list, int precision, int convert, int lines);
int nerd_data_stream(int data_fd, int numChannels, int * channel_list, int precision, int convert, int lines);

/* Detect the IP Address of the NerdJack and return in ipAddress */
int nerdjack_detect(char * ipAddress);


Loading…
Cancel
Save