Skip to content

Commit

Permalink
testing/rpmsgdev: Add option for rpmsgdev_export()
Browse files Browse the repository at this point in the history
And fix errors for other platform

Test

  Server (NuttX)

    testdev -d 0 -r "/dev/testrpmsgdev"
    testdev -d 2 -c "CLIENT" -l "/dev/testrpmsgdev"

  Client (Other)

    testdev -l /dev/testrpmsgdev -t 1
    testdev -l /dev/testrpmsgdev -t 2
    testdev -l /dev/testrpmsgdev -t 3
    testdev -l /dev/testrpmsgdev -t 5
    testdev -l /dev/testrpmsgdev -t 6
    testdev -l /dev/testrpmsgdev -t 7
    testdev -l /dev/testrpmsgdev -t 8

Signed-off-by: wangjianyu3 <[email protected]>
  • Loading branch information
JianyuWang0623 committed Dec 26, 2024
1 parent cee57dc commit 6a248fb
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 18 deletions.
8 changes: 4 additions & 4 deletions testing/rpmsgdev/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ##############################################################################
# apps/tests/testcases/rpmsgdev/CMakeLists.txt
# apps/testing/rpmsgdev/CMakeLists.txt
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
Expand All @@ -22,11 +22,11 @@
if(CONFIG_RPMSGDEV_TEST)
nuttx_add_application(
NAME
rpmsgdev
testdev
PRIORITY
${CONFIG_TESTING_TESTCASES_PRIORITY}
${SCHED_PRIORITY_DEFAULT}
STACKSIZE
${CONFIG_TESTING_TESTCASES_STACKSIZE}
${CONFIG_DEFAULT_TASK_STACKSIZE}
SRCS
testdev.c)
endif()
65 changes: 51 additions & 14 deletions testing/rpmsgdev/testdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
* Included Files
****************************************************************************/

#include <nuttx/config.h>
#include <nuttx/fs/fs.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/select.h>
Expand All @@ -32,33 +30,41 @@
#include <stdio.h>
#include <errno.h>
#include <syslog.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <poll.h>
#ifdef CONFIG_DEV_RPMSG
#if defined(__NuttX__) && (defined(CONFIG_DEV_RPMSG) || defined(CONFIG_DEV_RPMSG_SERVER))
#include <nuttx/drivers/rpmsgdev.h>
#endif

/****************************************************************************
* Pre-processor Definitions
****************************************************************************/

#ifdef __ANDROID__
#define syslog(l,...) printf(__VA_ARGS__)
#endif

/* set a random open flag to check whether the open api behave correctly */

#define OPEN_FLAG O_RDWR
#define RET 114514
#define RET ENOENT
#define OFFSET 1234l
#define WHENCE SEEK_SET
#ifdef __NuttX__
#define IOCTL FIONSPACE
#define IOCTL_ARG 0x55AA
#endif
static int hour __attribute__((unused));

/****************************************************************************
* Private Function Prototypes
****************************************************************************/

#ifdef __NuttX__
static int testdev_open(FAR struct file *filep);
static int testdev_close(FAR struct file *filep);
static ssize_t testdev_read(FAR struct file *filep, FAR char *buffer,
Expand Down Expand Up @@ -97,7 +103,8 @@ static const struct file_operations g_testdev_ops =

static int testdev_open(FAR struct file *filep)
{
if (filep->f_oflags == (OPEN_FLAG | O_NONBLOCK))
if ((filep->f_oflags & (OPEN_FLAG | O_NONBLOCK)) ==
(OPEN_FLAG | O_NONBLOCK))
{
filep->f_pos = 0;
syslog(LOG_INFO, "test open success\n");
Expand All @@ -110,7 +117,8 @@ static int testdev_open(FAR struct file *filep)

static int testdev_close(FAR struct file *filep)
{
if (filep->f_oflags == (OPEN_FLAG | O_NONBLOCK))
if ((filep->f_oflags & (OPEN_FLAG | O_NONBLOCK)) ==
(OPEN_FLAG | O_NONBLOCK))
{
syslog(LOG_INFO, "test close success\n");
return 0;
Expand Down Expand Up @@ -233,7 +241,7 @@ static int testdev_poll(FAR struct file *filep, FAR struct pollfd *fds,
static void _register_driver(int mode, char *cpu, char *remotepath,
char *localpath)
{
int ret;
int ret = -EINVAL;

switch (mode)
{
Expand All @@ -257,8 +265,21 @@ static void _register_driver(int mode, char *cpu, char *remotepath,
ret = rpmsgdev_register(cpu, remotepath, localpath, 0);
break;
#endif
case 2:
#ifdef CONFIG_DEV_RPMSG_SERVER
if (cpu == NULL || localpath == NULL)
{
syslog(LOG_ERR, "please set -c, -l\n");
exit(1);
}

ret = rpmsgdev_export(cpu, localpath);
#else
syslog(LOG_WARNING, "feature of case %d not enabled\n", mode);
#endif
break;
default:
syslog(LOG_ERR, "-r must between 0 and 1\n");
syslog(LOG_ERR, "-d must between 0 and 2\n");
exit(1);
break;
}
Expand All @@ -272,8 +293,9 @@ static void _register_driver(int mode, char *cpu, char *remotepath,

syslog(LOG_INFO, "register driver success\n");
}
#endif

#ifdef CONFIG_DEV_RPMSG
#if defined(CONFIG_DEV_RPMSG) || defined(TEST_RPMSGDEV)
static int test_open(char *path, int flags)
{
int fd;
Expand Down Expand Up @@ -337,7 +359,8 @@ static int test_read(int fd, size_t len)
{
if (buf[ret] != 'r')
{
syslog(LOG_ERR, "check data error, ret %d, except 'a'", buf[ret]);
syslog(LOG_ERR, "check data error, ret[%d] %d, except 'r'\n",
ret, buf[ret]);
free(buf);
return -1;
}
Expand Down Expand Up @@ -401,6 +424,7 @@ static off_t test_seek(int fd, off_t offset, int whence)
return ret;
}

#ifdef __NuttX__
static int test_ioctl(int fd, unsigned long request, unsigned long arg)
{
int ret;
Expand All @@ -414,6 +438,7 @@ static int test_ioctl(int fd, unsigned long request, unsigned long arg)
syslog(LOG_INFO, "test ioctl return %d\n", ret);
return ret;
}
#endif

static int test_poll(int fd, int event, int timeout)
{
Expand Down Expand Up @@ -445,7 +470,7 @@ static int testcase_1(char *path)
fd = open(path, O_RDONLY);
if (fd != -1 || errno != RET)
{
syslog(LOG_ERR, "open test fail, fs %d (expect -1), "
syslog(LOG_ERR, "open test fail, fd %d (expect -1), "
"errno %d (expect %d)\n", fd, errno, RET);
return -1;
}
Expand Down Expand Up @@ -510,6 +535,7 @@ static int testcase_3(char *path)
return test_close(fd);
}

#ifdef __NuttX__
/* open -> ioctl fail -> ioctl success -> close */

static int testcase_4(char *path)
Expand Down Expand Up @@ -547,6 +573,7 @@ static int testcase_4(char *path)
syslog(LOG_INFO, "ioctl2 success\n");
return test_close(fd);
}
#endif

/* open -> poll -> close */

Expand All @@ -565,7 +592,7 @@ static int testcase_5(char *path)
ret = test_poll(fd, POLLIN, 200);
if (ret != 1)
{
syslog(LOG_ERR, "poll test1 fail, ret %d, expect 0\n", ret);
syslog(LOG_ERR, "poll test1 fail, ret %d, expect 1\n", ret);
return -1;
}

Expand All @@ -580,6 +607,7 @@ static int testcase_5(char *path)

syslog(LOG_INFO, "poll2 success\n");

#if 0
ret = test_poll(fd, POLLOUT, 0);
if (ret != 1)
{
Expand All @@ -588,6 +616,8 @@ static int testcase_5(char *path)
}

syslog(LOG_INFO, "poll3 success\n");
#endif

return test_close(fd);
}

Expand Down Expand Up @@ -687,7 +717,10 @@ static void show_usage(void)
syslog(LOG_WARNING,
"Usage: CMD [-d <regist driver>] [-c <remote cpu>] "
"[-l <localpath>] [-r <remotepath>] [-h <hour>] [-t <test>]\n"
"\t\t-d: regist driver, 0 for test driver, 1 for rpmsgdev\n"
"\t\t-d: regist driver\n"
"\t\t\t 0 for test driver\n"
"\t\t\t 1 for rpmsgdev(client register)\n"
"\t\t\t 2 for rpmsgdev(server export)\n"
"\t\t-c: remote cpu which regists test driver\n"
"\t\t-l: localpath, which means rpmsgdev's name\n"
"\t\t-r: remotepath, which means test driver's name\n"
Expand Down Expand Up @@ -757,10 +790,12 @@ int main(int argc, char *argv[])

if (mode >= 0)
{
#ifdef __NuttX__
_register_driver(mode, cpu, remotepath, localpath);
#endif
}

#ifdef CONFIG_DEV_RPMSG
#if defined(CONFIG_DEV_RPMSG) || defined(TEST_RPMSGDEV)
if (test >= 0)
{
if (localpath == NULL)
Expand All @@ -780,9 +815,11 @@ int main(int argc, char *argv[])
case 3:
ret = testcase_3(localpath);
break;
#ifdef __NuttX__
case 4:
ret = testcase_4(localpath);
break;
#endif
case 5:
ret = testcase_5(localpath);
break;
Expand Down

0 comments on commit 6a248fb

Please sign in to comment.