summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: bedf768)
raw | patch | inline | side by side (from parent 1: bedf768)
author | G Anthony <a0783926@ti.com> | |
Tue, 23 Jul 2013 22:13:40 +0000 (15:13 -0700) | ||
committer | Chris Ring <cring@ti.com> | |
Fri, 26 Jul 2013 03:48:27 +0000 (20:48 -0700) |
Test updated to allow testing rpmsg_proto socket over multiple cores, and
in multiple processes via command shell.
Signed-off-by: G Anthony <a0783926@ti.com>
in multiple processes via command shell.
Signed-off-by: G Anthony <a0783926@ti.com>
linux/src/tests/ping_rpmsg.c | patch | blob | history |
index bc1962b0875f1885b064d3d9115843108b6be881..740f614bb579f812243b70b53543566c06450ee4 100644 (file)
/* Ipc Socket Protocol Family */
#include <net/rpmsg.h>
-#define CORE0 (0) /* This should be MultiProc_getId("CORE0") - 1 */
-
-#define NUMLOOPS 100
+#define NUM_LOOPS_DFLT 100
+#define CORE_ID_DFLT 0 /* CORE ID should be (MultiProc ID - 1) */
long diff(struct timespec start, struct timespec end)
{
return (temp.tv_sec * 1000000UL + temp.tv_nsec / 1000);
}
-int main(void)
+int main (int argc, char ** argv)
{
+ int status = 0;
+ unsigned int numLoops = NUM_LOOPS_DFLT;
+ short coreId = CORE_ID_DFLT;
int sock, err;
struct sockaddr_rpmsg src_addr, dst_addr;
socklen_t len;
long elapsed=0,delta;
int i;
+ /* Parse Args: */
+ switch (argc) {
+ case 1:
+ /* use defaults */
+ break;
+ case 2:
+ numLoops = atoi(argv[1]);
+ break;
+ case 3:
+ numLoops = atoi(argv[1]);
+ coreId = atoi(argv[2]);
+ break;
+ default:
+ printf("Usage: %s [<numLoops>] [<CoreId>]\n", argv[0]);
+ printf("\tDefaults: numLoops: %d; CoreId: %d\n",
+ NUM_LOOPS_DFLT, CORE_ID_DFLT);
+ exit(0);
+ }
+
/* create an RPMSG socket */
- /* QNX PORTING NOTE: call fd = open("/dev/????", ...); */
sock = socket(AF_RPMSG, SOCK_SEQPACKET, 0);
if (sock < 0) {
printf("socket failed: %s (%d)\n", strerror(errno), errno);
/* connect to remote service */
memset(&dst_addr, 0, sizeof(dst_addr));
dst_addr.family = AF_RPMSG;
- dst_addr.vproc_id = CORE0;
+ dst_addr.vproc_id = coreId;
dst_addr.addr = 51; // use 51 for ping_tasks;
//dst_addr.addr = 61; // use 61 for messageQ transport;
dst_addr.addr, dst_addr.vproc_id);
len = sizeof(struct sockaddr_rpmsg);
- /* QNX PORTING NOTE: call ioctl(fd, CONNECT_IOTL, *args)*/
err = connect(sock, (struct sockaddr *)&dst_addr, len);
if (err < 0) {
printf("connect failed: %s (%d)\n", strerror(errno), errno);
}
/* let's see what local address we got */
- /* QNX PORTING NOTE: call ioctl(fd, GETLOCALENDPOINT_IOTL, *args)*/
err = getsockname(sock, (struct sockaddr *)&src_addr, &len);
if (err < 0) {
printf("getpeername failed: %s (%d)\n", strerror(errno), errno);
printf("Sending \"%s\" in a loop.\n", msg);
- for (i = 0; i < NUMLOOPS; i++) {
+ for (i = 0; i < numLoops; i++) {
clock_gettime(CLOCK_REALTIME, &start);
- /* QNX PORTING NOTE: call write(fd, msg,len); */
err = send(sock, msg, strlen(msg) + 1, 0);
if (err < 0) {
printf("sendto failed: %s (%d)\n", strerror(errno), errno);
len = sizeof(src_addr);
- /* QNX PORTING NOTE: len = read(fd, buf, len); */
err = recvfrom(sock, buf, sizeof(buf), 0,
(struct sockaddr *)&src_addr, &len);
}
printf ("Avg time: %ld usecs over %d iterations\n", elapsed / i, i);
- /* QNX PORTING NOTE: close(fd); */
close(sock);
return 0;