Пример #1
0
int main(int argc, char **argv)
{
	struct minipc_ch *client;
	int a, b, c, ret;
	struct timeval tv;
	double rt_in, rt_out;

	client = minipc_client_create("sample", 0);
	if (!client) {
		fprintf(stderr, "%s: client_create(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}
	minipc_set_logfile(client, stderr);

	/*
	 * gettod, sum, sum, gettod
	 * pause a while in-between, so several clients can be run
	 * concurrently as a load test on the server
	 */
	ret = minipc_call(client, TRIVIAL_TIMEOUT, &ss_tod_struct, &tv, NULL);
	if (ret < 0) {
		goto error;
	}
	printf("tv: %li.%06li\n", tv.tv_sec, tv.tv_usec);
	usleep(500*1000);

	a = 345; b = 628;
	ret = minipc_call(client, TRIVIAL_TIMEOUT, &ss_sum_struct, &c, a, b);
	if (ret < 0) {
		goto error;
	}
	printf("%i + %i = %i\n", a, b, c);
	usleep(500*1000);

	a = 10; b = 20;
	ret = minipc_call(client, TRIVIAL_TIMEOUT, &ss_sum_struct, &c, a, b);
	if (ret < 0) {
		goto error;
	}
	printf("%i + %i = %i\n", a, b, c);
	usleep(500*1000);

	rt_in = 2.0;
	ret = minipc_call(client, TRIVIAL_TIMEOUT, &ss_sqrt_struct, &rt_out, rt_in);
	if (ret < 0) {
		goto error;
	}
	printf("sqrt(%lf) = %lf\n", rt_in, rt_out);
	usleep(500*1000);

	return 0;

 error:
	fprintf(stderr, "Error in rpc: %s\n", strerror(errno));
	exit(1);
}
Пример #2
0
int halexp_query_ports(hexp_port_list_t *list)
{
	int ret;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_query_ports,
			 list /* return val */);
	return ret;
}
Пример #3
0
int halexp_extsrc_cmd(int command)
{
	int ret, rval;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_extsrc_cmd,
			  &rval, command);
	return rval;
}
Пример #4
0
int halexp_get_port_state(hexp_port_state_t *state, const char *port_name)
{
	int ret;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_query_ports,
			 state /* retval */, port_name);
	return ret;
}
Пример #5
0
int main(int argc, char **argv)
{
	struct minipc_ch *client;
	struct stat stbuf;
	int ret;
	char s[80];

	client = minipc_client_create("mbox", 0);
	if (!client) {
		fprintf(stderr, "%s: client_create(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}
	minipc_set_logfile(client, stderr);

	while (fgets(s, sizeof(s), stdin)) {
		/* strip trailing newline */
		s[strlen(s)-1] = '\0';
		ret = minipc_call(client, CLIENT_TIMEOUT, &rpc_stat,
				  &stbuf, s);
		if (ret < 0) {
			fprintf(stderr, "stat(%s): %s\n", s, strerror(errno));
			continue;
		}
		printf("%s:\n", s);
		printf("mode %o, size %li, owner %i, atime %li\n",
		       stbuf.st_mode, (long)stbuf.st_size, stbuf.st_uid,
		       stbuf.st_atime);
	}
	return 0;
}
Пример #6
0
int halexp_get_timing_state(hexp_timing_state_t *tstate)
{
	int ret;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_get_timing_state,
			 tstate);
	if (ret < 0)
		return ret;
	return 0;
}
Пример #7
0
int halexp_pps_cmd(int cmd, hexp_pps_params_t *params)
{
	int ret, rval;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_pps_cmd,
			 &rval, cmd, params);
	if (ret < 0)
		return ret;
	return rval;
}
Пример #8
0
int halexp_lock_cmd(const char *port_name, int command, int priority)
{
	int ret, rval;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_lock_cmd,
			  &rval, port_name, command, priority);
	if (ret < 0)
		return ret;
	return rval;
}
Пример #9
0
int halexp_calibration_cmd(const char *port_name, int command, int on_off)
{
	int ret, rval;
	ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_calibration_cmd,
			  &rval, port_name, command, on_off);
	if (ret < 0)
		return ret;
	return rval;
}
Пример #10
0
/* No arguments */
int main(int argc, char **argv)
{
	struct minipc_ch *server;
	struct minipc_ch *client;
	void *shmem;
	int ret;

	if (argc > 1) {
		fprintf(stderr, "%s: no arguments please\n", argv[0]);
		exit(1);
	}

	/* Create your shared memory and/or attach to it */
	ret = shmget(MINIPC_SHM, sizeof(struct minipc_mbox_info),
		     IPC_CREAT | 0666);
	if (ret < 0) {
		fprintf(stderr, "%s: shmget(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}
	shmem = shmat(ret, NULL, SHM_RND);
	if (shmem == (void *)-1) {
		fprintf(stderr, "%s: shmat(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}
	info = shmem;

	/* Create a server socket for mini-ipc */
	server = minipc_server_create("mbox", 0);
	if (!server) {
		fprintf(stderr, "%s: server_create(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}
	minipc_set_logfile(server, stderr);
	minipc_export(server, &mb_stat_struct);

	/* Connect as a client to the trivial-server */
	client = minipc_client_create("trivial", 0);
	if (!client) {
		fprintf(stderr, "%s: client_create(): %s\n", argv[0],
			strerror(errno));
		exit(1);
	}

	/* Loop serving both mini-ipc and the mailbox */
	while (1) {
		fd_set set;
		struct timeval to = {
			MBOX_POLL_US / (1000*1000),
			MBOX_POLL_US % (1000*1000)
		};

		minipc_server_get_fdset(server, &set);

		/* Wait for any server, with the defined timeout */
		ret = select(16 /* hack */, &set, NULL, NULL, &to);

		if (ret > 0) {
			if (minipc_server_action(server, 0) < 0) {
				fprintf(stderr, "%s: server_action(): %s\n",
					argv[0], strerror(errno));
				exit(1);
			}
		}

		/* No IPC request: if needed act as IPC client */
		if (info->proc_req) {
			memset(&info->tv, 0, sizeof(info->tv));
			minipc_call(client, 100 /* ms */,
				    &mb_tod_struct, &info->tv, NULL);
			info->proc_req = 0;
		}
	}
}