* Changes by Boris and Jan:
*
* 1. Original code is in a sub-routine called start()
- * 2. main() can enter a tcp loop (if called with attribute \"tcp\") or
+ * 2. main() can enter a tcp loop (if called with attribute \"tcp\") or
* just call start() (otherwise)
*
*
static int hexMode = HEXMODE;
-static const char trbcmd_version[] = "$Revision: 2.46 $";
+static const char trbcmd_version[] = "$Revision: 2.47 $";
#define BACKLOG 10
static uint16_t tcp_port = 55555;
"disconnect from server\n"
" "
"(tcp-server mode only)\n\n");
-
+
fprintf(STDOUT, "Start as TCP/IP-Server:\n");
fprintf(STDOUT, "Usage: %s [-h] [-d] [-p portnumber] [-b] [-V] tcp\n",
progName);
uint16_t trgCtr = 0; /* counter for the %ctr option */
int opt;
int i;
-
+
for (i = 0; i < CMD_MAX_NUM; i++) {
cmd[i][0] = 0;
}
-
+
/* LowMem Settings, i.e. 3 MBye maximum */
USER_BUFFER_SIZE = 786432; /* 0xc000 * 4 Byte */
trb_debug = 0;
-
+
/* Parse Arguments */
optind = 1;
while ((opt = getopt(argc, argv, "+hf:n:d:DHMV")) != -1) {
for (i = 0; i < CMD_MAX_NUM; i++) {
cmd[i][0] = '\0';
}
-
+
if ((scriptStatus =
getline(&cmdLine, &cmdLineLen, scriptFile)) == -1) {
if (feof(scriptFile) != 0) {
return -1;
}
}
-
+
/* Remove newline and comments */
if ((c = strchr(cmdLine, '\n')) != NULL) {
*c = '\0';
if ((c = strchr(cmdLine, '#')) != NULL) {
*c = '\0';
}
-
+
/* Split up cmdLine */
-
+
sscanf(cmdLine, "%s %s %s %s %s %s %s %s %s %s",
cmd[0], cmd[1], cmd[2], cmd[3], cmd[4],
cmd[5], cmd[6], cmd[7], cmd[8], cmd[9]);
-
+
for (i = 0, cmdLen = 0; i < CMD_MAX_NUM; i++, cmdLen++) {
if (cmd[i][0] == '\0')
break;
/* Empty Line */
continue;
}
-
+
if (scriptFile != NULL) {
fprintf(STDOUT, "#Line %d: %s\n", lineCtr, cmdLine);
}
}
}
free(data);
-
+
} else if (strncmp(cmd[0], "rm", CMD_SIZE) == 0) {
/*******************************************/
fprintf(STDOUT, "H: 0x%04x 0x%04x\n", (*p++) & 0xffff, len);
for (i = 0; (i < len) && (p < end); i++) {
fprintf(STDOUT, "0x%04x 0x%08x\n",
- (option == 0 ? reg_address + i : i),
+ (option == 0 ? reg_address + i : i),
*p++);
}
}
return -1;
}
} else {
- for (i = 0; (i < status) && (i < 128); i += 4) {
+ for (i = 0; (i < status) && (i < NUM_ENDPOINTS * 4); i += 4) {
fprintf(STDOUT, "0x%04x 0x%08x%08x 0x%02x\n",
uidBuffer[i + 3],
uidBuffer[i], uidBuffer[i + 1], uidBuffer[i + 2]);
/*******************************************/
/* Not a valid command */
/*******************************************/
-
+
if (scriptFile != NULL) {
fprintf(STDERR, "Line #%d: Invalid command\n", lineCtr);
} else {
return -1;
}
} /* End script-file-loop */
-
+
trgCtr++;
} /* End repeat-loop */
-
+
/* Cleanup */
if (scriptFile != NULL) {
fclose(scriptFile);
free(cmdLine);
}
-
+
return 0;
}
pid_t pid = -1;
while ((pid = waitpid(WAIT_ANY, NULL, WNOHANG)) > 0) {
if (tcp_debug == 1) {
- fprintf(stderr, "caught SIGCHLD, pid: %d has terminated\n", pid);
+ fprintf(stderr, "caught SIGCHLD, pid: %d has terminated\n", pid);
}
}
}
int main(int argc, char **argv)
{
unsigned int i;
-
+
STDOUT = stdout;
STDERR = stderr;
if (strcmp(argv[argc - 1], "tcp") != 0) {
/* Run normal TRBCMD */
- init_ports();
+ init_ports();
if (start(argc, argv) == 0) {
exit(EXIT_SUCCESS);
}
struct sockaddr_in their_addr;
int yes = 1;
int daemonMode = 0;
- int opt;
-
+ int opt;
+
/* Parse Arguments */
optind = 1;
while ((opt = getopt(argc, argv, "+hdVbp:")) != -1) {
break;
case 'b':
daemonMode = 1;
- break;
+ break;
default:
break;
}
}
-
+
if (daemonMode == 1) {
/* fork the first time */
if ((myPid = fork()) == -1) { /* Error fork, Mother exit, no child */
freopen("/dev/console", "a", stderr);
tcp_debug = 0;
}
-
+
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket() error!");
} else if (tcp_debug > 0) {
fprintf(stderr, "\nsocket() OK...\n");
}
-
+
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(tcp_port);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(&(my_addr.sin_zero), 0, 8);
- if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))
+ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))
== -1) {
perror("setsockopt() error!");
exit(EXIT_FAILURE);
} else if (tcp_debug > 0) {
fprintf(stderr, "setsockopt() OK...\n");
}
-
+
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) ==
-1) {
perror("bind() error!");
" to port %d [OK]\n\n",
tcp_port);
}
-
+
/* Enter an infinite loop to accept clients */
while (1) {
socklen_t sin_size = sizeof(struct sockaddr_in);
ssize_t msgLen = 0;
char command[256];
-
+
if (tcp_debug > 0) {
fprintf(stderr, "\n\nlisten...\n\n");
}
write(myFd, "\n", 1);
atexit(atexit0);
init_ports();
- clientout = fdopen(myFd, "a");
+ clientout = fdopen(myFd, "a");
STDOUT = clientout;
STDERR = clientout;
trb_stderr = clientout;
-
+
while (1) {
msgLen = recv(myFd, (void *)command, 256, 0);
if (msgLen == -1) {
}
msgLen -= 2;
command[msgLen] = '\0';
-
- int start_argc = 0;
+
+ int start_argc = 0;
char *start_argv[256];
int start_arg = 0;
start_argv[start_argc++] = argv[0];
start_arg = 0;
}
}
-
+
if (tcp_debug > 0) {
fprintf(stderr, "%d: received: %i\n", myPid, msgLen);
if (msgLen > 0) {
fprintf(stderr, "%d: command: ", myPid);
for (i = 1; i < start_argc; i++) {
- fprintf(stderr, "%s ", start_argv[i]);
+ fprintf(stderr, "%s ", start_argv[i]);
}
fprintf(stderr, "\n");
}
}
-
+
/* Execute command */
if (start_argc == 1) continue;
if ((strcmp(start_argv[1], "exit") == 0) ||