From 381b8924578e718e1fe65f92d9c9a5cbdb8e6e7e Mon Sep 17 00:00:00 2001 From: hadaq Date: Sat, 24 Jul 2010 22:02:12 +0000 Subject: [PATCH] added all functions, updated error handling --- trbnetd/server/server.c | 49 +++++++++++-- trbnetd/server/trbnetd.c | 110 +++++++++++++++------------- trbnetd/trbnetrpc.c | 154 +++++++++++++++++++++++++++++++++------ trbnetd/trbrpc.h | 46 ++++++++---- trbnetd/trbrpc.x | 21 ++++-- trbnetd/trbrpc_clnt.c | 14 ++++ trbnetd/trbrpc_svc.c | 14 ++++ trbnetd/trbrpc_xdr.c | 18 +++++ 8 files changed, 321 insertions(+), 105 deletions(-) diff --git a/trbnetd/server/server.c b/trbnetd/server/server.c index cdec464..904cf84 100644 --- a/trbnetd/server/server.c +++ b/trbnetd/server/server.c @@ -14,7 +14,6 @@ #include #include - #include #ifndef SIG_PF @@ -76,6 +75,15 @@ _send_trigger_1(send_trigger_1_argument * argp, void *result, (argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp)); } +int +_send_trigger_rich_1(send_trigger_rich_1_argument * argp, void *result, + struct svc_req *rqstp) +{ + return (send_trigger_rich_1_svc + (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result, + rqstp)); +} + int _ipu_data_read_1(ipu_data_read_1_argument * argp, void *result, struct svc_req *rqstp) @@ -113,6 +121,15 @@ int _com_reset_1(void *argp, void *result, struct svc_req *rqstp) return (com_reset_1_svc(result, rqstp)); } +int +_register_modify_1(register_modify_1_argument * argp, void *result, + struct svc_req *rqstp) +{ + return (register_modify_1_svc + (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result, + rqstp)); +} + static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) { union @@ -124,10 +141,12 @@ static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) read_uid_1_argument read_uid_1_arg; set_address_1_argument set_address_1_arg; send_trigger_1_argument send_trigger_1_arg; + send_trigger_rich_1_argument send_trigger_rich_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; + register_modify_1_argument register_modify_1_arg; } argument; union { @@ -138,12 +157,14 @@ static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) RetVal read_uid_1_res; Status set_address_1_res; Status send_trigger_1_res; + Status send_trigger_rich_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; + Status register_modify_1_res; } result; bool_t retval; xdrproc_t _xdr_argument, _xdr_result; @@ -197,6 +218,12 @@ static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) local = (bool_t(*)(char *, void *, struct svc_req *))_send_trigger_1; break; + case SEND_TRIGGER_RICH: + _xdr_argument = (xdrproc_t) xdr_send_trigger_rich_1_argument; + _xdr_result = (xdrproc_t) xdr_Status; + local = (bool_t(*)(char *, void *, struct svc_req *))_send_trigger_rich_1; + break; + case IPU_DATA_READ: _xdr_argument = (xdrproc_t) xdr_ipu_data_read_1_argument; _xdr_result = (xdrproc_t) xdr_RetVal; @@ -235,6 +262,12 @@ static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) local = (bool_t(*)(char *, void *, struct svc_req *))_com_reset_1; break; + case REGISTER_MODIFY: + _xdr_argument = (xdrproc_t) xdr_register_modify_1_argument; + _xdr_result = (xdrproc_t) xdr_Status; + local = (bool_t(*)(char *, void *, struct svc_req *))_register_modify_1; + break; + default: svcerr_noproc(transp); return; @@ -251,7 +284,7 @@ static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp) } if (!svc_freeargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) & argument)) { fprintf(stderr, "%s", "unable to free arguments"); - exit(1); + exit(EXIT_FAILURE); } if (!trbnetrpcprog_1_freeresult(transp, _xdr_result, (caddr_t) & result)) fprintf(stderr, "%s", "unable to free results"); @@ -265,7 +298,7 @@ int main(int argc, char **argv) { int daemonMode = 1; register SVCXPRT *transp; - + if ((argc >= 2) && (strcmp(argv[1], "-f") == 0)) daemonMode = 0; @@ -274,25 +307,25 @@ int main(int argc, char **argv) transp = svcudp_create(RPC_ANYSOCK); if (transp == NULL) { fprintf(stderr, "%s", "cannot create udp service."); - exit(1); + exit(EXIT_FAILURE); } if (!svc_register (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_UDP)) { fprintf(stderr, "%s", "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, udp)."); - exit(1); + exit(EXIT_FAILURE); } transp = svctcp_create(RPC_ANYSOCK, 0, 0); if (transp == NULL) { fprintf(stderr, "%s", "cannot create tcp service."); - exit(1); + exit(EXIT_FAILURE); } if (!svc_register (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_TCP)) { fprintf(stderr, "%s", "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, tcp)."); - exit(1); + exit(EXIT_FAILURE); } /* initialize FPGA */ @@ -324,7 +357,7 @@ int main(int argc, char **argv) freopen("/dev/console", "a", stderr); } svc_run(); - + /* NOTREACHED */ fprintf(stderr, "%s", "svc_run returned"); exit(EXIT_FAILURE); diff --git a/trbnetd/server/trbnetd.c b/trbnetd/server/trbnetd.c index 11a64a6..8f0972a 100644 --- a/trbnetd/server/trbnetd.c +++ b/trbnetd/server/trbnetd.c @@ -39,18 +39,18 @@ bool_t register_read_1_svc(uint16_t trb_address, 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; + retVal->status.retVal = status; + copyStatus(&retVal->status); return TRUE; } @@ -72,9 +72,10 @@ bool_t register_read_mem_1_svc(uint16_t trb_address, 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; + retVal->status.retVal = status; + copyStatus(&retVal->status); return TRUE; } @@ -85,10 +86,7 @@ bool_t register_write_1_svc(uint16_t trb_address, Status* retVal, struct svc_req* rqstp) { - int status; - - status = trb_register_write(trb_address, reg_address, value); - + retVal->retVal = trb_register_write(trb_address, reg_address, value); copyStatus(retVal); return TRUE; @@ -101,14 +99,9 @@ bool_t register_write_mem_1_svc(uint16_t trb_address, 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); - + retVal->retVal = + trb_register_write_mem(trb_address, reg_address, option, + (uint32_t*)data.Buffer_val, data.Buffer_len); copyStatus(retVal); return TRUE; @@ -130,10 +123,10 @@ bool_t read_uid_1_svc(uint16_t trb_address, status = trb_read_uid(trb_address, (uint32_t*)retVal->data.Buffer_val, dsize); - - copyStatus(&retVal->status); + retVal->status.retVal = status; retVal->data.Buffer_len = status == -1 ? 0 : status; - + copyStatus(&retVal->status); + return TRUE; } @@ -143,10 +136,7 @@ bool_t set_address_1_svc(uint64_t uid, Status* retVal, struct svc_req* rqstp) { - int status; - - status = trb_set_address(uid, endpoint, trb_address); - + retVal->retVal = trb_set_address(uid, endpoint, trb_address); copyStatus(retVal); return TRUE; @@ -155,10 +145,7 @@ bool_t set_address_1_svc(uint64_t uid, bool_t network_reset_1_svc(Status* retVal, struct svc_req* rqstp) { - int status; - - status = network_reset(); - + retVal->retVal = network_reset(); copyStatus(retVal); return TRUE; @@ -171,10 +158,22 @@ bool_t send_trigger_1_svc(uint8_t type, Status* retVal, struct svc_req* rqstp) { - int status; - - status = trb_send_trigger(type, trg_info, trg_random, trg_number); + retVal->retVal = trb_send_trigger(type, trg_info, trg_random, trg_number); + copyStatus(retVal); + return TRUE; +} + +bool_t send_trigger_rich_1_svc(uint8_t input, + uint8_t type, + uint32_t trg_info, + uint8_t trg_random, + uint16_t trg_number, + Status* retVal, + struct svc_req* rqstp) +{ + retVal->retVal = + trb_send_trigger_rich(input, type, trg_info, trg_random, trg_number); copyStatus(retVal); return TRUE; @@ -198,9 +197,10 @@ bool_t ipu_data_read_1_svc(uint8_t type, 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; - + retVal->status.retVal = status; + copyStatus(&retVal->status); + return TRUE; } @@ -217,9 +217,10 @@ bool_t fpga_register_read_1_svc(uint16_t reg_address, status = fpga_register_read(reg_address, (uint32_t *)retVal->data.Buffer_val); - - copyStatus(&retVal->status); + retVal->data.Buffer_len = status == -1 ? 0 : 1; + retVal->status.retVal = status; + copyStatus(&retVal->status); return TRUE; } @@ -229,40 +230,45 @@ bool_t fpga_register_write_1_svc(uint16_t reg_address, Status* retVal, struct svc_req* rqstp) { - int status; - - status = fpga_register_write(reg_address, value); + retVal->retVal = fpga_register_write(reg_address, value); + copyStatus(retVal); - copyStatus(retVal); - - return TRUE; + 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); - + retVal->retVal = trb_fifo_flush(channel); copyStatus(retVal); return TRUE; } - bool_t com_reset_1_svc(Status* retVal, struct svc_req* rqstp) { - int status; + retVal->retVal = com_reset(); + copyStatus(retVal); - status = com_reset(); + return TRUE; +} + +bool_t register_modify_1_svc(uint16_t trb_address, + uint16_t reg_address, + int mode, + uint32_t bitMask, + uint32_t bitValue, + Status* retVal, + struct svc_req* rqstp) +{ + retVal->retVal = + trb_register_modify(trb_address, reg_address, mode, bitMask, bitValue); copyStatus(retVal); return TRUE; } + + diff --git a/trbnetd/trbnetrpc.c b/trbnetd/trbnetrpc.c index 75dd2bb..f3b3d85 100644 --- a/trbnetd/trbnetrpc.c +++ b/trbnetd/trbnetrpc.c @@ -1,12 +1,11 @@ #include #include /* always needed */ #include "trbrpc.h" /* will be generated by rpcgen */ - #include #include "trbnet.h" -const char trbnet_version[] = "$Revision: 1.1 $"; +const char trbnet_version[] = "$Revision: 1.2 $"; unsigned int trb_debug = 0; unsigned int trb_dma = 0; @@ -31,7 +30,7 @@ int trb_connect(const char *server) { if (server == NULL) { char *tmp; - tmp = getenv("TRBNETSERVER"); + tmp = getenv("DAQOPSERVER"); if (tmp != NULL) { strncpy(trb_server, tmp, 128); } else { @@ -61,8 +60,7 @@ int trb_register_read(uint16_t trb_address, enum clnt_stat status; RetVal retVal; - if (trb_client == NULL) - return -1; + if (trb_client == NULL) return -1; retVal.data.Buffer_val = data; retVal.data.Buffer_len = dsize; @@ -78,10 +76,10 @@ int trb_register_read(uint16_t trb_address, * Print error message and stop. */ clnt_perror(trb_client, trb_server); - return -2; + return -1; } - return trb_errno == TRB_NONE ? retVal.data.Buffer_len : -1; + return retVal.status.retVal; } int trb_register_read_mem(uint16_t trb_address, @@ -94,8 +92,7 @@ int trb_register_read_mem(uint16_t trb_address, enum clnt_stat status; RetVal retVal; - if (trb_client == NULL) - return -1; + if (trb_client == NULL) return -1; retVal.data.Buffer_val = data; retVal.data.Buffer_len = dsize; @@ -111,10 +108,10 @@ int trb_register_read_mem(uint16_t trb_address, * Print error message and stop. */ clnt_perror(trb_client, trb_server); - return -2; + return -1; } - return trb_errno == TRB_NONE ? retVal.data.Buffer_len : -1; + return retVal.status.retVal; } @@ -139,10 +136,10 @@ int trb_read_uid(uint16_t trb_address, * Print error message and stop. */ clnt_perror(trb_client, trb_server); - return -2; + return -1; } - return trb_errno == TRB_NONE ? retVal.data.Buffer_len : -1; + return retVal.status.retVal; } @@ -168,7 +165,7 @@ int trb_register_write(uint16_t trb_address, return -1; } - return trb_errno == TRB_NONE ? 0 : -1; + return retVal.retVal; } int trb_register_write_mem(uint16_t trb_address, @@ -199,7 +196,7 @@ int trb_register_write_mem(uint16_t trb_address, return -1; } - return trb_errno == TRB_NONE ? 0 : -1; + return retVal.retVal; } int trb_set_address(uint64_t uid, @@ -224,7 +221,7 @@ int trb_set_address(uint64_t uid, return -1; } - return trb_errno == TRB_NONE ? 0 : -1; + return retVal.retVal; } @@ -235,7 +232,29 @@ int trb_ipu_data_read(uint8_t type, uint32_t* data, unsigned int dsize) { - return -1; + enum clnt_stat status; + RetVal retVal; + + if (trb_client == NULL) return -1; + + retVal.data.Buffer_val = data; + retVal.data.Buffer_len = dsize; + + status = + ipu_data_read_1(type, trg_info, trg_random, trg_number, dsize, + &retVal, trb_client); + copyStatus(&retVal.status); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.status.retVal; } int trb_send_trigger(uint8_t type, @@ -243,7 +262,24 @@ int trb_send_trigger(uint8_t type, uint8_t random, uint16_t number) { - return -1; + enum clnt_stat status; + Status retVal; + + if (trb_client == NULL) return -1; + + status = send_trigger_1(type, info, random, number, &retVal, trb_client); + copyStatus(&retVal); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.retVal; } int trb_send_trigger_rich(uint8_t input, @@ -252,7 +288,25 @@ int trb_send_trigger_rich(uint8_t input, uint8_t random, uint16_t number) { - return -1; + enum clnt_stat status; + Status retVal; + + if (trb_client == NULL) return -1; + + status = send_trigger_rich_1(input, type, info, random, number, + &retVal, trb_client); + copyStatus(&retVal); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.retVal; } int fpga_register_read(uint16_t reg_address, uint32_t* value) @@ -263,12 +317,46 @@ int fpga_register_read(uint16_t reg_address, uint32_t* value) int fpga_register_write(uint16_t reg_address, uint32_t value) { - return -1; + enum clnt_stat status; + Status retVal; + + if (trb_client == NULL) return -1; + + status = fpga_register_write_1(reg_address, value, &retVal, trb_client); + copyStatus(&retVal); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.retVal; } int trb_fifo_flush(uint8_t channel) { - return -1; + enum clnt_stat status; + Status retVal; + + if (trb_client == NULL) return -1; + + status = trb_fifo_flush_1(channel, &retVal, trb_client); + copyStatus(&retVal); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.retVal; } int network_reset() @@ -279,7 +367,6 @@ int network_reset() if (trb_client == NULL) return -1; status = network_reset_1(&retVal, trb_client); - copyStatus(&retVal); if (status != RPC_SUCCESS) { @@ -291,7 +378,7 @@ int network_reset() return -1; } - return trb_errno == TRB_NONE ? 0 : -1; + return retVal.retVal; } int com_reset() @@ -305,5 +392,24 @@ int trb_register_modify(uint16_t trb_address, uint32_t bitMask, uint32_t bitValue) { - return -1; + enum clnt_stat status; + Status retVal; + + if (trb_client == NULL) return -1; + + status = + register_modify_1(trb_address, reg_address, mode, bitMask, bitValue, + &retVal, trb_client); + copyStatus(&retVal); + + if (status != RPC_SUCCESS) { + /* + * An error occurred while calling the server. + * Print error message and stop. + */ + clnt_perror(trb_client, trb_server); + return -1; + } + + return retVal.retVal; } diff --git a/trbnetd/trbrpc.h b/trbnetd/trbrpc.h index 2525d85..361cad6 100644 --- a/trbnetd/trbrpc.h +++ b/trbnetd/trbrpc.h @@ -21,6 +21,7 @@ typedef struct { } Buffer; struct Status { + int retVal; int trb_errno; uint16_t status_common; uint16_t status_channel; @@ -87,6 +88,15 @@ struct send_trigger_1_argument { }; typedef struct send_trigger_1_argument send_trigger_1_argument; +struct send_trigger_rich_1_argument { + uint8_t arg1; + uint8_t arg2; + uint32_t arg3; + uint8_t arg4; + uint16_t arg5; +}; +typedef struct send_trigger_rich_1_argument send_trigger_rich_1_argument; + struct ipu_data_read_1_argument { uint8_t arg1; uint32_t arg2; @@ -136,25 +146,28 @@ extern bool_t set_address_1_svc(uint64_t , uint8_t , uint16_t , Status *, struc #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 +#define SEND_TRIGGER_RICH 8 +extern enum clnt_stat send_trigger_rich_1(uint8_t , uint8_t , uint32_t , uint8_t , uint16_t , Status *, CLIENT *); +extern bool_t send_trigger_rich_1_svc(uint8_t , uint8_t , uint32_t , uint8_t , uint16_t , Status *, struct svc_req *); +#define IPU_DATA_READ 9 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 +#define FPGA_REGISTER_READ 10 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 +#define FPGA_REGISTER_WRITE 11 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 +#define TRB_FIFO_FLUSH 12 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 +#define NETWORK_RESET 13 extern enum clnt_stat network_reset_1(Status *, CLIENT *); extern bool_t network_reset_1_svc(Status *, struct svc_req *); -#define COM_RESET 13 +#define COM_RESET 14 extern enum clnt_stat com_reset_1(Status *, CLIENT *); extern bool_t com_reset_1_svc(Status *, struct svc_req *); -#define REGISTER_MODIFY 14 +#define REGISTER_MODIFY 15 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); @@ -181,25 +194,28 @@ 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 +#define SEND_TRIGGER_RICH 8 +extern enum clnt_stat send_trigger_rich_1(); +extern bool_t send_trigger_rich_1_svc(); +#define IPU_DATA_READ 9 extern enum clnt_stat ipu_data_read_1(); extern bool_t ipu_data_read_1_svc(); -#define FPGA_REGISTER_READ 9 +#define FPGA_REGISTER_READ 10 extern enum clnt_stat fpga_register_read_1(); extern bool_t fpga_register_read_1_svc(); -#define FPGA_REGISTER_WRITE 10 +#define FPGA_REGISTER_WRITE 11 extern enum clnt_stat fpga_register_write_1(); extern bool_t fpga_register_write_1_svc(); -#define TRB_FIFO_FLUSH 11 +#define TRB_FIFO_FLUSH 12 extern enum clnt_stat trb_fifo_flush_1(); extern bool_t trb_fifo_flush_1_svc(); -#define NETWORK_RESET 12 +#define NETWORK_RESET 13 extern enum clnt_stat network_reset_1(); extern bool_t network_reset_1_svc(); -#define COM_RESET 13 +#define COM_RESET 14 extern enum clnt_stat com_reset_1(); extern bool_t com_reset_1_svc(); -#define REGISTER_MODIFY 14 +#define REGISTER_MODIFY 15 extern enum clnt_stat register_modify_1(); extern bool_t register_modify_1_svc(); extern int trbnetrpcprog_1_freeresult (); @@ -218,6 +234,7 @@ extern bool_t xdr_register_write_mem_1_argument (XDR *, register_write_mem_1_ar 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_send_trigger_rich_1_argument (XDR *, send_trigger_rich_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*); @@ -233,6 +250,7 @@ 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_send_trigger_rich_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 (); diff --git a/trbnetd/trbrpc.x b/trbnetd/trbrpc.x index 1edbf9b..4060c4f 100644 --- a/trbnetd/trbrpc.x +++ b/trbnetd/trbrpc.x @@ -3,6 +3,7 @@ typedef uint32_t Buffer<>; struct Status { + int retVal; int trb_errno; uint16_t status_common; uint16_t status_channel; @@ -48,29 +49,35 @@ program TRBNETRPCPROG { uint32_t, uint8_t, uint16_t) = 7; + + Status SEND_TRIGGER_RICH(uint8_t, + uint8_t, + uint32_t, + uint8_t, + uint16_t) = 8; RetVal IPU_DATA_READ(uint8_t, uint32_t, uint8_t, uint16_t, - unsigned int) = 8; + unsigned int) = 9; - RetVal FPGA_REGISTER_READ(uint16_t) = 9; + RetVal FPGA_REGISTER_READ(uint16_t) = 10; Status FPGA_REGISTER_WRITE(uint16_t, - uint32_t) = 10; + uint32_t) = 11; - Status TRB_FIFO_FLUSH(uint8_t) = 11; + Status TRB_FIFO_FLUSH(uint8_t) = 12; - Status NETWORK_RESET(void) = 12; + Status NETWORK_RESET(void) = 13; - Status COM_RESET(void) = 13; + Status COM_RESET(void) = 14; Status REGISTER_MODIFY(uint16_t, uint16_t, int, uint32_t, - uint32_t) = 14; + uint32_t) = 15; } = 1; } = 0x20000099; diff --git a/trbnetd/trbrpc_clnt.c b/trbnetd/trbrpc_clnt.c index 2834fa5..fc65307 100644 --- a/trbnetd/trbrpc_clnt.c +++ b/trbnetd/trbrpc_clnt.c @@ -96,6 +96,20 @@ send_trigger_1(uint8_t arg1, uint32_t arg2, uint8_t arg3, uint16_t arg4, Status TIMEOUT)); } +enum clnt_stat +send_trigger_rich_1(uint8_t arg1, uint8_t arg2, uint32_t arg3, uint8_t arg4, uint16_t arg5, Status *clnt_res, CLIENT *clnt) +{ + send_trigger_rich_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + arg.arg3 = arg3; + arg.arg4 = arg4; + arg.arg5 = arg5; + return (clnt_call (clnt, SEND_TRIGGER_RICH, (xdrproc_t) xdr_send_trigger_rich_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_Status, (caddr_t) clnt_res, + TIMEOUT)); +} + enum clnt_stat ipu_data_read_1(uint8_t arg1, uint32_t arg2, uint8_t arg3, uint16_t arg4, u_int arg5, RetVal *clnt_res, CLIENT *clnt) { diff --git a/trbnetd/trbrpc_svc.c b/trbnetd/trbrpc_svc.c index 9aa55d9..e85add6 100644 --- a/trbnetd/trbrpc_svc.c +++ b/trbnetd/trbrpc_svc.c @@ -58,6 +58,12 @@ _send_trigger_1 (send_trigger_1_argument *argp, void *result, struct svc_req *rq return (send_trigger_1_svc(argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp)); } +int +_send_trigger_rich_1 (send_trigger_rich_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (send_trigger_rich_1_svc(argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result, rqstp)); +} + int _ipu_data_read_1 (ipu_data_read_1_argument *argp, void *result, struct svc_req *rqstp) { @@ -111,6 +117,7 @@ trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT *transp) read_uid_1_argument read_uid_1_arg; set_address_1_argument set_address_1_arg; send_trigger_1_argument send_trigger_1_arg; + send_trigger_rich_1_argument send_trigger_rich_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; @@ -125,6 +132,7 @@ trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT *transp) RetVal read_uid_1_res; Status set_address_1_res; Status send_trigger_1_res; + Status send_trigger_rich_1_res; RetVal ipu_data_read_1_res; RetVal fpga_register_read_1_res; Status fpga_register_write_1_res; @@ -184,6 +192,12 @@ trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT *transp) local = (bool_t (*) (char *, void *, struct svc_req *))_send_trigger_1; break; + case SEND_TRIGGER_RICH: + _xdr_argument = (xdrproc_t) xdr_send_trigger_rich_1_argument; + _xdr_result = (xdrproc_t) xdr_Status; + local = (bool_t (*) (char *, void *, struct svc_req *))_send_trigger_rich_1; + break; + case IPU_DATA_READ: _xdr_argument = (xdrproc_t) xdr_ipu_data_read_1_argument; _xdr_result = (xdrproc_t) xdr_RetVal; diff --git a/trbnetd/trbrpc_xdr.c b/trbnetd/trbrpc_xdr.c index 715e24a..4b30961 100644 --- a/trbnetd/trbrpc_xdr.c +++ b/trbnetd/trbrpc_xdr.c @@ -21,6 +21,8 @@ xdr_Status (XDR *xdrs, Status *objp) { register int32_t *buf; + if (!xdr_int (xdrs, &objp->retVal)) + return FALSE; if (!xdr_int (xdrs, &objp->trb_errno)) return FALSE; if (!xdr_uint16_t (xdrs, &objp->status_common)) @@ -136,6 +138,22 @@ xdr_send_trigger_1_argument (XDR *xdrs, send_trigger_1_argument *objp) return TRUE; } +bool_t +xdr_send_trigger_rich_1_argument (XDR *xdrs, send_trigger_rich_1_argument *objp) +{ + if (!xdr_uint8_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_uint8_t (xdrs, &objp->arg2)) + return FALSE; + if (!xdr_uint32_t (xdrs, &objp->arg3)) + return FALSE; + if (!xdr_uint8_t (xdrs, &objp->arg4)) + return FALSE; + if (!xdr_uint16_t (xdrs, &objp->arg5)) + return FALSE; + return TRUE; +} + bool_t xdr_ipu_data_read_1_argument (XDR *xdrs, ipu_data_read_1_argument *objp) { -- 2.43.0