--- /dev/null
+# ------------ Compiler / Linker Options -------------------------------
+
+AXIS_USABLE_LIBS = UCLIBC GLIBC
+include $(AXIS_TOP_DIR)/tools/build/Rules.axis
+
+INCDIR = -I../../libtrbnet
+CPPFLAGS =
+
+CFLAGS = -pipe -g -Wall -Winline -O3 -fPIC -finline-functions -finline-limit=600000
+
+CXX = g++
+CXXFLAGS = -pipe -g -Wall
+
+LD = $(CC)
+#LD = $(CXX)
+
+LDFLAGS =
+LIBDIR = -L../../libtrbnet
+LOADLIBES = -ltrbnet
+
+# ------------ TARGETS -------------------------------------------------
+
+TARGETS = trbnetd
+
+LIB_TARGETS =
+
+# ------------ Libaries ------------------------------------------------
+
+AR = ar
+ARFLAGS = -srv
+
+# ------------ Pattern Rules -------------------------------------------
+
+# C Code:
+%.o: %.c
+ $(CC) $< -c $(CFLAGS) $(CPPFLAGS) $(INCDIR) -o $@
+
+# C++ Code:
+%.o: %.cpp
+ $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@
+
+%.o: %.cc
+ $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@
+
+%.o: %.C
+ $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@
+
+# C/C++ Objects (set LD accordingly)
+%: %.o
+ @echo LINKING $@
+ $(LD) $^ $(LDFLAGS) $(LIBDIR) $(LOADLIBES) -o $@
+ @echo DONE!
+
+# Libaries
+%.a: $%
+ @echo CREATING library $@
+ $(AR) $(ARFLAGS) $@ $^
+ @echo DONE!
+
+%.so: $%
+ @echo CREATING shared library $@
+ $(LD) -shared -O $^ -o $@
+ @echo DONE!
+
+# RPCGEN
+%.h: %.x
+ rpcgen -N -M $^
+
+# ------------ Targets -------------------------------------------------
+
+.PHONY: all
+all: $(LIB_TARGETS) $(TARGETS)
+
+.PHONY: clean
+clean:
+ rm -f *.o core core.*
+ rcsclean
+
+.PHONY: distclean
+distclean: clean
+ rm -f $(TARGETS) $(LIB_TARGETS)
+ rcsclean -u
+
+.PHONY: cleanrpc
+cleanrpc:
+ rm -f trbrpc_clnt.c trbrpc_svc.c trbrpc.h trbrpc_xdr.c
+
+.PHONY: depend
+depend:
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIR) *.c
+
+# ------------ Dependencies --------------------------------------------
+
+trbnetd: trbnetd.o server.o trbrpc_xdr.o
+
+trbnetd: server.o trbnetd.o trbrpc_xdr.o
+
+trbnetd.o: trbnetd.c trbrpc.h
+
+server.o: server.c
+
+trbrpc_xdr.o: trbrpc_xdr.c trbrpc.h
--- /dev/null
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "trbrpc.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <trbnet.h>
+
+#ifndef SIG_PF
+#define SIG_PF void(*)(int)
+#endif
+
+int
+_register_read_1(register_read_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (register_read_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_register_read_mem_1(register_read_mem_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (register_read_mem_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result,
+ rqstp));
+}
+
+int
+_register_write_1(register_write_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (register_write_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_register_write_mem_1(register_write_mem_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (register_write_mem_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp));
+}
+
+int
+_read_uid_1(read_uid_1_argument * argp, void *result, struct svc_req *rqstp)
+{
+ return (read_uid_1_svc(argp->arg1, argp->arg2, result, rqstp));
+}
+
+int
+_set_address_1(set_address_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (set_address_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_send_trigger_1(send_trigger_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (send_trigger_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp));
+}
+
+int
+_ipu_data_read_1(ipu_data_read_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (ipu_data_read_1_svc
+ (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result,
+ rqstp));
+}
+
+int
+_fpga_register_read_1(uint16_t * argp, void *result, struct svc_req *rqstp)
+{
+ return (fpga_register_read_1_svc(*argp, result, rqstp));
+}
+
+int
+_fpga_register_write_1(fpga_register_write_1_argument * argp, void *result,
+ struct svc_req *rqstp)
+{
+ return (fpga_register_write_1_svc(argp->arg1, argp->arg2, result, rqstp));
+}
+
+int _trb_fifo_flush_1(uint8_t * argp, void *result, struct svc_req *rqstp)
+{
+ return (trb_fifo_flush_1_svc(*argp, result, rqstp));
+}
+
+int _network_reset_1(void *argp, void *result, struct svc_req *rqstp)
+{
+ return (network_reset_1_svc(result, rqstp));
+}
+
+int _com_reset_1(void *argp, void *result, struct svc_req *rqstp)
+{
+ return (com_reset_1_svc(result, rqstp));
+}
+
+static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp)
+{
+ union
+ {
+ register_read_1_argument register_read_1_arg;
+ register_read_mem_1_argument register_read_mem_1_arg;
+ register_write_1_argument register_write_1_arg;
+ register_write_mem_1_argument register_write_mem_1_arg;
+ read_uid_1_argument read_uid_1_arg;
+ set_address_1_argument set_address_1_arg;
+ send_trigger_1_argument send_trigger_1_arg;
+ ipu_data_read_1_argument ipu_data_read_1_arg;
+ uint16_t fpga_register_read_1_arg;
+ fpga_register_write_1_argument fpga_register_write_1_arg;
+ uint8_t trb_fifo_flush_1_arg;
+ } argument;
+ union
+ {
+ RetVal register_read_1_res;
+ RetVal register_read_mem_1_res;
+ Status register_write_1_res;
+ Status register_write_mem_1_res;
+ RetVal read_uid_1_res;
+ Status set_address_1_res;
+ Status send_trigger_1_res;
+ RetVal ipu_data_read_1_res;
+ RetVal fpga_register_read_1_res;
+ Status fpga_register_write_1_res;
+ Status trb_fifo_flush_1_res;
+ Status network_reset_1_res;
+ Status com_reset_1_res;
+ } result;
+ bool_t retval;
+ xdrproc_t _xdr_argument, _xdr_result;
+ bool_t(*local) (char *, void *, struct svc_req *);
+
+ switch (rqstp->rq_proc) {
+ case NULLPROC:
+ (void)svc_sendreply(transp, (xdrproc_t) xdr_void, (char *)NULL);
+ return;
+
+ case REGISTER_READ:
+ _xdr_argument = (xdrproc_t) xdr_register_read_1_argument;
+ _xdr_result = (xdrproc_t) xdr_RetVal;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_register_read_1;
+ break;
+
+ case REGISTER_READ_MEM:
+ _xdr_argument = (xdrproc_t) xdr_register_read_mem_1_argument;
+ _xdr_result = (xdrproc_t) xdr_RetVal;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_register_read_mem_1;
+ break;
+
+ case REGISTER_WRITE:
+ _xdr_argument = (xdrproc_t) xdr_register_write_1_argument;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_register_write_1;
+ break;
+
+ case REGISTER_WRITE_MEM:
+ _xdr_argument = (xdrproc_t) xdr_register_write_mem_1_argument;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local =
+ (bool_t(*)(char *, void *, struct svc_req *))_register_write_mem_1;
+ break;
+
+ case READ_UID:
+ _xdr_argument = (xdrproc_t) xdr_read_uid_1_argument;
+ _xdr_result = (xdrproc_t) xdr_RetVal;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_read_uid_1;
+ break;
+
+ case SET_ADDRESS:
+ _xdr_argument = (xdrproc_t) xdr_set_address_1_argument;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_set_address_1;
+ break;
+
+ case SEND_TRIGGER:
+ _xdr_argument = (xdrproc_t) xdr_send_trigger_1_argument;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_send_trigger_1;
+ break;
+
+ case IPU_DATA_READ:
+ _xdr_argument = (xdrproc_t) xdr_ipu_data_read_1_argument;
+ _xdr_result = (xdrproc_t) xdr_RetVal;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_ipu_data_read_1;
+ break;
+
+ case FPGA_REGISTER_READ:
+ _xdr_argument = (xdrproc_t) xdr_uint16_t;
+ _xdr_result = (xdrproc_t) xdr_RetVal;
+ local =
+ (bool_t(*)(char *, void *, struct svc_req *))_fpga_register_read_1;
+ break;
+
+ case FPGA_REGISTER_WRITE:
+ _xdr_argument = (xdrproc_t) xdr_fpga_register_write_1_argument;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local =
+ (bool_t(*)(char *, void *, struct svc_req *))_fpga_register_write_1;
+ break;
+
+ case TRB_FIFO_FLUSH:
+ _xdr_argument = (xdrproc_t) xdr_uint8_t;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_trb_fifo_flush_1;
+ break;
+
+ case NETWORK_RESET:
+ _xdr_argument = (xdrproc_t) xdr_void;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_network_reset_1;
+ break;
+
+ case COM_RESET:
+ _xdr_argument = (xdrproc_t) xdr_void;
+ _xdr_result = (xdrproc_t) xdr_Status;
+ local = (bool_t(*)(char *, void *, struct svc_req *))_com_reset_1;
+ break;
+
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+ memset((char *)&argument, 0, sizeof(argument));
+ if (!svc_getargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) & argument)) {
+ svcerr_decode(transp);
+ return;
+ }
+ retval = (bool_t) (*local) ((char *)&argument, (void *)&result, rqstp);
+ if (retval > 0
+ && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+ svcerr_systemerr(transp);
+ }
+ if (!svc_freeargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) & argument)) {
+ fprintf(stderr, "%s", "unable to free arguments");
+ exit(1);
+ }
+ if (!trbnetrpcprog_1_freeresult(transp, _xdr_result, (caddr_t) & result))
+ fprintf(stderr, "%s", "unable to free results");
+
+ return;
+}
+
+static pid_t myPid = -1;
+
+int main(int argc, char **argv)
+{
+ int daemonMode = 1;
+ register SVCXPRT *transp;
+
+ if ((argc >= 2) && (strcmp(argv[1], "-f") == 0))
+ daemonMode = 0;
+
+ pmap_unset(TRBNETRPCPROG, TRBNETRPCVERS);
+
+ transp = svcudp_create(RPC_ANYSOCK);
+ if (transp == NULL) {
+ fprintf(stderr, "%s", "cannot create udp service.");
+ exit(1);
+ }
+ if (!svc_register
+ (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_UDP)) {
+ fprintf(stderr, "%s",
+ "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, udp).");
+ exit(1);
+ }
+
+ transp = svctcp_create(RPC_ANYSOCK, 0, 0);
+ if (transp == NULL) {
+ fprintf(stderr, "%s", "cannot create tcp service.");
+ exit(1);
+ }
+ if (!svc_register
+ (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_TCP)) {
+ fprintf(stderr, "%s",
+ "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, tcp).");
+ exit(1);
+ }
+
+ /* initialize FPGA */
+ init_ports();
+
+
+ if (daemonMode == 1) {
+ /* fork the first time */
+ if ((myPid = fork()) == -1) { /* Error fork, Mother exit, no child */
+ perror(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ if (myPid > 0) {
+ exit(EXIT_SUCCESS); /* Mother exit */
+ }
+ /* fork the second time */
+ setsid();
+ if ((myPid = fork()) == -1) { /* Error fork, Mother exit, no child */
+ perror(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+ if (myPid > 0) {
+ exit(EXIT_SUCCESS); /* Mother exit */
+ }
+ /* close stdin, stdout, stderr, change dir */
+ chdir("/");
+ freopen("/dev/null", "r", stdin);
+ freopen("/dev/null", "a", stdout);
+ freopen("/dev/console", "a", stderr);
+ }
+ svc_run();
+
+ /* NOTREACHED */
+ fprintf(stderr, "%s", "svc_run returned");
+ exit(EXIT_FAILURE);
+}
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include <trbnet.h>
+#include <trberror.h>
+
+#include "trbrpc.h"
+
+int trbnetrpcprog_1_freeresult(SVCXPRT * transp,
+ xdrproc_t xdr_result, caddr_t result)
+{
+ xdr_free(xdr_result, result);
+
+ /*
+ * Insert additional freeing code here, if needed
+ */
+
+ return 1;
+}
+
+static void copyStatus(Status* status)
+{
+ status->trb_errno = trb_errno;
+ status->status_common = trb_term.status_common;
+ status->status_channel = trb_term.status_channel;
+ status->sequence = trb_term.sequence;
+ status->channel = trb_term.channel;
+}
+
+bool_t register_read_1_svc(uint16_t trb_address,
+ uint16_t reg_address,
+ u_int dsize,
+ RetVal * retVal,
+ struct svc_req * rqstp)
+{
+ int status;
+
+ /* allocate buffer memory */
+ retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+ if (retVal->data.Buffer_val == NULL) {
+ return FALSE;
+ }
+
+ status = trb_register_read(trb_address, reg_address,
+ (uint32_t *) retVal->data.Buffer_val, dsize);
+
+ copyStatus(&retVal->status);
+ retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+ return TRUE;
+}
+
+bool_t register_read_mem_1_svc(uint16_t trb_address,
+ uint16_t reg_address,
+ uint8_t option,
+ uint16_t size,
+ u_int dsize,
+ RetVal* retVal,
+ struct svc_req * rqstp)
+{
+ int status;
+
+ /* allocate buffer memory */
+ retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+ if (retVal->data.Buffer_val == NULL)
+ return FALSE;
+
+ status = trb_register_read_mem(trb_address, reg_address, option, size,
+ (uint32_t *) retVal->data.Buffer_val, dsize);
+
+ copyStatus(&retVal->status);
+ retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+ return TRUE;
+}
+
+bool_t register_write_1_svc(uint16_t trb_address,
+ uint16_t reg_address,
+ uint32_t value,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = trb_register_write(trb_address, reg_address, value);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+bool_t register_write_mem_1_svc(uint16_t trb_address,
+ uint16_t reg_address,
+ uint8_t option,
+ Buffer data,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = trb_register_write_mem(trb_address,
+ reg_address,
+ option,
+ (uint32_t*)data.Buffer_val,
+ data.Buffer_len);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+bool_t read_uid_1_svc(uint16_t trb_address,
+ u_int dsize,
+ RetVal* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ /* allocate buffer memory */
+ retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+ if (retVal->data.Buffer_val == NULL) {
+ return FALSE;
+ }
+
+ status = trb_read_uid(trb_address,
+ (uint32_t*)retVal->data.Buffer_val,
+ dsize);
+
+ copyStatus(&retVal->status);
+ retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+ return TRUE;
+}
+
+bool_t set_address_1_svc(uint64_t uid,
+ uint8_t endpoint,
+ uint16_t trb_address,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = trb_set_address(uid, endpoint, trb_address);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+bool_t network_reset_1_svc(Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = network_reset();
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+bool_t send_trigger_1_svc(uint8_t type,
+ uint32_t trg_info,
+ uint8_t trg_random,
+ uint16_t trg_number,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = trb_send_trigger(type, trg_info, trg_random, trg_number);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+bool_t ipu_data_read_1_svc(uint8_t type,
+ uint32_t trg_info,
+ uint8_t trg_random,
+ uint16_t trg_number,
+ u_int dsize,
+ RetVal* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ /* allocate buffer memory */
+ retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+ if (retVal->data.Buffer_val == NULL)
+ return FALSE;
+
+ status = trb_ipu_data_read(type, trg_info, trg_random, trg_number,
+ (uint32_t *)retVal->data.Buffer_val, dsize);
+
+ copyStatus(&retVal->status);
+ retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+ return TRUE;
+}
+
+bool_t fpga_register_read_1_svc(uint16_t reg_address,
+ RetVal* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ /* allocate buffer memory */
+ retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * 1);
+ if (retVal->data.Buffer_val == NULL)
+ return FALSE;
+
+ status = fpga_register_read(reg_address,
+ (uint32_t *)retVal->data.Buffer_val);
+
+ copyStatus(&retVal->status);
+ retVal->data.Buffer_len = status == -1 ? 0 : 1;
+
+ return TRUE;
+}
+
+bool_t fpga_register_write_1_svc(uint16_t reg_address,
+ uint32_t value,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = fpga_register_write(reg_address, value);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+
+
+
+bool_t trb_fifo_flush_1_svc(uint8_t channel,
+ Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = trb_fifo_flush(channel);
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
+
+
+bool_t com_reset_1_svc(Status* retVal,
+ struct svc_req* rqstp)
+{
+ int status;
+
+ status = com_reset();
+
+ copyStatus(retVal);
+
+ return TRUE;
+}
--- /dev/null
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _TRBRPC_H_RPCGEN
+#define _TRBRPC_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct {
+ u_int Buffer_len;
+ uint32_t *Buffer_val;
+} Buffer;
+
+struct Status {
+ int trb_errno;
+ uint16_t status_common;
+ uint16_t status_channel;
+ uint16_t sequence;
+ uint8_t channel;
+};
+typedef struct Status Status;
+
+struct RetVal {
+ Status status;
+ Buffer data;
+};
+typedef struct RetVal RetVal;
+
+struct register_read_1_argument {
+ uint16_t arg1;
+ uint16_t arg2;
+ u_int arg3;
+};
+typedef struct register_read_1_argument register_read_1_argument;
+
+struct register_read_mem_1_argument {
+ uint16_t arg1;
+ uint16_t arg2;
+ uint8_t arg3;
+ uint16_t arg4;
+ u_int arg5;
+};
+typedef struct register_read_mem_1_argument register_read_mem_1_argument;
+
+struct register_write_1_argument {
+ uint16_t arg1;
+ uint16_t arg2;
+ uint32_t arg3;
+};
+typedef struct register_write_1_argument register_write_1_argument;
+
+struct register_write_mem_1_argument {
+ uint16_t arg1;
+ uint16_t arg2;
+ uint8_t arg3;
+ Buffer arg4;
+};
+typedef struct register_write_mem_1_argument register_write_mem_1_argument;
+
+struct read_uid_1_argument {
+ uint16_t arg1;
+ u_int arg2;
+};
+typedef struct read_uid_1_argument read_uid_1_argument;
+
+struct set_address_1_argument {
+ uint64_t arg1;
+ uint8_t arg2;
+ uint16_t arg3;
+};
+typedef struct set_address_1_argument set_address_1_argument;
+
+struct send_trigger_1_argument {
+ uint8_t arg1;
+ uint32_t arg2;
+ uint8_t arg3;
+ uint16_t arg4;
+};
+typedef struct send_trigger_1_argument send_trigger_1_argument;
+
+struct ipu_data_read_1_argument {
+ uint8_t arg1;
+ uint32_t arg2;
+ uint8_t arg3;
+ uint16_t arg4;
+ u_int arg5;
+};
+typedef struct ipu_data_read_1_argument ipu_data_read_1_argument;
+
+struct fpga_register_write_1_argument {
+ uint16_t arg1;
+ uint32_t arg2;
+};
+typedef struct fpga_register_write_1_argument fpga_register_write_1_argument;
+
+struct register_modify_1_argument {
+ uint16_t arg1;
+ uint16_t arg2;
+ int arg3;
+ uint32_t arg4;
+ uint32_t arg5;
+};
+typedef struct register_modify_1_argument register_modify_1_argument;
+
+#define TRBNETRPCPROG 0x20000099
+#define TRBNETRPCVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define REGISTER_READ 1
+extern enum clnt_stat register_read_1(uint16_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern bool_t register_read_1_svc(uint16_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define REGISTER_READ_MEM 2
+extern enum clnt_stat register_read_mem_1(uint16_t , uint16_t , uint8_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern bool_t register_read_mem_1_svc(uint16_t , uint16_t , uint8_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define REGISTER_WRITE 3
+extern enum clnt_stat register_write_1(uint16_t , uint16_t , uint32_t , Status *, CLIENT *);
+extern bool_t register_write_1_svc(uint16_t , uint16_t , uint32_t , Status *, struct svc_req *);
+#define REGISTER_WRITE_MEM 4
+extern enum clnt_stat register_write_mem_1(uint16_t , uint16_t , uint8_t , Buffer , Status *, CLIENT *);
+extern bool_t register_write_mem_1_svc(uint16_t , uint16_t , uint8_t , Buffer , Status *, struct svc_req *);
+#define READ_UID 5
+extern enum clnt_stat read_uid_1(uint16_t , u_int , RetVal *, CLIENT *);
+extern bool_t read_uid_1_svc(uint16_t , u_int , RetVal *, struct svc_req *);
+#define SET_ADDRESS 6
+extern enum clnt_stat set_address_1(uint64_t , uint8_t , uint16_t , Status *, CLIENT *);
+extern bool_t set_address_1_svc(uint64_t , uint8_t , uint16_t , Status *, struct svc_req *);
+#define SEND_TRIGGER 7
+extern enum clnt_stat send_trigger_1(uint8_t , uint32_t , uint8_t , uint16_t , Status *, CLIENT *);
+extern bool_t send_trigger_1_svc(uint8_t , uint32_t , uint8_t , uint16_t , Status *, struct svc_req *);
+#define IPU_DATA_READ 8
+extern enum clnt_stat ipu_data_read_1(uint8_t , uint32_t , uint8_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern bool_t ipu_data_read_1_svc(uint8_t , uint32_t , uint8_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define FPGA_REGISTER_READ 9
+extern enum clnt_stat fpga_register_read_1(uint16_t , RetVal *, CLIENT *);
+extern bool_t fpga_register_read_1_svc(uint16_t , RetVal *, struct svc_req *);
+#define FPGA_REGISTER_WRITE 10
+extern enum clnt_stat fpga_register_write_1(uint16_t , uint32_t , Status *, CLIENT *);
+extern bool_t fpga_register_write_1_svc(uint16_t , uint32_t , Status *, struct svc_req *);
+#define TRB_FIFO_FLUSH 11
+extern enum clnt_stat trb_fifo_flush_1(uint8_t , Status *, CLIENT *);
+extern bool_t trb_fifo_flush_1_svc(uint8_t , Status *, struct svc_req *);
+#define NETWORK_RESET 12
+extern enum clnt_stat network_reset_1(Status *, CLIENT *);
+extern bool_t network_reset_1_svc(Status *, struct svc_req *);
+#define COM_RESET 13
+extern enum clnt_stat com_reset_1(Status *, CLIENT *);
+extern bool_t com_reset_1_svc(Status *, struct svc_req *);
+#define REGISTER_MODIFY 14
+extern enum clnt_stat register_modify_1(uint16_t , uint16_t , int , uint32_t , uint32_t , Status *, CLIENT *);
+extern bool_t register_modify_1_svc(uint16_t , uint16_t , int , uint32_t , uint32_t , Status *, struct svc_req *);
+extern int trbnetrpcprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define REGISTER_READ 1
+extern enum clnt_stat register_read_1();
+extern bool_t register_read_1_svc();
+#define REGISTER_READ_MEM 2
+extern enum clnt_stat register_read_mem_1();
+extern bool_t register_read_mem_1_svc();
+#define REGISTER_WRITE 3
+extern enum clnt_stat register_write_1();
+extern bool_t register_write_1_svc();
+#define REGISTER_WRITE_MEM 4
+extern enum clnt_stat register_write_mem_1();
+extern bool_t register_write_mem_1_svc();
+#define READ_UID 5
+extern enum clnt_stat read_uid_1();
+extern bool_t read_uid_1_svc();
+#define SET_ADDRESS 6
+extern enum clnt_stat set_address_1();
+extern bool_t set_address_1_svc();
+#define SEND_TRIGGER 7
+extern enum clnt_stat send_trigger_1();
+extern bool_t send_trigger_1_svc();
+#define IPU_DATA_READ 8
+extern enum clnt_stat ipu_data_read_1();
+extern bool_t ipu_data_read_1_svc();
+#define FPGA_REGISTER_READ 9
+extern enum clnt_stat fpga_register_read_1();
+extern bool_t fpga_register_read_1_svc();
+#define FPGA_REGISTER_WRITE 10
+extern enum clnt_stat fpga_register_write_1();
+extern bool_t fpga_register_write_1_svc();
+#define TRB_FIFO_FLUSH 11
+extern enum clnt_stat trb_fifo_flush_1();
+extern bool_t trb_fifo_flush_1_svc();
+#define NETWORK_RESET 12
+extern enum clnt_stat network_reset_1();
+extern bool_t network_reset_1_svc();
+#define COM_RESET 13
+extern enum clnt_stat com_reset_1();
+extern bool_t com_reset_1_svc();
+#define REGISTER_MODIFY 14
+extern enum clnt_stat register_modify_1();
+extern bool_t register_modify_1_svc();
+extern int trbnetrpcprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern bool_t xdr_Buffer (XDR *, Buffer*);
+extern bool_t xdr_Status (XDR *, Status*);
+extern bool_t xdr_RetVal (XDR *, RetVal*);
+extern bool_t xdr_register_read_1_argument (XDR *, register_read_1_argument*);
+extern bool_t xdr_register_read_mem_1_argument (XDR *, register_read_mem_1_argument*);
+extern bool_t xdr_register_write_1_argument (XDR *, register_write_1_argument*);
+extern bool_t xdr_register_write_mem_1_argument (XDR *, register_write_mem_1_argument*);
+extern bool_t xdr_read_uid_1_argument (XDR *, read_uid_1_argument*);
+extern bool_t xdr_set_address_1_argument (XDR *, set_address_1_argument*);
+extern bool_t xdr_send_trigger_1_argument (XDR *, send_trigger_1_argument*);
+extern bool_t xdr_ipu_data_read_1_argument (XDR *, ipu_data_read_1_argument*);
+extern bool_t xdr_fpga_register_write_1_argument (XDR *, fpga_register_write_1_argument*);
+extern bool_t xdr_register_modify_1_argument (XDR *, register_modify_1_argument*);
+
+#else /* K&R C */
+extern bool_t xdr_Buffer ();
+extern bool_t xdr_Status ();
+extern bool_t xdr_RetVal ();
+extern bool_t xdr_register_read_1_argument ();
+extern bool_t xdr_register_read_mem_1_argument ();
+extern bool_t xdr_register_write_1_argument ();
+extern bool_t xdr_register_write_mem_1_argument ();
+extern bool_t xdr_read_uid_1_argument ();
+extern bool_t xdr_set_address_1_argument ();
+extern bool_t xdr_send_trigger_1_argument ();
+extern bool_t xdr_ipu_data_read_1_argument ();
+extern bool_t xdr_fpga_register_write_1_argument ();
+extern bool_t xdr_register_modify_1_argument ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_TRBRPC_H_RPCGEN */
--- /dev/null
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "trbrpc.h"
+
+bool_t
+xdr_Buffer (XDR *xdrs, Buffer *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_array (xdrs, (char **)&objp->Buffer_val, (u_int *) &objp->Buffer_len, ~0,
+ sizeof (uint32_t), (xdrproc_t) xdr_uint32_t))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_Status (XDR *xdrs, Status *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_int (xdrs, &objp->trb_errno))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->status_common))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->status_channel))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->sequence))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->channel))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_RetVal (XDR *xdrs, RetVal *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_Status (xdrs, &objp->status))
+ return FALSE;
+ if (!xdr_Buffer (xdrs, &objp->data))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_register_read_1_argument (XDR *xdrs, register_read_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->arg3))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_register_read_mem_1_argument (XDR *xdrs, register_read_mem_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->arg3))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg4))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->arg5))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_register_write_1_argument (XDR *xdrs, register_write_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg3))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_register_write_mem_1_argument (XDR *xdrs, register_write_mem_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->arg3))
+ return FALSE;
+ if (!xdr_Buffer (xdrs, &objp->arg4))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_read_uid_1_argument (XDR *xdrs, read_uid_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->arg2))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_set_address_1_argument (XDR *xdrs, set_address_1_argument *objp)
+{
+ if (!xdr_uint64_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg3))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_send_trigger_1_argument (XDR *xdrs, send_trigger_1_argument *objp)
+{
+ if (!xdr_uint8_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->arg3))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg4))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_ipu_data_read_1_argument (XDR *xdrs, ipu_data_read_1_argument *objp)
+{
+ if (!xdr_uint8_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_uint8_t (xdrs, &objp->arg3))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg4))
+ return FALSE;
+ if (!xdr_u_int (xdrs, &objp->arg5))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_fpga_register_write_1_argument (XDR *xdrs, fpga_register_write_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg2))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_register_modify_1_argument (XDR *xdrs, register_modify_1_argument *objp)
+{
+ if (!xdr_uint16_t (xdrs, &objp->arg1))
+ return FALSE;
+ if (!xdr_uint16_t (xdrs, &objp->arg2))
+ return FALSE;
+ if (!xdr_int (xdrs, &objp->arg3))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg4))
+ return FALSE;
+ if (!xdr_uint32_t (xdrs, &objp->arg5))
+ return FALSE;
+ return TRUE;
+}